RE: [PATCH 2/2] drm/amdgpu: Match VFCT using initial PCI bus number

From: Deucher, Alexander

Date: Tue Oct 20 2026 - 09:27:38 EST


Public

> -----Original Message-----
> From: Limonciello, Mario <Mario.Limonciello@xxxxxxx>
> Sent: Monday, October 19, 2026 9:45 PM
> To: Bjorn Helgaas <helgaas@xxxxxxxxxx>; Deucher, Alexander
> <Alexander.Deucher@xxxxxxx>
> Cc: Oz Tiram <oz@xxxxxxxxxxxxxxxxxx>; linux-pci@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; amd-gfx@xxxxxxxxxxxxxxxxxxxxx; dri-
> devel@xxxxxxxxxxxxxxxxxxxxx; Limonciello, Mario
> <Mario.Limonciello@xxxxxxx>; Reza Nikzad Chaleshori
> <rezanikzadch@xxxxxxxxx>
> Subject: [PATCH 2/2] drm/amdgpu: Match VFCT using initial PCI bus number
>
> VFCT records the PCI bus number from BIOS POST. The current bus number
> can change after PCI core renumbers the bus, while accepting a mismatch
> based only on device identity can select the wrong VFCT image when matching
> devices are present. Compare against the bus number captured when the PCI
> device was discovered.
>
> Reported-by: Reza Nikzad Chaleshori <rezanikzadch@xxxxxxxxx>
> Closes: https://lore.kernel.org/amd-gfx/20261014080523.186533-1-
> rezanikzadch@xxxxxxxxx/
> Fixes: 11c141672045f ("drm/amdgpu: Fix VFCT bus number matching with
> soft filter")
> Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>

Radeon needs a similar fix.

Alex

> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 17 +++--------------
> 1 file changed, 3 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
> index 08ed1eb695586..2b375e6b39d5f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
> @@ -386,10 +386,8 @@ static bool amdgpu_read_disabled_bios(struct
> amdgpu_device *adev)
> * 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.
> + * value. Match using the bus number captured when the device was
> + * discovered, before any bus renumbering.
> *
> * Returns: 0 on match, -ENODEV on no match
> */
> @@ -405,16 +403,7 @@ static int amdgpu_acpi_vfct_match(struct
> amdgpu_device *adev,
> vhdr->PCIFunction != PCI_FUNC(adev->pdev->devfn))
> return -ENODEV;
>
> - /* Exact bus number match - preferred */
> - if (vhdr->PCIBus == adev->pdev->bus->number)
> - return 0;
> -
> - /* Bus mismatch but device identity matches (PCI renumbering case)
> */
> - dev_notice(adev->dev,
> - "VFCT bus number mismatch: table %u != runtime %u,
> matching by device identity (vendor 0x%04x device 0x%04x)\n",
> - vhdr->PCIBus, adev->pdev->bus->number,
> - adev->pdev->vendor, adev->pdev->device);
> - return 0;
> + return vhdr->PCIBus == adev->pdev->initial_bus_number ? 0 : -
> ENODEV;
> }
>
> static bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev)
>
> --
> 2.43.0