Re: [PATCH v2 1/3] PCI: Correct the PCI quirk for the ALI M7101 chipset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 20, 2020 at 10:31:45AM +0000, Krzysztof Wilczynski wrote:
> As per the specifications from the vendor:
> 
>   - "M1543 Preliminary Data Sheet", "M1543: Desktop South Bridge",
>     Acer Laboratories Inc., January 1998, Version 1.25, p. 78
> 
>   - "M1543C Preliminary Datasheet", "M1543C Desktop Southbridge",
>     Acer Laboratories Inc., September 1998, Version 1.10, p. 126
> 
> Both the ACPI I/O and SMB I/O registers should be mapped into I/O space,
> but the second quirk used to claimed an I/O resource from the memory
> window which is not correct.
> 
> Signed-off-by: Krzysztof Wilczynski <kw@xxxxxxxxx>
> ---
>  drivers/pci/quirks.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index ca9ed5774eb1..c71fdd8bd6f8 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -654,7 +654,7 @@ DECLARE_PCI_FIXUP_CLASS_HEADER(PCI_VENDOR_ID_SYNOPSYS, PCI_ANY_ID,
>  static void quirk_ali7101_acpi(struct pci_dev *dev)
>  {
>  	quirk_io_region(dev, 0xE0, 64, PCI_BRIDGE_RESOURCES, "ali7101 ACPI");
> -	quirk_io_region(dev, 0xE2, 32, PCI_BRIDGE_RESOURCES+1, "ali7101 SMB");
> +	quirk_io_region(dev, 0xE2, 32, PCI_BRIDGE_RESOURCES, "ali7101 SMB");

Wow, this is way too subtle.  I proposed this fix, but I was wrong.

I thought PCI_BRIDGE_RESOURCES was identifying a bridge window that
the region should be claimed from: dev->resource[PCI_BRIDGE_RESOURCES]
would be the I/O port window of a bridge.

But that's not what's happening at all.  quirk_io_region() is using
that index to fill in a dev->resource[] entry with an IORESOURCE_IO
resource, and then it calls pci_claim_resource(), which looks for an
upstream bridge window that contains the resource (in
pci_find_parent_resource()).

So the use of PCI_BRIDGE_RESOURCES here is just a convenient way to
find an empty slot in dev->resource[].  We know it's empty because
the ali7101 device is not a bridge, so it has no windows.

And PCI_BRIDGE_RESOURCES+1 *looks* like a reference to a bridge's
memory window, but it's not; it's just a way to find another empty
dev->resource[] slot.

Sigh.  This is ugly and misleading.  But in the absence of good ideas,
I guess we should just leave it alone.

>  }
>  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL,	PCI_DEVICE_ID_AL_M7101,		quirk_ali7101_acpi);
>  
> -- 
> 2.26.2
> 



[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux