You are welcome. I'll follow up to them in the same order:
# 1 Actually if the read and write master have to transfer the same amount of data you can put a streaming transform block between the read and write master and use a regular MM to MM transfer. If the amount of input data does not match the amount of output data then the easiest way to handle this is to use independent mSGDMAs set for MM to ST and the other for ST to MM and place the transform block between the two mSGDMAs. That workaround is a little wasteful but luckily the only logic duplicated is the dispatcher which is a fairly small block so it's probably only adding around 30 LEs and maybe one extra RAM block. The reason why it doesn't waste too much logic is because I only include one descriptor FIFO when the mSGDMA is setup for a memory to/from stream configuration. In MM to MM mode the dispatcher has two FIFOs internally so that the read and write masters can operate independently on different descriptors.
# 2 I wanted to include two length fields but I ran out of room in this descriptor to fit it (I needed to reserve some room for 64-bit addressing). It only adds 4 bytes to the descriptor but it wouldn't allow for descriptors to be nicely lined up on 16/32 byte boundaries in memory if I ever developed a descriptor prefetching unit. That said if you know that the length for the read master is a function of the write master or visa versa you could insert a gasket between the read or write master and the dispatcher that would modify the length as it's being sent to the master. For example lets say you know that the read master will read twice as much data as the write master will need to write, you could make a little gasket that sits in the write command ST path that takes the length and shifts it down by 1 bit before it arrives at the write master.
If the transfer needs to be very specialized then the other alternative is to create a block that replaces the dispatcher block and it can issue commands any way you like to each master. Compared to the master modules the dispatcher is a fairly simple block so it shouldn't be too difficult to replace.