diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1156-drm-amd-powerplay-support-Vega12-retrieving-and-sett.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1156-drm-amd-powerplay-support-Vega12-retrieving-and-sett.patch | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1156-drm-amd-powerplay-support-Vega12-retrieving-and-sett.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1156-drm-amd-powerplay-support-Vega12-retrieving-and-sett.patch new file mode 100644 index 00000000..83145e44 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1156-drm-amd-powerplay-support-Vega12-retrieving-and-sett.patch @@ -0,0 +1,136 @@ +From bf5be7803c64d796887bf71452fc923e13e488aa Mon Sep 17 00:00:00 2001 +From: Evan Quan <evan.quan@amd.com> +Date: Fri, 25 Jan 2019 14:15:10 +0800 +Subject: [PATCH 1156/2940] drm/amd/powerplay: support Vega12 retrieving and + setting ppfeatures + +Enable retrieving and setting ppfeatures on Vega12. + +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/hwmgr/vega12_hwmgr.c | 100 ++++++++++++++++++ + 1 file changed, 100 insertions(+) + +diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c +index e4c8a1a16ad5..6c8e78611c03 100644 +--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c ++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c +@@ -1933,6 +1933,104 @@ static int vega12_force_clock_level(struct pp_hwmgr *hwmgr, + return 0; + } + ++static int vega12_get_ppfeature_status(struct pp_hwmgr *hwmgr, char *buf) ++{ ++ static const char *ppfeature_name[] = { ++ "DPM_PREFETCHER", ++ "GFXCLK_DPM", ++ "UCLK_DPM", ++ "SOCCLK_DPM", ++ "UVD_DPM", ++ "VCE_DPM", ++ "ULV", ++ "MP0CLK_DPM", ++ "LINK_DPM", ++ "DCEFCLK_DPM", ++ "GFXCLK_DS", ++ "SOCCLK_DS", ++ "LCLK_DS", ++ "PPT", ++ "TDC", ++ "THERMAL", ++ "GFX_PER_CU_CG", ++ "RM", ++ "DCEFCLK_DS", ++ "ACDC", ++ "VR0HOT", ++ "VR1HOT", ++ "FW_CTF", ++ "LED_DISPLAY", ++ "FAN_CONTROL", ++ "DIDT", ++ "GFXOFF", ++ "CG", ++ "ACG"}; ++ static const char *output_title[] = { ++ "FEATURES", ++ "BITMASK", ++ "ENABLEMENT"}; ++ uint64_t features_enabled; ++ int i; ++ int ret = 0; ++ int size = 0; ++ ++ ret = vega12_get_enabled_smc_features(hwmgr, &features_enabled); ++ PP_ASSERT_WITH_CODE(!ret, ++ "[EnableAllSmuFeatures] Failed to get enabled smc features!", ++ return ret); ++ ++ size += sprintf(buf + size, "Current ppfeatures: 0x%016llx\n", features_enabled); ++ size += sprintf(buf + size, "%-19s %-22s %s\n", ++ output_title[0], ++ output_title[1], ++ output_title[2]); ++ for (i = 0; i < GNLD_FEATURES_MAX; i++) { ++ size += sprintf(buf + size, "%-19s 0x%016llx %6s\n", ++ ppfeature_name[i], ++ 1ULL << i, ++ (features_enabled & (1ULL << i)) ? "Y" : "N"); ++ } ++ ++ return size; ++} ++ ++static int vega12_set_ppfeature_status(struct pp_hwmgr *hwmgr, uint64_t new_ppfeature_masks) ++{ ++ uint64_t features_enabled; ++ uint64_t features_to_enable; ++ uint64_t features_to_disable; ++ int ret = 0; ++ ++ if (new_ppfeature_masks >= (1ULL << GNLD_FEATURES_MAX)) ++ return -EINVAL; ++ ++ ret = vega12_get_enabled_smc_features(hwmgr, &features_enabled); ++ if (ret) ++ return ret; ++ ++ features_to_disable = ++ (features_enabled ^ new_ppfeature_masks) & features_enabled; ++ features_to_enable = ++ (features_enabled ^ new_ppfeature_masks) ^ features_to_disable; ++ ++ pr_debug("features_to_disable 0x%llx\n", features_to_disable); ++ pr_debug("features_to_enable 0x%llx\n", features_to_enable); ++ ++ if (features_to_disable) { ++ ret = vega12_enable_smc_features(hwmgr, false, features_to_disable); ++ if (ret) ++ return ret; ++ } ++ ++ if (features_to_enable) { ++ ret = vega12_enable_smc_features(hwmgr, true, features_to_enable); ++ if (ret) ++ return ret; ++ } ++ ++ return 0; ++} ++ + static int vega12_print_clock_levels(struct pp_hwmgr *hwmgr, + enum pp_clock_type type, char *buf) + { +@@ -2528,6 +2626,8 @@ static const struct pp_hwmgr_func vega12_hwmgr_funcs = { + .start_thermal_controller = vega12_start_thermal_controller, + .powergate_gfx = vega12_gfx_off_control, + .get_performance_level = vega12_get_performance_level, ++ .get_ppfeature_status = vega12_get_ppfeature_status, ++ .set_ppfeature_status = vega12_set_ppfeature_status, + }; + + int vega12_hwmgr_init(struct pp_hwmgr *hwmgr) +-- +2.17.1 + |