diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0075-drm-amdgpu-powerplay-implement-fan-control-interface.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0075-drm-amdgpu-powerplay-implement-fan-control-interface.patch | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0075-drm-amdgpu-powerplay-implement-fan-control-interface.patch b/common/recipes-kernel/linux/files/0075-drm-amdgpu-powerplay-implement-fan-control-interface.patch new file mode 100644 index 00000000..199fc4f6 --- /dev/null +++ b/common/recipes-kernel/linux/files/0075-drm-amdgpu-powerplay-implement-fan-control-interface.patch @@ -0,0 +1,140 @@ +From 28a7159e3bba73b4fc12f70f3a5f0d5d1e8b1d3b Mon Sep 17 00:00:00 2001 +From: Rex Zhu <Rex.Zhu@amd.com> +Date: Fri, 16 Oct 2015 11:48:21 +0800 +Subject: [PATCH 0075/1110] drm/amdgpu/powerplay: implement fan control + interface in amd_powerplay_funcs + +This adds the interface needed to expose powerplay fan control to sysfs +via hwmon. + +Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> +Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 85 ++++++++++++++++++++++- + drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h | 4 ++ + 2 files changed, 88 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c +index 66ccfc0..10385c0 100644 +--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c ++++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c +@@ -428,9 +428,88 @@ pp_debugfs_print_current_performance_level(void *handle, + hwmgr->hwmgr_func->print_current_perforce_level(hwmgr, m); + } + ++static int pp_dpm_set_fan_control_mode(void *handle, uint32_t mode) ++{ ++ struct pp_hwmgr *hwmgr; ++ ++ if (handle == NULL) ++ return -EINVAL; ++ ++ hwmgr = ((struct pp_instance *)handle)->hwmgr; ++ ++ if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || ++ hwmgr->hwmgr_func->set_fan_control_mode == NULL) ++ return -EINVAL; ++ ++ return hwmgr->hwmgr_func->set_fan_control_mode(hwmgr, mode); ++} ++ ++static int pp_dpm_get_fan_control_mode(void *handle) ++{ ++ struct pp_hwmgr *hwmgr; ++ ++ if (handle == NULL) ++ return -EINVAL; ++ ++ hwmgr = ((struct pp_instance *)handle)->hwmgr; ++ ++ if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || ++ hwmgr->hwmgr_func->get_fan_control_mode == NULL) ++ return -EINVAL; ++ ++ return hwmgr->hwmgr_func->get_fan_control_mode(hwmgr); ++} ++ ++static int pp_dpm_set_fan_speed_percent(void *handle, uint32_t percent) ++{ ++ struct pp_hwmgr *hwmgr; ++ ++ if (handle == NULL) ++ return -EINVAL; ++ ++ hwmgr = ((struct pp_instance *)handle)->hwmgr; ++ ++ if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || ++ hwmgr->hwmgr_func->set_fan_speed_percent == NULL) ++ return -EINVAL; ++ ++ return hwmgr->hwmgr_func->set_fan_speed_percent(hwmgr, percent); ++} ++ ++static int pp_dpm_get_fan_speed_percent(void *handle, uint32_t *speed) ++{ ++ struct pp_hwmgr *hwmgr; ++ ++ if (handle == NULL) ++ return -EINVAL; ++ ++ hwmgr = ((struct pp_instance *)handle)->hwmgr; ++ ++ if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || ++ hwmgr->hwmgr_func->get_fan_speed_percent == NULL) ++ return -EINVAL; ++ ++ return hwmgr->hwmgr_func->get_fan_speed_percent(hwmgr, speed); ++} ++ ++static int pp_dpm_get_temperature(void *handle) ++{ ++ struct pp_hwmgr *hwmgr; ++ ++ if (handle == NULL) ++ return -EINVAL; ++ ++ hwmgr = ((struct pp_instance *)handle)->hwmgr; ++ ++ if (hwmgr == NULL || hwmgr->hwmgr_func == NULL || ++ hwmgr->hwmgr_func->get_temperature == NULL) ++ return -EINVAL; ++ ++ return hwmgr->hwmgr_func->get_temperature(hwmgr); ++} + + const struct amd_powerplay_funcs pp_dpm_funcs = { +- .get_temperature = NULL, ++ .get_temperature = pp_dpm_get_temperature, + .load_firmware = pp_dpm_load_fw, + .wait_for_fw_loading_complete = pp_dpm_fw_loading_complete, + .force_performance_level = pp_dpm_force_performance_level, +@@ -442,6 +521,10 @@ const struct amd_powerplay_funcs pp_dpm_funcs = { + .powergate_uvd = pp_dpm_powergate_uvd, + .dispatch_tasks = pp_dpm_dispatch_tasks, + .print_current_performance_level = pp_debugfs_print_current_performance_level, ++ .set_fan_control_mode = pp_dpm_set_fan_control_mode, ++ .get_fan_control_mode = pp_dpm_get_fan_control_mode, ++ .set_fan_speed_percent = pp_dpm_set_fan_speed_percent, ++ .get_fan_speed_percent = pp_dpm_get_fan_speed_percent, + }; + + static int amd_pp_instance_init(struct amd_pp_init *pp_init, +diff --git a/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h b/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h +index d81b239..40ded67 100644 +--- a/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h ++++ b/drivers/gpu/drm/amd/powerplay/inc/amd_powerplay.h +@@ -187,6 +187,10 @@ struct amd_powerplay_funcs { + void *input, void *output); + void (*print_current_performance_level)(void *handle, + struct seq_file *m); ++ int (*set_fan_control_mode)(void *handle, uint32_t mode); ++ int (*get_fan_control_mode)(void *handle); ++ int (*set_fan_speed_percent)(void *handle, uint32_t percent); ++ int (*get_fan_speed_percent)(void *handle, uint32_t *speed); + }; + + struct amd_powerplay { +-- +2.7.4 + |