I have an situation about the SRIO read: I am doing some data download to L2 memory through SRIO, and then read back (through SRIO) by FPGA for verification. We find that a specific region of L2 in core 0 will cause the SRIO read fail (The FPGA gets an invalid data packet). The address is around “0x10869de4” and “0x10869e00”. The SRIO link is set up through I2C booting (the SRIO setup code is converted from .out to .bin format, which is stored inside the eeprom). During booting, the SRIO setup code is loaded and configures the lane, then enters a loop that monitors the BOOT MAGIC ADDRESS of each core. That is what the core 0 does.
Then, I send my main program code to every core through FPGA using SRIO write, then read back for verification before kick start that core. I find that core 1 to core 7 are behaving normally. However for core 0, it fail to read for address 0x10869d40 with length of 0xC4 byte.
I perform some test and find that there are some region around the address 0x10869d40 which will cause the SRIO read fail. Is there any constraint to SRIO/memory read during the boot process?
Below is the status register of the SRIO.
Base: 0x02900000
Offset:
B140h SP0_LM_REQ Port 0 Link Maintenance Request CSR 0x00000004
B144h SP0_LM_RESP Port 0 Link Maintenance Response CSR 0x00000010
B148h SP0_ACKID_STAT Port 0 Local AckID Status CSR 0x00000101
B154h SP0_CTL2 Port 0 Control 2 CSR 0x22EA0000
B158h SP0_ERR_STAT Port 0 Error and Status CSR 0x00000002
B15Ch SP0_CTL Port 0 Control CSR 0xD0600001