diff options
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.patch | 103 |
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 + |