Well your code was indeed helpful, but I found out the the SPI also accepts 8-bit writes to PUSHR via DMA. My code is very similar to yours, but doesn't use the ability to select a slave when writing to PUSHR:
// data for the SPI slave:
uint8_t source_array[4096];
// DMA configuration:
DMAMUX0_CHCFG2 = 0;
DMA_ERQ = DMA_ERQ_ERQ2;
DMAMUX0_CHCFG2 = DMAMUX_ENABLE | DMAMUX_SOURCE_SPI0_TX;
DMA_TCD2_SADDR = source_array;
DMA_TCD2_SOFF = 1; // increment source by 1 on each iteration
DMA_TCD2_ATTR = DMA_TCD_ATTR_SSIZE(0) | DMA_TCD_ATTR_DSIZE(0); // 8 bit -> 8 bit
DMA_TCD2_NBYTES_MLNO = 1; // 1 byte per transaction
DMA_TCD2_SLAST = -4096;
DMA_TCD2_DADDR = (volatile void*)(&SPI0_PUSHR);
DMA_TCD2_DOFF = 0; // don't increment destination address
DMA_TCD2_CITER_ELINKNO = 4096;
DMA_TCD2_DLASTSGA = 0;
DMA_TCD2_BITER_ELINKNO = 4096;
// start transfer:
SPI0_RSER = SPI_RSER_TFFF_RE | SPI_RSER_TFFF_DIRS;
DMA_ERQ = DMA_ERQ_ERQ2;
DMA_TCD2_CSR = DMA_TCD_CSR_DREQ | DMA_TCD_CSR_START;
Thank you for your help!