[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250203152735.825010-2-avri.altman@wdc.com>
Date: Mon, 3 Feb 2025 17:27:34 +0200
From: Avri Altman <avri.altman@....com>
To: "Martin K . Petersen" <martin.petersen@...cle.com>
Cc: linux-scsi@...r.kernel.org,
linux-kernel@...r.kernel.org,
Guenter Roeck <linux@...ck-us.net>,
Bart Van Assche <bvanassche@....org>,
Avri Altman <avri.altman@....com>
Subject: [PATCH 1/2] scsi: ufs: hwmon: Prepare for more hwmon notifications
This commit updates the UFS hwmon driver to prepare for handling more
hardware monitoring notifications. Specifically, it changes the type of
the `mask` parameter from `u8` to `u16` to accommodate additional
notification types.
While at it, the Kconfig entry for `CONFIG_SCSI_UFS_HWMON` has been
updated to better reflect its purpose. The description has been changed
from "UFS Temperature Notification" to "UFS Hardware Monitoring" to
indicate that the driver now supports a broader range of hardware
monitoring notifications beyond just temperature.
Signed-off-by: Avri Altman <avri.altman@....com>
---
drivers/ufs/core/Kconfig | 2 +-
drivers/ufs/core/ufs-hwmon.c | 8 ++++----
drivers/ufs/core/ufshcd-priv.h | 8 ++++----
drivers/ufs/core/ufshcd.c | 16 +++++++++++-----
4 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/drivers/ufs/core/Kconfig b/drivers/ufs/core/Kconfig
index 817208ee64ec..dd3b79ac79be 100644
--- a/drivers/ufs/core/Kconfig
+++ b/drivers/ufs/core/Kconfig
@@ -43,7 +43,7 @@ config SCSI_UFS_FAULT_INJECTION
to test the UFS error handler and abort handler.
config SCSI_UFS_HWMON
- bool "UFS Temperature Notification"
+ bool "UFS Hardware Monitoring"
depends on SCSI_UFSHCD=HWMON || HWMON=y
help
This provides support for UFS hardware monitoring. If enabled,
diff --git a/drivers/ufs/core/ufs-hwmon.c b/drivers/ufs/core/ufs-hwmon.c
index 34194064367f..db28f456b923 100644
--- a/drivers/ufs/core/ufs-hwmon.c
+++ b/drivers/ufs/core/ufs-hwmon.c
@@ -12,10 +12,10 @@
struct ufs_hwmon_data {
struct ufs_hba *hba;
- u8 mask;
+ u16 mask;
};
-static int ufs_read_temp_enable(struct ufs_hba *hba, u8 mask, long *val)
+static int ufs_read_temp_enable(struct ufs_hba *hba, u16 mask, long *val)
{
u32 ee_mask;
int err;
@@ -163,7 +163,7 @@ static const struct hwmon_chip_info ufs_hwmon_hba_info = {
.info = ufs_hwmon_info,
};
-void ufs_hwmon_probe(struct ufs_hba *hba, u8 mask)
+void ufs_hwmon_probe(struct ufs_hba *hba, u16 mask)
{
struct device *dev = hba->dev;
struct ufs_hwmon_data *data;
@@ -199,7 +199,7 @@ void ufs_hwmon_remove(struct ufs_hba *hba)
kfree(data);
}
-void ufs_hwmon_notify_event(struct ufs_hba *hba, u8 ee_mask)
+void ufs_hwmon_notify_event(struct ufs_hba *hba, u16 ee_mask)
{
if (!hba->hwmon_device)
return;
diff --git a/drivers/ufs/core/ufshcd-priv.h b/drivers/ufs/core/ufshcd-priv.h
index 786f20ef2238..279c3e8d1b21 100644
--- a/drivers/ufs/core/ufshcd-priv.h
+++ b/drivers/ufs/core/ufshcd-priv.h
@@ -33,13 +33,13 @@ static inline bool ufshcd_is_wb_buf_flush_allowed(struct ufs_hba *hba)
}
#ifdef CONFIG_SCSI_UFS_HWMON
-void ufs_hwmon_probe(struct ufs_hba *hba, u8 mask);
+void ufs_hwmon_probe(struct ufs_hba *hba, u16 mask);
void ufs_hwmon_remove(struct ufs_hba *hba);
-void ufs_hwmon_notify_event(struct ufs_hba *hba, u8 ee_mask);
+void ufs_hwmon_notify_event(struct ufs_hba *hba, u16 ee_mask);
#else
-static inline void ufs_hwmon_probe(struct ufs_hba *hba, u8 mask) {}
+static inline void ufs_hwmon_probe(struct ufs_hba *hba, u16 mask) {}
static inline void ufs_hwmon_remove(struct ufs_hba *hba) {}
-static inline void ufs_hwmon_notify_event(struct ufs_hba *hba, u8 ee_mask) {}
+static inline void ufs_hwmon_notify_event(struct ufs_hba *hba, u16 ee_mask) {}
#endif
int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index f6c38cf10382..9fbaf74b0fef 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -8074,11 +8074,10 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, const u8 *desc_buf)
hba->caps &= ~UFSHCD_CAP_WB_EN;
}
-static void ufshcd_temp_notif_probe(struct ufs_hba *hba, const u8 *desc_buf)
+static void ufshcd_temp_notif_probe(struct ufs_hba *hba, const u8 *desc_buf, u16 *mask)
{
struct ufs_dev_info *dev_info = &hba->dev_info;
u32 ext_ufs_feature;
- u8 mask = 0;
if (!(hba->caps & UFSHCD_CAP_TEMP_NOTIF) || dev_info->wspecversion < 0x300)
return;
@@ -8086,10 +8085,17 @@ static void ufshcd_temp_notif_probe(struct ufs_hba *hba, const u8 *desc_buf)
ext_ufs_feature = get_unaligned_be32(desc_buf + DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
if (ext_ufs_feature & UFS_DEV_LOW_TEMP_NOTIF)
- mask |= MASK_EE_TOO_LOW_TEMP;
+ *mask |= MASK_EE_TOO_LOW_TEMP;
if (ext_ufs_feature & UFS_DEV_HIGH_TEMP_NOTIF)
- mask |= MASK_EE_TOO_HIGH_TEMP;
+ *mask |= MASK_EE_TOO_HIGH_TEMP;
+}
+
+static void ufshcd_hwmon_probe(struct ufs_hba *hba, const u8 *desc_buf)
+{
+ u16 mask = 0;
+
+ ufshcd_temp_notif_probe(hba, desc_buf, &mask);
if (mask) {
ufshcd_enable_ee(hba, mask);
@@ -8288,7 +8294,7 @@ static int ufs_get_device_desc(struct ufs_hba *hba)
ufshcd_wb_probe(hba, desc_buf);
- ufshcd_temp_notif_probe(hba, desc_buf);
+ ufshcd_hwmon_probe(hba, desc_buf);
ufs_init_rtc(hba, desc_buf);
--
2.25.1
Powered by blists - more mailing lists