
Hello,
I'm seeking advice on debugging on what is happening when I use the PL330 DMA controller to transfer zero's to the SDRAM and the effect of memory barriers.
Here are my current observations:
1) With commit "a78cd8613204 ARM: Rework and correct barrier definitions", the correct memory barrier calls are in place. With this patch in place, this version of the PL330 DMA driver can correctly transfer zero's to the SDRAM.
However, after the transfer is done, I'm encountering this error on SPL boot up: Trying to boot from MMC1 spl: could not find mmc device. error: -19 SPL: failed to boot from all boot devices ### ERROR ### Please RESET the board ###
The above error can be narrowed down to the list_emtpy(&uc->dev_head) in uclass_find_device() being true. A simple revert of patch a78cd8613204 make this error go away.
2) I've tried to replace all the readl/writel with raw_readl/raw_writel in the pl330 driver. Same error.
3) Removing the __iormb and __iowmb in readl/writel, effectively, removing the barriers. Error goes away.
I don't know enough what affect the barriers are having on the DMA memory transfer, so any guidance would be greatly appreciated.
Thanks, Dinh
Dinh Nguyen (3): drivers: dma: Add the ARM PL330 DMA driver arm: socfpga: scrub the SDRAM to properly enable ECC support arm: socfpga: Add reset manager defines for reset status
arch/arm/include/asm/pl330.h | 105 +++ arch/arm/mach-socfpga/include/mach/reset_manager.h | 21 + arch/arm/mach-socfpga/include/mach/sdram.h | 2 + arch/arm/mach-socfpga/spl.c | 8 + arch/arm/mach-socfpga/wrap_sdram_config.c | 32 + configs/socfpga_cyclone5_defconfig | 2 + drivers/dma/Kconfig | 4 + drivers/dma/Makefile | 1 + drivers/dma/pl330.c | 942 +++++++++++++++++++++ 9 files changed, 1117 insertions(+) create mode 100644 arch/arm/include/asm/pl330.h create mode 100644 drivers/dma/pl330.c