Skip to content

Commit 8c932b1

Browse files
frank98753gregkh
authored andcommitted
drm/amdgpu: add kicker fws loading for gfx11/smu13/psp13
commit 8541714 upstream. 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.Min@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit fb5ec21) Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 1c168ec commit 8c932b1

5 files changed

Lines changed: 35 additions & 9 deletions

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3521,8 +3521,12 @@ int psp_init_sos_microcode(struct psp_context *psp, const char *chip_name)
35213521
uint8_t *ucode_array_start_addr;
35223522
int err = 0;
35233523

3524-
err = amdgpu_ucode_request(adev, &adev->psp.sos_fw, AMDGPU_UCODE_REQUIRED,
3525-
"amdgpu/%s_sos.bin", chip_name);
3524+
if (amdgpu_is_kicker_fw(adev))
3525+
err = amdgpu_ucode_request(adev, &adev->psp.sos_fw, AMDGPU_UCODE_REQUIRED,
3526+
"amdgpu/%s_sos_kicker.bin", chip_name);
3527+
else
3528+
err = amdgpu_ucode_request(adev, &adev->psp.sos_fw, AMDGPU_UCODE_REQUIRED,
3529+
"amdgpu/%s_sos.bin", chip_name);
35263530
if (err)
35273531
goto out;
35283532

@@ -3798,8 +3802,12 @@ int psp_init_ta_microcode(struct psp_context *psp, const char *chip_name)
37983802
struct amdgpu_device *adev = psp->adev;
37993803
int err;
38003804

3801-
err = amdgpu_ucode_request(adev, &adev->psp.ta_fw, AMDGPU_UCODE_REQUIRED,
3802-
"amdgpu/%s_ta.bin", chip_name);
3805+
if (amdgpu_is_kicker_fw(adev))
3806+
err = amdgpu_ucode_request(adev, &adev->psp.ta_fw, AMDGPU_UCODE_REQUIRED,
3807+
"amdgpu/%s_ta_kicker.bin", chip_name);
3808+
else
3809+
err = amdgpu_ucode_request(adev, &adev->psp.ta_fw, AMDGPU_UCODE_REQUIRED,
3810+
"amdgpu/%s_ta.bin", chip_name);
38033811
if (err)
38043812
return err;
38053813

drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ MODULE_FIRMWARE("amdgpu/gc_11_0_0_pfp.bin");
8383
MODULE_FIRMWARE("amdgpu/gc_11_0_0_me.bin");
8484
MODULE_FIRMWARE("amdgpu/gc_11_0_0_mec.bin");
8585
MODULE_FIRMWARE("amdgpu/gc_11_0_0_rlc.bin");
86+
MODULE_FIRMWARE("amdgpu/gc_11_0_0_rlc_kicker.bin");
8687
MODULE_FIRMWARE("amdgpu/gc_11_0_0_rlc_1.bin");
8788
MODULE_FIRMWARE("amdgpu/gc_11_0_0_toc.bin");
8889
MODULE_FIRMWARE("amdgpu/gc_11_0_1_pfp.bin");
@@ -744,6 +745,10 @@ static int gfx_v11_0_init_microcode(struct amdgpu_device *adev)
744745
err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
745746
AMDGPU_UCODE_REQUIRED,
746747
"amdgpu/gc_11_0_0_rlc_1.bin");
748+
else if (amdgpu_is_kicker_fw(adev))
749+
err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
750+
AMDGPU_UCODE_REQUIRED,
751+
"amdgpu/%s_rlc_kicker.bin", ucode_prefix);
747752
else
748753
err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
749754
AMDGPU_UCODE_REQUIRED,

drivers/gpu/drm/amd/amdgpu/imu_v11_0.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "gc/gc_11_0_0_sh_mask.h"
3333

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

5354
amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix));
54-
err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, AMDGPU_UCODE_REQUIRED,
55-
"amdgpu/%s_imu.bin", ucode_prefix);
55+
if (amdgpu_is_kicker_fw(adev))
56+
err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, AMDGPU_UCODE_REQUIRED,
57+
"amdgpu/%s_imu_kicker.bin", ucode_prefix);
58+
else
59+
err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, AMDGPU_UCODE_REQUIRED,
60+
"amdgpu/%s_imu.bin", ucode_prefix);
5661
if (err)
5762
goto out;
5863

drivers/gpu/drm/amd/amdgpu/psp_v13_0.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ MODULE_FIRMWARE("amdgpu/psp_13_0_5_ta.bin");
4242
MODULE_FIRMWARE("amdgpu/psp_13_0_8_toc.bin");
4343
MODULE_FIRMWARE("amdgpu/psp_13_0_8_ta.bin");
4444
MODULE_FIRMWARE("amdgpu/psp_13_0_0_sos.bin");
45+
MODULE_FIRMWARE("amdgpu/psp_13_0_0_sos_kicker.bin");
4546
MODULE_FIRMWARE("amdgpu/psp_13_0_0_ta.bin");
47+
MODULE_FIRMWARE("amdgpu/psp_13_0_0_ta_kicker.bin");
4648
MODULE_FIRMWARE("amdgpu/psp_13_0_7_sos.bin");
4749
MODULE_FIRMWARE("amdgpu/psp_13_0_7_ta.bin");
4850
MODULE_FIRMWARE("amdgpu/psp_13_0_10_sos.bin");

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858

5959
MODULE_FIRMWARE("amdgpu/aldebaran_smc.bin");
6060
MODULE_FIRMWARE("amdgpu/smu_13_0_0.bin");
61+
MODULE_FIRMWARE("amdgpu/smu_13_0_0_kicker.bin");
6162
MODULE_FIRMWARE("amdgpu/smu_13_0_7.bin");
6263
MODULE_FIRMWARE("amdgpu/smu_13_0_10.bin");
6364

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

105106
amdgpu_ucode_ip_version_decode(adev, MP1_HWIP, ucode_prefix, sizeof(ucode_prefix));
106-
err = amdgpu_ucode_request(adev, &adev->pm.fw, AMDGPU_UCODE_REQUIRED,
107-
"amdgpu/%s.bin", ucode_prefix);
107+
108+
if (amdgpu_is_kicker_fw(adev))
109+
err = amdgpu_ucode_request(adev, &adev->pm.fw, AMDGPU_UCODE_REQUIRED,
110+
"amdgpu/%s_kicker.bin", ucode_prefix);
111+
else
112+
err = amdgpu_ucode_request(adev, &adev->pm.fw, AMDGPU_UCODE_REQUIRED,
113+
"amdgpu/%s.bin", ucode_prefix);
108114
if (err)
109115
goto out;
110116

0 commit comments

Comments
 (0)