11-09-2016 01:34 PM
Hi,
I'm running into an issue with AXI DMA configured to 64bit S2MM but absent with default 32bit data width configuration.
The DMA was customized to only contain S2MM write channel in direct register mode, hence no SG function. The Address width is at default 32bit and Buffer length register at maximum 23 bit. The max burst size was set to 256 to increase bandwidth. The memory map data width and stream data width was propagated correctly from Zynq PS HP0 and AXI-S DATA FIFO correctly. Both at 64bit.
After the correct number of bytes are transferred, I checked the memory data. It turned out that the latter 4 bytes in a 64 bits is always at zero. The first 4 bytes were correct. The DMA address was aligned to 32 bytes on ARM side.
I had ruled out any issues with my upstream custom IP by inserting ILA probe between AXI-S DATA FIFO and DMA. I also tried enabling the TKeep and force all 8 bits to 1 but it didn't make a difference.
Thanks in advance!
11-10-2016 01:01 PM
It appears the problem resolves itself after I remake the hardware platform, base support package and application itself.
Maybe something during the ARM configuration determines the bus width of HP port.
11-09-2016 01:38 PM
11-09-2016 09:06 PM
To follow on on the problem, I inserted ILA between DMA and AXI-mem-interconnect. Here are the results:
Attach 1 is the ILA probing between DMA and memory interconnect.
Attach 2 is the actual data from SDK after the transfer.
Attach 3 shows the HP0 port on Zynq is configured to be 64bit data with 32 addressing
The wstrb and data actually pass directly through the AXI memory interconnect to HP port based on the RTL schematics.
Attach 4 is a new implementation with ILA between AXI-mem-interconnect and the HP port. The burst size break down to AXI3 doesn't seem to be wrong.
11-10-2016 01:01 PM
It appears the problem resolves itself after I remake the hardware platform, base support package and application itself.
Maybe something during the ARM configuration determines the bus width of HP port.