hello
PC can enumerate evmc6678 for first time, but after PC restart evmc6678 won't get enumerate anymore. also we have one Xilinx ZCU102 and one SAMSUNG SSD device. Xilinx ZCU102 can't enumerate SAMSUNG SSD DISK in first time. we need to restart Xilinx board once for SAMSUNG SSD to get enumerated (view it using lspci -n). our main goal is to feed evmc6678 into Xilinx board but Xilinx can't enumerate evmc6678 at all.
in this stage we reach to this conclusion:
Xilinx first stage bootloader finish it's enumeration process too fast so neither SAMSUNG SSD nor evmc6678 can't get enumerated. but SAMSUNG SSD has the ability to re-enumearte after Xilinx board reset while evmc6678 can't do that (we conclude this from the fact that PC can't enumerate evmc6678 after restart.)
it seems that SAMSUNG board is Always ready to get enumerated but this isn't true about evmc6678.
in all of TI code for PCIE initialization, there is always this pattern (both in IBL code and example in sprabk8.pdf)
(a) lock pll
(b) disable training
(c) write some settings
(d) enable training and wait for training to end.
it seems that whole problem originate from stage (d). in other word, once DSP reach stage (d) if training process was not successful, it will get blocked in a while loop and host reset have no effect in breaking this loop.
we also try to use APP_RETRY_EN bit in CMD_STATUS which wasn't successful. here is how we did this:
by assuming that FPGA finish its enumeration process before DSP to be ready, we enable APP_RETRY_EN in CMD_STATUS so that every request from FPGA will get RETRY response. then we add 6 sec idle before enabling training process. this way after fpga boot we give it one reset in less than 6 sec. what we expected was for FPGA to get blocked by RETRY response from DSP and after DSP Activate it's training FPGA can enumerate it. but this won't work either.
so can anyone suggest any solution to this problem? how can SAMSUNG SSD board be always ready for training but evmc6678 can't ?
(all of the above tested by both TI IBL and our custom IBL)