Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: add kicker fws loading for gfx12/smu14/psp14

1. Add kicker firmwares loading for gfx12/smu14/psp14
2. Register additional MODULE_FIRMWARE entries for kicker fws
- gc_12_0_1_rlc_kicker.bin
- gc_12_0_1_imu_kicker.bin
- psp_14_0_3_sos_kicker.bin
- psp_14_0_3_ta_kicker.bin
- smu_14_0_3_kicker.bin

Signed-off-by: Frank Min <Frank.Min@amd.com>
Reviewed-by: Gui Chengming <Jack.Gui@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org

authored by

Frank Min and committed by
Alex Deucher
0395cde0 8e0d1edb

+29 -10
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
··· 32 32 33 33 static const struct kicker_device kicker_device_list[] = { 34 34 {0x744B, 0x00}, 35 + {0x7551, 0xC8} 35 36 }; 36 37 37 38 static void amdgpu_ucode_print_common_hdr(const struct common_firmware_header *hdr)
+10 -4
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
··· 79 79 MODULE_FIRMWARE("amdgpu/gc_12_0_1_me.bin"); 80 80 MODULE_FIRMWARE("amdgpu/gc_12_0_1_mec.bin"); 81 81 MODULE_FIRMWARE("amdgpu/gc_12_0_1_rlc.bin"); 82 + MODULE_FIRMWARE("amdgpu/gc_12_0_1_rlc_kicker.bin"); 82 83 MODULE_FIRMWARE("amdgpu/gc_12_0_1_toc.bin"); 83 84 84 85 static const struct amdgpu_hwip_reg_entry gc_reg_list_12_0[] = { ··· 587 586 588 587 static int gfx_v12_0_init_microcode(struct amdgpu_device *adev) 589 588 { 590 - char ucode_prefix[15]; 589 + char ucode_prefix[30]; 591 590 int err; 592 591 const struct rlc_firmware_header_v2_0 *rlc_hdr; 593 592 uint16_t version_major; ··· 614 613 amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_RS64_ME_P0_STACK); 615 614 616 615 if (!amdgpu_sriov_vf(adev)) { 617 - err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, 618 - AMDGPU_UCODE_REQUIRED, 619 - "amdgpu/%s_rlc.bin", ucode_prefix); 616 + if (amdgpu_is_kicker_fw(adev)) 617 + err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, 618 + AMDGPU_UCODE_REQUIRED, 619 + "amdgpu/%s_rlc_kicker.bin", ucode_prefix); 620 + else 621 + err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, 622 + AMDGPU_UCODE_REQUIRED, 623 + "amdgpu/%s_rlc.bin", ucode_prefix); 620 624 if (err) 621 625 goto out; 622 626 rlc_hdr = (const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data;
+8 -3
drivers/gpu/drm/amd/amdgpu/imu_v12_0.c
··· 34 34 35 35 MODULE_FIRMWARE("amdgpu/gc_12_0_0_imu.bin"); 36 36 MODULE_FIRMWARE("amdgpu/gc_12_0_1_imu.bin"); 37 + MODULE_FIRMWARE("amdgpu/gc_12_0_1_imu_kicker.bin"); 37 38 38 39 #define TRANSFER_RAM_MASK 0x001c0000 39 40 40 41 static int imu_v12_0_init_microcode(struct amdgpu_device *adev) 41 42 { 42 - char ucode_prefix[15]; 43 + char ucode_prefix[30]; 43 44 int err; 44 45 const struct imu_firmware_header_v1_0 *imu_hdr; 45 46 struct amdgpu_firmware_info *info = NULL; ··· 48 47 DRM_DEBUG("\n"); 49 48 50 49 amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix)); 51 - err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, AMDGPU_UCODE_REQUIRED, 52 - "amdgpu/%s_imu.bin", ucode_prefix); 50 + if (amdgpu_is_kicker_fw(adev)) 51 + err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, AMDGPU_UCODE_REQUIRED, 52 + "amdgpu/%s_imu_kicker.bin", ucode_prefix); 53 + else 54 + err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, AMDGPU_UCODE_REQUIRED, 55 + "amdgpu/%s_imu.bin", ucode_prefix); 53 56 if (err) 54 57 goto out; 55 58
+2
drivers/gpu/drm/amd/amdgpu/psp_v14_0.c
··· 34 34 MODULE_FIRMWARE("amdgpu/psp_14_0_2_sos.bin"); 35 35 MODULE_FIRMWARE("amdgpu/psp_14_0_2_ta.bin"); 36 36 MODULE_FIRMWARE("amdgpu/psp_14_0_3_sos.bin"); 37 + MODULE_FIRMWARE("amdgpu/psp_14_0_3_sos_kicker.bin"); 37 38 MODULE_FIRMWARE("amdgpu/psp_14_0_3_ta.bin"); 39 + MODULE_FIRMWARE("amdgpu/psp_14_0_3_ta_kicker.bin"); 38 40 MODULE_FIRMWARE("amdgpu/psp_14_0_5_toc.bin"); 39 41 MODULE_FIRMWARE("amdgpu/psp_14_0_5_ta.bin"); 40 42
+8 -3
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
··· 62 62 63 63 MODULE_FIRMWARE("amdgpu/smu_14_0_2.bin"); 64 64 MODULE_FIRMWARE("amdgpu/smu_14_0_3.bin"); 65 + MODULE_FIRMWARE("amdgpu/smu_14_0_3_kicker.bin"); 65 66 66 67 #define ENABLE_IMU_ARG_GFXOFF_ENABLE 1 67 68 68 69 int smu_v14_0_init_microcode(struct smu_context *smu) 69 70 { 70 71 struct amdgpu_device *adev = smu->adev; 71 - char ucode_prefix[15]; 72 + char ucode_prefix[30]; 72 73 int err = 0; 73 74 const struct smc_firmware_header_v1_0 *hdr; 74 75 const struct common_firmware_header *header; ··· 80 79 return 0; 81 80 82 81 amdgpu_ucode_ip_version_decode(adev, MP1_HWIP, ucode_prefix, sizeof(ucode_prefix)); 83 - err = amdgpu_ucode_request(adev, &adev->pm.fw, AMDGPU_UCODE_REQUIRED, 84 - "amdgpu/%s.bin", ucode_prefix); 82 + if (amdgpu_is_kicker_fw(adev)) 83 + err = amdgpu_ucode_request(adev, &adev->pm.fw, AMDGPU_UCODE_REQUIRED, 84 + "amdgpu/%s_kicker.bin", ucode_prefix); 85 + else 86 + err = amdgpu_ucode_request(adev, &adev->pm.fw, AMDGPU_UCODE_REQUIRED, 87 + "amdgpu/%s.bin", ucode_prefix); 85 88 if (err) 86 89 goto out; 87 90