drm/amd/amdgpu: introduce gc_*_mes_2.bin v2
authorjsg <jsg@openbsd.org>
Thu, 15 Jun 2023 03:18:49 +0000 (03:18 +0000)
committerjsg <jsg@openbsd.org>
Thu, 15 Jun 2023 03:18:49 +0000 (03:18 +0000)
From Jack Xiao
616843d5a11bdcad5d65e230a2e372b5701108be in linux-6.1.y/6.1.30
97998b893c3000b27a780a4982e16cfc8f4ea555 in mainline linux

sys/dev/pci/drm/amd/amdgpu/amdgpu_mes.c
sys/dev/pci/drm/amd/amdgpu/mes_v11_0.c

index c3a3077..9bbd7cd 100644 (file)
@@ -1432,13 +1432,31 @@ int amdgpu_mes_init_microcode(struct amdgpu_device *adev, int pipe)
        struct amdgpu_firmware_info *info;
        char ucode_prefix[30];
        char fw_name[40];
+       bool need_retry = false;
        int r;
 
-       amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix));
-       snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes%s.bin",
-               ucode_prefix,
-               pipe == AMDGPU_MES_SCHED_PIPE ? "" : "1");
+       amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix,
+                                      sizeof(ucode_prefix));
+       if (adev->ip_versions[GC_HWIP][0] >= IP_VERSION(11, 0, 0)) {
+               snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes%s.bin",
+                        ucode_prefix,
+                        pipe == AMDGPU_MES_SCHED_PIPE ? "_2" : "1");
+               need_retry = true;
+       } else {
+               snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes%s.bin",
+                        ucode_prefix,
+                        pipe == AMDGPU_MES_SCHED_PIPE ? "" : "1");
+       }
+
        r = amdgpu_ucode_request(adev, &adev->mes.fw[pipe], fw_name);
+       if (r && need_retry && pipe == AMDGPU_MES_SCHED_PIPE) {
+               snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes.bin",
+                        ucode_prefix);
+               DRM_INFO("try to fall back to %s\n", fw_name);
+               r = amdgpu_ucode_request(adev, &adev->mes.fw[pipe],
+                                        fw_name);
+       }
+
        if (r)
                goto out;
 
index 8ae55d8..149006b 100644 (file)
 #include "v11_structs.h"
 #include "mes_v11_api_def.h"
 
-MODULE_FIRMWARE("amdgpu/gc_11_0_0_mes.bin");
+MODULE_FIRMWARE("amdgpu/gc_11_0_0_mes_2.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_0_mes1.bin");
-MODULE_FIRMWARE("amdgpu/gc_11_0_1_mes.bin");
+MODULE_FIRMWARE("amdgpu/gc_11_0_1_mes_2.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_1_mes1.bin");
-MODULE_FIRMWARE("amdgpu/gc_11_0_2_mes.bin");
+MODULE_FIRMWARE("amdgpu/gc_11_0_2_mes_2.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_2_mes1.bin");
-MODULE_FIRMWARE("amdgpu/gc_11_0_3_mes.bin");
+MODULE_FIRMWARE("amdgpu/gc_11_0_3_mes_2.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_3_mes1.bin");
-MODULE_FIRMWARE("amdgpu/gc_11_0_4_mes.bin");
+MODULE_FIRMWARE("amdgpu/gc_11_0_4_mes_2.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_4_mes1.bin");
 
 static int mes_v11_0_hw_fini(void *handle);