aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3305-Revert-drm-amd-powerplay-honor-hw-limit-on-fetching-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3305-Revert-drm-amd-powerplay-honor-hw-limit-on-fetching-.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3305-Revert-drm-amd-powerplay-honor-hw-limit-on-fetching-.patch128
1 files changed, 128 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3305-Revert-drm-amd-powerplay-honor-hw-limit-on-fetching-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3305-Revert-drm-amd-powerplay-honor-hw-limit-on-fetching-.patch
new file mode 100644
index 00000000..4ff82a00
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3305-Revert-drm-amd-powerplay-honor-hw-limit-on-fetching-.patch
@@ -0,0 +1,128 @@
+From dae1e634442e27626a54c775d8c235ac5651fcfe Mon Sep 17 00:00:00 2001
+From: changzhu <Changfeng.Zhu@amd.com>
+Date: Mon, 5 Aug 2019 15:43:07 +0800
+Subject: [PATCH 3305/4256] Revert "drm/amd/powerplay: honor hw limit on
+ fetching metrics data for navi10"
+
+Signed-off-by: changzhu <Changfeng.Zhu@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 56 +++++++---------------
+ 1 file changed, 18 insertions(+), 38 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+index c9a7d26e6c92..b7bb0f78f489 100644
+--- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+@@ -515,8 +515,6 @@ static int navi10_store_powerplay_table(struct smu_context *smu)
+
+ static int navi10_tables_init(struct smu_context *smu, struct smu_table *tables)
+ {
+- struct smu_table_context *smu_table = &smu->smu_table;
+-
+ SMU_TABLE_INIT(tables, SMU_TABLE_PPTABLE, sizeof(PPTable_t),
+ PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);
+ SMU_TABLE_INIT(tables, SMU_TABLE_WATERMARKS, sizeof(Watermarks_t),
+@@ -531,35 +529,9 @@ static int navi10_tables_init(struct smu_context *smu, struct smu_table *tables)
+ sizeof(DpmActivityMonitorCoeffInt_t), PAGE_SIZE,
+ AMDGPU_GEM_DOMAIN_VRAM);
+
+- smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+- if (!smu_table->metrics_table)
+- return -ENOMEM;
+- smu_table->metrics_time = 0;
+-
+ return 0;
+ }
+
+-static int navi10_get_metrics_table(struct smu_context *smu,
+- SmuMetrics_t *metrics_table)
+-{
+- struct smu_table_context *smu_table= &smu->smu_table;
+- int ret = 0;
+-
+- if (!smu_table->metrics_time || time_after(jiffies, smu_table->metrics_time + HZ / 1000)) {
+- ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0,
+- (void *)smu_table->metrics_table, false);
+- if (ret) {
+- pr_info("Failed to export SMU metrics table!\n");
+- return ret;
+- }
+- smu_table->metrics_time = jiffies;
+- }
+-
+- memcpy(metrics_table, smu_table->metrics_table, sizeof(SmuMetrics_t));
+-
+- return ret;
+-}
+-
+ static int navi10_allocate_dpm_context(struct smu_context *smu)
+ {
+ struct smu_dpm_context *smu_dpm = &smu->smu_dpm;
+@@ -646,10 +618,15 @@ static int navi10_get_current_clk_freq_by_table(struct smu_context *smu,
+ enum smu_clk_type clk_type,
+ uint32_t *value)
+ {
++ static SmuMetrics_t metrics;
+ int ret = 0, clk_id = 0;
+- SmuMetrics_t metrics;
+
+- ret = navi10_get_metrics_table(smu, &metrics);
++ if (!value)
++ return -EINVAL;
++
++ memset(&metrics, 0, sizeof(metrics));
++
++ ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, (void *)&metrics, false);
+ if (ret)
+ return ret;
+
+@@ -937,9 +914,8 @@ static int navi10_get_gpu_power(struct smu_context *smu, uint32_t *value)
+ if (!value)
+ return -EINVAL;
+
+- ret = navi10_get_metrics_table(smu, &metrics);
+- if (ret)
+- return ret;
++ ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, (void *)&metrics,
++ false);
+ if (ret)
+ return ret;
+
+@@ -958,7 +934,10 @@ static int navi10_get_current_activity_percent(struct smu_context *smu,
+ if (!value)
+ return -EINVAL;
+
+- ret = navi10_get_metrics_table(smu, &metrics);
++ msleep(1);
++
++ ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0,
++ (void *)&metrics, false);
+ if (ret)
+ return ret;
+
+@@ -997,9 +976,10 @@ static int navi10_get_fan_speed_rpm(struct smu_context *smu,
+ if (!speed)
+ return -EINVAL;
+
+- ret = navi10_get_metrics_table(smu, &metrics);
+- if (ret)
+- return ret;
++ memset(&metrics, 0, sizeof(metrics));
++
++ ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0,
++ (void *)&metrics, false);
+ if (ret)
+ return ret;
+
+@@ -1352,7 +1332,7 @@ static int navi10_thermal_get_temperature(struct smu_context *smu,
+ if (!value)
+ return -EINVAL;
+
+- ret = navi10_get_metrics_table(smu, &metrics);
++ ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, (void *)&metrics, false);
+ if (ret)
+ return ret;
+
+--
+2.17.1
+