[AMD Official Use Only - AMD Internal Distribution Only]

Series is

Reviewed-by: Hawking Zhang <hawking.zh...@amd.com>

Regards,
Hawking
-----Original Message-----
From: Min, Frank <frank....@amd.com>
Sent: Friday, June 6, 2025 21:48
To: Zhang, Hawking <hawking.zh...@amd.com>; Deucher, Alexander 
<alexander.deuc...@amd.com>; Gao, Likun <likun....@amd.com>; Gui, Jack 
<jack....@amd.com>; amd-gfx@lists.freedesktop.org; brahma_sw_dev 
<brahma_sw_...@amd.com>
Subject: [PATCH 2/2] drm/amdgpu: add kicker fws loading for gfx11/smu13/psp13

[AMD Official Use Only - AMD Internal Distribution Only]

From: Frank Min <frank....@amd.com>

1. Add kicker firmwares loading for gfx11/smu13/psp13 2. Register additional 
MODULE_FIRMWARE entries for kicker fws
   - gc_11_0_0_rlc_kicker.bin
   - gc_11_0_0_imu_kicker.bin
   - psp_13_0_0_sos_kicker.bin
   - psp_13_0_0_ta_kicker.bin
   - smu_13_0_0_kicker.bin

Signed-off-by: Frank Min <frank....@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c        | 16 ++++++++++++----
 drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c         |  5 +++++
 drivers/gpu/drm/amd/amdgpu/imu_v11_0.c         |  9 +++++++--
 drivers/gpu/drm/amd/amdgpu/psp_v13_0.c         |  2 ++
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 12 +++++++++---
 5 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index 9588278083cf..6068b95dabff 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -3522,8 +3522,12 @@ int psp_init_sos_microcode(struct psp_context *psp, 
const char *chip_name)
        uint8_t *ucode_array_start_addr;
        int err = 0;

-       err = amdgpu_ucode_request(adev, &adev->psp.sos_fw, 
AMDGPU_UCODE_REQUIRED,
-                                  "amdgpu/%s_sos.bin", chip_name);
+       if(amdgpu_is_kicker_fw(adev))
+               err = amdgpu_ucode_request(adev, &adev->psp.sos_fw, 
AMDGPU_UCODE_REQUIRED,
+                                          "amdgpu/%s_sos_kicker.bin", 
chip_name);
+       else
+               err = amdgpu_ucode_request(adev, &adev->psp.sos_fw, 
AMDGPU_UCODE_REQUIRED,
+                                          "amdgpu/%s_sos.bin",
+ chip_name);
        if (err)
                goto out;

@@ -3799,8 +3803,12 @@ int psp_init_ta_microcode(struct psp_context *psp, const 
char *chip_name)
        struct amdgpu_device *adev = psp->adev;
        int err;

-       err = amdgpu_ucode_request(adev, &adev->psp.ta_fw, 
AMDGPU_UCODE_REQUIRED,
-                                  "amdgpu/%s_ta.bin", chip_name);
+       if(amdgpu_is_kicker_fw(adev))
+               err = amdgpu_ucode_request(adev, &adev->psp.ta_fw, 
AMDGPU_UCODE_REQUIRED,
+                                          "amdgpu/%s_ta_kicker.bin", 
chip_name);
+       else
+               err = amdgpu_ucode_request(adev, &adev->psp.ta_fw, 
AMDGPU_UCODE_REQUIRED,
+                                          "amdgpu/%s_ta.bin",
+ chip_name);
        if (err)
                return err;

diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c 
b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
index 86309c990455..d7b62048cd0b 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
@@ -85,6 +85,7 @@ MODULE_FIRMWARE("amdgpu/gc_11_0_0_pfp.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_0_me.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_0_mec.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_0_rlc.bin");
+MODULE_FIRMWARE("amdgpu/gc_11_0_0_rlc_kicker.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_0_rlc_1.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_0_toc.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_1_pfp.bin");
@@ -759,6 +760,10 @@ static int gfx_v11_0_init_microcode(struct amdgpu_device 
*adev)
                        err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
                                                   AMDGPU_UCODE_REQUIRED,
                                                   
"amdgpu/gc_11_0_0_rlc_1.bin");
+               else if (amdgpu_is_kicker_fw(adev))
+                       err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+                                                  AMDGPU_UCODE_REQUIRED,
+
+ "amdgpu/%s_rlc_kicker.bin", ucode_prefix);
                else
                        err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
                                                   AMDGPU_UCODE_REQUIRED, diff 
