On Wed, Nov 27, 2019 at 08:08:23AM +0100, Gerd Hoffmann wrote:
> On Mon, Nov 25, 2019 at 07:25:26PM -0800, Your Real Name wrote:
> > From 3bf91481863ec504d113aa6b94827bf92840e291 Mon Sep 17 00:00:00 2001
> > From: gaobin <gao...@amazon.com>
> > Date: Thu, 19 Sep 2019 11:23:04 -0700
> > Subject: [PATCH 2/4] pci: Allow scanning pci bus number up to 255 in CSM 
> > mode
> > 
> > On real hardware especially server platforms, there are many pci
> > devices, bridges, either SoC integrated or addon. They can exhaust
> > all the pci bus numbers. So when scanning the pci bus, we need to
> > allow the bus number up to 255.
> > 
> > Signed-off-by: gaobin <gao...@amazon.com>
> > ---
> >  src/hw/pcidevice.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> > 
> > diff --git a/src/hw/pcidevice.c b/src/hw/pcidevice.c
> > index 8853cf7..acf15b4 100644
> > --- a/src/hw/pcidevice.c
> > +++ b/src/hw/pcidevice.c
> > @@ -26,6 +26,12 @@ pci_probe_devices(void)
> >      struct hlist_node **pprev = &PCIDevices.first;
> >      int extraroots = romfile_loadint("etc/extra-pci-roots", 0);
> >      int bus = -1, lastbus = 0, rootbuses = 0, count=0;
> > +
> > +    // On real hardware especially server platforms, the bus number
> > +    // could run up to the top value, i.e. 0xff
> > +    if (CONFIG_CSM)
> > +        extraroots = 0xff;
> 
> What exactly you are trying to fix here?
> 
> seabios should find all pci devices behind bridges without problems.

The problem is from the following statement:

while (bus < 0xff && (bus < MaxPCIBus || rootbuses < extraroots)) {

extraroots always returns 0 in csm mode, and "bus < MaxPCIBus" returns false 
very early.
So the while loop ends early, leaving many pci devices un-scanned.

Without the patch, I got:
"Found 33 PCI devices (max PCI bus is 02)"

With the patch, I got:
"Found 159 PCI devices (max PCI bus is b2)"

> 
> cheers,
>   Gerd
> 
_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to