* [PATCH v2 1/4] nvmem: Replace spaces with tab in documentation
@ 2024-06-23 3:15 Marek Vasut
2024-06-23 3:15 ` [PATCH v2 2/4] nvmem: Document type attribute Marek Vasut
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Marek Vasut @ 2024-06-23 3:15 UTC (permalink / raw)
To: linux-i2c
Cc: Marek Vasut, Alexandre Belloni, Arnd Bergmann,
Bartosz Golaszewski, Greg Kroah-Hartman, Srinivas Kandagatla
Replace two spaces with tab in the sysfs attribute documentation.
No functional change.
Signed-off-by: Marek Vasut <marex@denx.de>
---
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Cc: linux-i2c@vger.kernel.org
---
V2: - New patch
---
Documentation/ABI/stable/sysfs-bus-nvmem | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/ABI/stable/sysfs-bus-nvmem b/Documentation/ABI/stable/sysfs-bus-nvmem
index c399323f37de3..854bd11d72ac4 100644
--- a/Documentation/ABI/stable/sysfs-bus-nvmem
+++ b/Documentation/ABI/stable/sysfs-bus-nvmem
@@ -1,6 +1,6 @@
What: /sys/bus/nvmem/devices/.../nvmem
Date: July 2015
-KernelVersion: 4.2
+KernelVersion: 4.2
Contact: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Description:
This file allows user to read/write the raw NVMEM contents.
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/4] nvmem: Document type attribute
2024-06-23 3:15 [PATCH v2 1/4] nvmem: Replace spaces with tab in documentation Marek Vasut
@ 2024-06-23 3:15 ` Marek Vasut
2024-06-23 10:04 ` Alexandre Belloni
2024-06-23 3:15 ` [PATCH v2 3/4] nvmem: Use sysfs_emit() for " Marek Vasut
2024-06-23 3:15 ` [PATCH v2 4/4] nvmem: core: Implement force_ro sysfs attribute Marek Vasut
2 siblings, 1 reply; 7+ messages in thread
From: Marek Vasut @ 2024-06-23 3:15 UTC (permalink / raw)
To: linux-i2c
Cc: Marek Vasut, Alexandre Belloni, Arnd Bergmann,
Bartosz Golaszewski, Greg Kroah-Hartman, Srinivas Kandagatla
Document a type attribute used by userspace to discern different types of
NVMEM devices. The implementation is already present, the ABI document is
missing, add it.
Signed-off-by: Marek Vasut <marex@denx.de>
---
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Cc: linux-i2c@vger.kernel.org
---
V2: - New patch
---
Documentation/ABI/stable/sysfs-bus-nvmem | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/Documentation/ABI/stable/sysfs-bus-nvmem b/Documentation/ABI/stable/sysfs-bus-nvmem
index 854bd11d72ac4..0e3a8492a1082 100644
--- a/Documentation/ABI/stable/sysfs-bus-nvmem
+++ b/Documentation/ABI/stable/sysfs-bus-nvmem
@@ -20,3 +20,14 @@ Description:
...
*
0001000
+
+What: /sys/bus/nvmem/devices/.../type
+Date: November 2018
+KernelVersion: 5.0
+Contact: Alexandre Belloni <alexandre.belloni@bootlin.com>
+Description:
+ This read-only attribute allows user to read the NVMEM
+ device type. Supported types are "Unknown", "EEPROM",
+ "OTP", "Battery backed", "FRAM".
+ Note: This file is only present if CONFIG_NVMEM_SYSFS
+ is enabled
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/4] nvmem: Use sysfs_emit() for type attribute
2024-06-23 3:15 [PATCH v2 1/4] nvmem: Replace spaces with tab in documentation Marek Vasut
2024-06-23 3:15 ` [PATCH v2 2/4] nvmem: Document type attribute Marek Vasut
@ 2024-06-23 3:15 ` Marek Vasut
2024-06-23 3:15 ` [PATCH v2 4/4] nvmem: core: Implement force_ro sysfs attribute Marek Vasut
2 siblings, 0 replies; 7+ messages in thread
From: Marek Vasut @ 2024-06-23 3:15 UTC (permalink / raw)
To: linux-i2c
Cc: Marek Vasut, Alexandre Belloni, Arnd Bergmann,
Bartosz Golaszewski, Greg Kroah-Hartman, Srinivas Kandagatla
Use sysfs_emit() instead of sprintf() to follow best practice per
Documentation/filesystems/sysfs.rst
"
show() should only use sysfs_emit()...
"
Signed-off-by: Marek Vasut <marex@denx.de>
---
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Cc: linux-i2c@vger.kernel.org
---
V2: - New patch
---
drivers/nvmem/core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index e1ec3b7200d7b..b31abffcdfc00 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -179,7 +179,7 @@ static ssize_t type_show(struct device *dev,
{
struct nvmem_device *nvmem = to_nvmem_device(dev);
- return sprintf(buf, "%s\n", nvmem_type_str[nvmem->type]);
+ return sysfs_emit(buf, "%s\n", nvmem_type_str[nvmem->type]);
}
static DEVICE_ATTR_RO(type);
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 4/4] nvmem: core: Implement force_ro sysfs attribute
2024-06-23 3:15 [PATCH v2 1/4] nvmem: Replace spaces with tab in documentation Marek Vasut
2024-06-23 3:15 ` [PATCH v2 2/4] nvmem: Document type attribute Marek Vasut
2024-06-23 3:15 ` [PATCH v2 3/4] nvmem: Use sysfs_emit() for " Marek Vasut
@ 2024-06-23 3:15 ` Marek Vasut
2024-06-23 6:13 ` Greg Kroah-Hartman
2 siblings, 1 reply; 7+ messages in thread
From: Marek Vasut @ 2024-06-23 3:15 UTC (permalink / raw)
To: linux-i2c
Cc: Marek Vasut, Alexandre Belloni, Arnd Bergmann,
Bartosz Golaszewski, Greg Kroah-Hartman, Srinivas Kandagatla
Implement "force_ro" sysfs attribute to allow users to set read-write
devices as read-only and back to read-write from userspace. The choice
of the name is based on MMC core 'force_ro' attribute.
This solves a situation where an AT24 I2C EEPROM with GPIO based nWP
signal may have to be occasionally updated. Such I2C EEPROM device is
usually set as read-only during most of the regular system operation,
but in case it has to be updated in a controlled manner, it could be
unlocked using this new "force_ro" sysfs attribute and then re-locked
again.
The "read-only" DT property and config->read_only configuration is
respected and is used to set default state of the device, read-only
or read-write, for devices which do implement .reg_write function.
For devices which do not implement .reg_write function, the device
is unconditionally read-only and the "force_ro" attribute is not
visible.
Signed-off-by: Marek Vasut <marex@denx.de>
---
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Cc: linux-i2c@vger.kernel.org
---
V2: - Document the force_ro attribute
- Use sysfs_emit()
---
Documentation/ABI/stable/sysfs-bus-nvmem | 13 +++++++
drivers/nvmem/core.c | 44 ++++++++++++++++++++++++
drivers/nvmem/internals.h | 1 +
3 files changed, 58 insertions(+)
diff --git a/Documentation/ABI/stable/sysfs-bus-nvmem b/Documentation/ABI/stable/sysfs-bus-nvmem
index 0e3a8492a1082..c713c4e6cecb1 100644
--- a/Documentation/ABI/stable/sysfs-bus-nvmem
+++ b/Documentation/ABI/stable/sysfs-bus-nvmem
@@ -1,3 +1,16 @@
+What: /sys/bus/nvmem/devices/.../force_ro
+Date: June 2024
+KernelVersion: 6.11
+Contact: Marek Vasut <marex@denx.de>
+Description:
+ This read/write attribute allows users to set read-write
+ devices as read-only and back to read-write from userspace.
+ This can be used to unlock and relock write-protection of
+ devices which are generally locked, except during sporadic
+ programming operation.
+ Note: This file is only present if CONFIG_NVMEM_SYSFS
+ is enabled
+
What: /sys/bus/nvmem/devices/.../nvmem
Date: July 2015
KernelVersion: 4.2
diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index b31abffcdfc00..2321fb7da1e92 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -184,7 +184,30 @@ static ssize_t type_show(struct device *dev,
static DEVICE_ATTR_RO(type);
+static ssize_t force_ro_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct nvmem_device *nvmem = to_nvmem_device(dev);
+
+ return sysfs_emit(buf, "%d\n", nvmem->read_only);
+}
+
+static ssize_t force_ro_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct nvmem_device *nvmem = to_nvmem_device(dev);
+ int ret = kstrtobool(buf, &nvmem->read_only);
+
+ if (ret < 0)
+ return ret;
+
+ return count;
+}
+
+static DEVICE_ATTR_RW(force_ro);
+
static struct attribute *nvmem_attrs[] = {
+ &dev_attr_force_ro.attr,
&dev_attr_type.attr,
NULL,
};
@@ -299,6 +322,25 @@ static umode_t nvmem_bin_attr_is_visible(struct kobject *kobj,
return nvmem_bin_attr_get_umode(nvmem);
}
+static umode_t nvmem_attr_is_visible(struct kobject *kobj,
+ struct attribute *attr, int i)
+{
+ struct device *dev = kobj_to_dev(kobj);
+ struct nvmem_device *nvmem = to_nvmem_device(dev);
+
+ /*
+ * If the device has no .reg_write operation, do not allow
+ * configuration as read-write.
+ * If the device is set as read-only by configuration, it
+ * can be forced into read-write mode using the 'force_ro'
+ * attribute.
+ */
+ if (attr == &dev_attr_force_ro.attr && !nvmem->reg_write)
+ return 0; /* Attribute not visible */
+
+ return attr->mode;
+}
+
static struct nvmem_cell *nvmem_create_cell(struct nvmem_cell_entry *entry,
const char *id, int index);
@@ -355,6 +397,7 @@ static const struct attribute_group nvmem_bin_group = {
.bin_attrs = nvmem_bin_attributes,
.attrs = nvmem_attrs,
.is_bin_visible = nvmem_bin_attr_is_visible,
+ .is_visible = nvmem_attr_is_visible,
};
/* Cell attributes will be dynamically allocated */
@@ -971,6 +1014,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
nvmem->read_only = device_property_present(config->dev, "read-only") ||
config->read_only || !nvmem->reg_write;
+ nvmem->default_read_only = nvmem->read_only;
#ifdef CONFIG_NVMEM_SYSFS
nvmem->dev.groups = nvmem_dev_groups;
diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h
index 18fed57270e5e..0667937ebb86b 100644
--- a/drivers/nvmem/internals.h
+++ b/drivers/nvmem/internals.h
@@ -16,6 +16,7 @@ struct nvmem_device {
int id;
struct kref refcnt;
size_t size;
+ bool default_read_only;
bool read_only;
bool root_only;
int flags;
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 4/4] nvmem: core: Implement force_ro sysfs attribute
2024-06-23 3:15 ` [PATCH v2 4/4] nvmem: core: Implement force_ro sysfs attribute Marek Vasut
@ 2024-06-23 6:13 ` Greg Kroah-Hartman
2024-06-24 0:19 ` Marek Vasut
0 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2024-06-23 6:13 UTC (permalink / raw)
To: Marek Vasut
Cc: linux-i2c, Alexandre Belloni, Arnd Bergmann, Bartosz Golaszewski,
Srinivas Kandagatla
On Sun, Jun 23, 2024 at 05:15:47AM +0200, Marek Vasut wrote:
> Implement "force_ro" sysfs attribute to allow users to set read-write
> devices as read-only and back to read-write from userspace. The choice
> of the name is based on MMC core 'force_ro' attribute.
>
> This solves a situation where an AT24 I2C EEPROM with GPIO based nWP
> signal may have to be occasionally updated. Such I2C EEPROM device is
> usually set as read-only during most of the regular system operation,
> but in case it has to be updated in a controlled manner, it could be
> unlocked using this new "force_ro" sysfs attribute and then re-locked
> again.
>
> The "read-only" DT property and config->read_only configuration is
> respected and is used to set default state of the device, read-only
> or read-write, for devices which do implement .reg_write function.
> For devices which do not implement .reg_write function, the device
> is unconditionally read-only and the "force_ro" attribute is not
> visible.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> ---
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Bartosz Golaszewski <brgl@bgdev.pl>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> Cc: linux-i2c@vger.kernel.org
> ---
> V2: - Document the force_ro attribute
> - Use sysfs_emit()
> ---
> Documentation/ABI/stable/sysfs-bus-nvmem | 13 +++++++
> drivers/nvmem/core.c | 44 ++++++++++++++++++++++++
> drivers/nvmem/internals.h | 1 +
> 3 files changed, 58 insertions(+)
>
> diff --git a/Documentation/ABI/stable/sysfs-bus-nvmem b/Documentation/ABI/stable/sysfs-bus-nvmem
> index 0e3a8492a1082..c713c4e6cecb1 100644
> --- a/Documentation/ABI/stable/sysfs-bus-nvmem
> +++ b/Documentation/ABI/stable/sysfs-bus-nvmem
> @@ -1,3 +1,16 @@
> +What: /sys/bus/nvmem/devices/.../force_ro
> +Date: June 2024
> +KernelVersion: 6.11
> +Contact: Marek Vasut <marex@denx.de>
> +Description:
> + This read/write attribute allows users to set read-write
> + devices as read-only and back to read-write from userspace.
> + This can be used to unlock and relock write-protection of
> + devices which are generally locked, except during sporadic
> + programming operation.
> + Note: This file is only present if CONFIG_NVMEM_SYSFS
> + is enabled
And what exactly are the values that can be read or written here?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/4] nvmem: Document type attribute
2024-06-23 3:15 ` [PATCH v2 2/4] nvmem: Document type attribute Marek Vasut
@ 2024-06-23 10:04 ` Alexandre Belloni
0 siblings, 0 replies; 7+ messages in thread
From: Alexandre Belloni @ 2024-06-23 10:04 UTC (permalink / raw)
To: Marek Vasut
Cc: linux-i2c, Arnd Bergmann, Bartosz Golaszewski, Greg Kroah-Hartman,
Srinivas Kandagatla
On 23/06/2024 05:15:45+0200, Marek Vasut wrote:
> Document a type attribute used by userspace to discern different types of
> NVMEM devices. The implementation is already present, the ABI document is
> missing, add it.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> ---
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Bartosz Golaszewski <brgl@bgdev.pl>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> Cc: linux-i2c@vger.kernel.org
> ---
> V2: - New patch
> ---
> Documentation/ABI/stable/sysfs-bus-nvmem | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/Documentation/ABI/stable/sysfs-bus-nvmem b/Documentation/ABI/stable/sysfs-bus-nvmem
> index 854bd11d72ac4..0e3a8492a1082 100644
> --- a/Documentation/ABI/stable/sysfs-bus-nvmem
> +++ b/Documentation/ABI/stable/sysfs-bus-nvmem
> @@ -20,3 +20,14 @@ Description:
> ...
> *
> 0001000
> +
> +What: /sys/bus/nvmem/devices/.../type
> +Date: November 2018
> +KernelVersion: 5.0
> +Contact: Alexandre Belloni <alexandre.belloni@bootlin.com>
> +Description:
> + This read-only attribute allows user to read the NVMEM
> + device type. Supported types are "Unknown", "EEPROM",
> + "OTP", "Battery backed", "FRAM".
> + Note: This file is only present if CONFIG_NVMEM_SYSFS
> + is enabled
> --
> 2.43.0
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 4/4] nvmem: core: Implement force_ro sysfs attribute
2024-06-23 6:13 ` Greg Kroah-Hartman
@ 2024-06-24 0:19 ` Marek Vasut
0 siblings, 0 replies; 7+ messages in thread
From: Marek Vasut @ 2024-06-24 0:19 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: linux-i2c, Alexandre Belloni, Arnd Bergmann, Bartosz Golaszewski,
Srinivas Kandagatla
On 6/23/24 8:13 AM, Greg Kroah-Hartman wrote:
> On Sun, Jun 23, 2024 at 05:15:47AM +0200, Marek Vasut wrote:
>> Implement "force_ro" sysfs attribute to allow users to set read-write
>> devices as read-only and back to read-write from userspace. The choice
>> of the name is based on MMC core 'force_ro' attribute.
>>
>> This solves a situation where an AT24 I2C EEPROM with GPIO based nWP
>> signal may have to be occasionally updated. Such I2C EEPROM device is
>> usually set as read-only during most of the regular system operation,
>> but in case it has to be updated in a controlled manner, it could be
>> unlocked using this new "force_ro" sysfs attribute and then re-locked
>> again.
>>
>> The "read-only" DT property and config->read_only configuration is
>> respected and is used to set default state of the device, read-only
>> or read-write, for devices which do implement .reg_write function.
>> For devices which do not implement .reg_write function, the device
>> is unconditionally read-only and the "force_ro" attribute is not
>> visible.
>>
>> Signed-off-by: Marek Vasut <marex@denx.de>
>> ---
>> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
>> Cc: Arnd Bergmann <arnd@arndb.de>
>> Cc: Bartosz Golaszewski <brgl@bgdev.pl>
>> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>> Cc: linux-i2c@vger.kernel.org
>> ---
>> V2: - Document the force_ro attribute
>> - Use sysfs_emit()
>> ---
>> Documentation/ABI/stable/sysfs-bus-nvmem | 13 +++++++
>> drivers/nvmem/core.c | 44 ++++++++++++++++++++++++
>> drivers/nvmem/internals.h | 1 +
>> 3 files changed, 58 insertions(+)
>>
>> diff --git a/Documentation/ABI/stable/sysfs-bus-nvmem b/Documentation/ABI/stable/sysfs-bus-nvmem
>> index 0e3a8492a1082..c713c4e6cecb1 100644
>> --- a/Documentation/ABI/stable/sysfs-bus-nvmem
>> +++ b/Documentation/ABI/stable/sysfs-bus-nvmem
>> @@ -1,3 +1,16 @@
>> +What: /sys/bus/nvmem/devices/.../force_ro
>> +Date: June 2024
>> +KernelVersion: 6.11
>> +Contact: Marek Vasut <marex@denx.de>
>> +Description:
>> + This read/write attribute allows users to set read-write
>> + devices as read-only and back to read-write from userspace.
>> + This can be used to unlock and relock write-protection of
>> + devices which are generally locked, except during sporadic
>> + programming operation.
>> + Note: This file is only present if CONFIG_NVMEM_SYSFS
>> + is enabled
>
> And what exactly are the values that can be read or written here?
I expanded it to this:
This read/write attribute allows users to set read-write
devices as read-only and back to read-write from userspace.
This can be used to unlock and relock write-protection of
devices which are generally locked, except during sporadic
programming operation.
+Read returns '0' or '1' for read-write or read-only modes
+respectively.
+Write parses one of 'YyTt1NnFf0', or [oO][NnFf] for "on"
+and "off", i.e. what kstrbool() supports.
Note: This file is only present if CONFIG_NVMEM_SYSFS
is enabled.
But I wonder, wouldn't it be better if write only supported '0' and '1'
too, instead of the whole list of stuff that kstrbool() supports ?
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-06-24 0:36 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-23 3:15 [PATCH v2 1/4] nvmem: Replace spaces with tab in documentation Marek Vasut
2024-06-23 3:15 ` [PATCH v2 2/4] nvmem: Document type attribute Marek Vasut
2024-06-23 10:04 ` Alexandre Belloni
2024-06-23 3:15 ` [PATCH v2 3/4] nvmem: Use sysfs_emit() for " Marek Vasut
2024-06-23 3:15 ` [PATCH v2 4/4] nvmem: core: Implement force_ro sysfs attribute Marek Vasut
2024-06-23 6:13 ` Greg Kroah-Hartman
2024-06-24 0:19 ` Marek Vasut
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox