aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0072-drm-amd-powerplay-new-interfaces-for-ActivityMonitor.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0072-drm-amd-powerplay-new-interfaces-for-ActivityMonitor.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0072-drm-amd-powerplay-new-interfaces-for-ActivityMonitor.patch103
1 files changed, 103 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0072-drm-amd-powerplay-new-interfaces-for-ActivityMonitor.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0072-drm-amd-powerplay-new-interfaces-for-ActivityMonitor.patch
new file mode 100644
index 00000000..0685153b
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0072-drm-amd-powerplay-new-interfaces-for-ActivityMonitor.patch
@@ -0,0 +1,103 @@
+From 95d5f10ba3130cfea984ef68a63a6e400fc3e0a7 Mon Sep 17 00:00:00 2001
+From: Evan Quan <evan.quan@amd.com>
+Date: Fri, 11 May 2018 10:56:25 +0800
+Subject: [PATCH 0072/2940] drm/amd/powerplay: new interfaces for
+ ActivityMonitor table with SMU
+
+Vega20 has a new activity monitor table that is stored in memory. Add
+API to get and set the new table.
+
+Signed-off-by: Evan Quan <evan.quan@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../drm/amd/powerplay/smumgr/vega20_smumgr.c | 57 +++++++++++++++++++
+ .../drm/amd/powerplay/smumgr/vega20_smumgr.h | 4 ++
+ 2 files changed, 61 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/vega20_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/vega20_smumgr.c
+index 41a2a5df679b..fe7f71079e0e 100644
+--- a/drivers/gpu/drm/amd/powerplay/smumgr/vega20_smumgr.c
++++ b/drivers/gpu/drm/amd/powerplay/smumgr/vega20_smumgr.c
+@@ -243,6 +243,63 @@ int vega20_copy_table_to_smc(struct pp_hwmgr *hwmgr,
+ return 0;
+ }
+
++int vega20_set_activity_monitor_coeff(struct pp_hwmgr *hwmgr,
++ uint8_t *table, uint16_t workload_type)
++{
++ struct vega20_smumgr *priv =
++ (struct vega20_smumgr *)(hwmgr->smu_backend);
++ int ret = 0;
++
++ memcpy(priv->smu_tables.entry[TABLE_ACTIVITY_MONITOR_COEFF].table, table,
++ priv->smu_tables.entry[TABLE_ACTIVITY_MONITOR_COEFF].size);
++
++ PP_ASSERT_WITH_CODE((ret = vega20_send_msg_to_smc_with_parameter(hwmgr,
++ PPSMC_MSG_SetDriverDramAddrHigh,
++ upper_32_bits(priv->smu_tables.entry[TABLE_ACTIVITY_MONITOR_COEFF].mc_addr))) == 0,
++ "[SetActivityMonitor] Attempt to Set Dram Addr High Failed!",
++ return ret);
++ PP_ASSERT_WITH_CODE((ret = vega20_send_msg_to_smc_with_parameter(hwmgr,
++ PPSMC_MSG_SetDriverDramAddrLow,
++ lower_32_bits(priv->smu_tables.entry[TABLE_ACTIVITY_MONITOR_COEFF].mc_addr))) == 0,
++ "[SetActivityMonitor] Attempt to Set Dram Addr Low Failed!",
++ return ret);
++ PP_ASSERT_WITH_CODE((ret = vega20_send_msg_to_smc_with_parameter(hwmgr,
++ PPSMC_MSG_TransferTableDram2Smu, TABLE_ACTIVITY_MONITOR_COEFF | (workload_type << 16))) == 0,
++ "[SetActivityMonitor] Attempt to Transfer Table To SMU Failed!",
++ return ret);
++
++ return 0;
++}
++
++int vega20_get_activity_monitor_coeff(struct pp_hwmgr *hwmgr,
++ uint8_t *table, uint16_t workload_type)
++{
++ struct vega20_smumgr *priv =
++ (struct vega20_smumgr *)(hwmgr->smu_backend);
++ int ret = 0;
++
++ PP_ASSERT_WITH_CODE((ret = vega20_send_msg_to_smc_with_parameter(hwmgr,
++ PPSMC_MSG_SetDriverDramAddrHigh,
++ upper_32_bits(priv->smu_tables.entry[TABLE_ACTIVITY_MONITOR_COEFF].mc_addr))) == 0,
++ "[GetActivityMonitor] Attempt to Set Dram Addr High Failed!",
++ return ret);
++ PP_ASSERT_WITH_CODE((ret = vega20_send_msg_to_smc_with_parameter(hwmgr,
++ PPSMC_MSG_SetDriverDramAddrLow,
++ lower_32_bits(priv->smu_tables.entry[TABLE_ACTIVITY_MONITOR_COEFF].mc_addr))) == 0,
++ "[GetActivityMonitor] Attempt to Set Dram Addr Low Failed!",
++ return ret);
++ PP_ASSERT_WITH_CODE((ret = vega20_send_msg_to_smc_with_parameter(hwmgr,
++ PPSMC_MSG_TransferTableSmu2Dram,
++ TABLE_ACTIVITY_MONITOR_COEFF | (workload_type << 16))) == 0,
++ "[GetActivityMonitor] Attempt to Transfer Table From SMU Failed!",
++ return ret);
++
++ memcpy(table, priv->smu_tables.entry[TABLE_ACTIVITY_MONITOR_COEFF].table,
++ priv->smu_tables.entry[TABLE_ACTIVITY_MONITOR_COEFF].size);
++
++ return 0;
++}
++
+ int vega20_enable_smc_features(struct pp_hwmgr *hwmgr,
+ bool enable, uint64_t feature_mask)
+ {
+diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/vega20_smumgr.h b/drivers/gpu/drm/amd/powerplay/smumgr/vega20_smumgr.h
+index 71da82266e7f..505eb0d82e3b 100644
+--- a/drivers/gpu/drm/amd/powerplay/smumgr/vega20_smumgr.h
++++ b/drivers/gpu/drm/amd/powerplay/smumgr/vega20_smumgr.h
+@@ -56,6 +56,10 @@ int vega20_enable_smc_features(struct pp_hwmgr *hwmgr,
+ bool enable, uint64_t feature_mask);
+ int vega20_get_enabled_smc_features(struct pp_hwmgr *hwmgr,
+ uint64_t *features_enabled);
++int vega20_set_activity_monitor_coeff(struct pp_hwmgr *hwmgr,
++ uint8_t *table, uint16_t workload_type);
++int vega20_get_activity_monitor_coeff(struct pp_hwmgr *hwmgr,
++ uint8_t *table, uint16_t workload_type);
+
+ #endif
+
+--
+2.17.1
+