aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4268-drm-amd-powerplay-clear-the-swSMU-code-layer.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4268-drm-amd-powerplay-clear-the-swSMU-code-layer.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4268-drm-amd-powerplay-clear-the-swSMU-code-layer.patch1907
1 files changed, 1907 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4268-drm-amd-powerplay-clear-the-swSMU-code-layer.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4268-drm-amd-powerplay-clear-the-swSMU-code-layer.patch
new file mode 100644
index 00000000..d4a448be
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4268-drm-amd-powerplay-clear-the-swSMU-code-layer.patch
@@ -0,0 +1,1907 @@
+From f8ce766413a519f8c78170815c26fa4e7bf5fbdd Mon Sep 17 00:00:00 2001
+From: Evan Quan <evan.quan@amd.com>
+Date: Thu, 17 Oct 2019 19:59:29 +0800
+Subject: [PATCH 4268/4736] drm/amd/powerplay: clear the swSMU code layer
+
+With this cleanup, the APIs from amdgpu_smu.c will map to
+ASIC specific ones directly. Those can be shared around
+all SMU V11/V12 ASICs will be put in smu_v11_0.c and
+smu_v12_0.c respectively.
+
+Change-Id: I9b98eb5ace5df19896de4b05c37255a38d1079ce
+Signed-off-by: Evan Quan <evan.quan@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c | 42 ++--
+ drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 115 +++++------
+ drivers/gpu/drm/amd/powerplay/arcturus_ppt.c | 51 ++++-
+ .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 9 +-
+ drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h | 120 +++++++++++-
+ drivers/gpu/drm/amd/powerplay/inc/smu_v12_0.h | 41 +++-
+ drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 54 +++++-
+ drivers/gpu/drm/amd/powerplay/renoir_ppt.c | 15 ++
+ drivers/gpu/drm/amd/powerplay/smu_internal.h | 82 ++++----
+ drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 183 +++++-------------
+ drivers/gpu/drm/amd/powerplay/smu_v12_0.c | 70 ++-----
+ drivers/gpu/drm/amd/powerplay/vega20_ppt.c | 55 +++++-
+ 12 files changed, 519 insertions(+), 318 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
+index c1b6abf2634c..e42b162ee5d3 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
+@@ -346,7 +346,7 @@ bool dm_pp_get_clock_levels_by_type(
+ /* Error in pplib. Provide default values. */
+ return true;
+ }
+- } else if (adev->smu.funcs && adev->smu.funcs->get_clock_by_type) {
++ } else if (adev->smu.ppt_funcs && adev->smu.ppt_funcs->get_clock_by_type) {
+ if (smu_get_clock_by_type(&adev->smu,
+ dc_to_pp_clock_type(clk_type),
+ &pp_clks)) {
+@@ -366,7 +366,7 @@ bool dm_pp_get_clock_levels_by_type(
+ validation_clks.memory_max_clock = 80000;
+ validation_clks.level = 0;
+ }
+- } else if (adev->smu.funcs && adev->smu.funcs->get_max_high_clocks) {
++ } else if (adev->smu.ppt_funcs && adev->smu.ppt_funcs->get_max_high_clocks) {
+ if (smu_get_max_high_clocks(&adev->smu, &validation_clks)) {
+ DRM_INFO("DM_PPLIB: Warning: using default validation clocks!\n");
+ validation_clks.engine_max_clock = 72000;
+@@ -507,8 +507,8 @@ bool dm_pp_apply_clock_for_voltage_request(
+ ret = adev->powerplay.pp_funcs->display_clock_voltage_request(
+ adev->powerplay.pp_handle,
+ &pp_clock_request);
+- else if (adev->smu.funcs &&
+- adev->smu.funcs->display_clock_voltage_request)
++ else if (adev->smu.ppt_funcs &&
++ adev->smu.ppt_funcs->display_clock_voltage_request)
+ ret = smu_display_clock_voltage_request(&adev->smu,
+ &pp_clock_request);
+ if (ret)
+@@ -528,7 +528,7 @@ bool dm_pp_get_static_clocks(
+ ret = adev->powerplay.pp_funcs->get_current_clocks(
+ adev->powerplay.pp_handle,
+ &pp_clk_info);
+- else if (adev->smu.funcs)
++ else if (adev->smu.ppt_funcs)
+ ret = smu_get_current_clocks(&adev->smu, &pp_clk_info);
+ if (ret)
+ return false;
+@@ -604,7 +604,7 @@ void pp_rv_set_pme_wa_enable(struct pp_smu *pp)
+
+ if (pp_funcs && pp_funcs->notify_smu_enable_pwe)
+ pp_funcs->notify_smu_enable_pwe(pp_handle);
+- else if (adev->smu.funcs)
++ else if (adev->smu.ppt_funcs)
+ smu_notify_smu_enable_pwe(&adev->smu);
+ }
+
+@@ -718,10 +718,10 @@ enum pp_smu_status pp_nv_set_pme_wa_enable(struct pp_smu *pp)
+ struct amdgpu_device *adev = ctx->driver_context;
+ struct smu_context *smu = &adev->smu;
+
+- if (!smu->funcs)
++ if (!smu->ppt_funcs)
+ return PP_SMU_RESULT_UNSUPPORTED;
+
+- /* 0: successful or smu.funcs->set_azalia_d3_pme = NULL; 1: fail */
++ /* 0: successful or smu.ppt_funcs->set_azalia_d3_pme = NULL; 1: fail */
+ if (smu_set_azalia_d3_pme(smu))
+ return PP_SMU_RESULT_FAIL;
+
+@@ -734,10 +734,10 @@ enum pp_smu_status pp_nv_set_display_count(struct pp_smu *pp, int count)
+ struct amdgpu_device *adev = ctx->driver_context;
+ struct smu_context *smu = &adev->smu;
+
+- if (!smu->funcs)
++ if (!smu->ppt_funcs)
+ return PP_SMU_RESULT_UNSUPPORTED;
+
+- /* 0: successful or smu.funcs->set_display_count = NULL; 1: fail */
++ /* 0: successful or smu.ppt_funcs->set_display_count = NULL; 1: fail */
+ if (smu_set_display_count(smu, count))
+ return PP_SMU_RESULT_FAIL;
+
+@@ -750,10 +750,10 @@ enum pp_smu_status pp_nv_set_min_deep_sleep_dcfclk(struct pp_smu *pp, int mhz)
+ struct amdgpu_device *adev = ctx->driver_context;
+ struct smu_context *smu = &adev->smu;
+
+- if (!smu->funcs)
++ if (!smu->ppt_funcs)
+ return PP_SMU_RESULT_UNSUPPORTED;
+
+- /* 0: successful or smu.funcs->set_deep_sleep_dcefclk = NULL;1: fail */
++ /* 0: successful or smu.ppt_funcs->set_deep_sleep_dcefclk = NULL;1: fail */
+ if (smu_set_deep_sleep_dcefclk(smu, mhz))
+ return PP_SMU_RESULT_FAIL;
+
+@@ -768,13 +768,13 @@ enum pp_smu_status pp_nv_set_hard_min_dcefclk_by_freq(
+ struct smu_context *smu = &adev->smu;
+ struct pp_display_clock_request clock_req;
+
+- if (!smu->funcs)
++ if (!smu->ppt_funcs)
+ return PP_SMU_RESULT_UNSUPPORTED;
+
+ clock_req.clock_type = amd_pp_dcef_clock;
+ clock_req.clock_freq_in_khz = mhz * 1000;
+
+- /* 0: successful or smu.funcs->display_clock_voltage_request = NULL
++ /* 0: successful or smu.ppt_funcs->display_clock_voltage_request = NULL
+ * 1: fail
+ */
+ if (smu_display_clock_voltage_request(smu, &clock_req))
+@@ -790,13 +790,13 @@ enum pp_smu_status pp_nv_set_hard_min_uclk_by_freq(struct pp_smu *pp, int mhz)
+ struct smu_context *smu = &adev->smu;
+ struct pp_display_clock_request clock_req;
+
+- if (!smu->funcs)
++ if (!smu->ppt_funcs)
+ return PP_SMU_RESULT_UNSUPPORTED;
+
+ clock_req.clock_type = amd_pp_mem_clock;
+ clock_req.clock_freq_in_khz = mhz * 1000;
+
+- /* 0: successful or smu.funcs->display_clock_voltage_request = NULL
++ /* 0: successful or smu.ppt_funcs->display_clock_voltage_request = NULL
+ * 1: fail
+ */
+ if (smu_display_clock_voltage_request(smu, &clock_req))
+@@ -826,7 +826,7 @@ enum pp_smu_status pp_nv_set_voltage_by_freq(struct pp_smu *pp,
+ struct smu_context *smu = &adev->smu;
+ struct pp_display_clock_request clock_req;
+
+- if (!smu->funcs)
++ if (!smu->ppt_funcs)
+ return PP_SMU_RESULT_UNSUPPORTED;
+
+ switch (clock_id) {
+@@ -844,7 +844,7 @@ enum pp_smu_status pp_nv_set_voltage_by_freq(struct pp_smu *pp,
+ }
+ clock_req.clock_freq_in_khz = mhz * 1000;
+
+- /* 0: successful or smu.funcs->display_clock_voltage_request = NULL
++ /* 0: successful or smu.ppt_funcs->display_clock_voltage_request = NULL
+ * 1: fail
+ */
+ if (smu_display_clock_voltage_request(smu, &clock_req))
+@@ -860,10 +860,10 @@ enum pp_smu_status pp_nv_get_maximum_sustainable_clocks(
+ struct amdgpu_device *adev = ctx->driver_context;
+ struct smu_context *smu = &adev->smu;
+
+- if (!smu->funcs)
++ if (!smu->ppt_funcs)
+ return PP_SMU_RESULT_UNSUPPORTED;
+
+- if (!smu->funcs->get_max_sustainable_clocks_by_dc)
++ if (!smu->ppt_funcs->get_max_sustainable_clocks_by_dc)
+ return PP_SMU_RESULT_UNSUPPORTED;
+
+ if (!smu_get_max_sustainable_clocks_by_dc(smu, max_clocks))
+@@ -925,7 +925,7 @@ enum pp_smu_status pp_rn_set_wm_ranges(struct pp_smu *pp,
+ wm_with_clock_ranges.wm_mcif_clocks_ranges;
+ int32_t i;
+
+- if (!smu->funcs)
++ if (!smu->ppt_funcs)
+ return PP_SMU_RESULT_UNSUPPORTED;
+
+ wm_with_clock_ranges.num_wm_dmif_sets = ranges->num_reader_wm_sets;
+diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+index 75c4e297b788..3ce01e1994fc 100644
+--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
++++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+@@ -31,6 +31,10 @@
+ #include "smu_v12_0.h"
+ #include "atom.h"
+ #include "amd_pcie.h"
++#include "vega20_ppt.h"
++#include "arcturus_ppt.h"
++#include "navi10_ppt.h"
++#include "renoir_ppt.h"
+
+ #undef __SMU_DUMMY_MAP
+ #define __SMU_DUMMY_MAP(type) #type
+@@ -703,23 +707,26 @@ static int smu_set_funcs(struct amdgpu_device *adev)
+
+ switch (adev->asic_type) {
+ case CHIP_VEGA20:
++ vega20_set_ppt_funcs(smu);
++ break;
+ case CHIP_NAVI10:
+ case CHIP_NAVI14:
+ case CHIP_NAVI12:
++ navi10_set_ppt_funcs(smu);
++ break;
+ case CHIP_ARCTURUS:
+- if (adev->pm.pp_feature & PP_OVERDRIVE_MASK)
+- smu->od_enabled = true;
+- smu_v11_0_set_smu_funcs(smu);
++ arcturus_set_ppt_funcs(smu);
+ break;
+ case CHIP_RENOIR:
+- if (adev->pm.pp_feature & PP_OVERDRIVE_MASK)
+- smu->od_enabled = true;
+- smu_v12_0_set_smu_funcs(smu);
++ renoir_set_ppt_funcs(smu);
+ break;
+ default:
+ return -EINVAL;
+ }
+
++ if (adev->pm.pp_feature & PP_OVERDRIVE_MASK)
++ smu->od_enabled = true;
++
+ return 0;
+ }
+
+@@ -1177,16 +1184,16 @@ static int smu_start_smc_engine(struct smu_context *smu)
+
+ if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
+ if (adev->asic_type < CHIP_NAVI10) {
+- if (smu->funcs->load_microcode) {
+- ret = smu->funcs->load_microcode(smu);
++ if (smu->ppt_funcs->load_microcode) {
++ ret = smu->ppt_funcs->load_microcode(smu);
+ if (ret)
+ return ret;
+ }
+ }
+ }
+
+- if (smu->funcs->check_fw_status) {
+- ret = smu->funcs->check_fw_status(smu);
++ if (smu->ppt_funcs->check_fw_status) {
++ ret = smu->ppt_funcs->check_fw_status(smu);
+ if (ret)
+ pr_err("SMC is not ready\n");
+ }
+@@ -1397,8 +1404,8 @@ int smu_display_configuration_change(struct smu_context *smu,
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_deep_sleep_dcefclk)
+- smu->funcs->set_deep_sleep_dcefclk(smu,
++ if (smu->ppt_funcs->set_deep_sleep_dcefclk)
++ smu->ppt_funcs->set_deep_sleep_dcefclk(smu,
+ display_config->min_dcef_deep_sleep_set_clk / 100);
+
+ for (index = 0; index < display_config->num_path_including_non_display; index++) {
+@@ -1952,8 +1959,8 @@ int smu_load_microcode(struct smu_context *smu)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->load_microcode)
+- ret = smu->funcs->load_microcode(smu);
++ if (smu->ppt_funcs->load_microcode)
++ ret = smu->ppt_funcs->load_microcode(smu);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -1966,8 +1973,8 @@ int smu_check_fw_status(struct smu_context *smu)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->check_fw_status)
+- ret = smu->funcs->check_fw_status(smu);
++ if (smu->ppt_funcs->check_fw_status)
++ ret = smu->ppt_funcs->check_fw_status(smu);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -1980,8 +1987,8 @@ int smu_set_gfx_cgpg(struct smu_context *smu, bool enabled)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_gfx_cgpg)
+- ret = smu->funcs->set_gfx_cgpg(smu, enabled);
++ if (smu->ppt_funcs->set_gfx_cgpg)
++ ret = smu->ppt_funcs->set_gfx_cgpg(smu, enabled);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -1994,8 +2001,8 @@ int smu_set_fan_speed_rpm(struct smu_context *smu, uint32_t speed)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_fan_speed_rpm)
+- ret = smu->funcs->set_fan_speed_rpm(smu, speed);
++ if (smu->ppt_funcs->set_fan_speed_rpm)
++ ret = smu->ppt_funcs->set_fan_speed_rpm(smu, speed);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2027,8 +2034,8 @@ int smu_set_power_limit(struct smu_context *smu, uint32_t limit)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_power_limit)
+- ret = smu->funcs->set_power_limit(smu, limit);
++ if (smu->ppt_funcs->set_power_limit)
++ ret = smu->ppt_funcs->set_power_limit(smu, limit);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2149,8 +2156,8 @@ int smu_get_fan_control_mode(struct smu_context *smu)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->get_fan_control_mode)
+- ret = smu->funcs->get_fan_control_mode(smu);
++ if (smu->ppt_funcs->get_fan_control_mode)
++ ret = smu->ppt_funcs->get_fan_control_mode(smu);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2163,8 +2170,8 @@ int smu_set_fan_control_mode(struct smu_context *smu, int value)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_fan_control_mode)
+- ret = smu->funcs->set_fan_control_mode(smu, value);
++ if (smu->ppt_funcs->set_fan_control_mode)
++ ret = smu->ppt_funcs->set_fan_control_mode(smu, value);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2191,8 +2198,8 @@ int smu_set_fan_speed_percent(struct smu_context *smu, uint32_t speed)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_fan_speed_percent)
+- ret = smu->funcs->set_fan_speed_percent(smu, speed);
++ if (smu->ppt_funcs->set_fan_speed_percent)
++ ret = smu->ppt_funcs->set_fan_speed_percent(smu, speed);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2219,8 +2226,8 @@ int smu_set_deep_sleep_dcefclk(struct smu_context *smu, int clk)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_deep_sleep_dcefclk)
+- ret = smu->funcs->set_deep_sleep_dcefclk(smu, clk);
++ if (smu->ppt_funcs->set_deep_sleep_dcefclk)
++ ret = smu->ppt_funcs->set_deep_sleep_dcefclk(smu, clk);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2233,8 +2240,8 @@ int smu_set_active_display_count(struct smu_context *smu, uint32_t count)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_active_display_count)
+- ret = smu->funcs->set_active_display_count(smu, count);
++ if (smu->ppt_funcs->set_active_display_count)
++ ret = smu->ppt_funcs->set_active_display_count(smu, count);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2249,8 +2256,8 @@ int smu_get_clock_by_type(struct smu_context *smu,
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->get_clock_by_type)
+- ret = smu->funcs->get_clock_by_type(smu, type, clocks);
++ if (smu->ppt_funcs->get_clock_by_type)
++ ret = smu->ppt_funcs->get_clock_by_type(smu, type, clocks);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2264,8 +2271,8 @@ int smu_get_max_high_clocks(struct smu_context *smu,
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->get_max_high_clocks)
+- ret = smu->funcs->get_max_high_clocks(smu, clocks);
++ if (smu->ppt_funcs->get_max_high_clocks)
++ ret = smu->ppt_funcs->get_max_high_clocks(smu, clocks);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2312,8 +2319,8 @@ int smu_display_clock_voltage_request(struct smu_context *smu,
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->display_clock_voltage_request)
+- ret = smu->funcs->display_clock_voltage_request(smu, clock_req);
++ if (smu->ppt_funcs->display_clock_voltage_request)
++ ret = smu->ppt_funcs->display_clock_voltage_request(smu, clock_req);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2341,8 +2348,8 @@ int smu_notify_smu_enable_pwe(struct smu_context *smu)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->notify_smu_enable_pwe)
+- ret = smu->funcs->notify_smu_enable_pwe(smu);
++ if (smu->ppt_funcs->notify_smu_enable_pwe)
++ ret = smu->ppt_funcs->notify_smu_enable_pwe(smu);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2356,8 +2363,8 @@ int smu_set_xgmi_pstate(struct smu_context *smu,
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_xgmi_pstate)
+- ret = smu->funcs->set_xgmi_pstate(smu, pstate);
++ if (smu->ppt_funcs->set_xgmi_pstate)
++ ret = smu->ppt_funcs->set_xgmi_pstate(smu, pstate);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2370,8 +2377,8 @@ int smu_set_azalia_d3_pme(struct smu_context *smu)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->set_azalia_d3_pme)
+- ret = smu->funcs->set_azalia_d3_pme(smu);
++ if (smu->ppt_funcs->set_azalia_d3_pme)
++ ret = smu->ppt_funcs->set_azalia_d3_pme(smu);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2384,8 +2391,8 @@ bool smu_baco_is_support(struct smu_context *smu)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->baco_is_support)
+- ret = smu->funcs->baco_is_support(smu);
++ if (smu->ppt_funcs->baco_is_support)
++ ret = smu->ppt_funcs->baco_is_support(smu);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2394,11 +2401,11 @@ bool smu_baco_is_support(struct smu_context *smu)
+
+ int smu_baco_get_state(struct smu_context *smu, enum smu_baco_state *state)
+ {
+- if (smu->funcs->baco_get_state)
++ if (smu->ppt_funcs->baco_get_state)
+ return -EINVAL;
+
+ mutex_lock(&smu->mutex);
+- *state = smu->funcs->baco_get_state(smu);
++ *state = smu->ppt_funcs->baco_get_state(smu);
+ mutex_unlock(&smu->mutex);
+
+ return 0;
+@@ -2410,8 +2417,8 @@ int smu_baco_reset(struct smu_context *smu)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->baco_reset)
+- ret = smu->funcs->baco_reset(smu);
++ if (smu->ppt_funcs->baco_reset)
++ ret = smu->ppt_funcs->baco_reset(smu);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2424,8 +2431,8 @@ int smu_mode2_reset(struct smu_context *smu)
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->mode2_reset)
+- ret = smu->funcs->mode2_reset(smu);
++ if (smu->ppt_funcs->mode2_reset)
++ ret = smu->ppt_funcs->mode2_reset(smu);
+
+ mutex_unlock(&smu->mutex);
+
+@@ -2439,8 +2446,8 @@ int smu_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->funcs->get_max_sustainable_clocks_by_dc)
+- ret = smu->funcs->get_max_sustainable_clocks_by_dc(smu, max_clocks);
++ if (smu->ppt_funcs->get_max_sustainable_clocks_by_dc)
++ ret = smu->ppt_funcs->get_max_sustainable_clocks_by_dc(smu, max_clocks);
+
+ mutex_unlock(&smu->mutex);
+
+diff --git a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
+index a2262464d141..ffefa89c295b 100644
+--- a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
+@@ -1048,7 +1048,7 @@ static int arcturus_read_sensor(struct smu_context *smu,
+ *size = 4;
+ break;
+ default:
+- ret = smu_smc_read_sensor(smu, sensor, data, size);
++ ret = smu_v11_0_read_sensor(smu, sensor, data, size);
+ }
+ mutex_unlock(&smu->sensor_lock);
+
+@@ -1964,6 +1964,55 @@ static const struct pptable_funcs arcturus_ppt_funcs = {
+ .get_power_limit = arcturus_get_power_limit,
+ .is_dpm_running = arcturus_is_dpm_running,
+ .dpm_set_uvd_enable = arcturus_dpm_set_uvd_enable,
++ .init_microcode = smu_v11_0_init_microcode,
++ .load_microcode = smu_v11_0_load_microcode,
++ .init_smc_tables = smu_v11_0_init_smc_tables,
++ .fini_smc_tables = smu_v11_0_fini_smc_tables,
++ .init_power = smu_v11_0_init_power,
++ .fini_power = smu_v11_0_fini_power,
++ .check_fw_status = smu_v11_0_check_fw_status,
++ .setup_pptable = smu_v11_0_setup_pptable,
++ .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values,
++ .get_clk_info_from_vbios = smu_v11_0_get_clk_info_from_vbios,
++ .check_pptable = smu_v11_0_check_pptable,
++ .parse_pptable = smu_v11_0_parse_pptable,
++ .populate_smc_tables = smu_v11_0_populate_smc_pptable,
++ .check_fw_version = smu_v11_0_check_fw_version,
++ .write_pptable = smu_v11_0_write_pptable,
++ .set_min_dcef_deep_sleep = smu_v11_0_set_min_dcef_deep_sleep,
++ .set_tool_table_location = smu_v11_0_set_tool_table_location,
++ .notify_memory_pool_location = smu_v11_0_notify_memory_pool_location,
++ .system_features_control = smu_v11_0_system_features_control,
++ .send_smc_msg = smu_v11_0_send_msg,
++ .send_smc_msg_with_param = smu_v11_0_send_msg_with_param,
++ .read_smc_arg = smu_v11_0_read_arg,
++ .init_display_count = smu_v11_0_init_display_count,
++ .set_allowed_mask = smu_v11_0_set_allowed_mask,
++ .get_enabled_mask = smu_v11_0_get_enabled_mask,
++ .notify_display_change = smu_v11_0_notify_display_change,
++ .set_power_limit = smu_v11_0_set_power_limit,
++ .get_current_clk_freq = smu_v11_0_get_current_clk_freq,
++ .init_max_sustainable_clocks = smu_v11_0_init_max_sustainable_clocks,
++ .start_thermal_control = smu_v11_0_start_thermal_control,
++ .stop_thermal_control = smu_v11_0_stop_thermal_control,
++ .set_deep_sleep_dcefclk = smu_v11_0_set_deep_sleep_dcefclk,
++ .display_clock_voltage_request = smu_v11_0_display_clock_voltage_request,
++ .get_fan_control_mode = smu_v11_0_get_fan_control_mode,
++ .set_fan_control_mode = smu_v11_0_set_fan_control_mode,
++ .set_fan_speed_percent = smu_v11_0_set_fan_speed_percent,
++ .set_fan_speed_rpm = smu_v11_0_set_fan_speed_rpm,
++ .set_xgmi_pstate = smu_v11_0_set_xgmi_pstate,
++ .gfx_off_control = smu_v11_0_gfx_off_control,
++ .register_irq_handler = smu_v11_0_register_irq_handler,
++ .set_azalia_d3_pme = smu_v11_0_set_azalia_d3_pme,
++ .get_max_sustainable_clocks_by_dc = smu_v11_0_get_max_sustainable_clocks_by_dc,
++ .baco_is_support= smu_v11_0_baco_is_support,
++ .baco_get_state = smu_v11_0_baco_get_state,
++ .baco_set_state = smu_v11_0_baco_set_state,
++ .baco_reset = smu_v11_0_baco_reset,
++ .get_dpm_ultimate_freq = smu_v11_0_get_dpm_ultimate_freq,
++ .set_soft_freq_limited_range = smu_v11_0_set_soft_freq_limited_range,
++ .override_pcie_parameters = smu_v11_0_override_pcie_parameters,
+ };
+
+ void arcturus_set_ppt_funcs(struct smu_context *smu)
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+index 79fe32acc838..402a021f237b 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -347,7 +347,6 @@ struct smu_context
+ struct amdgpu_device *adev;
+ struct amdgpu_irq_src *irq_source;
+
+- const struct smu_funcs *funcs;
+ const struct pptable_funcs *ppt_funcs;
+ struct mutex mutex;
+ struct mutex sensor_lock;
+@@ -471,16 +470,12 @@ struct pptable_funcs {
+ int (*set_df_cstate)(struct smu_context *smu, enum pp_df_cstate state);
+ int (*update_pcie_parameters)(struct smu_context *smu, uint32_t pcie_gen_cap, uint32_t pcie_width_cap);
+ int (*get_dpm_clock_table)(struct smu_context *smu, struct dpm_clocks *clock_table);
+-};
+-
+-struct smu_funcs
+-{
+ int (*init_microcode)(struct smu_context *smu);
++ int (*load_microcode)(struct smu_context *smu);
+ int (*init_smc_tables)(struct smu_context *smu);
+ int (*fini_smc_tables)(struct smu_context *smu);
+ int (*init_power)(struct smu_context *smu);
+ int (*fini_power)(struct smu_context *smu);
+- int (*load_microcode)(struct smu_context *smu);
+ int (*check_fw_status)(struct smu_context *smu);
+ int (*setup_pptable)(struct smu_context *smu);
+ int (*get_vbios_bootup_values)(struct smu_context *smu);
+@@ -510,8 +505,6 @@ struct smu_funcs
+ int (*init_max_sustainable_clocks)(struct smu_context *smu);
+ int (*start_thermal_control)(struct smu_context *smu);
+ int (*stop_thermal_control)(struct smu_context *smu);
+- int (*read_sensor)(struct smu_context *smu, enum amd_pp_sensors sensor,
+- void *data, uint32_t *size);
+ int (*set_deep_sleep_dcefclk)(struct smu_context *smu, uint32_t clk);
+ int (*set_active_display_count)(struct smu_context *smu, uint32_t count);
+ int (*store_cc6_data)(struct smu_context *smu, uint32_t separation_time,
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h b/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
+index 6b2a901492b2..88ee66683271 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
+@@ -131,6 +131,124 @@ enum smu_v11_0_baco_seq {
+ BACO_SEQ_COUNT,
+ };
+
+-void smu_v11_0_set_smu_funcs(struct smu_context *smu);
++int smu_v11_0_init_microcode(struct smu_context *smu);
++
++int smu_v11_0_load_microcode(struct smu_context *smu);
++
++int smu_v11_0_init_smc_tables(struct smu_context *smu);
++
++int smu_v11_0_fini_smc_tables(struct smu_context *smu);
++
++int smu_v11_0_init_power(struct smu_context *smu);
++
++int smu_v11_0_fini_power(struct smu_context *smu);
++
++int smu_v11_0_check_fw_status(struct smu_context *smu);
++
++int smu_v11_0_setup_pptable(struct smu_context *smu);
++
++int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu);
++
++int smu_v11_0_get_clk_info_from_vbios(struct smu_context *smu);
++
++int smu_v11_0_check_pptable(struct smu_context *smu);
++
++int smu_v11_0_parse_pptable(struct smu_context *smu);
++
++int smu_v11_0_populate_smc_pptable(struct smu_context *smu);
++
++int smu_v11_0_check_fw_version(struct smu_context *smu);
++
++int smu_v11_0_write_pptable(struct smu_context *smu);
++
++int smu_v11_0_set_min_dcef_deep_sleep(struct smu_context *smu);
++
++int smu_v11_0_set_tool_table_location(struct smu_context *smu);
++
++int smu_v11_0_notify_memory_pool_location(struct smu_context *smu);
++
++int smu_v11_0_system_features_control(struct smu_context *smu,
++ bool en);
++
++int smu_v11_0_send_msg(struct smu_context *smu, uint16_t msg);
++
++int
++smu_v11_0_send_msg_with_param(struct smu_context *smu, uint16_t msg,
++ uint32_t param);
++
++int smu_v11_0_read_arg(struct smu_context *smu, uint32_t *arg);
++
++int smu_v11_0_init_display_count(struct smu_context *smu, uint32_t count);
++
++int smu_v11_0_set_allowed_mask(struct smu_context *smu);
++
++int smu_v11_0_get_enabled_mask(struct smu_context *smu,
++ uint32_t *feature_mask, uint32_t num);
++
++int smu_v11_0_notify_display_change(struct smu_context *smu);
++
++int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n);
++
++int smu_v11_0_get_current_clk_freq(struct smu_context *smu,
++ enum smu_clk_type clk_id,
++ uint32_t *value);
++
++int smu_v11_0_init_max_sustainable_clocks(struct smu_context *smu);
++
++int smu_v11_0_start_thermal_control(struct smu_context *smu);
++
++int smu_v11_0_stop_thermal_control(struct smu_context *smu);
++
++int smu_v11_0_read_sensor(struct smu_context *smu,
++ enum amd_pp_sensors sensor,
++ void *data, uint32_t *size);
++
++int smu_v11_0_set_deep_sleep_dcefclk(struct smu_context *smu, uint32_t clk);
++
++int
++smu_v11_0_display_clock_voltage_request(struct smu_context *smu,
++ struct pp_display_clock_request
++ *clock_req);
++
++uint32_t
++smu_v11_0_get_fan_control_mode(struct smu_context *smu);
++
++int
++smu_v11_0_set_fan_control_mode(struct smu_context *smu,
++ uint32_t mode);
++
++int
++smu_v11_0_set_fan_speed_percent(struct smu_context *smu, uint32_t speed);
++
++int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,
++ uint32_t speed);
++
++int smu_v11_0_set_xgmi_pstate(struct smu_context *smu,
++ uint32_t pstate);
++
++int smu_v11_0_gfx_off_control(struct smu_context *smu, bool enable);
++
++int smu_v11_0_register_irq_handler(struct smu_context *smu);
++
++int smu_v11_0_set_azalia_d3_pme(struct smu_context *smu);
++
++int smu_v11_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
++ struct pp_smu_nv_clock_table *max_clocks);
++
++bool smu_v11_0_baco_is_support(struct smu_context *smu);
++
++enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu);
++
++int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state state);
++
++int smu_v11_0_baco_reset(struct smu_context *smu);
++
++int smu_v11_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk_type clk_type,
++ uint32_t *min, uint32_t *max);
++
++int smu_v11_0_set_soft_freq_limited_range(struct smu_context *smu, enum smu_clk_type clk_type,
++ uint32_t min, uint32_t max);
++
++int smu_v11_0_override_pcie_parameters(struct smu_context *smu);
+
+ #endif
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu_v12_0.h b/drivers/gpu/drm/amd/powerplay/inc/smu_v12_0.h
+index acf3db12f59f..9b9f5df0911c 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/smu_v12_0.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/smu_v12_0.h
+@@ -37,6 +37,45 @@ struct smu_12_0_cmn2aisc_mapping {
+ int map_to;
+ };
+
+-void smu_v12_0_set_smu_funcs(struct smu_context *smu);
++int smu_v12_0_send_msg_without_waiting(struct smu_context *smu,
++ uint16_t msg);
++
++int smu_v12_0_read_arg(struct smu_context *smu, uint32_t *arg);
++
++int smu_v12_0_wait_for_response(struct smu_context *smu);
++
++int smu_v12_0_send_msg(struct smu_context *smu, uint16_t msg);
++
++int
++smu_v12_0_send_msg_with_param(struct smu_context *smu, uint16_t msg,
++ uint32_t param);
++
++int smu_v12_0_check_fw_status(struct smu_context *smu);
++
++int smu_v12_0_check_fw_version(struct smu_context *smu);
++
++int smu_v12_0_powergate_sdma(struct smu_context *smu, bool gate);
++
++int smu_v12_0_powergate_vcn(struct smu_context *smu, bool gate);
++
++int smu_v12_0_set_gfx_cgpg(struct smu_context *smu, bool enable);
++
++uint32_t smu_v12_0_get_gfxoff_status(struct smu_context *smu);
++
++int smu_v12_0_gfx_off_control(struct smu_context *smu, bool enable);
++
++int smu_v12_0_init_smc_tables(struct smu_context *smu);
++
++int smu_v12_0_fini_smc_tables(struct smu_context *smu);
++
++int smu_v12_0_populate_smc_tables(struct smu_context *smu);
++
++int smu_v12_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk_type clk_type,
++ uint32_t *min, uint32_t *max);
++
++int smu_v12_0_mode2_reset(struct smu_context *smu);
++
++int smu_v12_0_set_soft_freq_limited_range(struct smu_context *smu, enum smu_clk_type clk_type,
++ uint32_t min, uint32_t max);
+
+ #endif
+diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+index 54d5c91dda23..34390656a03e 100644
+--- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+@@ -1268,8 +1268,7 @@ static int navi10_notify_smc_dispaly_config(struct smu_context *smu)
+ clock_req.clock_type = amd_pp_dcef_clock;
+ clock_req.clock_freq_in_khz = min_clocks.dcef_clock * 10;
+
+- if (smu->funcs->display_clock_voltage_request)
+- ret = smu->funcs->display_clock_voltage_request(smu, &clock_req);
++ ret = smu_v11_0_display_clock_voltage_request(smu, &clock_req);
+ if (!ret) {
+ if (smu_feature_is_supported(smu, SMU_FEATURE_DS_DCEFCLK_BIT)) {
+ ret = smu_send_smc_msg_with_param(smu,
+@@ -1424,7 +1423,7 @@ static int navi10_read_sensor(struct smu_context *smu,
+ *size = 4;
+ break;
+ default:
+- ret = smu_smc_read_sensor(smu, sensor, data, size);
++ ret = smu_v11_0_read_sensor(smu, sensor, data, size);
+ }
+ mutex_unlock(&smu->sensor_lock);
+
+@@ -1693,6 +1692,55 @@ static const struct pptable_funcs navi10_ppt_funcs = {
+ .display_disable_memory_clock_switch = navi10_display_disable_memory_clock_switch,
+ .get_power_limit = navi10_get_power_limit,
+ .update_pcie_parameters = navi10_update_pcie_parameters,
++ .init_microcode = smu_v11_0_init_microcode,
++ .load_microcode = smu_v11_0_load_microcode,
++ .init_smc_tables = smu_v11_0_init_smc_tables,
++ .fini_smc_tables = smu_v11_0_fini_smc_tables,
++ .init_power = smu_v11_0_init_power,
++ .fini_power = smu_v11_0_fini_power,
++ .check_fw_status = smu_v11_0_check_fw_status,
++ .setup_pptable = smu_v11_0_setup_pptable,
++ .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values,
++ .get_clk_info_from_vbios = smu_v11_0_get_clk_info_from_vbios,
++ .check_pptable = smu_v11_0_check_pptable,
++ .parse_pptable = smu_v11_0_parse_pptable,
++ .populate_smc_tables = smu_v11_0_populate_smc_pptable,
++ .check_fw_version = smu_v11_0_check_fw_version,
++ .write_pptable = smu_v11_0_write_pptable,
++ .set_min_dcef_deep_sleep = smu_v11_0_set_min_dcef_deep_sleep,
++ .set_tool_table_location = smu_v11_0_set_tool_table_location,
++ .notify_memory_pool_location = smu_v11_0_notify_memory_pool_location,
++ .system_features_control = smu_v11_0_system_features_control,
++ .send_smc_msg = smu_v11_0_send_msg,
++ .send_smc_msg_with_param = smu_v11_0_send_msg_with_param,
++ .read_smc_arg = smu_v11_0_read_arg,
++ .init_display_count = smu_v11_0_init_display_count,
++ .set_allowed_mask = smu_v11_0_set_allowed_mask,
++ .get_enabled_mask = smu_v11_0_get_enabled_mask,
++ .notify_display_change = smu_v11_0_notify_display_change,
++ .set_power_limit = smu_v11_0_set_power_limit,
++ .get_current_clk_freq = smu_v11_0_get_current_clk_freq,
++ .init_max_sustainable_clocks = smu_v11_0_init_max_sustainable_clocks,
++ .start_thermal_control = smu_v11_0_start_thermal_control,
++ .stop_thermal_control = smu_v11_0_stop_thermal_control,
++ .set_deep_sleep_dcefclk = smu_v11_0_set_deep_sleep_dcefclk,
++ .display_clock_voltage_request = smu_v11_0_display_clock_voltage_request,
++ .get_fan_control_mode = smu_v11_0_get_fan_control_mode,
++ .set_fan_control_mode = smu_v11_0_set_fan_control_mode,
++ .set_fan_speed_percent = smu_v11_0_set_fan_speed_percent,
++ .set_fan_speed_rpm = smu_v11_0_set_fan_speed_rpm,
++ .set_xgmi_pstate = smu_v11_0_set_xgmi_pstate,
++ .gfx_off_control = smu_v11_0_gfx_off_control,
++ .register_irq_handler = smu_v11_0_register_irq_handler,
++ .set_azalia_d3_pme = smu_v11_0_set_azalia_d3_pme,
++ .get_max_sustainable_clocks_by_dc = smu_v11_0_get_max_sustainable_clocks_by_dc,
++ .baco_is_support= smu_v11_0_baco_is_support,
++ .baco_get_state = smu_v11_0_baco_get_state,
++ .baco_set_state = smu_v11_0_baco_set_state,
++ .baco_reset = smu_v11_0_baco_reset,
++ .get_dpm_ultimate_freq = smu_v11_0_get_dpm_ultimate_freq,
++ .set_soft_freq_limited_range = smu_v11_0_set_soft_freq_limited_range,
++ .override_pcie_parameters = smu_v11_0_override_pcie_parameters,
+ };
+
+ void navi10_set_ppt_funcs(struct smu_context *smu)
+diff --git a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
+index 6df91b1a9daa..45c5f54e60d8 100644
+--- a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
+@@ -691,6 +691,21 @@ static const struct pptable_funcs renoir_ppt_funcs = {
+ .get_dpm_clock_table = renoir_get_dpm_clock_table,
+ .set_watermarks_table = renoir_set_watermarks_table,
+ .get_power_profile_mode = renoir_get_power_profile_mode,
++ .check_fw_status = smu_v12_0_check_fw_status,
++ .check_fw_version = smu_v12_0_check_fw_version,
++ .powergate_sdma = smu_v12_0_powergate_sdma,
++ .powergate_vcn = smu_v12_0_powergate_vcn,
++ .send_smc_msg = smu_v12_0_send_msg,
++ .send_smc_msg_with_param = smu_v12_0_send_msg_with_param,
++ .read_smc_arg = smu_v12_0_read_arg,
++ .set_gfx_cgpg = smu_v12_0_set_gfx_cgpg,
++ .gfx_off_control = smu_v12_0_gfx_off_control,
++ .init_smc_tables = smu_v12_0_init_smc_tables,
++ .fini_smc_tables = smu_v12_0_fini_smc_tables,
++ .populate_smc_tables = smu_v12_0_populate_smc_tables,
++ .get_dpm_ultimate_freq = smu_v12_0_get_dpm_ultimate_freq,
++ .mode2_reset = smu_v12_0_mode2_reset,
++ .set_soft_freq_limited_range = smu_v12_0_set_soft_freq_limited_range,
+ };
+
+ void renoir_set_ppt_funcs(struct smu_context *smu)
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_internal.h b/drivers/gpu/drm/amd/powerplay/smu_internal.h
+index c26eede7e36a..8bcda7871309 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_internal.h
++++ b/drivers/gpu/drm/amd/powerplay/smu_internal.h
+@@ -26,73 +26,73 @@
+ #include "amdgpu_smu.h"
+
+ #define smu_init_microcode(smu) \
+- ((smu)->funcs->init_microcode ? (smu)->funcs->init_microcode((smu)) : 0)
++ ((smu)->ppt_funcs->init_microcode ? (smu)->ppt_funcs->init_microcode((smu)) : 0)
+ #define smu_init_smc_tables(smu) \
+- ((smu)->funcs->init_smc_tables ? (smu)->funcs->init_smc_tables((smu)) : 0)
++ ((smu)->ppt_funcs->init_smc_tables ? (smu)->ppt_funcs->init_smc_tables((smu)) : 0)
+ #define smu_fini_smc_tables(smu) \
+- ((smu)->funcs->fini_smc_tables ? (smu)->funcs->fini_smc_tables((smu)) : 0)
++ ((smu)->ppt_funcs->fini_smc_tables ? (smu)->ppt_funcs->fini_smc_tables((smu)) : 0)
+ #define smu_init_power(smu) \
+- ((smu)->funcs->init_power ? (smu)->funcs->init_power((smu)) : 0)
++ ((smu)->ppt_funcs->init_power ? (smu)->ppt_funcs->init_power((smu)) : 0)
+ #define smu_fini_power(smu) \
+- ((smu)->funcs->fini_power ? (smu)->funcs->fini_power((smu)) : 0)
++ ((smu)->ppt_funcs->fini_power ? (smu)->ppt_funcs->fini_power((smu)) : 0)
+
+ #define smu_setup_pptable(smu) \
+- ((smu)->funcs->setup_pptable ? (smu)->funcs->setup_pptable((smu)) : 0)
++ ((smu)->ppt_funcs->setup_pptable ? (smu)->ppt_funcs->setup_pptable((smu)) : 0)
+ #define smu_powergate_sdma(smu, gate) \
+- ((smu)->funcs->powergate_sdma ? (smu)->funcs->powergate_sdma((smu), (gate)) : 0)
++ ((smu)->ppt_funcs->powergate_sdma ? (smu)->ppt_funcs->powergate_sdma((smu), (gate)) : 0)
+ #define smu_powergate_vcn(smu, gate) \
+- ((smu)->funcs->powergate_vcn ? (smu)->funcs->powergate_vcn((smu), (gate)) : 0)
++ ((smu)->ppt_funcs->powergate_vcn ? (smu)->ppt_funcs->powergate_vcn((smu), (gate)) : 0)
+
+ #define smu_get_vbios_bootup_values(smu) \
+- ((smu)->funcs->get_vbios_bootup_values ? (smu)->funcs->get_vbios_bootup_values((smu)) : 0)
++ ((smu)->ppt_funcs->get_vbios_bootup_values ? (smu)->ppt_funcs->get_vbios_bootup_values((smu)) : 0)
+ #define smu_get_clk_info_from_vbios(smu) \
+- ((smu)->funcs->get_clk_info_from_vbios ? (smu)->funcs->get_clk_info_from_vbios((smu)) : 0)
++ ((smu)->ppt_funcs->get_clk_info_from_vbios ? (smu)->ppt_funcs->get_clk_info_from_vbios((smu)) : 0)
+ #define smu_check_pptable(smu) \
+- ((smu)->funcs->check_pptable ? (smu)->funcs->check_pptable((smu)) : 0)
++ ((smu)->ppt_funcs->check_pptable ? (smu)->ppt_funcs->check_pptable((smu)) : 0)
+ #define smu_parse_pptable(smu) \
+- ((smu)->funcs->parse_pptable ? (smu)->funcs->parse_pptable((smu)) : 0)
++ ((smu)->ppt_funcs->parse_pptable ? (smu)->ppt_funcs->parse_pptable((smu)) : 0)
+ #define smu_populate_smc_tables(smu) \
+- ((smu)->funcs->populate_smc_tables ? (smu)->funcs->populate_smc_tables((smu)) : 0)
++ ((smu)->ppt_funcs->populate_smc_tables ? (smu)->ppt_funcs->populate_smc_tables((smu)) : 0)
+ #define smu_check_fw_version(smu) \
+- ((smu)->funcs->check_fw_version ? (smu)->funcs->check_fw_version((smu)) : 0)
++ ((smu)->ppt_funcs->check_fw_version ? (smu)->ppt_funcs->check_fw_version((smu)) : 0)
+ #define smu_write_pptable(smu) \
+- ((smu)->funcs->write_pptable ? (smu)->funcs->write_pptable((smu)) : 0)
++ ((smu)->ppt_funcs->write_pptable ? (smu)->ppt_funcs->write_pptable((smu)) : 0)
+ #define smu_set_min_dcef_deep_sleep(smu) \
+- ((smu)->funcs->set_min_dcef_deep_sleep ? (smu)->funcs->set_min_dcef_deep_sleep((smu)) : 0)
++ ((smu)->ppt_funcs->set_min_dcef_deep_sleep ? (smu)->ppt_funcs->set_min_dcef_deep_sleep((smu)) : 0)
+ #define smu_set_tool_table_location(smu) \
+- ((smu)->funcs->set_tool_table_location ? (smu)->funcs->set_tool_table_location((smu)) : 0)
++ ((smu)->ppt_funcs->set_tool_table_location ? (smu)->ppt_funcs->set_tool_table_location((smu)) : 0)
+ #define smu_notify_memory_pool_location(smu) \
+- ((smu)->funcs->notify_memory_pool_location ? (smu)->funcs->notify_memory_pool_location((smu)) : 0)
++ ((smu)->ppt_funcs->notify_memory_pool_location ? (smu)->ppt_funcs->notify_memory_pool_location((smu)) : 0)
+ #define smu_gfx_off_control(smu, enable) \
+- ((smu)->funcs->gfx_off_control ? (smu)->funcs->gfx_off_control((smu), (enable)) : 0)
++ ((smu)->ppt_funcs->gfx_off_control ? (smu)->ppt_funcs->gfx_off_control((smu), (enable)) : 0)
+
+ #define smu_set_last_dcef_min_deep_sleep_clk(smu) \
+- ((smu)->funcs->set_last_dcef_min_deep_sleep_clk ? (smu)->funcs->set_last_dcef_min_deep_sleep_clk((smu)) : 0)
++ ((smu)->ppt_funcs->set_last_dcef_min_deep_sleep_clk ? (smu)->ppt_funcs->set_last_dcef_min_deep_sleep_clk((smu)) : 0)
+ #define smu_system_features_control(smu, en) \
+- ((smu)->funcs->system_features_control ? (smu)->funcs->system_features_control((smu), (en)) : 0)
++ ((smu)->ppt_funcs->system_features_control ? (smu)->ppt_funcs->system_features_control((smu), (en)) : 0)
+ #define smu_init_max_sustainable_clocks(smu) \
+- ((smu)->funcs->init_max_sustainable_clocks ? (smu)->funcs->init_max_sustainable_clocks((smu)) : 0)
++ ((smu)->ppt_funcs->init_max_sustainable_clocks ? (smu)->ppt_funcs->init_max_sustainable_clocks((smu)) : 0)
+ #define smu_set_default_od_settings(smu, initialize) \
+ ((smu)->ppt_funcs->set_default_od_settings ? (smu)->ppt_funcs->set_default_od_settings((smu), (initialize)) : 0)
+
+ #define smu_send_smc_msg(smu, msg) \
+- ((smu)->funcs->send_smc_msg? (smu)->funcs->send_smc_msg((smu), (msg)) : 0)
++ ((smu)->ppt_funcs->send_smc_msg? (smu)->ppt_funcs->send_smc_msg((smu), (msg)) : 0)
+ #define smu_send_smc_msg_with_param(smu, msg, param) \
+- ((smu)->funcs->send_smc_msg_with_param? (smu)->funcs->send_smc_msg_with_param((smu), (msg), (param)) : 0)
++ ((smu)->ppt_funcs->send_smc_msg_with_param? (smu)->ppt_funcs->send_smc_msg_with_param((smu), (msg), (param)) : 0)
+ #define smu_read_smc_arg(smu, arg) \
+- ((smu)->funcs->read_smc_arg? (smu)->funcs->read_smc_arg((smu), (arg)) : 0)
++ ((smu)->ppt_funcs->read_smc_arg? (smu)->ppt_funcs->read_smc_arg((smu), (arg)) : 0)
+ #define smu_alloc_dpm_context(smu) \
+ ((smu)->ppt_funcs->alloc_dpm_context ? (smu)->ppt_funcs->alloc_dpm_context((smu)) : 0)
+ #define smu_init_display_count(smu, count) \
+- ((smu)->funcs->init_display_count ? (smu)->funcs->init_display_count((smu), (count)) : 0)
++ ((smu)->ppt_funcs->init_display_count ? (smu)->ppt_funcs->init_display_count((smu), (count)) : 0)
+ #define smu_feature_set_allowed_mask(smu) \
+- ((smu)->funcs->set_allowed_mask? (smu)->funcs->set_allowed_mask((smu)) : 0)
++ ((smu)->ppt_funcs->set_allowed_mask? (smu)->ppt_funcs->set_allowed_mask((smu)) : 0)
+ #define smu_feature_get_enabled_mask(smu, mask, num) \
+- ((smu)->funcs->get_enabled_mask? (smu)->funcs->get_enabled_mask((smu), (mask), (num)) : 0)
++ ((smu)->ppt_funcs->get_enabled_mask? (smu)->ppt_funcs->get_enabled_mask((smu), (mask), (num)) : 0)
+ #define smu_is_dpm_running(smu) \
+ ((smu)->ppt_funcs->is_dpm_running ? (smu)->ppt_funcs->is_dpm_running((smu)) : 0)
+ #define smu_notify_display_change(smu) \
+- ((smu)->funcs->notify_display_change? (smu)->funcs->notify_display_change((smu)) : 0)
++ ((smu)->ppt_funcs->notify_display_change? (smu)->ppt_funcs->notify_display_change((smu)) : 0)
+ #define smu_store_powerplay_table(smu) \
+ ((smu)->ppt_funcs->store_powerplay_table ? (smu)->ppt_funcs->store_powerplay_table((smu)) : 0)
+ #define smu_check_powerplay_table(smu) \
+@@ -107,19 +107,19 @@
+ ((smu)->ppt_funcs->set_default_od8_settings ? (smu)->ppt_funcs->set_default_od8_settings((smu)) : 0)
+
+ #define smu_get_current_clk_freq(smu, clk_id, value) \
+- ((smu)->funcs->get_current_clk_freq? (smu)->funcs->get_current_clk_freq((smu), (clk_id), (value)) : 0)
++ ((smu)->ppt_funcs->get_current_clk_freq? (smu)->ppt_funcs->get_current_clk_freq((smu), (clk_id), (value)) : 0)
+
+ #define smu_tables_init(smu, tab) \
+ ((smu)->ppt_funcs->tables_init ? (smu)->ppt_funcs->tables_init((smu), (tab)) : 0)
+ #define smu_set_thermal_fan_table(smu) \
+ ((smu)->ppt_funcs->set_thermal_fan_table ? (smu)->ppt_funcs->set_thermal_fan_table((smu)) : 0)
+ #define smu_start_thermal_control(smu) \
+- ((smu)->funcs->start_thermal_control? (smu)->funcs->start_thermal_control((smu)) : 0)
++ ((smu)->ppt_funcs->start_thermal_control? (smu)->ppt_funcs->start_thermal_control((smu)) : 0)
+ #define smu_stop_thermal_control(smu) \
+- ((smu)->funcs->stop_thermal_control? (smu)->funcs->stop_thermal_control((smu)) : 0)
++ ((smu)->ppt_funcs->stop_thermal_control? (smu)->ppt_funcs->stop_thermal_control((smu)) : 0)
+
+ #define smu_smc_read_sensor(smu, sensor, data, size) \
+- ((smu)->funcs->read_sensor? (smu)->funcs->read_sensor((smu), (sensor), (data), (size)) : -EINVAL)
++ ((smu)->ppt_funcs->read_sensor? (smu)->ppt_funcs->read_sensor((smu), (sensor), (data), (size)) : -EINVAL)
+
+ #define smu_pre_display_config_changed(smu) \
+ ((smu)->ppt_funcs->pre_display_config_changed ? (smu)->ppt_funcs->pre_display_config_changed((smu)) : 0)
+@@ -157,14 +157,14 @@
+
+
+ #define smu_store_cc6_data(smu, st, cc6_dis, pst_dis, pst_sw_dis) \
+- ((smu)->funcs->store_cc6_data ? (smu)->funcs->store_cc6_data((smu), (st), (cc6_dis), (pst_dis), (pst_sw_dis)) : 0)
++ ((smu)->ppt_funcs->store_cc6_data ? (smu)->ppt_funcs->store_cc6_data((smu), (st), (cc6_dis), (pst_dis), (pst_sw_dis)) : 0)
+
+ #define smu_get_dal_power_level(smu, clocks) \
+- ((smu)->funcs->get_dal_power_level ? (smu)->funcs->get_dal_power_level((smu), (clocks)) : 0)
++ ((smu)->ppt_funcs->get_dal_power_level ? (smu)->ppt_funcs->get_dal_power_level((smu), (clocks)) : 0)
+ #define smu_get_perf_level(smu, designation, level) \
+- ((smu)->funcs->get_perf_level ? (smu)->funcs->get_perf_level((smu), (designation), (level)) : 0)
++ ((smu)->ppt_funcs->get_perf_level ? (smu)->ppt_funcs->get_perf_level((smu), (designation), (level)) : 0)
+ #define smu_get_current_shallow_sleep_clocks(smu, clocks) \
+- ((smu)->funcs->get_current_shallow_sleep_clocks ? (smu)->funcs->get_current_shallow_sleep_clocks((smu), (clocks)) : 0)
++ ((smu)->ppt_funcs->get_current_shallow_sleep_clocks ? (smu)->ppt_funcs->get_current_shallow_sleep_clocks((smu), (clocks)) : 0)
+
+ #define smu_dpm_set_uvd_enable(smu, enable) \
+ ((smu)->ppt_funcs->dpm_set_uvd_enable ? (smu)->ppt_funcs->dpm_set_uvd_enable((smu), (enable)) : 0)
+@@ -180,10 +180,10 @@
+ #define smu_get_thermal_temperature_range(smu, range) \
+ ((smu)->ppt_funcs->get_thermal_temperature_range? (smu)->ppt_funcs->get_thermal_temperature_range((smu), (range)) : 0)
+ #define smu_register_irq_handler(smu) \
+- ((smu)->funcs->register_irq_handler ? (smu)->funcs->register_irq_handler(smu) : 0)
++ ((smu)->ppt_funcs->register_irq_handler ? (smu)->ppt_funcs->register_irq_handler(smu) : 0)
+
+ #define smu_get_dpm_ultimate_freq(smu, param, min, max) \
+- ((smu)->funcs->get_dpm_ultimate_freq ? (smu)->funcs->get_dpm_ultimate_freq((smu), (param), (min), (max)) : 0)
++ ((smu)->ppt_funcs->get_dpm_ultimate_freq ? (smu)->ppt_funcs->get_dpm_ultimate_freq((smu), (param), (min), (max)) : 0)
+
+ #define smu_asic_set_performance_level(smu, level) \
+ ((smu)->ppt_funcs->set_performance_level? (smu)->ppt_funcs->set_performance_level((smu), (level)) : -EINVAL);
+@@ -193,10 +193,10 @@
+ ((smu)->ppt_funcs->get_dpm_clk_limited ? (smu)->ppt_funcs->get_dpm_clk_limited((smu), (clk_type), (dpm_level), (freq)) : -EINVAL)
+
+ #define smu_set_soft_freq_limited_range(smu, clk_type, min, max) \
+- ((smu)->funcs->set_soft_freq_limited_range ? (smu)->funcs->set_soft_freq_limited_range((smu), (clk_type), (min), (max)) : -EINVAL)
++ ((smu)->ppt_funcs->set_soft_freq_limited_range ? (smu)->ppt_funcs->set_soft_freq_limited_range((smu), (clk_type), (min), (max)) : -EINVAL)
+
+ #define smu_override_pcie_parameters(smu) \
+- ((smu)->funcs->override_pcie_parameters ? (smu)->funcs->override_pcie_parameters((smu)) : 0)
++ ((smu)->ppt_funcs->override_pcie_parameters ? (smu)->ppt_funcs->override_pcie_parameters((smu)) : 0)
+
+ #define smu_update_pcie_parameters(smu, pcie_gen_cap, pcie_width_cap) \
+ ((smu)->ppt_funcs->update_pcie_parameters ? (smu)->ppt_funcs->update_pcie_parameters((smu), (pcie_gen_cap), (pcie_width_cap)) : 0)
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+index 6794fc4cacb5..7e882999abad 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+@@ -30,9 +30,6 @@
+ #include "smu_v11_0.h"
+ #include "soc15_common.h"
+ #include "atom.h"
+-#include "vega20_ppt.h"
+-#include "arcturus_ppt.h"
+-#include "navi10_ppt.h"
+ #include "amd_pcie.h"
+
+ #include "asic_reg/thm/thm_11_0_2_offset.h"
+@@ -60,7 +57,7 @@ static int smu_v11_0_send_msg_without_waiting(struct smu_context *smu,
+ return 0;
+ }
+
+-static int smu_v11_0_read_arg(struct smu_context *smu, uint32_t *arg)
++int smu_v11_0_read_arg(struct smu_context *smu, uint32_t *arg)
+ {
+ struct amdgpu_device *adev = smu->adev;
+
+@@ -87,7 +84,7 @@ static int smu_v11_0_wait_for_response(struct smu_context *smu)
+ return RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90) == 0x1 ? 0 : -EIO;
+ }
+
+-static int smu_v11_0_send_msg(struct smu_context *smu, uint16_t msg)
++int smu_v11_0_send_msg(struct smu_context *smu, uint16_t msg)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ int ret = 0, index = 0;
+@@ -112,7 +109,7 @@ static int smu_v11_0_send_msg(struct smu_context *smu, uint16_t msg)
+
+ }
+
+-static int
++int
+ smu_v11_0_send_msg_with_param(struct smu_context *smu, uint16_t msg,
+ uint32_t param)
+ {
+@@ -143,7 +140,7 @@ smu_v11_0_send_msg_with_param(struct smu_context *smu, uint16_t msg,
+ return ret;
+ }
+
+-static int smu_v11_0_init_microcode(struct smu_context *smu)
++int smu_v11_0_init_microcode(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ const char *chip_name;
+@@ -205,7 +202,7 @@ static int smu_v11_0_init_microcode(struct smu_context *smu)
+ return err;
+ }
+
+-static int smu_v11_0_load_microcode(struct smu_context *smu)
++int smu_v11_0_load_microcode(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ const uint32_t *src;
+@@ -243,7 +240,7 @@ static int smu_v11_0_load_microcode(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v11_0_check_fw_status(struct smu_context *smu)
++int smu_v11_0_check_fw_status(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ uint32_t mp1_fw_flags;
+@@ -258,7 +255,7 @@ static int smu_v11_0_check_fw_status(struct smu_context *smu)
+ return -EIO;
+ }
+
+-static int smu_v11_0_check_fw_version(struct smu_context *smu)
++int smu_v11_0_check_fw_version(struct smu_context *smu)
+ {
+ uint32_t if_version = 0xff, smu_version = 0xff;
+ uint16_t smu_major;
+@@ -356,7 +353,7 @@ static int smu_v11_0_set_pptable_v2_1(struct smu_context *smu, void **table,
+ return 0;
+ }
+
+-static int smu_v11_0_setup_pptable(struct smu_context *smu)
++int smu_v11_0_setup_pptable(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ const struct smc_firmware_header_v1_0 *hdr;
+@@ -435,7 +432,7 @@ static int smu_v11_0_fini_dpm_context(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v11_0_init_smc_tables(struct smu_context *smu)
++int smu_v11_0_init_smc_tables(struct smu_context *smu)
+ {
+ struct smu_table_context *smu_table = &smu->smu_table;
+ struct smu_table *tables = NULL;
+@@ -462,7 +459,7 @@ static int smu_v11_0_init_smc_tables(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v11_0_fini_smc_tables(struct smu_context *smu)
++int smu_v11_0_fini_smc_tables(struct smu_context *smu)
+ {
+ struct smu_table_context *smu_table = &smu->smu_table;
+ int ret = 0;
+@@ -482,7 +479,7 @@ static int smu_v11_0_fini_smc_tables(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v11_0_init_power(struct smu_context *smu)
++int smu_v11_0_init_power(struct smu_context *smu)
+ {
+ struct smu_power_context *smu_power = &smu->smu_power;
+
+@@ -500,7 +497,7 @@ static int smu_v11_0_init_power(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v11_0_fini_power(struct smu_context *smu)
++int smu_v11_0_fini_power(struct smu_context *smu)
+ {
+ struct smu_power_context *smu_power = &smu->smu_power;
+
+@@ -577,7 +574,7 @@ int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v11_0_get_clk_info_from_vbios(struct smu_context *smu)
++int smu_v11_0_get_clk_info_from_vbios(struct smu_context *smu)
+ {
+ int ret, index;
+ struct amdgpu_device *adev = smu->adev;
+@@ -674,7 +671,7 @@ static int smu_v11_0_get_clk_info_from_vbios(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v11_0_notify_memory_pool_location(struct smu_context *smu)
++int smu_v11_0_notify_memory_pool_location(struct smu_context *smu)
+ {
+ struct smu_table_context *smu_table = &smu->smu_table;
+ struct smu_table *memory_pool = &smu_table->memory_pool;
+@@ -720,7 +717,7 @@ static int smu_v11_0_notify_memory_pool_location(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_check_pptable(struct smu_context *smu)
++int smu_v11_0_check_pptable(struct smu_context *smu)
+ {
+ int ret;
+
+@@ -728,7 +725,7 @@ static int smu_v11_0_check_pptable(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_parse_pptable(struct smu_context *smu)
++int smu_v11_0_parse_pptable(struct smu_context *smu)
+ {
+ int ret;
+
+@@ -752,7 +749,7 @@ static int smu_v11_0_parse_pptable(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_populate_smc_pptable(struct smu_context *smu)
++int smu_v11_0_populate_smc_pptable(struct smu_context *smu)
+ {
+ int ret;
+
+@@ -761,7 +758,7 @@ static int smu_v11_0_populate_smc_pptable(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_write_pptable(struct smu_context *smu)
++int smu_v11_0_write_pptable(struct smu_context *smu)
+ {
+ struct smu_table_context *table_context = &smu->smu_table;
+ int ret = 0;
+@@ -772,7 +769,7 @@ static int smu_v11_0_write_pptable(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_set_deep_sleep_dcefclk(struct smu_context *smu, uint32_t clk)
++int smu_v11_0_set_deep_sleep_dcefclk(struct smu_context *smu, uint32_t clk)
+ {
+ int ret;
+
+@@ -784,7 +781,7 @@ static int smu_v11_0_set_deep_sleep_dcefclk(struct smu_context *smu, uint32_t cl
+ return ret;
+ }
+
+-static int smu_v11_0_set_min_dcef_deep_sleep(struct smu_context *smu)
++int smu_v11_0_set_min_dcef_deep_sleep(struct smu_context *smu)
+ {
+ struct smu_table_context *table_context = &smu->smu_table;
+
+@@ -793,14 +790,10 @@ static int smu_v11_0_set_min_dcef_deep_sleep(struct smu_context *smu)
+ if (!table_context)
+ return -EINVAL;
+
+- if (smu->funcs->set_deep_sleep_dcefclk)
+- return smu->funcs->set_deep_sleep_dcefclk(smu,
+- table_context->boot_values.dcefclk / 100);
+-
+- return 0;
++ return smu_v11_0_set_deep_sleep_dcefclk(smu, table_context->boot_values.dcefclk / 100);
+ }
+
+-static int smu_v11_0_set_tool_table_location(struct smu_context *smu)
++int smu_v11_0_set_tool_table_location(struct smu_context *smu)
+ {
+ int ret = 0;
+ struct smu_table *tool_table = &smu->smu_table.tables[SMU_TABLE_PMSTATUSLOG];
+@@ -818,7 +811,7 @@ static int smu_v11_0_set_tool_table_location(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_init_display_count(struct smu_context *smu, uint32_t count)
++int smu_v11_0_init_display_count(struct smu_context *smu, uint32_t count)
+ {
+ int ret = 0;
+
+@@ -830,7 +823,7 @@ static int smu_v11_0_init_display_count(struct smu_context *smu, uint32_t count)
+ }
+
+
+-static int smu_v11_0_set_allowed_mask(struct smu_context *smu)
++int smu_v11_0_set_allowed_mask(struct smu_context *smu)
+ {
+ struct smu_feature *feature = &smu->smu_feature;
+ int ret = 0;
+@@ -857,7 +850,7 @@ static int smu_v11_0_set_allowed_mask(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_get_enabled_mask(struct smu_context *smu,
++int smu_v11_0_get_enabled_mask(struct smu_context *smu,
+ uint32_t *feature_mask, uint32_t num)
+ {
+ uint32_t feature_mask_high = 0, feature_mask_low = 0;
+@@ -886,7 +879,7 @@ static int smu_v11_0_get_enabled_mask(struct smu_context *smu,
+ return ret;
+ }
+
+-static int smu_v11_0_system_features_control(struct smu_context *smu,
++int smu_v11_0_system_features_control(struct smu_context *smu,
+ bool en)
+ {
+ struct smu_feature *feature = &smu->smu_feature;
+@@ -912,7 +905,7 @@ static int smu_v11_0_system_features_control(struct smu_context *smu,
+ return ret;
+ }
+
+-static int smu_v11_0_notify_display_change(struct smu_context *smu)
++int smu_v11_0_notify_display_change(struct smu_context *smu)
+ {
+ int ret = 0;
+
+@@ -970,7 +963,7 @@ smu_v11_0_get_max_sustainable_clock(struct smu_context *smu, uint32_t *clock,
+ return ret;
+ }
+
+-static int smu_v11_0_init_max_sustainable_clocks(struct smu_context *smu)
++int smu_v11_0_init_max_sustainable_clocks(struct smu_context *smu)
+ {
+ struct smu_11_0_max_sustainable_clocks *max_sustainable_clocks;
+ int ret = 0;
+@@ -1050,7 +1043,7 @@ static int smu_v11_0_init_max_sustainable_clocks(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n)
++int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n)
+ {
+ int ret = 0;
+
+@@ -1078,7 +1071,7 @@ static int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n)
+ return 0;
+ }
+
+-static int smu_v11_0_get_current_clk_freq(struct smu_context *smu,
++int smu_v11_0_get_current_clk_freq(struct smu_context *smu,
+ enum smu_clk_type clk_id,
+ uint32_t *value)
+ {
+@@ -1157,7 +1150,7 @@ static int smu_v11_0_enable_thermal_alert(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v11_0_start_thermal_control(struct smu_context *smu)
++int smu_v11_0_start_thermal_control(struct smu_context *smu)
+ {
+ int ret = 0;
+ struct smu_temperature_range range;
+@@ -1199,7 +1192,7 @@ static int smu_v11_0_start_thermal_control(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_stop_thermal_control(struct smu_context *smu)
++int smu_v11_0_stop_thermal_control(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+
+@@ -1232,7 +1225,7 @@ static int smu_v11_0_get_gfx_vdd(struct smu_context *smu, uint32_t *value)
+
+ }
+
+-static int smu_v11_0_read_sensor(struct smu_context *smu,
++int smu_v11_0_read_sensor(struct smu_context *smu,
+ enum amd_pp_sensors sensor,
+ void *data, uint32_t *size)
+ {
+@@ -1269,7 +1262,7 @@ static int smu_v11_0_read_sensor(struct smu_context *smu,
+ return ret;
+ }
+
+-static int
++int
+ smu_v11_0_display_clock_voltage_request(struct smu_context *smu,
+ struct pp_display_clock_request
+ *clock_req)
+@@ -1322,7 +1315,7 @@ smu_v11_0_display_clock_voltage_request(struct smu_context *smu,
+ return ret;
+ }
+
+-static int smu_v11_0_gfx_off_control(struct smu_context *smu, bool enable)
++int smu_v11_0_gfx_off_control(struct smu_context *smu, bool enable)
+ {
+ int ret = 0;
+ struct amdgpu_device *adev = smu->adev;
+@@ -1347,7 +1340,7 @@ static int smu_v11_0_gfx_off_control(struct smu_context *smu, bool enable)
+ return ret;
+ }
+
+-static uint32_t
++uint32_t
+ smu_v11_0_get_fan_control_mode(struct smu_context *smu)
+ {
+ if (!smu_feature_is_enabled(smu, SMU_FEATURE_FAN_CONTROL_BIT))
+@@ -1387,7 +1380,7 @@ smu_v11_0_set_fan_static_mode(struct smu_context *smu, uint32_t mode)
+ return 0;
+ }
+
+-static int
++int
+ smu_v11_0_set_fan_speed_percent(struct smu_context *smu, uint32_t speed)
+ {
+ struct amdgpu_device *adev = smu->adev;
+@@ -1416,7 +1409,7 @@ smu_v11_0_set_fan_speed_percent(struct smu_context *smu, uint32_t speed)
+ return smu_v11_0_set_fan_static_mode(smu, FDO_PWM_MODE_STATIC);
+ }
+
+-static int
++int
+ smu_v11_0_set_fan_control_mode(struct smu_context *smu,
+ uint32_t mode)
+ {
+@@ -1444,7 +1437,7 @@ smu_v11_0_set_fan_control_mode(struct smu_context *smu,
+ return ret;
+ }
+
+-static int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,
++int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,
+ uint32_t speed)
+ {
+ struct amdgpu_device *adev = smu->adev;
+@@ -1473,7 +1466,7 @@ static int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,
+ #define XGMI_STATE_D0 1
+ #define XGMI_STATE_D3 0
+
+-static int smu_v11_0_set_xgmi_pstate(struct smu_context *smu,
++int smu_v11_0_set_xgmi_pstate(struct smu_context *smu,
+ uint32_t pstate)
+ {
+ int ret = 0;
+@@ -1525,7 +1518,7 @@ static const struct amdgpu_irq_src_funcs smu_v11_0_irq_funcs= {
+ .process = smu_v11_0_irq_process,
+ };
+
+-static int smu_v11_0_register_irq_handler(struct smu_context *smu)
++int smu_v11_0_register_irq_handler(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ struct amdgpu_irq_src *irq_src = smu->irq_source;
+@@ -1557,7 +1550,7 @@ static int smu_v11_0_register_irq_handler(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
++int smu_v11_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
+ struct pp_smu_nv_clock_table *max_clocks)
+ {
+ struct smu_table_context *table_context = &smu->smu_table;
+@@ -1587,7 +1580,7 @@ static int smu_v11_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
+ return 0;
+ }
+
+-static int smu_v11_0_set_azalia_d3_pme(struct smu_context *smu)
++int smu_v11_0_set_azalia_d3_pme(struct smu_context *smu)
+ {
+ int ret = 0;
+
+@@ -1601,7 +1594,7 @@ static int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu, enum smu_v
+ return smu_send_smc_msg_with_param(smu, SMU_MSG_ArmD3, baco_seq);
+ }
+
+-static bool smu_v11_0_baco_is_support(struct smu_context *smu)
++bool smu_v11_0_baco_is_support(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ struct smu_baco_context *smu_baco = &smu->smu_baco;
+@@ -1625,7 +1618,7 @@ static bool smu_v11_0_baco_is_support(struct smu_context *smu)
+ return false;
+ }
+
+-static enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu)
++enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu)
+ {
+ struct smu_baco_context *smu_baco = &smu->smu_baco;
+ enum smu_baco_state baco_state;
+@@ -1637,7 +1630,7 @@ static enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu)
+ return baco_state;
+ }
+
+-static int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state state)
++int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state state)
+ {
+
+ struct smu_baco_context *smu_baco = &smu->smu_baco;
+@@ -1661,7 +1654,7 @@ static int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state
+ return ret;
+ }
+
+-static int smu_v11_0_baco_reset(struct smu_context *smu)
++int smu_v11_0_baco_reset(struct smu_context *smu)
+ {
+ int ret = 0;
+
+@@ -1682,7 +1675,7 @@ static int smu_v11_0_baco_reset(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v11_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk_type clk_type,
++int smu_v11_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk_type clk_type,
+ uint32_t *min, uint32_t *max)
+ {
+ int ret = 0, clk_id = 0;
+@@ -1717,7 +1710,7 @@ static int smu_v11_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk
+ return ret;
+ }
+
+-static int smu_v11_0_set_soft_freq_limited_range(struct smu_context *smu, enum smu_clk_type clk_type,
++int smu_v11_0_set_soft_freq_limited_range(struct smu_context *smu, enum smu_clk_type clk_type,
+ uint32_t min, uint32_t max)
+ {
+ int ret = 0, clk_id = 0;
+@@ -1746,7 +1739,7 @@ static int smu_v11_0_set_soft_freq_limited_range(struct smu_context *smu, enum s
+ return ret;
+ }
+
+-static int smu_v11_0_override_pcie_parameters(struct smu_context *smu)
++int smu_v11_0_override_pcie_parameters(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ uint32_t pcie_gen = 0, pcie_width = 0;
+@@ -1786,79 +1779,3 @@ static int smu_v11_0_override_pcie_parameters(struct smu_context *smu)
+ return ret;
+
+ }
+-
+-
+-static const struct smu_funcs smu_v11_0_funcs = {
+- .init_microcode = smu_v11_0_init_microcode,
+- .load_microcode = smu_v11_0_load_microcode,
+- .check_fw_status = smu_v11_0_check_fw_status,
+- .check_fw_version = smu_v11_0_check_fw_version,
+- .send_smc_msg = smu_v11_0_send_msg,
+- .send_smc_msg_with_param = smu_v11_0_send_msg_with_param,
+- .read_smc_arg = smu_v11_0_read_arg,
+- .setup_pptable = smu_v11_0_setup_pptable,
+- .init_smc_tables = smu_v11_0_init_smc_tables,
+- .fini_smc_tables = smu_v11_0_fini_smc_tables,
+- .init_power = smu_v11_0_init_power,
+- .fini_power = smu_v11_0_fini_power,
+- .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values,
+- .get_clk_info_from_vbios = smu_v11_0_get_clk_info_from_vbios,
+- .notify_memory_pool_location = smu_v11_0_notify_memory_pool_location,
+- .check_pptable = smu_v11_0_check_pptable,
+- .parse_pptable = smu_v11_0_parse_pptable,
+- .populate_smc_tables = smu_v11_0_populate_smc_pptable,
+- .write_pptable = smu_v11_0_write_pptable,
+- .set_min_dcef_deep_sleep = smu_v11_0_set_min_dcef_deep_sleep,
+- .set_tool_table_location = smu_v11_0_set_tool_table_location,
+- .init_display_count = smu_v11_0_init_display_count,
+- .set_allowed_mask = smu_v11_0_set_allowed_mask,
+- .get_enabled_mask = smu_v11_0_get_enabled_mask,
+- .system_features_control = smu_v11_0_system_features_control,
+- .notify_display_change = smu_v11_0_notify_display_change,
+- .set_power_limit = smu_v11_0_set_power_limit,
+- .get_current_clk_freq = smu_v11_0_get_current_clk_freq,
+- .init_max_sustainable_clocks = smu_v11_0_init_max_sustainable_clocks,
+- .start_thermal_control = smu_v11_0_start_thermal_control,
+- .stop_thermal_control = smu_v11_0_stop_thermal_control,
+- .read_sensor = smu_v11_0_read_sensor,
+- .set_deep_sleep_dcefclk = smu_v11_0_set_deep_sleep_dcefclk,
+- .display_clock_voltage_request = smu_v11_0_display_clock_voltage_request,
+- .get_fan_control_mode = smu_v11_0_get_fan_control_mode,
+- .set_fan_control_mode = smu_v11_0_set_fan_control_mode,
+- .set_fan_speed_percent = smu_v11_0_set_fan_speed_percent,
+- .set_fan_speed_rpm = smu_v11_0_set_fan_speed_rpm,
+- .set_xgmi_pstate = smu_v11_0_set_xgmi_pstate,
+- .gfx_off_control = smu_v11_0_gfx_off_control,
+- .register_irq_handler = smu_v11_0_register_irq_handler,
+- .set_azalia_d3_pme = smu_v11_0_set_azalia_d3_pme,
+- .get_max_sustainable_clocks_by_dc = smu_v11_0_get_max_sustainable_clocks_by_dc,
+- .baco_is_support= smu_v11_0_baco_is_support,
+- .baco_get_state = smu_v11_0_baco_get_state,
+- .baco_set_state = smu_v11_0_baco_set_state,
+- .baco_reset = smu_v11_0_baco_reset,
+- .get_dpm_ultimate_freq = smu_v11_0_get_dpm_ultimate_freq,
+- .set_soft_freq_limited_range = smu_v11_0_set_soft_freq_limited_range,
+- .override_pcie_parameters = smu_v11_0_override_pcie_parameters,
+-};
+-
+-void smu_v11_0_set_smu_funcs(struct smu_context *smu)
+-{
+- struct amdgpu_device *adev = smu->adev;
+-
+- smu->funcs = &smu_v11_0_funcs;
+- switch (adev->asic_type) {
+- case CHIP_VEGA20:
+- vega20_set_ppt_funcs(smu);
+- break;
+- case CHIP_ARCTURUS:
+- arcturus_set_ppt_funcs(smu);
+- break;
+- case CHIP_NAVI10:
+- case CHIP_NAVI14:
+- case CHIP_NAVI12:
+- navi10_set_ppt_funcs(smu);
+- break;
+- default:
+- pr_warn("Unknown asic for smu11\n");
+- }
+-}
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c
+index 92e1c0a3f428..139dd737eaa5 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c
+@@ -30,7 +30,6 @@
+ #include "smu_v12_0.h"
+ #include "soc15_common.h"
+ #include "atom.h"
+-#include "renoir_ppt.h"
+
+ #include "asic_reg/mp/mp_12_0_0_offset.h"
+ #include "asic_reg/mp/mp_12_0_0_sh_mask.h"
+@@ -42,7 +41,7 @@
+ #define SMUIO_GFX_MISC_CNTL__PWR_GFXOFF_STATUS_MASK 0x00000006L
+ #define SMUIO_GFX_MISC_CNTL__PWR_GFXOFF_STATUS__SHIFT 0x1
+
+-static int smu_v12_0_send_msg_without_waiting(struct smu_context *smu,
++int smu_v12_0_send_msg_without_waiting(struct smu_context *smu,
+ uint16_t msg)
+ {
+ struct amdgpu_device *adev = smu->adev;
+@@ -51,7 +50,7 @@ static int smu_v12_0_send_msg_without_waiting(struct smu_context *smu,
+ return 0;
+ }
+
+-static int smu_v12_0_read_arg(struct smu_context *smu, uint32_t *arg)
++int smu_v12_0_read_arg(struct smu_context *smu, uint32_t *arg)
+ {
+ struct amdgpu_device *adev = smu->adev;
+
+@@ -59,7 +58,7 @@ static int smu_v12_0_read_arg(struct smu_context *smu, uint32_t *arg)
+ return 0;
+ }
+
+-static int smu_v12_0_wait_for_response(struct smu_context *smu)
++int smu_v12_0_wait_for_response(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ uint32_t cur_value, i;
+@@ -78,7 +77,7 @@ static int smu_v12_0_wait_for_response(struct smu_context *smu)
+ return RREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90) == 0x1 ? 0 : -EIO;
+ }
+
+-static int smu_v12_0_send_msg(struct smu_context *smu, uint16_t msg)
++int smu_v12_0_send_msg(struct smu_context *smu, uint16_t msg)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ int ret = 0, index = 0;
+@@ -103,7 +102,7 @@ static int smu_v12_0_send_msg(struct smu_context *smu, uint16_t msg)
+
+ }
+
+-static int
++int
+ smu_v12_0_send_msg_with_param(struct smu_context *smu, uint16_t msg,
+ uint32_t param)
+ {
+@@ -133,7 +132,7 @@ smu_v12_0_send_msg_with_param(struct smu_context *smu, uint16_t msg,
+ return ret;
+ }
+
+-static int smu_v12_0_check_fw_status(struct smu_context *smu)
++int smu_v12_0_check_fw_status(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ uint32_t mp1_fw_flags;
+@@ -148,7 +147,7 @@ static int smu_v12_0_check_fw_status(struct smu_context *smu)
+ return -EIO;
+ }
+
+-static int smu_v12_0_check_fw_version(struct smu_context *smu)
++int smu_v12_0_check_fw_version(struct smu_context *smu)
+ {
+ uint32_t if_version = 0xff, smu_version = 0xff;
+ uint16_t smu_major;
+@@ -182,7 +181,7 @@ static int smu_v12_0_check_fw_version(struct smu_context *smu)
+ return ret;
+ }
+
+-static int smu_v12_0_powergate_sdma(struct smu_context *smu, bool gate)
++int smu_v12_0_powergate_sdma(struct smu_context *smu, bool gate)
+ {
+ if (!(smu->adev->flags & AMD_IS_APU))
+ return 0;
+@@ -193,7 +192,7 @@ static int smu_v12_0_powergate_sdma(struct smu_context *smu, bool gate)
+ return smu_send_smc_msg(smu, SMU_MSG_PowerUpSdma);
+ }
+
+-static int smu_v12_0_powergate_vcn(struct smu_context *smu, bool gate)
++int smu_v12_0_powergate_vcn(struct smu_context *smu, bool gate)
+ {
+ if (!(smu->adev->flags & AMD_IS_APU))
+ return 0;
+@@ -204,7 +203,7 @@ static int smu_v12_0_powergate_vcn(struct smu_context *smu, bool gate)
+ return smu_send_smc_msg(smu, SMU_MSG_PowerUpVcn);
+ }
+
+-static int smu_v12_0_set_gfx_cgpg(struct smu_context *smu, bool enable)
++int smu_v12_0_set_gfx_cgpg(struct smu_context *smu, bool enable)
+ {
+ if (!(smu->adev->pg_flags & AMD_PG_SUPPORT_GFX_PG))
+ return 0;
+@@ -225,7 +224,7 @@ static int smu_v12_0_set_gfx_cgpg(struct smu_context *smu, bool enable)
+ * Returns 2=Not in GFXOFF.
+ * Returns 3=Transition into GFXOFF.
+ */
+-static uint32_t smu_v12_0_get_gfxoff_status(struct smu_context *smu)
++uint32_t smu_v12_0_get_gfxoff_status(struct smu_context *smu)
+ {
+ uint32_t reg;
+ uint32_t gfxOff_Status = 0;
+@@ -238,7 +237,7 @@ static uint32_t smu_v12_0_get_gfxoff_status(struct smu_context *smu)
+ return gfxOff_Status;
+ }
+
+-static int smu_v12_0_gfx_off_control(struct smu_context *smu, bool enable)
++int smu_v12_0_gfx_off_control(struct smu_context *smu, bool enable)
+ {
+ int ret = 0, timeout = 500;
+
+@@ -262,7 +261,7 @@ static int smu_v12_0_gfx_off_control(struct smu_context *smu, bool enable)
+ return ret;
+ }
+
+-static int smu_v12_0_init_smc_tables(struct smu_context *smu)
++int smu_v12_0_init_smc_tables(struct smu_context *smu)
+ {
+ struct smu_table_context *smu_table = &smu->smu_table;
+ struct smu_table *tables = NULL;
+@@ -280,7 +279,7 @@ static int smu_v12_0_init_smc_tables(struct smu_context *smu)
+ return smu_tables_init(smu, tables);
+ }
+
+-static int smu_v12_0_fini_smc_tables(struct smu_context *smu)
++int smu_v12_0_fini_smc_tables(struct smu_context *smu)
+ {
+ struct smu_table_context *smu_table = &smu->smu_table;
+
+@@ -296,7 +295,7 @@ static int smu_v12_0_fini_smc_tables(struct smu_context *smu)
+ return 0;
+ }
+
+-static int smu_v12_0_populate_smc_tables(struct smu_context *smu)
++int smu_v12_0_populate_smc_tables(struct smu_context *smu)
+ {
+ struct smu_table_context *smu_table = &smu->smu_table;
+ struct smu_table *table = NULL;
+@@ -311,7 +310,7 @@ static int smu_v12_0_populate_smc_tables(struct smu_context *smu)
+ return smu_update_table(smu, SMU_TABLE_DPMCLOCKS, 0, smu_table->clocks_table, false);
+ }
+
+-static int smu_v12_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk_type clk_type,
++int smu_v12_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk_type clk_type,
+ uint32_t *min, uint32_t *max)
+ {
+ int ret = 0;
+@@ -389,11 +388,11 @@ static int smu_v12_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk
+ return ret;
+ }
+
+-static int smu_v12_0_mode2_reset(struct smu_context *smu){
++int smu_v12_0_mode2_reset(struct smu_context *smu){
+ return smu_v12_0_send_msg_with_param(smu, SMU_MSG_GfxDeviceDriverReset, SMU_RESET_MODE_2);
+ }
+
+-static int smu_v12_0_set_soft_freq_limited_range(struct smu_context *smu, enum smu_clk_type clk_type,
++int smu_v12_0_set_soft_freq_limited_range(struct smu_context *smu, enum smu_clk_type clk_type,
+ uint32_t min, uint32_t max)
+ {
+ int ret = 0;
+@@ -446,36 +445,3 @@ static int smu_v12_0_set_soft_freq_limited_range(struct smu_context *smu, enum s
+
+ return ret;
+ }
+-
+-static const struct smu_funcs smu_v12_0_funcs = {
+- .check_fw_status = smu_v12_0_check_fw_status,
+- .check_fw_version = smu_v12_0_check_fw_version,
+- .powergate_sdma = smu_v12_0_powergate_sdma,
+- .powergate_vcn = smu_v12_0_powergate_vcn,
+- .send_smc_msg = smu_v12_0_send_msg,
+- .send_smc_msg_with_param = smu_v12_0_send_msg_with_param,
+- .read_smc_arg = smu_v12_0_read_arg,
+- .set_gfx_cgpg = smu_v12_0_set_gfx_cgpg,
+- .gfx_off_control = smu_v12_0_gfx_off_control,
+- .init_smc_tables = smu_v12_0_init_smc_tables,
+- .fini_smc_tables = smu_v12_0_fini_smc_tables,
+- .populate_smc_tables = smu_v12_0_populate_smc_tables,
+- .get_dpm_ultimate_freq = smu_v12_0_get_dpm_ultimate_freq,
+- .mode2_reset = smu_v12_0_mode2_reset,
+- .set_soft_freq_limited_range = smu_v12_0_set_soft_freq_limited_range,
+-};
+-
+-void smu_v12_0_set_smu_funcs(struct smu_context *smu)
+-{
+- struct amdgpu_device *adev = smu->adev;
+-
+- smu->funcs = &smu_v12_0_funcs;
+-
+- switch (adev->asic_type) {
+- case CHIP_RENOIR:
+- renoir_set_ppt_funcs(smu);
+- break;
+- default:
+- pr_warn("Unknown asic for smu12\n");
+- }
+-}
+diff --git a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+index 4039efcdcb1f..7125406c6256 100644
+--- a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+@@ -2248,7 +2248,7 @@ vega20_notify_smc_dispaly_config(struct smu_context *smu)
+ if (smu_feature_is_supported(smu, SMU_FEATURE_DPM_DCEFCLK_BIT)) {
+ clock_req.clock_type = amd_pp_dcef_clock;
+ clock_req.clock_freq_in_khz = min_clocks.dcef_clock * 10;
+- if (!smu->funcs->display_clock_voltage_request(smu, &clock_req)) {
++ if (!smu_v11_0_display_clock_voltage_request(smu, &clock_req)) {
+ if (smu_feature_is_supported(smu, SMU_FEATURE_DS_DCEFCLK_BIT)) {
+ ret = smu_send_smc_msg_with_param(smu,
+ SMU_MSG_SetMinDeepSleepDcefclk,
+@@ -3031,7 +3031,7 @@ static int vega20_read_sensor(struct smu_context *smu,
+ *size = 4;
+ break;
+ default:
+- ret = smu_smc_read_sensor(smu, sensor, data, size);
++ ret = smu_v11_0_read_sensor(smu, sensor, data, size);
+ }
+ mutex_unlock(&smu->sensor_lock);
+
+@@ -3212,7 +3212,56 @@ static const struct pptable_funcs vega20_ppt_funcs = {
+ .set_watermarks_table = vega20_set_watermarks_table,
+ .get_thermal_temperature_range = vega20_get_thermal_temperature_range,
+ .set_df_cstate = vega20_set_df_cstate,
+- .update_pcie_parameters = vega20_update_pcie_parameters
++ .update_pcie_parameters = vega20_update_pcie_parameters,
++ .init_microcode = smu_v11_0_init_microcode,
++ .load_microcode = smu_v11_0_load_microcode,
++ .init_smc_tables = smu_v11_0_init_smc_tables,
++ .fini_smc_tables = smu_v11_0_fini_smc_tables,
++ .init_power = smu_v11_0_init_power,
++ .fini_power = smu_v11_0_fini_power,
++ .check_fw_status = smu_v11_0_check_fw_status,
++ .setup_pptable = smu_v11_0_setup_pptable,
++ .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values,
++ .get_clk_info_from_vbios = smu_v11_0_get_clk_info_from_vbios,
++ .check_pptable = smu_v11_0_check_pptable,
++ .parse_pptable = smu_v11_0_parse_pptable,
++ .populate_smc_tables = smu_v11_0_populate_smc_pptable,
++ .check_fw_version = smu_v11_0_check_fw_version,
++ .write_pptable = smu_v11_0_write_pptable,
++ .set_min_dcef_deep_sleep = smu_v11_0_set_min_dcef_deep_sleep,
++ .set_tool_table_location = smu_v11_0_set_tool_table_location,
++ .notify_memory_pool_location = smu_v11_0_notify_memory_pool_location,
++ .system_features_control = smu_v11_0_system_features_control,
++ .send_smc_msg = smu_v11_0_send_msg,
++ .send_smc_msg_with_param = smu_v11_0_send_msg_with_param,
++ .read_smc_arg = smu_v11_0_read_arg,
++ .init_display_count = smu_v11_0_init_display_count,
++ .set_allowed_mask = smu_v11_0_set_allowed_mask,
++ .get_enabled_mask = smu_v11_0_get_enabled_mask,
++ .notify_display_change = smu_v11_0_notify_display_change,
++ .set_power_limit = smu_v11_0_set_power_limit,
++ .get_current_clk_freq = smu_v11_0_get_current_clk_freq,
++ .init_max_sustainable_clocks = smu_v11_0_init_max_sustainable_clocks,
++ .start_thermal_control = smu_v11_0_start_thermal_control,
++ .stop_thermal_control = smu_v11_0_stop_thermal_control,
++ .set_deep_sleep_dcefclk = smu_v11_0_set_deep_sleep_dcefclk,
++ .display_clock_voltage_request = smu_v11_0_display_clock_voltage_request,
++ .get_fan_control_mode = smu_v11_0_get_fan_control_mode,
++ .set_fan_control_mode = smu_v11_0_set_fan_control_mode,
++ .set_fan_speed_percent = smu_v11_0_set_fan_speed_percent,
++ .set_fan_speed_rpm = smu_v11_0_set_fan_speed_rpm,
++ .set_xgmi_pstate = smu_v11_0_set_xgmi_pstate,
++ .gfx_off_control = smu_v11_0_gfx_off_control,
++ .register_irq_handler = smu_v11_0_register_irq_handler,
++ .set_azalia_d3_pme = smu_v11_0_set_azalia_d3_pme,
++ .get_max_sustainable_clocks_by_dc = smu_v11_0_get_max_sustainable_clocks_by_dc,
++ .baco_is_support= smu_v11_0_baco_is_support,
++ .baco_get_state = smu_v11_0_baco_get_state,
++ .baco_set_state = smu_v11_0_baco_set_state,
++ .baco_reset = smu_v11_0_baco_reset,
++ .get_dpm_ultimate_freq = smu_v11_0_get_dpm_ultimate_freq,
++ .set_soft_freq_limited_range = smu_v11_0_set_soft_freq_limited_range,
++ .override_pcie_parameters = smu_v11_0_override_pcie_parameters,
+ };
+
+ void vega20_set_ppt_funcs(struct smu_context *smu)
+--
+2.17.1
+