aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c8
-rwxr-xr-xdrivers/gpu/drm/amd/include/cgs_common.h1
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c7
6 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
index 1950c25557de..e6b1bf3dc292 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
@@ -696,6 +696,9 @@ static uint32_t fw_type_convert(struct cgs_device *cgs_device, uint32_t fw_type)
696 case CGS_UCODE_ID_RLC_G: 696 case CGS_UCODE_ID_RLC_G:
697 result = AMDGPU_UCODE_ID_RLC_G; 697 result = AMDGPU_UCODE_ID_RLC_G;
698 break; 698 break;
699 case CGS_UCODE_ID_STORAGE:
700 result = AMDGPU_UCODE_ID_STORAGE;
701 break;
699 default: 702 default:
700 DRM_ERROR("Firmware type not supported\n"); 703 DRM_ERROR("Firmware type not supported\n");
701 } 704 }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
index b7b82a270420..5d3f6ca742a4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
@@ -228,6 +228,9 @@ static int amdgpu_ucode_init_single_fw(struct amdgpu_firmware_info *ucode,
228 ucode->mc_addr = mc_addr; 228 ucode->mc_addr = mc_addr;
229 ucode->kaddr = kptr; 229 ucode->kaddr = kptr;
230 230
231 if (ucode->ucode_id == AMDGPU_UCODE_ID_STORAGE)
232 return 0;
233
231 header = (const struct common_firmware_header *)ucode->fw->data; 234 header = (const struct common_firmware_header *)ucode->fw->data;
232 memcpy(ucode->kaddr, (void *)((uint8_t *)ucode->fw->data + 235 memcpy(ucode->kaddr, (void *)((uint8_t *)ucode->fw->data +
233 le32_to_cpu(header->ucode_array_offset_bytes)), 236 le32_to_cpu(header->ucode_array_offset_bytes)),
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
index e468be4e28fa..a8a4230729f9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
@@ -130,6 +130,7 @@ enum AMDGPU_UCODE_ID {
130 AMDGPU_UCODE_ID_CP_MEC1, 130 AMDGPU_UCODE_ID_CP_MEC1,
131 AMDGPU_UCODE_ID_CP_MEC2, 131 AMDGPU_UCODE_ID_CP_MEC2,
132 AMDGPU_UCODE_ID_RLC_G, 132 AMDGPU_UCODE_ID_RLC_G,
133 AMDGPU_UCODE_ID_STORAGE,
133 AMDGPU_UCODE_ID_MAXIMUM, 134 AMDGPU_UCODE_ID_MAXIMUM,
134}; 135};
135 136
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index bd4d041717bf..45d194a58c57 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -1058,6 +1058,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
1058 adev->firmware.fw_size += 1058 adev->firmware.fw_size +=
1059 ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE); 1059 ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE);
1060 1060
1061 if (amdgpu_sriov_vf(adev)) {
1062 info = &adev->firmware.ucode[AMDGPU_UCODE_ID_STORAGE];
1063 info->ucode_id = AMDGPU_UCODE_ID_STORAGE;
1064 info->fw = adev->gfx.mec_fw;
1065 adev->firmware.fw_size +=
1066 ALIGN(le32_to_cpu(64 * PAGE_SIZE), PAGE_SIZE);
1067 }
1068
1061 if (adev->gfx.mec2_fw) { 1069 if (adev->gfx.mec2_fw) {
1062 info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC2]; 1070 info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC2];
1063 info->ucode_id = AMDGPU_UCODE_ID_CP_MEC2; 1071 info->ucode_id = AMDGPU_UCODE_ID_CP_MEC2;
diff --git a/drivers/gpu/drm/amd/include/cgs_common.h b/drivers/gpu/drm/amd/include/cgs_common.h
index 9695c2ebd92a..e4a1697ec1d3 100755
--- a/drivers/gpu/drm/amd/include/cgs_common.h
+++ b/drivers/gpu/drm/amd/include/cgs_common.h
@@ -106,6 +106,7 @@ enum cgs_ucode_id {
106 CGS_UCODE_ID_CP_MEC_JT2, 106 CGS_UCODE_ID_CP_MEC_JT2,
107 CGS_UCODE_ID_GMCON_RENG, 107 CGS_UCODE_ID_GMCON_RENG,
108 CGS_UCODE_ID_RLC_G, 108 CGS_UCODE_ID_RLC_G,
109 CGS_UCODE_ID_STORAGE,
109 CGS_UCODE_ID_MAXIMUM, 110 CGS_UCODE_ID_MAXIMUM,
110}; 111};
111 112
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c
index 6af744f42ec9..6df0d6edfdd1 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c
@@ -278,6 +278,9 @@ enum cgs_ucode_id smu7_convert_fw_type_to_cgs(uint32_t fw_type)
278 case UCODE_ID_RLC_G: 278 case UCODE_ID_RLC_G:
279 result = CGS_UCODE_ID_RLC_G; 279 result = CGS_UCODE_ID_RLC_G;
280 break; 280 break;
281 case UCODE_ID_MEC_STORAGE:
282 result = CGS_UCODE_ID_STORAGE;
283 break;
281 default: 284 default:
282 break; 285 break;
283 } 286 }
@@ -452,6 +455,10 @@ int smu7_request_smu_load_fw(struct pp_smumgr *smumgr)
452 PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(smumgr, 455 PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(smumgr,
453 UCODE_ID_SDMA1, &toc->entry[toc->num_entries++]), 456 UCODE_ID_SDMA1, &toc->entry[toc->num_entries++]),
454 "Failed to Get Firmware Entry.", return -EINVAL); 457 "Failed to Get Firmware Entry.", return -EINVAL);
458 if (cgs_is_virtualization_enabled(smumgr->device))
459 PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(smumgr,
460 UCODE_ID_MEC_STORAGE, &toc->entry[toc->num_entries++]),
461 "Failed to Get Firmware Entry.", return -EINVAL);
455 462
456 smu7_send_msg_to_smc_with_parameter(smumgr, PPSMC_MSG_DRV_DRAM_ADDR_HI, smu_data->header_buffer.mc_addr_high); 463 smu7_send_msg_to_smc_with_parameter(smumgr, PPSMC_MSG_DRV_DRAM_ADDR_HI, smu_data->header_buffer.mc_addr_high);
457 smu7_send_msg_to_smc_with_parameter(smumgr, PPSMC_MSG_DRV_DRAM_ADDR_LO, smu_data->header_buffer.mc_addr_low); 464 smu7_send_msg_to_smc_with_parameter(smumgr, PPSMC_MSG_DRV_DRAM_ADDR_LO, smu_data->header_buffer.mc_addr_low);