summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/pm/swsmu/smu11
diff options
context:
space:
mode:
authorElena Sakhnovitch <elena.sakhnovitch@amd.com>2022-03-11 14:03:09 -0500
committerAlex Deucher <alexander.deucher@amd.com>2022-05-04 09:54:50 -0400
commit57301181a5fc0df7e4b01661f80124e590ce4c40 (patch)
tree08aaee4a3e1d31b428cf682b94e78fef9da7409e /drivers/gpu/drm/amd/pm/swsmu/smu11
parent996ea8591b099b0657750ade07a99138c5513457 (diff)
drm/amd/pm: Disable fan control if not supported
On Sienna Cichild, not all platforms use PMFW based fan control (ex: fanless systems). On such ASICs fan control by PMFW will be disabled in PPTable. Disable hwmon knobs for fan control also as it is not possible to report or control fan speed on such platforms through driver. v3: FeaturesToRun casted as uint64_t Signed-off-by: Elena Sakhnovitch <elena.sakhnovitch@amd.com> Reviewed-by: Lijo Lazar <lijo.lazar@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/pm/swsmu/smu11')
-rw-r--r--drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
index e4b254775d00..86ab276b6b0b 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
@@ -371,6 +371,20 @@ static void sienna_cichlid_check_bxco_support(struct smu_context *smu)
}
}
+static void sienna_cichlid_check_fan_support(struct smu_context *smu)
+{
+ struct smu_table_context *table_context = &smu->smu_table;
+ PPTable_t *pptable = table_context->driver_pptable;
+ uint64_t features = *(uint64_t *) pptable->FeaturesToRun;
+
+ /* Fan control is not possible if PPTable has it disabled */
+ smu->adev->pm.no_fan =
+ !(features & (1ULL << FEATURE_FAN_CONTROL_BIT));
+ if (smu->adev->pm.no_fan)
+ dev_info_once(smu->adev->dev,
+ "PMFW based fan control disabled");
+}
+
static int sienna_cichlid_check_powerplay_table(struct smu_context *smu)
{
struct smu_table_context *table_context = &smu->smu_table;
@@ -381,6 +395,7 @@ static int sienna_cichlid_check_powerplay_table(struct smu_context *smu)
smu->dc_controlled_by_gpio = true;
sienna_cichlid_check_bxco_support(smu);
+ sienna_cichlid_check_fan_support(smu);
table_context->thermal_controller_type =
powerplay_table->thermal_controller_type;