[PATCH 5/8] drm/amdgpu: add bitmask controll for hwmon related interfaces

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Via this, the logic for adding/dropping the support for some specific
hwmon interface can be greatly simplified.

Signed-off-by: Evan Quan <evan.quan@xxxxxxx>
Change-Id: Ia85082c964d80d1c43dd2d8bf51592aba968e364
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  7 ++-
 drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h    | 52 ++++++++++++++++++++++
 2 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index b1943336551f..c7c95b3c370e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -3640,13 +3640,16 @@ int amdgpu_device_init(struct amdgpu_device *adev,
 	ratelimit_set_flags(&adev->throttling_logging_rs, RATELIMIT_MSG_ON_RELEASE);
 
 	/*
-	 * At default, all sysfs interfaces are claimed to be supported.
-	 * And every sysfs interface is readable and writable. However,
+	 * At default, all sysfs and hwmon interfaces are claimed to be supported.
+	 * And every interface is readable and writable. However,
 	 * each ASIC can have its own setting by overriding these.
 	 */
 	adev->pm.sysfs_if_supported = AMD_SYSFS_IF_BITMASK_ALL_SUPPORTED;
 	for (i = 0; i < AMD_MAX_NUMBER_OF_SYSFS_IF_SUPPORTED; i++)
 		adev->pm.sysfs_if_attr_mode[i] = S_IRUGO | S_IWUGO;
+	adev->pm.hwmon_if_supported = AMD_HWMON_IF_BITMASK_ALL_SUPPORTED;
+	for (i = 0; i < AMD_MAX_NUMBER_OF_HWMON_IF_SUPPORTED; i++)
+		adev->pm.hwmon_if_attr_mode[i] = S_IRUGO | S_IWUSR;
 
 	/* Registers mapping */
 	/* TODO: block userspace mapping of io register */
diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
index bbee77087226..5635ac74bf62 100644
--- a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
+++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
@@ -345,6 +345,54 @@ struct config_table_setting
 #define AMD_SYSFS_IF_BITMASK(if_bit)				(1ULL << (if_bit))
 #define AMD_SYSFS_IF_BITMASK_ALL_SUPPORTED			ULLONG_MAX
 
+/* Bitmasks for controlling which hwmon interface to support */
+#define AMD_HWMON_IF_TEMP1_INPUT_BIT				0U
+#define AMD_HWMON_IF_TEMP1_CRIT_BIT				1U
+#define AMD_HWMON_IF_TEMP1_CRIT_HYST_BIT			2U
+#define AMD_HWMON_IF_TEMP2_INPUT_BIT				3U
+#define AMD_HWMON_IF_TEMP2_CRIT_BIT				4U
+#define AMD_HWMON_IF_TEMP2_CRIT_HYST_BIT			5U
+#define AMD_HWMON_IF_TEMP3_INPUT_BIT				6U
+#define AMD_HWMON_IF_TEMP3_CRIT_BIT				7U
+#define AMD_HWMON_IF_TEMP3_CRIT_HYST_BIT			8U
+#define AMD_HWMON_IF_TEMP1_EMERGENCY_BIT			9U
+#define AMD_HWMON_IF_TEMP2_EMERGENCY_BIT			10U
+#define AMD_HWMON_IF_TEMP3_EMERGENCY_BIT			11U
+#define AMD_HWMON_IF_TEMP1_LABEL_BIT				12U
+#define AMD_HWMON_IF_TEMP2_LABEL_BIT				13U
+#define AMD_HWMON_IF_TEMP3_LABEL_BIT				14U
+#define AMD_HWMON_IF_PWM1_BIT					15U
+#define AMD_HWMON_IF_PWM1_ENABLE_BIT				16U
+#define AMD_HWMON_IF_PWM1_MIN_BIT				17U
+#define AMD_HWMON_IF_PWM1_MAX_BIT				18U
+#define AMD_HWMON_IF_FAN1_INPUT_BIT				19U
+#define AMD_HWMON_IF_FAN1_MIN_BIT				20U
+#define AMD_HWMON_IF_FAN1_MAX_BIT				21U
+#define AMD_HWMON_IF_FAN1_TARGET_BIT				22U
+#define AMD_HWMON_IF_FAN1_ENABLE_BIT				23U
+#define AMD_HWMON_IF_IN0_INPUT_BIT				24U
+#define AMD_HWMON_IF_IN0_LABEL_BIT				25U
+#define AMD_HWMON_IF_IN1_INPUT_BIT				26U
+#define AMD_HWMON_IF_IN1_LABEL_BIT				27U
+#define AMD_HWMON_IF_POWER1_AVERAGE_BIT				28U
+#define AMD_HWMON_IF_POWER1_CAP_MAX_BIT				29U
+#define AMD_HWMON_IF_POWER1_CAP_MIN_BIT				30U
+#define AMD_HWMON_IF_POWER1_CAP_BIT				31U
+#define AMD_HWMON_IF_POWER1_CAP_DEFAULT_BIT			32U
+#define AMD_HWMON_IF_POWER1_LABEL_BIT				33U
+#define AMD_HWMON_IF_POWER2_AVERAGE_BIT				34U
+#define AMD_HWMON_IF_POWER2_CAP_MAX_BIT				35U
+#define AMD_HWMON_IF_POWER2_CAP_MIN_BIT				36U
+#define AMD_HWMON_IF_POWER2_CAP_BIT				37U
+#define AMD_HWMON_IF_POWER2_CAP_DEFAULT_BIT			38U
+#define AMD_HWMON_IF_POWER2_LABEL_BIT				39U
+#define AMD_HWMON_IF_FREQ1_INPUT_BIT				40U
+#define AMD_HWMON_IF_FREQ1_LABEL_BIT				41U
+#define AMD_HWMON_IF_FREQ2_INPUT_BIT				42U
+#define AMD_HWMON_IF_FREQ2_LABEL_BIT				43U
+#define AMD_MAX_NUMBER_OF_HWMON_IF_SUPPORTED			64U
+#define AMD_HWMON_IF_BITMASK_ALL_SUPPORTED			ULLONG_MAX
+
 struct amdgpu_pm {
 	struct mutex		mutex;
 	u32                     current_sclk;
@@ -401,6 +449,10 @@ struct amdgpu_pm {
 	/* bitmasks for clarifying which sysfs interfaces supported */
 	uint64_t		sysfs_if_supported;
 	umode_t			sysfs_if_attr_mode[AMD_MAX_NUMBER_OF_SYSFS_IF_SUPPORTED];
+
+	/* bitmasks for clarifying which hwmon interfaces supported */
+	uint64_t		hwmon_if_supported;
+	umode_t			hwmon_if_attr_mode[AMD_MAX_NUMBER_OF_HWMON_IF_SUPPORTED];
 };
 
 int amdgpu_dpm_read_sensor(struct amdgpu_device *adev, enum amd_pp_sensors sensor,
-- 
2.34.1




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux