From: Evan Quan <[email protected]>

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 <[email protected]>
Reviewed-by: Alex Deucher <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
 .../gpu/drm/amd/powerplay/smumgr/vega20_smumgr.c   | 57 ++++++++++++++++++++++
 .../gpu/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.13.6

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to