drm/amd/powerplay: Reload and initialize the smc firmware on powerplay resume.
authorRex Zhu <Rex.Zhu@amd.com>
Tue, 29 Dec 2015 02:25:19 +0000 (10:25 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 8 Jan 2016 20:39:24 +0000 (15:39 -0500)
Reviewed-by: Alex Deucher <alexander.deucher@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/amd_powerplay.c

index 2764bd3..8f5d5ed 100644 (file)
@@ -203,13 +203,29 @@ static int pp_resume(void *handle)
        struct pp_instance *pp_handle;
        struct pp_eventmgr *eventmgr;
        struct pem_event_data event_data = { {0} };
+       struct pp_smumgr *smumgr;
+       int ret;
 
        if (handle == NULL)
                return -EINVAL;
 
        pp_handle = (struct pp_instance *)handle;
+       smumgr = pp_handle->smu_mgr;
+
+       if (smumgr == NULL || smumgr->smumgr_funcs == NULL ||
+               smumgr->smumgr_funcs->start_smu == NULL)
+               return -EINVAL;
+
+       ret = smumgr->smumgr_funcs->start_smu(smumgr);
+       if (ret) {
+               printk(KERN_ERR "[ powerplay ] smc start failed\n");
+               smumgr->smumgr_funcs->smu_fini(smumgr);
+               return ret;
+       }
+
        eventmgr = pp_handle->eventmgr;
        pem_handle_event(eventmgr, AMD_PP_EVENT_RESUME, &event_data);
+
        return 0;
 }
 
@@ -624,6 +640,7 @@ int amd_powerplay_display_configuration_change(void *handle, const void *input)
        hwmgr = ((struct pp_instance *)handle)->hwmgr;
 
        phm_store_dal_configuration_data(hwmgr, display_config);
+
        return 0;
 }