aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0075-drm-amdgpu-powerplay-implement-fan-control-interface.patch
diff options
context:
space:
mode:
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.patch140
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
+