]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amdgpu: Prefer shadow rom when available
authorLijo Lazar <lijo.lazar@amd.com>
Tue, 25 Mar 2025 06:12:08 +0000 (11:42 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 26 Mar 2025 21:46:33 +0000 (17:46 -0400)
Fetch VBIOS from shadow ROM when available before trying other methods
like EFI method.

Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Fixes: 9c081c11c621 ("drm/amdgpu: Reorder to read EFI exported ROM first")
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4066
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c

index 75fcc521c171c152208390b3c4a9068bb6d6fe44..00e96419fcdad8652af667ae033903c833ddca75 100644 (file)
@@ -447,6 +447,13 @@ success:
        return true;
 }
 
+static bool amdgpu_prefer_rom_resource(struct amdgpu_device *adev)
+{
+       struct resource *res = &adev->pdev->resource[PCI_ROM_RESOURCE];
+
+       return (res->flags & IORESOURCE_ROM_SHADOW);
+}
+
 static bool amdgpu_get_bios_dgpu(struct amdgpu_device *adev)
 {
        if (amdgpu_atrm_get_bios(adev)) {
@@ -465,14 +472,27 @@ static bool amdgpu_get_bios_dgpu(struct amdgpu_device *adev)
                goto success;
        }
 
-       if (amdgpu_read_platform_bios(adev)) {
-               dev_info(adev->dev, "Fetched VBIOS from platform\n");
-               goto success;
-       }
+       if (amdgpu_prefer_rom_resource(adev)) {
+               if (amdgpu_read_bios(adev)) {
+                       dev_info(adev->dev, "Fetched VBIOS from ROM BAR\n");
+                       goto success;
+               }
 
-       if (amdgpu_read_bios(adev)) {
-               dev_info(adev->dev, "Fetched VBIOS from ROM BAR\n");
-               goto success;
+               if (amdgpu_read_platform_bios(adev)) {
+                       dev_info(adev->dev, "Fetched VBIOS from platform\n");
+                       goto success;
+               }
+
+       } else {
+               if (amdgpu_read_platform_bios(adev)) {
+                       dev_info(adev->dev, "Fetched VBIOS from platform\n");
+                       goto success;
+               }
+
+               if (amdgpu_read_bios(adev)) {
+                       dev_info(adev->dev, "Fetched VBIOS from ROM BAR\n");
+                       goto success;
+               }
        }
 
        if (amdgpu_read_bios_from_rom(adev)) {