Zynq UltraScale+ MPSoC : PS SPI behavior different between SDK and SDcard boot
I am on the Zynq UltraScale+ MPSoC ZCU102 with 2018.1. I'm trying to debug an issue with the PS SPI. The behavior is different between SDK debug and SDcard boot.
I have routed SPI0 using EMIO through the FPGA onto the J3 header pins.
When I run my R5 application using the SDK debugger, the SPI module functions normally and I can see CS0, CLK and MO activity on the J3 header pins.
If I run my R5 application using remoteproc from petalinux using SDcard boot, I can only see CS0 activity on the J3 header pins. It seems that the TX FIFO never empties and no data is sent, so no activity on CLK or MO. The ISR register shows TX_FIFO_not_full=0 and TX_FIFO_full=1.
For some reason, when the CRL_APB SPIn_REF_CTRL registers are configured during SDcard boot, the clock settings are updated but the clock is left disabled.
The values are changed from default to match the Vivado settings and psu_init contains the correct configuration value (with clock enabled), but the SPI clock enable bit is left disabled at the end of the SDcard boot process.