From: Oz Tiram <oz@shift-computing.de>
To: amd-gfx@lists.freedesktop.org
Cc: "Oz Tiram" <oz@shift-computing.de>,
"Alex Deucher" <alexander.deucher@amd.com>,
"Christian König" <christian.koenig@amd.com>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
dri-devel@lists.freedesktop.org (open list:DRM DRIVERS),
linux-kernel@vger.kernel.org (open list)
Subject: [PATCH] drm/amd/amdgpu: add firmware file fallback for APU VBIOS discovery
Date: Sun, 21 Jun 2026 17:32:10 +0000 [thread overview]
Message-ID: <20260621173211.28443-1-oz@shift-computing.de> (raw)
APUs (e.g. AMD Radeon 780M / HawkPoint, PCI 1002:1900) have no
dedicated VBIOS ROM chip. amdgpu_get_bios_apu() attempts four paths
before giving up:
1. ACPI VFCT table
2. VRAM BAR read
3. ROM BAR read
4. platform BIOS
On some systems all four fail:
- The VFCT table is absent or contains only the discrete GPU entry
(e.g. when a custom ACPI override is present for the dGPU only).
- The VRAM BAR is unmapped at probe time.
- The ROM BAR is zero (PCI firmware did not assign it; observed even
with pci=realloc,assign-busses).
- No platform BIOS mapping exists.
The driver then prints "Unable to locate a BIOS ROM" and refuses to
bind, leaving the APU completely unusable under Linux even though the
hardware is functional.
Add a fifth fallback: request a firmware file named
"amdgpu/<vendor>_<device>.bin" (e.g. "amdgpu/1002_1900.bin") via
request_firmware(). This allows a VBIOS image extracted from the
running hardware to be shipped as a firmware blob in /lib/firmware/ and
makes the binding succeed without any change to the ACPI tables.
The fallback is only reached if all existing paths have already failed,
so there is no regression risk for boards where VFCT or ROM BAR work.
Signed-off-by: Oz Tiram <oz@shift-computing.de>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
index aa039e148a5e..491f88f495a6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
@@ -26,6 +26,7 @@
* Jerome Glisse
*/
+#include <linux/firmware.h>
#include "amdgpu.h"
#include "atom.h"
@@ -457,6 +458,24 @@ static bool amdgpu_get_bios_apu(struct amdgpu_device *adev)
goto success;
}
+ {
+ const struct firmware *fw;
+ char fw_name[32];
+
+ snprintf(fw_name, sizeof(fw_name), "amdgpu/%04x_%04x.bin",
+ adev->pdev->vendor, adev->pdev->device);
+ if (request_firmware(&fw, fw_name, adev->dev) == 0) {
+ adev->bios = kmemdup(fw->data, fw->size, GFP_KERNEL);
+ adev->bios_size = fw->size;
+ release_firmware(fw);
+ if (adev->bios) {
+ dev_info(adev->dev, "Fetched VBIOS from firmware file %s\n",
+ fw_name);
+ goto success;
+ }
+ }
+ }
+
dev_err(adev->dev, "Unable to locate a BIOS ROM\n");
return false;
--
2.53.0
next reply other threads:[~2026-06-21 17:39 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-21 17:32 Oz Tiram [this message]
2026-06-21 18:01 ` [PATCH] drm/amd/amdgpu: add firmware file fallback for APU VBIOS discovery Oz Tiram
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=20260621173211.28443-1-oz@shift-computing.de \
--to=oz@shift-computing.de \
--cc=airlied@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=simona@ffwll.ch \
/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