Hi,
I'm facing a PCIe init related problem most likely caused in the Intel FSP in our BayTrail U-Boot port (not coreboot!). I hope you don't mind me posting this question on this coreboot list, since here many more people are present with Intel FSP knowledge.
So here we go:
We are currently struggling with an FSP PCIe related issue on our BayTrail target. Here we use an PLX / Avago PCIe switch, connected to the PCIe root port of the CPU with a PCIe x4 link.
The BIOS always boots fine. Only U-Boot doesn't boot at all. No output on the console. This is on some boards, somehow depending on the PLX switch that is connected.
Measuring has shown, that the PCIe clock is only stable for ~20ms before data is transferred in the U-Boot case. In the BIOS case, the time between clock stable and data is ~120ms. The PCIe spec mentions, that the clock should be asserted for more than 100ms. So U-Boot is violating the spec here, which might be the root cause.
I've now instrumented the U-Boot with many early debug and delay code and found, that it hangs inside of the FSP code. I then installed the DEBUG FSP blob and have found, that its stuck (as expected) in the FSP PCIe init:
.... CommonUsbInit() - End ConfigureUsb() End PchInitRootPorts() Start
Here the log from a different board, with stable and working 4 times x1 PCIe links (different board with 4 times x1 PCIe links -> pci-good):
... CommonUsbInit() - End ConfigureUsb() End PchInitRootPorts() Start Root Port 1 device enabled. RpEnableMask: 0xF Root Port 2 device enabled. RpEnableMask: 0xF Root Port 3 device enabled. RpEnableMask: 0xF Root Port 4 device enabled. RpEnableMask: 0xF PchInitRootPorts() End ConfigureSata() Start ...
I've attached the logs, so that you can review them yourself as well.
Do you have any ideas, whats going on in the PCI init stuff in the FSP? Or if and how we can influence this PCIe related configuration to solve this hangup inside of the FSP? Has such a problem or a similar one been noticed on some BayTrail platforms with coreboot before?
BTW: I've just found a workaround (more ugly hack) to solve this issue. If I disable the link in the PCIe root port (PCI BDF 0,0x1c,0) in the LCTL register before jumping into the FSP, the FSP "survives" the init phase and jumps back into U-Boot. I can then re-force the link before the U-Boot PCI scan is done and then everything is fine. The PCIe PLX switch is detected correctly and all downstream ports seem to be working as expected.
Thanks, Stefan