I don't see anything wrong. I would probably disable the mSGDMA global interrupt mask before unregistering it's interrupt in destruct_sgdma.
It appears you are trying to perform a ST-->MM transfer using flow control so are you sure the transfer is completing? The transfer according to the descriptor stops when EOP arrives to the write master and that last piece of data is written out to memory.
I noticed that you are passing this in as the maximum transfer length when creating the descriptor: 4*NCELL. That has to be specified in bytes if you are not already doing so. Also if that amount of data or more arrives at the write master before the EOP beat comes into the ST port of the write master then it will terminate the transfer earlier. Note that the early termination may happen a few bytes more than 4*NCELL if you have unaligned/aligned transfers enabled in the write master hardware.
Note if you don't want to be using ST packets at all then I wouldn't pass in 'DESCRIPTOR_CONTROL_END_ON_EOP_MASK' into the descriptor forming API.