From: Mario Limonciello <mario.limonciello@amd.com>
To: "Bjorn Helgaas" <helgaas@kernel.org>,
"Alex Deucher" <alexander.deucher@amd.com>,
"Christian König" <christian.koenig@amd.com>
Cc: Oz Tiram <oz@shift-computing.de>, <linux-pci@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <amd-gfx@lists.freedesktop.org>,
<dri-devel@lists.freedesktop.org>,
Mario Limonciello <mario.limonciello@amd.com>,
Reza Nikzad Chaleshori <rezanikzadch@gmail.com>
Subject: [PATCH v7 0/3] Fix VFCT matching after PCI bus renumbering
Date: Thu, 12 Nov 2026 15:54:52 -0600 [thread overview]
Message-ID: <20261112-vfct-regression-v7-0-69b1e0cf45c2@amd.com> (raw)
amdgpu and radeon pick the VFCT image for a GPU by comparing the PCI bus
number recorded by the BIOS at POST with the device's bus number. When
the kernel renumbers buses (e.g. pci=realloc), the runtime number no
longer matches the one in VFCT.
commit 11c141672045f ("drm/amdgpu: Fix VFCT bus number matching with soft
filter") and its radeon counterpart worked around this by accepting an
entry whenever everything but the bus number matched. That picks the
wrong image when a system has two identical GPUs.
Instead, have the PCI core remember the secondary bus number the
firmware assigned to each bridge, and make amdgpu and radeon match the
VFCT bus number against it again, using the bridge above the GPU. The
value is captured once, when the bridge windows are first read, so
renumbering and later rescans don't overwrite it.
Patch 1 adds the cached firmware secondary bus number to struct pci_dev.
Patches 2 and 3 convert amdgpu and radeon to use it and drop the soft
filter.
Link: https://lore.kernel.org/linux-pci/20261015124843.203905-1-mario.limonciello@amd.com/
Link: https://lore.kernel.org/amd-gfx/20261019194106.2796150-1-alexander.deucher@amd.com/
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
Changes in v7:
- Reword the cover letter and the PCI patch to describe the current design:
the firmware secondary bus number is cached on the bridge pci_dev when its
bridge windows are first read, and amdgpu/radeon match VFCT against it.
- No code changes.
- Link to v6: https://patch.msgid.link/20261111-vfct-regression-v6-0-393797bbb6e3@amd.com
Changes in v6:
- Capture the firmware secondary bus number when reading bridge windows and
ignore unconfigured values so rescans cannot replace it with runtime data
(Sashiko).
- No change needed in the VFCT consumers; they continue to read the cached
value from the upstream bridge.
- Link to v5: https://patch.msgid.link/20261110-vfct-regression-v5-0-f49fae981bf3@amd.com
Changes in v5:
- Record the firmware secondary bus number only on the bridge struct pci_dev,
guard it with a validity bit, and keep it across rescans (Bjorn, Lijo).
- Drop pci_bus::number_initial and have amdgpu/radeon read the saved bridge
number when matching VFCT entries.
Changes in v4:
- Retain secondary bus bus number for a bridge across rescans, and the child bus is initialized
from it during allocation, before registration callbacks run. (Sashiko)
- Rename variable to clarify it's for bridges (Lijo)
- Link to v3: https://patch.msgid.link/20261026-vfct-regression-v3-0-fe9586ed6978@amd.com
Changes in v3:
- Preserve the firmware bus number across bridge renumbering, capturing the
secondary bus number before pci_scan_bridge_extend() clears it.
- Adjust member name in all patches
- Add tags
- Link to v2: https://patch.msgid.link/20261020-vfct-regression-v2-0-d2394d11450a@amd.com
Changes in v2:
- pci_alloc_dev(NULL) remains safe.
- For buses behind a reassigned bridge, the PCI core now saves the firmware secondary bus
number before clearing the bridge configuration and carries it into the newly allocated bus.
Devices discovered there inherit that original number.
- Add changes for radeon too.
- Link to v1: https://patch.msgid.link/20261019-vfct-regression-v1-0-5a63ddd378dd@amd.com
---
Mario Limonciello (3):
PCI: Cache bridge firmware secondary bus number
drm/amdgpu: Match VFCT using initial PCI bus number
drm/radeon: Match VFCT using initial PCI bus number
drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 23 ++++++++++-------------
drivers/gpu/drm/radeon/radeon_bios.c | 25 +++++++++++--------------
drivers/pci/probe.c | 16 ++++++++++++++--
include/linux/pci.h | 4 ++++
4 files changed, 39 insertions(+), 29 deletions(-)
---
base-commit: c03c1a14507dfaf8b856c2608f9ac216021fc222
change-id: 20261019-vfct-regression-2142fc52852a
Best regards,
--
Mario Limonciello <mario.limonciello@amd.com>
next reply other threads:[~2026-11-12 23:42 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-12 21:54 Mario Limonciello [this message]
2026-11-12 21:54 ` [PATCH v7 1/3] PCI: Cache bridge firmware secondary bus number Mario Limonciello
2026-11-12 21:54 ` [PATCH v7 2/3] drm/amdgpu: Match VFCT using initial PCI " Mario Limonciello
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261112-vfct-regression-v7-0-69b1e0cf45c2@amd.com \
--to=mario.limonciello@amd.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=helgaas@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=oz@shift-computing.de \
--cc=rezanikzadch@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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®