Quantcast

OMAP 3530 - GPMC burst reads with sDMA

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

OMAP 3530 - GPMC burst reads with sDMA

joe joe
I'm having an issue trying to do a synchronous multiple (burst) read (4, 8, 16 Word16) with the sDMA.
Currently, it seems like my sDMA is requesting the data from the GPMC as single word reads.  I believe I have the GPMC configured properly for burst reads since I am able to perform a 4 word burst with the following non-DMA method.  

volatile u64 *ptr = gpmc_cs_phys_base;
u64 return_data;
return_data = *ptr;

Looks like the method above forces the system to request the 64bits from the GPMC causing it to do a 4 word burst, while the DMA evidently does not do this.  So, how do I get the system DMA to request 64, 128, and 256 bits at a time for 4, 8, and 16 word bursts, respectively?  

When I attempt to use DMA for a 4 word burst read, I get 4 independent CS assertions and 1 word read for each CS assertion, I was instead expecting a burst (one CS assertion with 4 read words since my FPGA device is writing 4 words per CS assertion).  

For what its worth, I was able to use the sDMA to perform RAM to RAM data transfer, so that tells me that my DMA configuration is not completely hosed.  Is there anything else I have to take into consideration for performing 64, 128, 256 word reads with the DMA to trigger a GPMC burst?
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: OMAP 3530 - GPMC burst reads with sDMA

JamesAng
Hi Joe,
joe joe wrote
I'm having an issue trying to do a synchronous multiple (burst) read (4, 8, 16 Word16) with the sDMA.
Currently, it seems like my sDMA is requesting the data from the GPMC as single word reads.  I believe I have the GPMC configured properly for burst reads since I am able to perform a 4 word burst with the following non-DMA method.  

volatile u64 *ptr = gpmc_cs_phys_base;
u64 return_data;
return_data = *ptr;

Looks like the method above forces the system to request the 64bits from the GPMC causing it to do a 4 word burst, while the DMA evidently does not do this.  So, how do I get the system DMA to request 64, 128, and 256 bits at a time for 4, 8, and 16 word bursts, respectively?  

When I attempt to use DMA for a 4 word burst read, I get 4 independent CS assertions and 1 word read for each CS assertion, I was instead expecting a burst (one CS assertion with 4 read words since my FPGA device is writing 4 words per CS assertion).  

For what its worth, I was able to use the sDMA to perform RAM to RAM data transfer, so that tells me that my DMA configuration is not completely hosed.  Is there anything else I have to take into consideration for performing 64, 128, 256 word reads with the DMA to trigger a GPMC burst?
I'm also trying to find the proper Linux C-functions to do burst read/write for the GPMC too, first non-DMA and then with DMA.
Can you advise me what are the functions call to do that? I only managed to do 1 word read/write request using readw() and writew().

I do not get what you means with the 3 non-DMA instructions.
joe joe wrote
I believe I have the GPMC configured properly for burst reads since I am able to perform a 4 word burst with the following non-DMA method.  

volatile u64 *ptr = gpmc_cs_phys_base;
u64 return_data;
return_data = *ptr;

Looks like the method above forces the system to request the 64bits from the GPMC causing it to do a 4 word burst
Can you advise?

Many thanks in adv.

James Ang.
Loading...