Hello,
A customer is initializing an NVMe drive in U-Boot to load their image (kernel and rootfs) on the iMX8MP. This is working without any problems, the NVMe disk is properly detected, and the system starts booting. However, in some specific SoM's, when the Linux kernel initializes the PCIe interface, the link won't come up. This happens about 30% of the time on affected SoM's.Here's the error message when it fails to initialize:
phy phy-32f00000.pcie-phy.0: phy poweron failed --> -110
Non affected SoM's work 100% of the time. If the PCIe is not initialized in U-Boot, the affected SoM's works 100% of the time on Linux, and we ran 12h stress tests on the NVMe disk without any problems.
The problem is very likely associated to the way the Linux kernel is initializing an already initialized PCIe interface. Because the kernel has no knowledge that the interface was already initialized, it does the entire process from scratch, and this fails in some modules sometimes.
I'm thinking there could be a PLL that doesn't lock properly when it is being reconfigured without being in a reset state. However, as previously noted, this is not reproducible on 100% of the hardwares, so there must also be some kind of HW variation (SoC, SoM) that is also having an effect.
Can anyone give hints about what could be going wrong?
Thanks,
Rafael