On Wed, May 24, 2017 at 07:03:10AM -0700, Ard Biesheuvel wrote: > (+ Leif) > > On 24 May 2017 at 01:34, Scott Telford <[email protected]> wrote: > > Hi Ard, > > > > Firstly, this patch was meant for my edk2-staging branch, not > > mainline edk2 - sorry, forgot to edit the subject line! > > Ah ok. In that case, do whatever you like :-)
Well, let's try to get keep the staging branch in a state that doesn't require too heavy reworking before final upstreaming. > > The issue is that, without this workaround, PCI(e) bridges and > > devices will be detected multiple times during bus scanning, > > e.g. a bridge at bus 1 device 0 will also be seen at bus 1 device > > 1, bus 1 device 2 etc and hence all the devices on the other side > > of the bridge will be duplicated too. I copied this workaround > > from the old Juno PCIe driver as I was seeing the same problem > > when I was testing the Cadence PCIe host bridge library I have > > been working on. I agree there should probably be a more elegant > > solution, but I don't know the generic PCI driver code well enough > > to suggest one at the moment. > > As I said, the workaround belongs in PciExpressLib. You can just clone > that and put the workaround in there. > > Interestingly, though, this PCIe IP works fine with the generic ECAM > driver in Linux, so I wonder what the difference is. > > Leif, were you aware of this issue? I was not aware of this issue. So a clone of PciExpressLib, whilst suboptimal, sounds like the way to go for now. Regards, Leif > >> -----Original Message----- > >> From: Ard Biesheuvel [mailto:[email protected]] > >> Sent: 23 May 2017 17:42 > >> To: Scott Telford <[email protected]> > >> Cc: [email protected] <[email protected]>; Tian, Feng > >> <[email protected]>; Zeng, Star <[email protected]> > >> Subject: Re: [edk2] [PATCH] Copy bus scanning workaround from ARM Juno > >> PCIe driver. > >> > >> On 23 May 2017 at 09:15, Scott Telford <[email protected]> wrote: > >> > Copy workaround previously in > >> > > >> ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c:Pci > >> RbPciRead() > >> > to RootBridgeIoPciAccess(), to avoid spurious multiple detections when > >> > scanning buses. > >> > > >> > Contributed-under: TianoCore Contribution Agreement 1.0 > >> > Signed-off-by: Scott Telford <[email protected]> > >> > --- > >> > MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c | 13 > >> +++++++++++++ > >> > >> This does not belong in the generic driver. > >> > >> Could you please explain in more detail what the issue is? In any > >> case, we will need to put this workaround in a Juno specific > >> implementation of PciExpressLib > >> > >> > 1 file changed, 13 insertions(+) > >> > > >> > diff --git a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c > >> b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c > >> > index a0e7e5b..3cca3c1 100644 > >> > --- a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c > >> > +++ b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c > >> > @@ -945,6 +945,19 @@ RootBridgeIoPciAccess ( > >> > PciAddress.ExtendedRegister = PciAddress.Register; > >> > } > >> > > >> > + // The UEFI PCI enumerator scans for devices at all possible > >> > addresses, > >> > + // and ignores some PCI rules - this results in some hardware being > >> > + // detected multiple times. We work around this by faking absent > >> > + // devices > >> > + if ((PciAddress.Bus == 0) && ((PciAddress.Device != 0) || > >> (PciAddress.Function != 0))) { > >> > + *((UINT32 *)Buffer) = 0xffffffff; > >> > + return EFI_SUCCESS; > >> > + } > >> > + if ((PciAddress.Bus == 1) && ((PciAddress.Device != 0) || > >> (PciAddress.Function != 0))) { > >> > + *((UINT32 *)Buffer) = 0xffffffff; > >> > + return EFI_SUCCESS; > >> > + } > >> > + > >> > Address = PCI_SEGMENT_LIB_ADDRESS ( > >> > RootBridge->RootBridgeIo.SegmentNumber, > >> > PciAddress.Bus, > >> > -- > >> > 2.2.2 > >> > > >> > _______________________________________________ > >> > edk2-devel mailing list > >> > [email protected] > >> > https://urldefense.proofpoint.com/v2/url?u=https- > >> 3A__lists.01.org_mailman_listinfo_edk2- > >> 2Ddevel&d=DwIBaQ&c=aUq983L2pue2FqKFoP6PGHMJQyoJ7kl3s3GZ- > >> _haXqY&r=0b2qZ7fqn6FWL0d7Bhx7saDL- > >> B7sx3Cxz3HPARO7ozc&m=7SGL_JTC4ZjVpm7zTv_uO5MHMY48vYsBzhKmKB > >> q66zw&s=W6S9XFt8B-FdfcvWjCtvHTGo3uddEyMfM6BIEMe8dtY&e= _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

