Re: [[RFC PATCH v1] 1/1] PCI: Add pci=nobbn to ignore ACPI _BBN method to override host bridge bus window

From: Bjorn Helgaas
Date: Fri Jan 17 2020 - 11:05:08 EST


[+cc Rafael, linux-acpi, start of thread at
https://lore.kernel.org/lkml/PSXP216MB0438F3D8C09957C6A45BC43D80580@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/T/#u]

On Fri, Jan 17, 2020 at 03:00:11PM +0000, Nicholas Johnson wrote:
> On Thu, Jan 16, 2020 at 11:13:13PM +0100, Thomas Gleixner wrote:
> > Nicholas Johnson <nicholas.johnson-opensource@xxxxxxxxxxxxxx> writes:
> >
> > > Add pci=nobbn kernel parameter.
> > >
> > > Override the host bridge bus resource to [bus 00-ff] when specified.
> >
> > Fine, but you completely fail to explain why this is useful and why
> > someone would utilize this command line parameter.
>
> There are motherboards with single PCIe root complex which give
> significantly less than [bus 00-ff] via CRS. I own one with [bus 00-7f]
> and have seen some with significantly less.
>
> A user who wants to use more busses than the motherboard advertises will
> want to use this kernel parameter, for instance if they have a lot of
> PCIe switches or Thunderbolt 3 devices.

I don't think this is a good idea. "pci=nocrs" was mainly useful to
work around Linux defects in handling _CRS methods. I don't think we
have comparable defects in our handling of _BBN.

In your example, the BIOS is telling us the bridge leads to [bus
00-7f]. We don't know what is at [bus 80-ff]. Maybe that range is
valid and usable, and maybe it's not. It could be routed to a
different host bridge, it could contain devices the BIOS uses for its
own purposes, it could be completely invalid.

If we *did* decide this is a good idea, "nobbn" is a misleading name.
_BBN evaluates to a single bus number, not a range. In your example,
BIOS is supplying _BBN=0 and _CRS that contains [bus 00-7f]. "nobbn"
suggests that'd we'd ignore _BBN. But this patch actually ignores the
bus number range from _CRS, so it has nothing to do with _BBN.

> This is similar to how we have pci=nocrs to override motherboards with
> issues. The bus resource is not overridden by pci=nocrs, even though it
> will usually come from the same method. However, I believe it would be
> unwise to change pci=nocrs to include bus resource, as detailed in my
> original RFC.

For reference, I think this original RFC was
https://lore.kernel.org/r/PSXP216MB04385B2C1BB518E5219C30CE80580@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Bjorn