Linux + Bare metal app : Problem with the dma controller
I am trying to run Linux on CPU0 and a bare metal application on CPU1 as done in the XAPP1078 on my ZC706 board.
I'm using the latest U-Boot and Linux from the Xilinx git repositories, with the modifications mentioned in the application note and here.
I am debugging with XMD and the Xilinx Platform Cable USB II.
I'm having the following issue :
Before Linux boots, the CPU1 loops in his WFE loop, as it should : OK
During the Linux boot, the CPU1 reads something in 0xFFFFFFF0 different from 0xFFFFFF2C, causing him to leave the WFE loop and to begin execution at that address. This read is very strange since the memory at 0xFFFFFFF0 hasn't changed ! Moreover, the read value changes when I repeat the experiment => This is obviously not intended by Linux.
Debugging investigations led me to think that the PL330 driver (DMA controller) was involved. I thus tried to disable the "ps7_dma_s: ps7-dma@f8003000" section in the device tree, and everything worked as it should ! But on the other hand, if I break on the CPU0 in pl330_driver_probe, the CPU1 has already left (erroneously) the WFE loop.
Of course removing the PL330 driver from my design isn't a viable option.