05-13-2014 12:01 AM
on my 64 bit system (2008 server ),I need to intall 64bit version windriver , then I malloc a DMA memory to receive data from DMA in pcie card.but the address size is bigger than the range of 32bit integer can express; when I want to tell Microblaze the address , I need to write a long long integer into DDR,but how do i use this value to tell pcie brige , when the dma move data on PLB bus(32bit ), the data will go to the 64bit address on PC 's memory ; thanks very much.!
05-14-2014 12:11 PM - edited 05-14-2014 04:36 PM
This is a driver limitation. I encountered the same problem. The largest chunk of continuous memory you can address is maxed out at 4GB, due to the 32bit integer.
If you need more than 4GB, you will need to allocate multiple seperate sections of memory.
05-14-2014 11:15 PM
thanks for your reply;
in fact ,i only need 5M SIZE memory, but in 64 bit system. the malloc memory start form 0x100000001; but in my fpga project ,only IPIFBAR2PCIBAR register can set to 64bit , the rest is 32bit register , I does not kown how to tell DMA the dest address is in 32bit integer range ,in fact ,the PC ' s pcie address is a 64bit integer;can you help me!!thanks very much
05-21-2014 08:43 PM
It depends on whether 3DW ot 4DW TLPs the DMA engine will generate.
If only 3DW TLPs, the driver should allocate memory into lower 4G and only 32-bit address used.
If 4DW TLP used, DMA engine should get the upper 32-bit address by some method.