* [PATCH v4 0/2] scsi: ufs: Add host capabilities sysfs group
@ 2024-08-11 14:37 Avri Altman
2024-08-11 14:37 ` [PATCH v4 1/2] scsi: ufs: Prepare to add HCI capabilities sysfs Avri Altman
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Avri Altman @ 2024-08-11 14:37 UTC (permalink / raw)
To: Martin K . Petersen
Cc: linux-scsi, linux-kernel, Bart Van Assche, Keoseong Park,
Manivannan Sadhasivam, Avri Altman
Hi Martin,
This patch series add sysfs entries for the host capabilities registers.
This platform info is otherwise not available. Please consider this
patch series for the next merge window.
Thanks,
Avri
---
Changes in v4:
- Drop less useful entries
- Ameliorate the description
Changes in v3:
- Fix path in sysfs doc
- Fix spelling mistake
Changes in v2:
- Add sysfs doc
- replace the pm_runtime_xx by ufshcd_rpm_xx for hci register read
---
Avri Altman (2):
scsi: ufs: Prepare to add HCI capabilities sysfs
scsi: ufs: Add HCI capabilities sysfs group
Documentation/ABI/testing/sysfs-driver-ufs | 27 +++++++
drivers/ufs/core/ufs-sysfs.c | 91 ++++++++++++++++++----
include/ufs/ufshci.h | 5 +-
3 files changed, 105 insertions(+), 18 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v4 1/2] scsi: ufs: Prepare to add HCI capabilities sysfs
2024-08-11 14:37 [PATCH v4 0/2] scsi: ufs: Add host capabilities sysfs group Avri Altman
@ 2024-08-11 14:37 ` Avri Altman
2024-08-11 14:37 ` [PATCH v4 2/2] scsi: ufs: Add HCI capabilities sysfs group Avri Altman
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Avri Altman @ 2024-08-11 14:37 UTC (permalink / raw)
To: Martin K . Petersen
Cc: linux-scsi, linux-kernel, Bart Van Assche, Keoseong Park,
Manivannan Sadhasivam, Avri Altman, Bean Huo
Prepare so we'll be able to read various other HCI registers.
While at it, fix the HCPID & HCMID register names to stand for what they
really are. Also replace the pm_runtime_{get/put}_sync() calls in
auto_hibern8_show to ufshcd_rpm_{get/put}_sync() as any host controller
register reads should.
Reviewed-by: Keoseong Park <keosung.park@samsung.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Avri Altman <avri.altman@wdc.com>
---
drivers/ufs/core/ufs-sysfs.c | 38 +++++++++++++++++++++---------------
include/ufs/ufshci.h | 5 +++--
2 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c
index e80a32421a8c..dec7746c98e0 100644
--- a/drivers/ufs/core/ufs-sysfs.c
+++ b/drivers/ufs/core/ufs-sysfs.c
@@ -198,6 +198,24 @@ static u32 ufshcd_us_to_ahit(unsigned int timer)
FIELD_PREP(UFSHCI_AHIBERN8_SCALE_MASK, scale);
}
+static int ufshcd_read_hci_reg(struct ufs_hba *hba, u32 *val, unsigned int reg)
+{
+ down(&hba->host_sem);
+ if (!ufshcd_is_user_access_allowed(hba)) {
+ up(&hba->host_sem);
+ return -EBUSY;
+ }
+
+ ufshcd_rpm_get_sync(hba);
+ ufshcd_hold(hba);
+ *val = ufshcd_readl(hba, reg);
+ ufshcd_release(hba);
+ ufshcd_rpm_put_sync(hba);
+
+ up(&hba->host_sem);
+ return 0;
+}
+
static ssize_t auto_hibern8_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
@@ -208,23 +226,11 @@ static ssize_t auto_hibern8_show(struct device *dev,
if (!ufshcd_is_auto_hibern8_supported(hba))
return -EOPNOTSUPP;
- down(&hba->host_sem);
- if (!ufshcd_is_user_access_allowed(hba)) {
- ret = -EBUSY;
- goto out;
- }
-
- pm_runtime_get_sync(hba->dev);
- ufshcd_hold(hba);
- ahit = ufshcd_readl(hba, REG_AUTO_HIBERNATE_IDLE_TIMER);
- ufshcd_release(hba);
- pm_runtime_put_sync(hba->dev);
-
- ret = sysfs_emit(buf, "%d\n", ufshcd_ahit_to_us(ahit));
+ ret = ufshcd_read_hci_reg(hba, &ahit, REG_AUTO_HIBERNATE_IDLE_TIMER);
+ if (ret)
+ return ret;
-out:
- up(&hba->host_sem);
- return ret;
+ return sysfs_emit(buf, "%d\n", ufshcd_ahit_to_us(ahit));
}
static ssize_t auto_hibern8_store(struct device *dev,
diff --git a/include/ufs/ufshci.h b/include/ufs/ufshci.h
index 38fe97971a65..194e3655902e 100644
--- a/include/ufs/ufshci.h
+++ b/include/ufs/ufshci.h
@@ -25,8 +25,9 @@ enum {
REG_CONTROLLER_CAPABILITIES = 0x00,
REG_MCQCAP = 0x04,
REG_UFS_VERSION = 0x08,
- REG_CONTROLLER_DEV_ID = 0x10,
- REG_CONTROLLER_PROD_ID = 0x14,
+ REG_EXT_CONTROLLER_CAPABILITIES = 0x0C,
+ REG_CONTROLLER_PID = 0x10,
+ REG_CONTROLLER_MID = 0x14,
REG_AUTO_HIBERNATE_IDLE_TIMER = 0x18,
REG_INTERRUPT_STATUS = 0x20,
REG_INTERRUPT_ENABLE = 0x24,
--
2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v4 2/2] scsi: ufs: Add HCI capabilities sysfs group
2024-08-11 14:37 [PATCH v4 0/2] scsi: ufs: Add host capabilities sysfs group Avri Altman
2024-08-11 14:37 ` [PATCH v4 1/2] scsi: ufs: Prepare to add HCI capabilities sysfs Avri Altman
@ 2024-08-11 14:37 ` Avri Altman
2024-08-13 2:12 ` [PATCH v4 0/2] scsi: ufs: Add host " Martin K. Petersen
2024-08-17 1:33 ` Martin K. Petersen
3 siblings, 0 replies; 5+ messages in thread
From: Avri Altman @ 2024-08-11 14:37 UTC (permalink / raw)
To: Martin K . Petersen
Cc: linux-scsi, linux-kernel, Bart Van Assche, Keoseong Park,
Manivannan Sadhasivam, Avri Altman, Bean Huo
The standard register map of UFSHCI is comprised of several groups. The
first group (starting from offset 0x00), is the host capabilities group.
It contains some interesting information, that otherwise is not
available, e.g. the UFS version of the platform etc.
Reviewed-by: Keoseong Park <keosung.park@samsung.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Avri Altman <avri.altman@wdc.com>
---
Documentation/ABI/testing/sysfs-driver-ufs | 27 +++++++++++
drivers/ufs/core/ufs-sysfs.c | 53 ++++++++++++++++++++++
2 files changed, 80 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-driver-ufs b/Documentation/ABI/testing/sysfs-driver-ufs
index fe943ce76c60..5fa6655aee84 100644
--- a/Documentation/ABI/testing/sysfs-driver-ufs
+++ b/Documentation/ABI/testing/sysfs-driver-ufs
@@ -1532,3 +1532,30 @@ Contact: Bean Huo <beanhuo@micron.com>
Description:
rtc_update_ms indicates how often the host should synchronize or update the
UFS RTC. If set to 0, this will disable UFS RTC periodic update.
+
+What: /sys/devices/platform/.../ufshci_capabilities/version
+Date: August 2024
+Contact: Avri Altman <avri.altman@wdc.com>
+Description:
+ Host Capabilities register group: UFS version register.
+ Symbol - VER. This file shows the UFSHCD version.
+ Example: Version 3.12 would be represented as 0000_0312h.
+ The file is read only.
+
+What: /sys/devices/platform/.../ufshci_capabilities/product_id
+Date: August 2024
+Contact: Avri Altman <avri.altman@wdc.com>
+Description:
+ Host Capabilities register group: product ID register.
+ Symbol - HCPID. This file shows the UFSHCD product id.
+ The content of this register is vendor specific.
+ The file is read only.
+
+What: /sys/devices/platform/.../ufshci_capabilities/man_id
+Date: August 2024
+Contact: Avri Altman <avri.altman@wdc.com>
+Description:
+ Host Capabilities register group: manufacturer ID register.
+ Symbol - HCMID. This file shows the UFSHCD manufacturer id.
+ The Manufacturer ID is defined by JEDEC in JEDEC-JEP106.
+ The file is read only.
diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c
index dec7746c98e0..fe313800aed0 100644
--- a/drivers/ufs/core/ufs-sysfs.c
+++ b/drivers/ufs/core/ufs-sysfs.c
@@ -525,6 +525,58 @@ static const struct attribute_group ufs_sysfs_capabilities_group = {
.attrs = ufs_sysfs_capabilities_attrs,
};
+static ssize_t version_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct ufs_hba *hba = dev_get_drvdata(dev);
+
+ return sysfs_emit(buf, "0x%x\n", hba->ufs_version);
+}
+
+static ssize_t product_id_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ int ret;
+ u32 val;
+ struct ufs_hba *hba = dev_get_drvdata(dev);
+
+ ret = ufshcd_read_hci_reg(hba, &val, REG_CONTROLLER_PID);
+ if (ret)
+ return ret;
+
+ return sysfs_emit(buf, "0x%x\n", val);
+}
+
+static ssize_t man_id_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ int ret;
+ u32 val;
+ struct ufs_hba *hba = dev_get_drvdata(dev);
+
+ ret = ufshcd_read_hci_reg(hba, &val, REG_CONTROLLER_MID);
+ if (ret)
+ return ret;
+
+ return sysfs_emit(buf, "0x%x\n", val);
+}
+
+static DEVICE_ATTR_RO(version);
+static DEVICE_ATTR_RO(product_id);
+static DEVICE_ATTR_RO(man_id);
+
+static struct attribute *ufs_sysfs_ufshci_cap_attrs[] = {
+ &dev_attr_version.attr,
+ &dev_attr_product_id.attr,
+ &dev_attr_man_id.attr,
+ NULL
+};
+
+static const struct attribute_group ufs_sysfs_ufshci_group = {
+ .name = "ufshci_capabilities",
+ .attrs = ufs_sysfs_ufshci_cap_attrs,
+};
+
static ssize_t monitor_enable_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
@@ -1508,6 +1560,7 @@ static const struct attribute_group ufs_sysfs_attributes_group = {
static const struct attribute_group *ufs_sysfs_groups[] = {
&ufs_sysfs_default_group,
&ufs_sysfs_capabilities_group,
+ &ufs_sysfs_ufshci_group,
&ufs_sysfs_monitor_group,
&ufs_sysfs_power_info_group,
&ufs_sysfs_device_descriptor_group,
--
2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 0/2] scsi: ufs: Add host capabilities sysfs group
2024-08-11 14:37 [PATCH v4 0/2] scsi: ufs: Add host capabilities sysfs group Avri Altman
2024-08-11 14:37 ` [PATCH v4 1/2] scsi: ufs: Prepare to add HCI capabilities sysfs Avri Altman
2024-08-11 14:37 ` [PATCH v4 2/2] scsi: ufs: Add HCI capabilities sysfs group Avri Altman
@ 2024-08-13 2:12 ` Martin K. Petersen
2024-08-17 1:33 ` Martin K. Petersen
3 siblings, 0 replies; 5+ messages in thread
From: Martin K. Petersen @ 2024-08-13 2:12 UTC (permalink / raw)
To: Avri Altman
Cc: Martin K . Petersen, linux-scsi, linux-kernel, Bart Van Assche,
Keoseong Park, Manivannan Sadhasivam
Avri,
> This patch series add sysfs entries for the host capabilities
> registers. This platform info is otherwise not available. Please
> consider this patch series for the next merge window.
Applied to 6.12/scsi-staging, thanks!
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 0/2] scsi: ufs: Add host capabilities sysfs group
2024-08-11 14:37 [PATCH v4 0/2] scsi: ufs: Add host capabilities sysfs group Avri Altman
` (2 preceding siblings ...)
2024-08-13 2:12 ` [PATCH v4 0/2] scsi: ufs: Add host " Martin K. Petersen
@ 2024-08-17 1:33 ` Martin K. Petersen
3 siblings, 0 replies; 5+ messages in thread
From: Martin K. Petersen @ 2024-08-17 1:33 UTC (permalink / raw)
To: Avri Altman
Cc: Martin K . Petersen, linux-scsi, linux-kernel, Bart Van Assche,
Keoseong Park, Manivannan Sadhasivam
On Sun, 11 Aug 2024 17:37:55 +0300, Avri Altman wrote:
> This patch series add sysfs entries for the host capabilities registers.
> This platform info is otherwise not available. Please consider this
> patch series for the next merge window.
>
> Thanks,
> Avri
>
> [...]
Applied to 6.12/scsi-queue, thanks!
[1/2] scsi: ufs: Prepare to add HCI capabilities sysfs
https://git.kernel.org/mkp/scsi/c/b9d104465a6c
[2/2] scsi: ufs: Add HCI capabilities sysfs group
https://git.kernel.org/mkp/scsi/c/f51d74819577
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-08-17 1:34 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-11 14:37 [PATCH v4 0/2] scsi: ufs: Add host capabilities sysfs group Avri Altman
2024-08-11 14:37 ` [PATCH v4 1/2] scsi: ufs: Prepare to add HCI capabilities sysfs Avri Altman
2024-08-11 14:37 ` [PATCH v4 2/2] scsi: ufs: Add HCI capabilities sysfs group Avri Altman
2024-08-13 2:12 ` [PATCH v4 0/2] scsi: ufs: Add host " Martin K. Petersen
2024-08-17 1:33 ` Martin K. Petersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®