On Fri, 30 Oct 2020 00:15:57 +0100 Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote: > > I haven't read the whole thread, but it is important to keep in mind > > that on those two platforms, the PCI Bridge seen by Linux is *not* a > > real HW bridge. It is faked by the the pci-bridge-emul code. So if this > > code has defects/bugs in how it emulates a PCI Bridge behavior, you > > might see weird things. > > Ohh, that's interesting. Why does it need to emulate it? Because the HW doesn't expose a standard PCI Bridge. On mvebu, the main initial motivation was to be able to configure MBus windows dynamically depending on PCI endpoints that are connected. For AArdvark, the rationale is documented in commit 8a3ebd8de328301aacbe328650a59253be2ac82c: commit 8a3ebd8de328301aacbe328650a59253be2ac82c Author: Zachary Zhang <zhangzg@xxxxxxxxxxx> Date: Thu Oct 18 17:37:19 2018 +0200 PCI: aardvark: Implement emulated root PCI bridge config space The PCI controller in the Marvell Armada 3720 does not implement a software-accessible root port PCI bridge configuration space. This causes a number of problems when using PCIe switches or when the Max Payload size needs to be aligned between the root complex and the endpoint. Implementing an emulated root PCI bridge, like is already done in the pci-mvebu driver for older Marvell platforms allows to solve those issues, and also to support features such as ASR, PME, VC, HP. Signed-off-by: Zachary Zhang <zhangzg@xxxxxxxxxxx> [Thomas: convert to the common emulated PCI bridge logic.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxx> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> Best regards, Thomas -- Thomas Petazzoni, CTO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com