drm/amd/pp: Setup SoftRegsStart before request smu load fw
authorRex Zhu <Rex.Zhu@amd.com>
Sat, 29 Sep 2018 06:32:47 +0000 (14:32 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 9 Oct 2018 22:05:47 +0000 (17:05 -0500)
need to know SoftRegsStart value to visit the register
UcodeLoadStatus to check fw loading state.

Reviewed-by: Evan Quan <evan.quan@amd.com>
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/smumgr/iceland_smumgr.c
drivers/gpu/drm/amd/powerplay/smumgr/tonga_smumgr.c

index c712d93710a336cac075734a44752bf491873f85..374aa4a5f5377ccbdb942b9a206da95667b7fb48 100644 (file)
@@ -232,6 +232,7 @@ static int iceland_request_smu_load_specific_fw(struct pp_hwmgr *hwmgr,
 
 static int iceland_start_smu(struct pp_hwmgr *hwmgr)
 {
+       struct iceland_smumgr *priv = hwmgr->smu_backend;
        int result;
 
        if (!smu7_is_smc_ram_running(hwmgr)) {
@@ -242,6 +243,14 @@ static int iceland_start_smu(struct pp_hwmgr *hwmgr)
                iceland_smu_start_smc(hwmgr);
        }
 
+       /* Setup SoftRegsStart here to visit the register UcodeLoadStatus
+        * to check fw loading state
+        */
+       smu7_read_smc_sram_dword(hwmgr,
+                       SMU71_FIRMWARE_HEADER_LOCATION +
+                       offsetof(SMU71_Firmware_Header, SoftRegisters),
+                       &(priv->smu7_data.soft_regs_start), 0x40000);
+
        result = smu7_request_smu_load_fw(hwmgr);
 
        return result;
@@ -2652,7 +2661,7 @@ const struct pp_smumgr_func iceland_smu_funcs = {
        .smu_fini = &smu7_smu_fini,
        .start_smu = &iceland_start_smu,
        .check_fw_load_finish = &smu7_check_fw_load_finish,
-       .request_smu_load_fw = &smu7_reload_firmware,
+       .request_smu_load_fw = &smu7_request_smu_load_fw,
        .request_smu_load_specific_fw = &iceland_request_smu_load_specific_fw,
        .send_msg_to_smc = &smu7_send_msg_to_smc,
        .send_msg_to_smc_with_parameter = &smu7_send_msg_to_smc_with_parameter,
index ae8378ed32ee1c641d3c13074131f8ca9f3f7be5..1f366c04c7ef766cc56050d013bfc838d3137d24 100644 (file)
@@ -192,6 +192,7 @@ static int tonga_start_in_non_protection_mode(struct pp_hwmgr *hwmgr)
 
 static int tonga_start_smu(struct pp_hwmgr *hwmgr)
 {
+       struct tonga_smumgr *priv = hwmgr->smu_backend;
        int result;
 
        /* Only start SMC if SMC RAM is not running */
@@ -209,6 +210,14 @@ static int tonga_start_smu(struct pp_hwmgr *hwmgr)
                }
        }
 
+       /* Setup SoftRegsStart here to visit the register UcodeLoadStatus
+        * to check fw loading state
+        */
+       smu7_read_smc_sram_dword(hwmgr,
+                       SMU72_FIRMWARE_HEADER_LOCATION +
+                       offsetof(SMU72_Firmware_Header, SoftRegisters),
+                       &(priv->smu7_data.soft_regs_start), 0x40000);
+
        result = smu7_request_smu_load_fw(hwmgr);
 
        return result;