Hi all,
I am working on OMAP4460 panda board ES. The GPMC interface is connected to FPGA. DMA is used to transfer the data. I got the L3 error "GPMC address at : 0x1000000" when I set the dest address to OMAP_DMA_AMODE_CONSTANT. But it works fine with OMAP_DMA_AMODE_POST_INC address mode. Below is my test code.
Who can help me clarify this issue?
Thanks
if (fpga->dma_chan >= 0)
{
ret = omap_request_dma(OMAP44XX_DMA_GPMC, pdev->dev.driver->name,omap2_fpga_dma_cb, (void *) fpga, &fpga->dma_chan);
if (ret == 0)
{
if (is_write)
{
omap_set_dma_dest_params(fpga->dma_chan, 0, /*OMAP_DMA_AMODE_CONSTANT*/OMAP_DMA_AMODE_POST_INC, fpga->phy_base, 0, 0);
omap_set_dma_src_params(fpga->dma_chan, 0, OMAP_DMA_AMODE_POST_INC, dma_addr, 0, 0);
omap_set_dma_transfer_params(fpga->dma_chan, OMAP_DMA_DATA_TYPE_S16, len/2, 1, 0, 0, 0);
}
else
{
omap_set_dma_src_params(fpga->dma_chan, 0, OMAP_DMA_AMODE_CONSTANT, fpga->phy_base, 0, 0);
omap_set_dma_dest_params(fpga->dma_chan, 0, OMAP_DMA_AMODE_POST_INC, dma_addr, 0, 0);
omap_set_dma_transfer_params(fpga->dma_chan, OMAP_DMA_DATA_TYPE_S16, len/2, 1, 0, 0, 0);
}
omap_set_dma_src_burst_mode(fpga->dma_chan, OMAP_DMA_DATA_BURST_DIS);
omap_set_dma_dest_burst_mode(fpga->dma_chan, OMAP_DMA_DATA_BURST_DIS);
init_completion(&fpga->dma_done);
omap_start_dma(fpga->dma_chan);
printk("omap_start_dma...\n");
/* setup and start DMA using dma_addr */
wait_for_completion(&fpga->dma_done);
printk("omap_start_dma: done\n");
dma_unmap_single(&fpga->pdev->dev, dma_addr, len, dir);
}
else
{
dev_info(&pdev->dev,"failed to allocate DMA for FPGA...\n");
fpga->dma_chan = -1;
}
}