You can't write the flash while running a program in flash (anywhere).
You have to run the trigger for the DMA from RAM. Since it is only a few bytes to trigger the DMA, it is a simple task to put those few bytes in RAM (I push them on the stack) and then switch modes to put RAM in CODE space, LCALL the trigger snippet, wait for the write complete, RET back to FLASH code, and switch back to RAM as XDATA.
The data sheet goes over this in some detail.