On Thu, Jul 16, 2026 at 9:24 AM Thorsten Leemhuis <[email protected]> wrote: > > On 7/8/26 21:35, Mario Limonciello wrote: > > On systems where PCI bus renumbering occurs (e.g. pci=realloc, > > resource conflicts), the runtime bus number may differ from the > > BIOS POST bus number recorded in the VFCT table. This causes > > radeon_acpi_vfct_bios() to fail finding the VBIOS even though > > the correct device entry exists. > > > > Introduce radeon_acpi_vfct_match() > > This patch showed up in -next yesterday and from a very quick look seems > likely to be the reason for a ppc64le build error I ran into: > > """drivers/gpu/drm/radeon/radeon_bios.c:614:12: error: > ‘radeon_acpi_vfct_match’ defined but not used [-Werror=unused-function] > 614 | static int radeon_acpi_vfct_match(struct radeon_device *rdev, > | ^~~~~~~~~~~~~~~~~~~~~~ > cc1: all warnings being treated as errors > make[6]: *** [scripts/Makefile.build:289: > drivers/gpu/drm/radeon/radeon_bios.o] Error 1 > make[5]: *** [scripts/Makefile.build:549: drivers/gpu/drm/radeon] Error 2 > make[5]: *** Waiting for unfinished jobs.... > make[4]: *** [scripts/Makefile.build:549: drivers/gpu/drm] Error 2 > make[3]: *** [scripts/Makefile.build:549: drivers/gpu] Error 2 > make[2]: *** [scripts/Makefile.build:549: drivers] Error 2 > make[1]: *** > [/builddir/build/BUILD/kernel-7.2.0-build/kernel-next-20260715/linux-7.2.0-0.0.next.20260715.427.vanilla.fc45.ppc64le/Makefile:2228: > .] Error 2 > make: *** [Makefile:256: __sub-make] Error 2 > """ > > Full log: > https://download.copr.fedorainfracloud.org/results/@kernel-vanilla/next/fedora-rawhide-ppc64le/10721545-next-next-all/builder-live.log.gz >
Fixed with this patch: https://patchwork.freedesktop.org/patch/740649/?series=170572&rev=1 Alex > Ciao, Thorsten > > > drivers/gpu/drm/radeon/radeon_bios.c:6> > > drivers/gpu/drm/radeon/radeon_bios.c:614:12: error: > ‘radeon_acpi_vfct_match’ defined but not used [-Werror=unused-function] > > 614 | static int radeon_acpi_vfct_match(struct radeon_device *rdev, > > | ^~~~~~~~~~~~~~~~~~~~~~ > > cc1: all warnings being treated as errors > > make[6]: *** [scripts/Makefile.build:289: > > drivers/gpu/drm/radeon/radeon_bios.o] Error 1 > > make[5]: *** [scripts/Makefile.build:549: drivers/gpu/drm/radeon] Error 2 > > make[5]: *** Waiting for unfinished jobs.... > > make[4]: *** [scripts/Makefile.build:549: drivers/gpu/drm] Error 2 > > make[3]: *** [scripts/Makefile.build:549: drivers/gpu] Error 2 > > make[2]: *** [scripts/Makefile.build:549: drivers] Error 2 > > make[1]: *** > > [/builddir/build/BUILD/kernel-7.2.0-build/kernel-next-20260715/linux-7.2.0-0.0.next.20260715.427.vanilla.fc45.ppc64le/Makefile:2228: > > .] Error 2 > > make: *** [Makefile:256: __sub-make] Error 2 > > 14:12: error: ‘radeon_acpi_vfct_match’ defined but not used > [-Werror=unused-function] > > 614 | static int radeon_acpi_vfct_match(struct radeon_device *rdev, > > | ^~~~~~~~~~~~~~~~~~~~~~ > > cc1: all warnings being treated as errors > > make[6]: *** [scripts/Makefile.build:289: > > drivers/gpu/drm/radeon/radeon_bios.o] Error 1 > > make[5]: *** [scripts/Makefile.build:549: drivers/gpu/drm/radeon] Error 2 > > make[5]: *** Waiting for unfinished jobs.... > > make[4]: *** [scripts/Makefile.build:549: drivers/gpu/drm] Error 2 > > make[3]: *** [scripts/Makefile.build:549: drivers/gpu] Error 2 > > make[2]: *** [scripts/Makefile.build:549: drivers] Error 2 > > make[1]: *** > > [/builddir/build/BUILD/kernel-7.2.0-build/kernel-next-20260715/linux-7.2.0-0.0.next.20260715.427.vanilla.fc45.ppc64le/Makefile:2228: > > .] Error 2 > > make: *** [Makefile:256: __sub-make] Error 2 > > > drivers/gpu/drm/radeon/radeon_bios.c:614:12: error: > > ‘radeon_acpi_vfct_match’ defined but not used [-Werror=unused-function] > > 614 | static int radeon_acpi_vfct_match(struct radeon_device *rdev, > > | ^~~~~~~~~~~~~~~~~~~~~~ > > cc1: all warnings being treated as errors > > make[6]: *** [scripts/Makefile.build:289: > > drivers/gpu/drm/radeon/radeon_bios.o] Error 1 > > make[5]: *** [scripts/Makefile.build:549: drivers/gpu/drm/radeon] Error 2 > > make[5]: *** Waiting for unfinished jobs.... > > make[4]: *** [scripts/Makefile.build:549: drivers/gpu/drm] Error 2 > > make[3]: *** [scripts/Makefile.build:549: drivers/gpu] Error 2 > > make[2]: *** [scripts/Makefile.build:549: drivers] Error 2 > > make[1]: *** > > [/builddir/build/BUILD/kernel-7.2.0-build/kernel-next-20260715/linux-7.2.0-0.0.next.20260715.427.vanilla.fc45.ppc64le/Makefile:2228: > > .] Error 2 > > make: *** [Makefile:256: __sub-make] Error 2 > > > drivers/gpu/drm/radeon/radeon_bios.c:614:12: error: > > ‘radeon_acpi_vfct_match’ defined but not used [-Werror=unused-function] > > 614 | static int radeon_acpi_vfct_match(struct radeon_device *rdev, > > | ^~~~~~~~~~~~~~~~~~~~~~ > > cc1: all warnings being treated as errors > > make[6]: *** [scripts/Makefile.build:289: > > drivers/gpu/drm/radeon/radeon_bios.o] Error 1 > > make[5]: *** [scripts/Makefile.build:549: drivers/gpu/drm/radeon] Error 2 > > make[5]: *** Waiting for unfinished jobs.... > > make[4]: *** [scripts/Makefile.build:549: drivers/gpu/drm] Error 2 > > make[3]: *** [scripts/Makefile.build:549: drivers/gpu] Error 2 > > make[2]: *** [scripts/Makefile.build:549: drivers] Error 2 > > make[1]: *** > > [/builddir/build/BUILD/kernel-7.2.0-build/kernel-next-20260715/linux-7.2.0-0.0.next.20260715.427.vanilla.fc45.ppc64le/Makefile:2228: > > .] Error 2 > > make: *** [Makefile:256: __sub-make] Error 2 > > > > drivers/gpu/drm/radeon/radeon_bios.c:614:12: error: > > ‘radeon_acpi_vfct_match’ defined but not used [-Werror=unused-function] > > 614 | static int radeon_acpi_vfct_match(struct radeon_device *rdev, > > | ^~~~~~~~~~~~~~~~~~~~~~ > > cc1: all warnings being treated as errors > > make[6]: *** [scripts/Makefile.build:289: > > drivers/gpu/drm/radeon/radeon_bios.o] Error 1 > > make[5]: *** [scripts/Makefile.build:549: drivers/gpu/drm/radeon] Error 2 > > make[5]: *** Waiting for unfinished jobs.... > > make[4]: *** [scripts/Makefile.build:549: drivers/gpu/drm] Error 2 > > make[3]: *** [scripts/Makefile.build:549: drivers/gpu] Error 2 > > make[2]: *** [scripts/Makefile.build:549: drivers] Error 2 > > make[1]: *** > > [/builddir/build/BUILD/kernel-7.2.0-build/kernel-next-20260715/linux-7.2.0-0.0.next.20260715.427.vanilla.fc45.ppc64le/Makefile:2228: > > .] Error 2 > > make: *** [Makefile:256: __sub-make] Error 2 > > > > > which treats the bus number > > as a soft filter: vendor/device/function identity is the hard > > requirement, while exact bus match is the preferred path. When > > bus numbers disagree but device identity matches, accept the > > VFCT entry and log a dev_notice for diagnostics. This mirrors the > > equivalent amdgpu change. > > > > Signed-off-by: Mario Limonciello <[email protected]> > > --- > > Cc: Oz Tiram <[email protected]> > > drivers/gpu/drm/radeon/radeon_bios.c | 45 ++++++++++++++++++++++++---- > > 1 file changed, 40 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/gpu/drm/radeon/radeon_bios.c > > b/drivers/gpu/drm/radeon/radeon_bios.c > > index c6df799c3cf4a..cc10880af096b 100644 > > --- a/drivers/gpu/drm/radeon/radeon_bios.c > > +++ b/drivers/gpu/drm/radeon/radeon_bios.c > > @@ -596,6 +596,45 @@ static bool radeon_read_disabled_bios(struct > > radeon_device *rdev) > > return legacy_read_disabled_bios(rdev); > > } > > > > +/** > > + * radeon_acpi_vfct_match() - Check if a VFCT entry matches the device > > + * @rdev: Radeon device > > + * @vhdr: VFCT image header to check > > + * > > + * VFCT entries contain the PCI bus number as recorded during BIOS POST. > > + * On systems where the kernel renumbers PCI buses (e.g. pci=realloc or > > + * resource conflicts), the runtime bus number may differ from the POST > > + * value. Match by device identity (vendor + device + function) and use > > + * the bus number as a preference: exact bus match is preferred, but when > > + * the bus numbers disagree we accept the entry if the device identity > > + * matches. > > + * > > + * Returns: 0 on match, -ENODEV on no match > > + */ > > +static int radeon_acpi_vfct_match(struct radeon_device *rdev, > > + VFCT_IMAGE_HEADER *vhdr) > > +{ > > + /* Vendor and device IDs must always match */ > > + if (vhdr->VendorID != rdev->pdev->vendor || > > + vhdr->DeviceID != rdev->pdev->device) > > + return -ENODEV; > > + > > + if (vhdr->PCIDevice != PCI_SLOT(rdev->pdev->devfn) || > > + vhdr->PCIFunction != PCI_FUNC(rdev->pdev->devfn)) > > + return -ENODEV; > > + > > + /* Exact bus number match - preferred */ > > + if (vhdr->PCIBus == rdev->pdev->bus->number) > > + return 0; > > + > > + /* Bus mismatch but device identity matches (PCI renumbering case) */ > > + dev_notice(&rdev->pdev->dev, > > + "VFCT bus number mismatch: table %u != runtime %u, > > matching by device identity (vendor 0x%04x device 0x%04x)\n", > > + vhdr->PCIBus, rdev->pdev->bus->number, > > + rdev->pdev->vendor, rdev->pdev->device); > > + return 0; > > +} > > + > > #ifdef CONFIG_ACPI > > static bool radeon_acpi_vfct_bios(struct radeon_device *rdev) > > { > > @@ -633,11 +672,7 @@ static bool radeon_acpi_vfct_bios(struct radeon_device > > *rdev) > > } > > > > if (vhdr->ImageLength && > > - vhdr->PCIBus == rdev->pdev->bus->number && > > - vhdr->PCIDevice == PCI_SLOT(rdev->pdev->devfn) && > > - vhdr->PCIFunction == PCI_FUNC(rdev->pdev->devfn) && > > - vhdr->VendorID == rdev->pdev->vendor && > > - vhdr->DeviceID == rdev->pdev->device) { > > + !radeon_acpi_vfct_match(rdev, vhdr)) { > > rdev->bios = kmemdup(&vbios->VbiosContent, > > vhdr->ImageLength, > > GFP_KERNEL); >
