]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/pm: Read BIF STRAP also for BACO check
authorLijo Lazar <lijo.lazar@amd.com>
Fri, 4 Jun 2021 07:33:48 +0000 (15:33 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Nov 2022 16:45:41 +0000 (17:45 +0100)
[ 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>
drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c

index 1c526cb239e035429a37792f195816b22bc83993..3a31058b029e31ff7023405b283298675ef7f945 100644 (file)
@@ -379,16 +379,31 @@ static int arcturus_set_default_dpm_table(struct smu_context *smu)
        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_11_0_powerplay_table *powerplay_table =
                table_context->power_play_table;
        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)
-               smu_baco->platform_support = true;
+           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 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 =
                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)
 {
        struct amdgpu_device *adev = smu->adev;
-       uint32_t val;
 
        if (!smu_v11_0_baco_is_support(smu) || amdgpu_sriov_vf(adev))
                return false;
 
-       val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
-       return (val & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) ? true : false;
+       return true;
 }
 
 static int arcturus_set_df_cstate(struct smu_context *smu,
index 2937784bc8249e9adce1824eb155f518959770f4..a7773b6453d539c12e39e19d38f2a8ea15106377 100644 (file)
@@ -338,19 +338,34 @@ navi10_get_allowed_feature_mask(struct smu_context *smu,
        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_11_0_powerplay_table *powerplay_table =
                table_context->power_play_table;
        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)
                smu->dc_controlled_by_gpio = true;
 
-       if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_BACO ||
-           powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_MACO)
-               smu_baco->platform_support = true;
+       navi10_check_bxco_support(smu);
 
        table_context->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)
 {
        struct amdgpu_device *adev = smu->adev;
-       uint32_t val;
 
        if (amdgpu_sriov_vf(adev) || (!smu_v11_0_baco_is_support(smu)))
                return false;
 
-       val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
-       return (val & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) ? true : false;
+       return true;
 }
 
 static int navi10_set_default_od_settings(struct smu_context *smu)
index 834ac633281cdea6671d9b26b38c4553f04c0f22..def32b6897f9933f1cb3568cc9a0af7a5c3d4032 100644 (file)
@@ -294,19 +294,34 @@ sienna_cichlid_get_allowed_feature_mask(struct smu_context *smu,
        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_11_0_7_powerplay_table *powerplay_table =
                table_context->power_play_table;
        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)
                smu->dc_controlled_by_gpio = true;
 
-       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)
-               smu_baco->platform_support = true;
+       sienna_cichlid_check_bxco_support(smu);
 
        table_context->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)
 {
        struct amdgpu_device *adev = smu->adev;
-       uint32_t val;
 
        if (amdgpu_sriov_vf(adev) || (!smu_v11_0_baco_is_support(smu)))
                return false;
 
-       val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
-       return (val & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) ? true : false;
+       return true;
 }
 
 static bool sienna_cichlid_is_mode1_reset_supported(struct smu_context *smu)