aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3359-drm-amd-powerplay-change-smu_read_sensor-sequence-in.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3359-drm-amd-powerplay-change-smu_read_sensor-sequence-in.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3359-drm-amd-powerplay-change-smu_read_sensor-sequence-in.patch124
1 files changed, 124 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3359-drm-amd-powerplay-change-smu_read_sensor-sequence-in.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3359-drm-amd-powerplay-change-smu_read_sensor-sequence-in.patch
new file mode 100644
index 00000000..d931c94f
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3359-drm-amd-powerplay-change-smu_read_sensor-sequence-in.patch
@@ -0,0 +1,124 @@
+From 8b33cca7136c5aa019859361d9a15988d656fbbc Mon Sep 17 00:00:00 2001
+From: Kenneth Feng <kenneth.feng@amd.com>
+Date: Tue, 23 Jul 2019 12:16:25 +0800
+Subject: [PATCH 3359/4256] drm/amd/powerplay: change smu_read_sensor sequence
+ in smu
+
+change the smu_read_sensor sequence to:
+
+asic specific sensor read -> smu v11 specific sensor read -> smu v11 common sensor read
+
+Signed-off-by: Kenneth Feng <kenneth.feng@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 3 +++
+ drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 4 ++--
+ drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 5 ++++-
+ drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 8 ++++----
+ drivers/gpu/drm/amd/powerplay/vega20_ppt.c | 5 ++++-
+ 5 files changed, 17 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+index f21bafb1a0d2..4df7fb6eaf3c 100644
+--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
++++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+@@ -413,6 +413,9 @@ int smu_common_read_sensor(struct smu_context *smu, enum amd_pp_sensors sensor,
+ struct smu_power_gate *power_gate = &smu_power->power_gate;
+ int ret = 0;
+
++ if(!data || !size)
++ return -EINVAL;
++
+ switch (sensor) {
+ case AMDGPU_PP_SENSOR_STABLE_PSTATE_SCLK:
+ *((uint32_t *)data) = smu->pstate_sclk;
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+index f813072ab9e4..ca9b9ec39de8 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -634,9 +634,9 @@ struct smu_funcs
+ #define smu_start_thermal_control(smu) \
+ ((smu)->funcs->start_thermal_control? (smu)->funcs->start_thermal_control((smu)) : 0)
+ #define smu_read_sensor(smu, sensor, data, size) \
+- ((smu)->funcs->read_sensor? (smu)->funcs->read_sensor((smu), (sensor), (data), (size)) : 0)
+-#define smu_asic_read_sensor(smu, sensor, data, size) \
+ ((smu)->ppt_funcs->read_sensor? (smu)->ppt_funcs->read_sensor((smu), (sensor), (data), (size)) : 0)
++#define smu_smc_read_sensor(smu, sensor, data, size) \
++ ((smu)->funcs->read_sensor? (smu)->funcs->read_sensor((smu), (sensor), (data), (size)) : -EINVAL)
+ #define smu_get_power_profile_mode(smu, buf) \
+ ((smu)->ppt_funcs->get_power_profile_mode ? (smu)->ppt_funcs->get_power_profile_mode((smu), buf) : 0)
+ #define smu_set_power_profile_mode(smu, param, param_size) \
+diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+index 7398b281cbb0..907035a6e995 100644
+--- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+@@ -1365,6 +1365,9 @@ static int navi10_read_sensor(struct smu_context *smu,
+ struct smu_table_context *table_context = &smu->smu_table;
+ PPTable_t *pptable = table_context->driver_pptable;
+
++ if(!data || !size)
++ return -EINVAL;
++
+ switch (sensor) {
+ case AMDGPU_PP_SENSOR_MAX_FAN_RPM:
+ *(uint32_t *)data = pptable->FanMaximumRpm;
+@@ -1386,7 +1389,7 @@ static int navi10_read_sensor(struct smu_context *smu,
+ *size = 4;
+ break;
+ default:
+- return -EINVAL;
++ ret = smu_smc_read_sensor(smu, sensor, data, size);
+ }
+
+ return ret;
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+index 91dfae1a2b16..071a63dd4ba2 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+@@ -1227,6 +1227,10 @@ static int smu_v11_0_read_sensor(struct smu_context *smu,
+ void *data, uint32_t *size)
+ {
+ int ret = 0;
++
++ if(!data || !size)
++ return -EINVAL;
++
+ switch (sensor) {
+ case AMDGPU_PP_SENSOR_GFX_MCLK:
+ ret = smu_get_current_clk_freq(smu, SMU_UCLK, (uint32_t *)data);
+@@ -1249,10 +1253,6 @@ static int smu_v11_0_read_sensor(struct smu_context *smu,
+ break;
+ }
+
+- /* try get sensor data by asic */
+- if (ret)
+- ret = smu_asic_read_sensor(smu, sensor, data, size);
+-
+ if (ret)
+ *size = 0;
+
+diff --git a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+index e28c004e0036..acf075393c13 100644
+--- a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+@@ -3011,6 +3011,9 @@ static int vega20_read_sensor(struct smu_context *smu,
+ struct smu_table_context *table_context = &smu->smu_table;
+ PPTable_t *pptable = table_context->driver_pptable;
+
++ if(!data || !size)
++ return -EINVAL;
++
+ switch (sensor) {
+ case AMDGPU_PP_SENSOR_MAX_FAN_RPM:
+ *(uint32_t *)data = pptable->FanMaximumRpm;
+@@ -3034,7 +3037,7 @@ static int vega20_read_sensor(struct smu_context *smu,
+ *size = 4;
+ break;
+ default:
+- return -EINVAL;
++ ret = smu_smc_read_sensor(smu, sensor, data, size);
+ }
+
+ return ret;
+--
+2.17.1
+