* [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus()
@ 2026-09-16 10:02 Thorsten Blum
2026-10-03 11:49 ` Thorsten Blum
2026-10-26 18:37 ` Bjorn Helgaas
0 siblings, 2 replies; 9+ messages in thread
From: Thorsten Blum @ 2026-09-16 10:02 UTC (permalink / raw)
To: Bjorn Helgaas, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Jesse Barnes
Cc: Thorsten Blum, Lukas Wunner, Ingo Molnar, linux-pci, linux-kernel
early_pci_scan_bus() stops scanning a PCI slot when check_dev_quirk()
returns nonzero, which avoids probing functions 1-7 on single-function
devices, but also stops scanning when a function is absent on a
multifunction device.
This can skip early quirks on multifunction devices with holes in their
function numbering.
On iMac13,1 and iMac13,2, the BCM4331 AirPort card is behind root port
00:1c.3, also documented by the model list in commit abb2bafd295f
("x86/quirks: Add early quirk to reset Apple AirPort card").
Public lspci output for 2012 iMacs [1][2] shows that 00:1c.0, 00:1c.2,
00:1c.3 and 00:1c.4 are present, but 00:1c.1 is missing. The old code
stops at 00:1c.1 and never reaches 00:1c.3, so the AirPort reset quirk
is silently skipped on these machines.
Check function 0 first, and if it indicates a multifunction device, scan
functions 1-7 independently so that absent functions do not cause later
ones to be skipped.
Fixes: 15650a2f644a ("x86/PCI: fixup early quirk probing")
Cc: stable@vger.kernel.org
Signed-off-by: Thorsten Blum <blum@kernel.org>
Link: https://forum.libreelec.tv/thread/26799-wifi-not-detected-on-2012-imac-in-11-0/ [1]
Link: https://zoringroup.com/forum/5/7170/ [2]
Reviewed-by: Lukas Wunner <lukas@wunner.de>
---
Changes in v2:
- Add iMac13,x background information and supporting links (Lukas)
- v1: https://lore.kernel.org/r/20260807094601.263450-2-thorsten.blum@linux.dev/
---
arch/x86/kernel/early-quirks.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
index 6b6f32f40cbe..c641f38eca3a 100644
--- a/arch/x86/kernel/early-quirks.c
+++ b/arch/x86/kernel/early-quirks.c
@@ -795,12 +795,14 @@ static void __init early_pci_scan_bus(int bus)
int slot, func;
/* Poor man's PCI discovery */
- for (slot = 0; slot < 32; slot++)
- for (func = 0; func < 8; func++) {
- /* Only probe function 0 on single fn devices */
- if (check_dev_quirk(bus, slot, func))
- break;
- }
+ for (slot = 0; slot < 32; slot++) {
+ /* Only multifunction devices may have functions 1-7 */
+ if (check_dev_quirk(bus, slot, 0))
+ continue;
+
+ for (func = 1; func < 8; func++)
+ check_dev_quirk(bus, slot, func);
+ }
}
void __init early_quirks(void)
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus()
2026-09-16 10:02 [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus() Thorsten Blum
@ 2026-10-03 11:49 ` Thorsten Blum
2026-10-03 11:55 ` Dave Hansen
2026-10-26 18:37 ` Bjorn Helgaas
1 sibling, 1 reply; 9+ messages in thread
From: Thorsten Blum @ 2026-10-03 11:49 UTC (permalink / raw)
To: Bjorn Helgaas, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin
Cc: Lukas Wunner, linux-pci, linux-kernel
On Wed, Sep 16, 2026 at 12:02:07PM +0200, Thorsten Blum wrote:
> early_pci_scan_bus() stops scanning a PCI slot when check_dev_quirk()
> returns nonzero, which avoids probing functions 1-7 on single-function
> devices, but also stops scanning when a function is absent on a
> multifunction device.
>
> This can skip early quirks on multifunction devices with holes in their
> function numbering.
>
> On iMac13,1 and iMac13,2, the BCM4331 AirPort card is behind root port
> 00:1c.3, also documented by the model list in commit abb2bafd295f
> ("x86/quirks: Add early quirk to reset Apple AirPort card").
>
> Public lspci output for 2012 iMacs [1][2] shows that 00:1c.0, 00:1c.2,
> 00:1c.3 and 00:1c.4 are present, but 00:1c.1 is missing. The old code
> stops at 00:1c.1 and never reaches 00:1c.3, so the AirPort reset quirk
> is silently skipped on these machines.
>
> Check function 0 first, and if it indicates a multifunction device, scan
> functions 1-7 independently so that absent functions do not cause later
> ones to be skipped.
>
> Fixes: 15650a2f644a ("x86/PCI: fixup early quirk probing")
> Cc: stable@vger.kernel.org
> Signed-off-by: Thorsten Blum <blum@kernel.org>
> Link: https://forum.libreelec.tv/thread/26799-wifi-not-detected-on-2012-imac-in-11-0/ [1]
> Link: https://zoringroup.com/forum/5/7170/ [2]
> Reviewed-by: Lukas Wunner <lukas@wunner.de>
> ---
> Changes in v2:
> - Add iMac13,x background information and supporting links (Lukas)
> - v1: https://lore.kernel.org/r/20260807094601.263450-2-thorsten.blum@linux.dev/
> ---
> arch/x86/kernel/early-quirks.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
Gentle ping. Is there anything you'd like to be changed here, or could
someone please pick this up? Thanks.
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus()
2026-10-03 11:49 ` Thorsten Blum
@ 2026-10-03 11:55 ` Dave Hansen
2026-10-05 0:35 ` Thorsten Blum
0 siblings, 1 reply; 9+ messages in thread
From: Dave Hansen @ 2026-10-03 11:55 UTC (permalink / raw)
To: Thorsten Blum, Bjorn Helgaas, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, Dave Hansen, x86, H. Peter Anvin
Cc: Lukas Wunner, linux-pci, linux-kernel
On 10/3/26 04:49, Thorsten Blum wrote:
> Gentle ping. Is there anything you'd like to be changed here, or could
> someone please pick this up? Thanks.
How has this patch been tested?
One of those links is from 2014.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus()
2026-10-03 11:55 ` Dave Hansen
@ 2026-10-05 0:35 ` Thorsten Blum
2026-10-12 18:28 ` Thorsten Blum
0 siblings, 1 reply; 9+ messages in thread
From: Thorsten Blum @ 2026-10-05 0:35 UTC (permalink / raw)
To: Dave Hansen
Cc: Bjorn Helgaas, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Lukas Wunner, linux-pci,
linux-kernel
On Sat, Oct 03, 2026 at 04:55:54AM -0700, Dave Hansen wrote:
> On 10/3/26 04:49, Thorsten Blum wrote:
> > Gentle ping. Is there anything you'd like to be changed here, or could
> > someone please pick this up? Thanks.
>
> How has this patch been tested?
I tested it on an iMac13,1, and dmesg confirms the quirk is loaded, but
only when this patch is applied:
[ 0.023863] Resetting Apple AirPort card (left enabled by EFI)
lspci also confirms the hole at 00:1c.1.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus()
2026-10-05 0:35 ` Thorsten Blum
@ 2026-10-12 18:28 ` Thorsten Blum
2026-10-25 8:07 ` Maciej W. Rozycki
0 siblings, 1 reply; 9+ messages in thread
From: Thorsten Blum @ 2026-10-12 18:28 UTC (permalink / raw)
To: Dave Hansen
Cc: Bjorn Helgaas, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Lukas Wunner, linux-pci,
linux-kernel
On Mon, Oct 05, 2026 at 02:35:47AM +0200, Thorsten Blum wrote:
> On Sat, Oct 03, 2026 at 04:55:54AM -0700, Dave Hansen wrote:
> > On 10/3/26 04:49, Thorsten Blum wrote:
> > > Gentle ping. Is there anything you'd like to be changed here, or could
> > > someone please pick this up? Thanks.
> >
> > How has this patch been tested?
>
> I tested it on an iMac13,1, and dmesg confirms the quirk is loaded, but
> only when this patch is applied:
>
> [ 0.023863] Resetting Apple AirPort card (left enabled by EFI)
>
> lspci also confirms the hole at 00:1c.1.
Hi Dave,
Is there anything else I can do to help get this queued?
Thanks,
Thorsten
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus()
2026-10-12 18:28 ` Thorsten Blum
@ 2026-10-25 8:07 ` Maciej W. Rozycki
2026-10-25 17:50 ` H. Peter Anvin
0 siblings, 1 reply; 9+ messages in thread
From: Maciej W. Rozycki @ 2026-10-25 8:07 UTC (permalink / raw)
To: Thorsten Blum
Cc: Dave Hansen, Bjorn Helgaas, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Lukas Wunner,
linux-pci, linux-kernel
On Mon, 12 Oct 2026, Thorsten Blum wrote:
> Is there anything else I can do to help get this queued?
FWIW, it's not unusual even if not common for multifunction devices to
have "holes" in functions, e.g.:
07:00.0 Parallel controller [0701]: Oxford Semiconductor Ltd OXPCIe952 Parallel Port [1415:c118]
07:00.3 Serial controller [0700]: Oxford Semiconductor Ltd OXPCIe952 Native 950 UART [1415:c11b]
which is a chip the functions of which (one or two native or legacy serial
ports, one parallel port, one GPIO interface) can be activated selectively
with reset straps, however the resulting numeric 0-3 function assignments
for individual interfaces are not necessarily contiguous, presumably to
simplify internal decoding logic.
Maciej
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus()
2026-10-25 8:07 ` Maciej W. Rozycki
@ 2026-10-25 17:50 ` H. Peter Anvin
0 siblings, 0 replies; 9+ messages in thread
From: H. Peter Anvin @ 2026-10-25 17:50 UTC (permalink / raw)
To: Maciej W. Rozycki, Thorsten Blum
Cc: Dave Hansen, Bjorn Helgaas, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, Dave Hansen, x86, Lukas Wunner, linux-pci,
linux-kernel
On October 25, 2026 1:07:28 AM PDT, "Maciej W. Rozycki" <macro@orcam.me.uk> wrote:
>On Mon, 12 Oct 2026, Thorsten Blum wrote:
>
>> Is there anything else I can do to help get this queued?
>
> FWIW, it's not unusual even if not common for multifunction devices to
>have "holes" in functions, e.g.:
>
>07:00.0 Parallel controller [0701]: Oxford Semiconductor Ltd OXPCIe952 Parallel Port [1415:c118]
>07:00.3 Serial controller [0700]: Oxford Semiconductor Ltd OXPCIe952 Native 950 UART [1415:c11b]
>
>which is a chip the functions of which (one or two native or legacy serial
>ports, one parallel port, one GPIO interface) can be activated selectively
>with reset straps, however the resulting numeric 0-3 function assignments
>for individual interfaces are not necessarily contiguous, presumably to
>simplify internal decoding logic.
>
> Maciej
Indeed, or there might be multiple versions of a chip with different feature sets – often the same physical chip in different packages, so some features are fused or strapped off because they aren't pinned out.
The assumption that a multifunction service will have all its functions contiguous is absolutely false.
Acked-by: H. Peter Anvin (Rosaic) <hpa@zytor.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus()
2026-09-16 10:02 [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus() Thorsten Blum
2026-10-03 11:49 ` Thorsten Blum
@ 2026-10-26 18:37 ` Bjorn Helgaas
2026-10-27 10:40 ` Thorsten Blum
1 sibling, 1 reply; 9+ messages in thread
From: Bjorn Helgaas @ 2026-10-26 18:37 UTC (permalink / raw)
To: Thorsten Blum
Cc: Bjorn Helgaas, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Jesse Barnes, Lukas Wunner,
Ingo Molnar, linux-pci, linux-kernel
On Wed, Sep 16, 2026 at 12:02:07PM +0200, Thorsten Blum wrote:
> early_pci_scan_bus() stops scanning a PCI slot when check_dev_quirk()
> returns nonzero, which avoids probing functions 1-7 on single-function
> devices, but also stops scanning when a function is absent on a
> multifunction device.
>
> This can skip early quirks on multifunction devices with holes in their
> function numbering.
>
> On iMac13,1 and iMac13,2, the BCM4331 AirPort card is behind root port
> 00:1c.3, also documented by the model list in commit abb2bafd295f
> ("x86/quirks: Add early quirk to reset Apple AirPort card").
>
> Public lspci output for 2012 iMacs [1][2] shows that 00:1c.0, 00:1c.2,
> 00:1c.3 and 00:1c.4 are present, but 00:1c.1 is missing. The old code
> stops at 00:1c.1 and never reaches 00:1c.3, so the AirPort reset quirk
> is silently skipped on these machines.
>
> Check function 0 first, and if it indicates a multifunction device, scan
> functions 1-7 independently so that absent functions do not cause later
> ones to be skipped.
>
> Fixes: 15650a2f644a ("x86/PCI: fixup early quirk probing")
> Cc: stable@vger.kernel.org
> Signed-off-by: Thorsten Blum <blum@kernel.org>
> Link: https://forum.libreelec.tv/thread/26799-wifi-not-detected-on-2012-imac-in-11-0/ [1]
> Link: https://zoringroup.com/forum/5/7170/ [2]
> Reviewed-by: Lukas Wunner <lukas@wunner.de>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Let me know if you'd prefer this to be merged via the PCI tree.
> ---
> Changes in v2:
> - Add iMac13,x background information and supporting links (Lukas)
> - v1: https://lore.kernel.org/r/20260807094601.263450-2-thorsten.blum@linux.dev/
> ---
> arch/x86/kernel/early-quirks.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
> index 6b6f32f40cbe..c641f38eca3a 100644
> --- a/arch/x86/kernel/early-quirks.c
> +++ b/arch/x86/kernel/early-quirks.c
> @@ -795,12 +795,14 @@ static void __init early_pci_scan_bus(int bus)
> int slot, func;
>
> /* Poor man's PCI discovery */
> - for (slot = 0; slot < 32; slot++)
> - for (func = 0; func < 8; func++) {
> - /* Only probe function 0 on single fn devices */
> - if (check_dev_quirk(bus, slot, func))
> - break;
> - }
> + for (slot = 0; slot < 32; slot++) {
> + /* Only multifunction devices may have functions 1-7 */
> + if (check_dev_quirk(bus, slot, 0))
> + continue;
> +
> + for (func = 1; func < 8; func++)
> + check_dev_quirk(bus, slot, func);
> + }
> }
>
> void __init early_quirks(void)
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus()
2026-10-26 18:37 ` Bjorn Helgaas
@ 2026-10-27 10:40 ` Thorsten Blum
0 siblings, 0 replies; 9+ messages in thread
From: Thorsten Blum @ 2026-10-27 10:40 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Bjorn Helgaas, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Jesse Barnes, Lukas Wunner,
Ingo Molnar, linux-pci, linux-kernel
Hi Bjorn,
On Mon, Oct 26, 2026 at 01:37:18PM -0500, Bjorn Helgaas wrote:
> On Wed, Sep 16, 2026 at 12:02:07PM +0200, Thorsten Blum wrote:
> > early_pci_scan_bus() stops scanning a PCI slot when check_dev_quirk()
> > returns nonzero, which avoids probing functions 1-7 on single-function
> > devices, but also stops scanning when a function is absent on a
> > multifunction device.
> >
> > This can skip early quirks on multifunction devices with holes in their
> > function numbering.
> >
> > On iMac13,1 and iMac13,2, the BCM4331 AirPort card is behind root port
> > 00:1c.3, also documented by the model list in commit abb2bafd295f
> > ("x86/quirks: Add early quirk to reset Apple AirPort card").
> >
> > Public lspci output for 2012 iMacs [1][2] shows that 00:1c.0, 00:1c.2,
> > 00:1c.3 and 00:1c.4 are present, but 00:1c.1 is missing. The old code
> > stops at 00:1c.1 and never reaches 00:1c.3, so the AirPort reset quirk
> > is silently skipped on these machines.
> >
> > Check function 0 first, and if it indicates a multifunction device, scan
> > functions 1-7 independently so that absent functions do not cause later
> > ones to be skipped.
> >
> > Fixes: 15650a2f644a ("x86/PCI: fixup early quirk probing")
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Thorsten Blum <blum@kernel.org>
> > Link: https://forum.libreelec.tv/thread/26799-wifi-not-detected-on-2012-imac-in-11-0/ [1]
> > Link: https://zoringroup.com/forum/5/7170/ [2]
> > Reviewed-by: Lukas Wunner <lukas@wunner.de>
>
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>
>
> Let me know if you'd prefer this to be merged via the PCI tree.
Thanks for the Ack.
I'd appreciate it if you could take this through the PCI tree.
Thanks,
Thorsten
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-10-27 10:40 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-16 10:02 [PATCH RESEND v2] x86/early-quirks: Scan all functions in early_pci_scan_bus() Thorsten Blum
2026-10-03 11:49 ` Thorsten Blum
2026-10-03 11:55 ` Dave Hansen
2026-10-05 0:35 ` Thorsten Blum
2026-10-12 18:28 ` Thorsten Blum
2026-10-25 8:07 ` Maciej W. Rozycki
2026-10-25 17:50 ` H. Peter Anvin
2026-10-26 18:37 ` Bjorn Helgaas
2026-10-27 10:40 ` Thorsten Blum
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®