--git a/drivers/gpu/drm/amd/amdgpu/imu_v11_0.c 
b/drivers/gpu/drm/amd/amdgpu/imu_v11_0.c
index cfa91d709d49..cc626036ed9c 100644
--- a/drivers/gpu/drm/amd/amdgpu/imu_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/imu_v11_0.c
@@ -32,6 +32,7 @@
 #include "gc/gc_11_0_0_sh_mask.h"

 MODULE_FIRMWARE("amdgpu/gc_11_0_0_imu.bin");
+MODULE_FIRMWARE("amdgpu/gc_11_0_0_imu_kicker.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_1_imu.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_2_imu.bin");
 MODULE_FIRMWARE("amdgpu/gc_11_0_3_imu.bin");
@@ -51,8 +52,12 @@ static int imu_v11_0_init_microcode(struct amdgpu_device 
*adev)
        DRM_DEBUG("\n");

        amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, 
sizeof(ucode_prefix));
-       err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, 
AMDGPU_UCODE_REQUIRED,
-                                  "amdgpu/%s_imu.bin", ucode_prefix);
+       if (amdgpu_is_kicker_fw(adev))
+               err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, 
AMDGPU_UCODE_REQUIRED,
+                                          "amdgpu/%s_imu_kicker.bin", 
ucode_prefix);
+       else
+               err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, 
AMDGPU_UCODE_REQUIRED,
+                                          "amdgpu/%s_imu.bin",
+ ucode_prefix);
        if (err)
                goto out;

diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c 
b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c
index df612fd9cc50..ead616c11705 100644
--- a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c
@@ -42,7 +42,9 @@ MODULE_FIRMWARE("amdgpu/psp_13_0_5_ta.bin");
 MODULE_FIRMWARE("amdgpu/psp_13_0_8_toc.bin");
 MODULE_FIRMWARE("amdgpu/psp_13_0_8_ta.bin");
 MODULE_FIRMWARE("amdgpu/psp_13_0_0_sos.bin");
+MODULE_FIRMWARE("amdgpu/psp_13_0_0_sos_kicker.bin");
 MODULE_FIRMWARE("amdgpu/psp_13_0_0_ta.bin");
+MODULE_FIRMWARE("amdgpu/psp_13_0_0_ta_kicker.bin");
 MODULE_FIRMWARE("amdgpu/psp_13_0_7_sos.bin");
 MODULE_FIRMWARE("amdgpu/psp_13_0_7_ta.bin");
 MODULE_FIRMWARE("amdgpu/psp_13_0_10_sos.bin");
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
index 3b7a011b4691..58ec53597c18 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
@@ -58,6 +58,7 @@

 MODULE_FIRMWARE("amdgpu/aldebaran_smc.bin");
 MODULE_FIRMWARE("amdgpu/smu_13_0_0.bin");
+MODULE_FIRMWARE("amdgpu/smu_13_0_0_kicker.bin");
 MODULE_FIRMWARE("amdgpu/smu_13_0_7.bin");
 MODULE_FIRMWARE("amdgpu/smu_13_0_10.bin");

@@ -92,7 +93,7 @@ const int pmfw_decoded_link_width[7] = {0, 1, 2, 4, 8, 12, 
16};  int smu_v13_0_init_microcode(struct smu_context *smu)  {
        struct amdgpu_device *adev = smu->adev;
-       char ucode_prefix[15];
+       char ucode_prefix[30];
        int err = 0;
        const struct smc_firmware_header_v1_0 *hdr;
        const struct common_firmware_header *header; @@ -103,8 +104,13 @@ int 
smu_v13_0_init_microcode(struct smu_context *smu)
                return 0;

        amdgpu_ucode_ip_version_decode(adev, MP1_HWIP, ucode_prefix, 
sizeof(ucode_prefix));
-       err = amdgpu_ucode_request(adev, &adev->pm.fw, AMDGPU_UCODE_REQUIRED,
-                                  "amdgpu/%s.bin", ucode_prefix);
+
+       if(amdgpu_is_kicker_fw(adev))
+               err = amdgpu_ucode_request(adev, &adev->pm.fw, 
AMDGPU_UCODE_REQUIRED,
+                                          "amdgpu/%s_kicker.bin", 
ucode_prefix);
+       else
+               err = amdgpu_ucode_request(adev, &adev->pm.fw, 
AMDGPU_UCODE_REQUIRED,
+                                          "amdgpu/%s.bin",
+ ucode_prefix);
        if (err)
                goto out;

--
2.43.0


Reply via email to