AnsweredAssumed Answered

imx28 DMA is blocked

Question asked by xing liu on Apr 10, 2019
Latest reply on Apr 10, 2019 by igorpadykov

when I want to transfer 4 bytes data to HW_LCDIF_DATA register.

the command structure is set as follows:

pVBufAdjVirtAddr->pNext = (mem_dma_cmd_t *)(nVBufAdjPhysAddr+sizeof(mem_dma_cmd_t));
pVBufAdjVirtAddr->DmaCmd.U = (BF_APBH_CHn_CMD_XFER_COUNT(4) |
(BF_APBH_CHn_CMD_CMDWORDS(0) |
BF_APBH_CHn_CMD_WAIT4ENDCMD(1) |
BF_APBH_CHn_CMD_SEMAPHORE(0) |
BF_APBH_CHn_CMD_IRQONCMPLT(0) |
BF_APBH_CHn_CMD_CHAIN(1) |
BF_APBH_CHn_CMD_COMMAND(BV_APBH_CHn_CMD_COMMAND__DMA_READ)));
pVBufAdjVirtAddr->pDMABuffer = (void *)(Addr+i*4);
pVBufAdjVirtAddr++;
nVBufAdjPhysAddr += sizeof(mem_dma_cmd_t);

 

however,the transfer may be blocked.The HW_LCDIF_DATA is not changed.

I dump some registers(DDK_APBH_CHANNEL_LCDIF):

HW_APBH_CHn_DEBUG1_RD 0x01200008

HW_APBH_CHn_DEBUG2_RD 0x00040000

HW_APBH_CHn_BAR_RD 0x43B7F004

HW_APBH_CHn_CURCMDAR_RD 0x44768000

HW_APBH_CHn_NXTCMDAR_RD 0x44768010

HW_APBH_CHn_CMD_RD 0x00040006 

HW_APBH_CHn_SEMA_RD 0x00010000

 

Outcomes