drm/amd/pm: Read BIF STRAP also for BACO check
[ Upstream commit 458020dd4f7109693d4857ed320398e662e8899a ] Avoid reading BIF STRAP each time for BACO capability. Read the STRAP value while checking BACO capability in PPTable. Signed-off-by: Lijo Lazar <lijo.lazar@amd.com> Reviewed-by: Evan Quan <evan.quan@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Stable-dep-of: 0c85c067c9d9 ("drm/amdgpu: disable BACO on special BEIGE_GOBY card") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
6958556285
commit
b0faeff69a
@@ -379,16 +379,31 @@ static int arcturus_set_default_dpm_table(struct smu_context *smu)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arcturus_check_powerplay_table(struct smu_context *smu)
|
static void arcturus_check_bxco_support(struct smu_context *smu)
|
||||||
{
|
{
|
||||||
struct smu_table_context *table_context = &smu->smu_table;
|
struct smu_table_context *table_context = &smu->smu_table;
|
||||||
struct smu_11_0_powerplay_table *powerplay_table =
|
struct smu_11_0_powerplay_table *powerplay_table =
|
||||||
table_context->power_play_table;
|
table_context->power_play_table;
|
||||||
struct smu_baco_context *smu_baco = &smu->smu_baco;
|
struct smu_baco_context *smu_baco = &smu->smu_baco;
|
||||||
|
struct amdgpu_device *adev = smu->adev;
|
||||||
|
uint32_t val;
|
||||||
|
|
||||||
if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_BACO ||
|
if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_BACO ||
|
||||||
powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_MACO)
|
powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_MACO) {
|
||||||
smu_baco->platform_support = true;
|
val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
|
||||||
|
smu_baco->platform_support =
|
||||||
|
(val & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) ? true :
|
||||||
|
false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int arcturus_check_powerplay_table(struct smu_context *smu)
|
||||||
|
{
|
||||||
|
struct smu_table_context *table_context = &smu->smu_table;
|
||||||
|
struct smu_11_0_powerplay_table *powerplay_table =
|
||||||
|
table_context->power_play_table;
|
||||||
|
|
||||||
|
arcturus_check_bxco_support(smu);
|
||||||
|
|
||||||
table_context->thermal_controller_type =
|
table_context->thermal_controller_type =
|
||||||
powerplay_table->thermal_controller_type;
|
powerplay_table->thermal_controller_type;
|
||||||
@@ -2131,13 +2146,11 @@ static void arcturus_get_unique_id(struct smu_context *smu)
|
|||||||
static bool arcturus_is_baco_supported(struct smu_context *smu)
|
static bool arcturus_is_baco_supported(struct smu_context *smu)
|
||||||
{
|
{
|
||||||
struct amdgpu_device *adev = smu->adev;
|
struct amdgpu_device *adev = smu->adev;
|
||||||
uint32_t val;
|
|
||||||
|
|
||||||
if (!smu_v11_0_baco_is_support(smu) || amdgpu_sriov_vf(adev))
|
if (!smu_v11_0_baco_is_support(smu) || amdgpu_sriov_vf(adev))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
|
return true;
|
||||||
return (val & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) ? true : false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arcturus_set_df_cstate(struct smu_context *smu,
|
static int arcturus_set_df_cstate(struct smu_context *smu,
|
||||||
|
@@ -338,19 +338,34 @@ navi10_get_allowed_feature_mask(struct smu_context *smu,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int navi10_check_powerplay_table(struct smu_context *smu)
|
static void navi10_check_bxco_support(struct smu_context *smu)
|
||||||
{
|
{
|
||||||
struct smu_table_context *table_context = &smu->smu_table;
|
struct smu_table_context *table_context = &smu->smu_table;
|
||||||
struct smu_11_0_powerplay_table *powerplay_table =
|
struct smu_11_0_powerplay_table *powerplay_table =
|
||||||
table_context->power_play_table;
|
table_context->power_play_table;
|
||||||
struct smu_baco_context *smu_baco = &smu->smu_baco;
|
struct smu_baco_context *smu_baco = &smu->smu_baco;
|
||||||
|
struct amdgpu_device *adev = smu->adev;
|
||||||
|
uint32_t val;
|
||||||
|
|
||||||
|
if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_BACO ||
|
||||||
|
powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_MACO) {
|
||||||
|
val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
|
||||||
|
smu_baco->platform_support =
|
||||||
|
(val & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) ? true :
|
||||||
|
false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int navi10_check_powerplay_table(struct smu_context *smu)
|
||||||
|
{
|
||||||
|
struct smu_table_context *table_context = &smu->smu_table;
|
||||||
|
struct smu_11_0_powerplay_table *powerplay_table =
|
||||||
|
table_context->power_play_table;
|
||||||
|
|
||||||
if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_HARDWAREDC)
|
if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_HARDWAREDC)
|
||||||
smu->dc_controlled_by_gpio = true;
|
smu->dc_controlled_by_gpio = true;
|
||||||
|
|
||||||
if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_BACO ||
|
navi10_check_bxco_support(smu);
|
||||||
powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_MACO)
|
|
||||||
smu_baco->platform_support = true;
|
|
||||||
|
|
||||||
table_context->thermal_controller_type =
|
table_context->thermal_controller_type =
|
||||||
powerplay_table->thermal_controller_type;
|
powerplay_table->thermal_controller_type;
|
||||||
@@ -1948,13 +1963,11 @@ static int navi10_overdrive_get_gfx_clk_base_voltage(struct smu_context *smu,
|
|||||||
static bool navi10_is_baco_supported(struct smu_context *smu)
|
static bool navi10_is_baco_supported(struct smu_context *smu)
|
||||||
{
|
{
|
||||||
struct amdgpu_device *adev = smu->adev;
|
struct amdgpu_device *adev = smu->adev;
|
||||||
uint32_t val;
|
|
||||||
|
|
||||||
if (amdgpu_sriov_vf(adev) || (!smu_v11_0_baco_is_support(smu)))
|
if (amdgpu_sriov_vf(adev) || (!smu_v11_0_baco_is_support(smu)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
|
return true;
|
||||||
return (val & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) ? true : false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int navi10_set_default_od_settings(struct smu_context *smu)
|
static int navi10_set_default_od_settings(struct smu_context *smu)
|
||||||
|
@@ -294,19 +294,34 @@ sienna_cichlid_get_allowed_feature_mask(struct smu_context *smu,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sienna_cichlid_check_powerplay_table(struct smu_context *smu)
|
static void sienna_cichlid_check_bxco_support(struct smu_context *smu)
|
||||||
{
|
{
|
||||||
struct smu_table_context *table_context = &smu->smu_table;
|
struct smu_table_context *table_context = &smu->smu_table;
|
||||||
struct smu_11_0_7_powerplay_table *powerplay_table =
|
struct smu_11_0_7_powerplay_table *powerplay_table =
|
||||||
table_context->power_play_table;
|
table_context->power_play_table;
|
||||||
struct smu_baco_context *smu_baco = &smu->smu_baco;
|
struct smu_baco_context *smu_baco = &smu->smu_baco;
|
||||||
|
struct amdgpu_device *adev = smu->adev;
|
||||||
|
uint32_t val;
|
||||||
|
|
||||||
|
if (powerplay_table->platform_caps & SMU_11_0_7_PP_PLATFORM_CAP_BACO ||
|
||||||
|
powerplay_table->platform_caps & SMU_11_0_7_PP_PLATFORM_CAP_MACO) {
|
||||||
|
val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
|
||||||
|
smu_baco->platform_support =
|
||||||
|
(val & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) ? true :
|
||||||
|
false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int sienna_cichlid_check_powerplay_table(struct smu_context *smu)
|
||||||
|
{
|
||||||
|
struct smu_table_context *table_context = &smu->smu_table;
|
||||||
|
struct smu_11_0_7_powerplay_table *powerplay_table =
|
||||||
|
table_context->power_play_table;
|
||||||
|
|
||||||
if (powerplay_table->platform_caps & SMU_11_0_7_PP_PLATFORM_CAP_HARDWAREDC)
|
if (powerplay_table->platform_caps & SMU_11_0_7_PP_PLATFORM_CAP_HARDWAREDC)
|
||||||
smu->dc_controlled_by_gpio = true;
|
smu->dc_controlled_by_gpio = true;
|
||||||
|
|
||||||
if (powerplay_table->platform_caps & SMU_11_0_7_PP_PLATFORM_CAP_BACO ||
|
sienna_cichlid_check_bxco_support(smu);
|
||||||
powerplay_table->platform_caps & SMU_11_0_7_PP_PLATFORM_CAP_MACO)
|
|
||||||
smu_baco->platform_support = true;
|
|
||||||
|
|
||||||
table_context->thermal_controller_type =
|
table_context->thermal_controller_type =
|
||||||
powerplay_table->thermal_controller_type;
|
powerplay_table->thermal_controller_type;
|
||||||
@@ -1739,13 +1754,11 @@ static int sienna_cichlid_run_btc(struct smu_context *smu)
|
|||||||
static bool sienna_cichlid_is_baco_supported(struct smu_context *smu)
|
static bool sienna_cichlid_is_baco_supported(struct smu_context *smu)
|
||||||
{
|
{
|
||||||
struct amdgpu_device *adev = smu->adev;
|
struct amdgpu_device *adev = smu->adev;
|
||||||
uint32_t val;
|
|
||||||
|
|
||||||
if (amdgpu_sriov_vf(adev) || (!smu_v11_0_baco_is_support(smu)))
|
if (amdgpu_sriov_vf(adev) || (!smu_v11_0_baco_is_support(smu)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
|
return true;
|
||||||
return (val & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) ? true : false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool sienna_cichlid_is_mode1_reset_supported(struct smu_context *smu)
|
static bool sienna_cichlid_is_mode1_reset_supported(struct smu_context *smu)
|
||||||
|
Reference in New Issue
Block a user