diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1504-drm-amd-powerplay-add-od-condition-for-power-limit.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1504-drm-amd-powerplay-add-od-condition-for-power-limit.patch | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1504-drm-amd-powerplay-add-od-condition-for-power-limit.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1504-drm-amd-powerplay-add-od-condition-for-power-limit.patch new file mode 100644 index 00000000..ed3ef0e9 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1504-drm-amd-powerplay-add-od-condition-for-power-limit.patch @@ -0,0 +1,80 @@ +From 462421959084ce608496b56a354711e53d5a75cf Mon Sep 17 00:00:00 2001 +From: Likun Gao <Likun.Gao@amd.com> +Date: Fri, 1 Feb 2019 13:22:33 +0800 +Subject: [PATCH 1504/2940] drm/amd/powerplay: add od condition for power limit + +Add condition to judge whether overdrive is enabled and correct power +limit value for overdrive used by power limit interface. + +Signed-off-by: Likun Gao <Likun.Gao@amd.com> +Reviewed-by: Kevin Wang <kevin1.wang@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Reviewed-by: Huang Rui <ray.huang@amd.com> +--- + drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 1 + + drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 15 +++++++++++++++ + drivers/gpu/drm/amd/powerplay/vega20_ppt.c | 1 + + 3 files changed, 17 insertions(+) + +diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h +index 3e79fd9c9cbd..6a4e9f242aaf 100644 +--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h ++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h +@@ -307,6 +307,7 @@ struct smu_table_context + struct smu_table memory_pool; + uint16_t software_shutdown_temp; + uint8_t thermal_controller_type; ++ uint16_t TDPODLimit; + + uint8_t *od_feature_capabilities; + uint32_t *od_settings_max; +diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c +index a3c7d1d5176f..f90410435e4c 100644 +--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c ++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c +@@ -925,6 +925,10 @@ static int smu_v11_0_get_power_limit(struct smu_context *smu, + if (get_default) { + mutex_lock(&smu->mutex); + *limit = smu->default_power_limit; ++ if (smu->od_enabled) { ++ *limit *= (100 + smu->smu_table.TDPODLimit); ++ *limit /= 100; ++ } + mutex_unlock(&smu->mutex); + } else { + ret = smu_send_smc_msg_with_param(smu, SMU_MSG_GetPptLimit, +@@ -942,8 +946,19 @@ static int smu_v11_0_get_power_limit(struct smu_context *smu, + + static int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n) + { ++ uint32_t max_power_limit; + int ret = 0; + ++ if (n == 0) ++ n = smu->default_power_limit; ++ ++ max_power_limit = smu->default_power_limit; ++ ++ if (smu->od_enabled) { ++ max_power_limit *= (100 + smu->smu_table.TDPODLimit); ++ max_power_limit /= 100; ++ } ++ + if (smu_feature_is_enabled(smu, FEATURE_PPT_BIT)) + ret = smu_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, n); + if (ret) { +diff --git a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c +index 6763dcd21cf1..f7188a7fb194 100644 +--- a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c ++++ b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c +@@ -274,6 +274,7 @@ static int vega20_store_powerplay_table(struct smu_context *smu) + + table_context->software_shutdown_temp = powerplay_table->usSoftwareShutdownTemp; + table_context->thermal_controller_type = powerplay_table->ucThermalControllerType; ++ table_context->TDPODLimit = le32_to_cpu(powerplay_table->OverDrive8Table.ODSettingsMax[ATOM_VEGA20_ODSETTING_POWERPERCENTAGE]); + + ret = vega20_setup_od8_information(smu); + +-- +2.17.1 + |