Public > -----Original Message----- > From: Limonciello, Mario <[email protected]> > Sent: Monday, October 19, 2026 9:45 PM > To: Bjorn Helgaas <[email protected]>; Deucher, Alexander > <[email protected]> > Cc: Oz Tiram <[email protected]>; [email protected]; linux- > [email protected]; [email protected]; dri- > [email protected]; Limonciello, Mario > <[email protected]>; Reza Nikzad Chaleshori > <[email protected]> > 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 <[email protected]> > Closes: https://lore.kernel.org/amd-gfx/20261014080523.186533-1- > [email protected]/ > Fixes: 11c141672045f ("drm/amdgpu: Fix VFCT bus number matching with > soft filter") > Signed-off-by: Mario Limonciello <[email protected]>
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
