drm/amd/powerplay: enable power down asic task. (v2)
authorRex Zhu <Rex.Zhu@amd.com>
Tue, 29 Dec 2015 03:22:34 +0000 (11:22 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 8 Jan 2016 20:39:27 +0000 (15:39 -0500)
v2: AGD: rebase on upstream

Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/eventmgr/eventtasks.c
drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c
drivers/gpu/drm/amd/powerplay/inc/hardwaremanager.h
drivers/gpu/drm/amd/powerplay/inc/hwmgr.h

index f0b4491..5cd1234 100644 (file)
@@ -68,8 +68,7 @@ int pem_task_adjust_power_state(struct pp_eventmgr *eventmgr, struct pem_event_d
 
 int pem_task_power_down_asic(struct pp_eventmgr *eventmgr, struct pem_event_data *event_data)
 {
-       /* TODO */
-       return 0;
+       return phm_power_down_asic(eventmgr->hwmgr);
 }
 
 int pem_task_set_boot_state(struct pp_eventmgr *eventmgr, struct pem_event_data *event_data)
index f9bf4fc..0f2d5e4 100644 (file)
@@ -90,6 +90,22 @@ int phm_setup_asic(struct pp_hwmgr *hwmgr)
        return 0;
 }
 
+int phm_power_down_asic(struct pp_hwmgr *hwmgr)
+{
+       PHM_FUNC_CHECK(hwmgr);
+
+       if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
+               PHM_PlatformCaps_TablelessHardwareInterface)) {
+               if (NULL != hwmgr->hwmgr_func->power_off_asic)
+                       return hwmgr->hwmgr_func->power_off_asic(hwmgr);
+       } else {
+               return phm_dispatch_table(hwmgr, &(hwmgr->power_down_asic),
+                                         NULL, NULL);
+       }
+
+       return 0;
+}
+
 int phm_set_power_state(struct pp_hwmgr *hwmgr,
                    const struct pp_hw_power_state *pcurrent_state,
                    const struct pp_hw_power_state *pnew_power_state)
@@ -247,7 +263,6 @@ int phm_register_thermal_interrupt(struct pp_hwmgr *hwmgr, const void *info)
 */
 int phm_start_thermal_controller(struct pp_hwmgr *hwmgr, struct PP_TemperatureRange *temperature_range)
 {
-
        return phm_dispatch_table(hwmgr, &(hwmgr->start_thermal_controller), temperature_range, NULL);
 }
 
index a503306..91795ef 100644 (file)
@@ -379,5 +379,7 @@ extern int phm_get_dal_power_level(struct pp_hwmgr *hwmgr,
 
 extern int phm_set_cpu_power_state(struct pp_hwmgr *hwmgr);
 
+extern int phm_power_down_asic(struct pp_hwmgr *hwmgr);
+
 #endif /* _HARDWARE_MANAGER_H_ */
 
index eb0f1b2..aeaa3db 100644 (file)
@@ -325,7 +325,8 @@ struct pp_hwmgr_func {
                                bool cc6_disable, bool pstate_disable,
                                bool pstate_switch_disable);
        int (*get_dal_power_level)(struct pp_hwmgr *hwmgr,
-                       struct amd_pp_dal_clock_info*info);
+                                  struct amd_pp_dal_clock_info *info);
+       int (*power_off_asic)(struct pp_hwmgr *hwmgr);
 };
 
 struct pp_table_func {
@@ -576,9 +577,10 @@ struct pp_hwmgr {
        void *pptable;
        struct phm_platform_descriptor platform_descriptor;
        void *backend;
-       enum PP_DAL_POWERLEVEL  dal_power_level;
+       enum PP_DAL_POWERLEVEL dal_power_level;
        struct phm_dynamic_state_info dyn_state;
        struct phm_runtime_table_header setup_asic;
+       struct phm_runtime_table_header power_down_asic;
        struct phm_runtime_table_header disable_dynamic_state_management;
        struct phm_runtime_table_header enable_dynamic_state_management;
        struct phm_runtime_table_header set_power_state;