Message ID | 20250228180326.256058-2-jberring@redhat.com |
---|---|
State | New |
Headers | show |
Series | nvmem-reboot-mode: support small reboot mode magic | expand |
Hi Jennifer, On 28/02/2025 18:03, Jennifer Berringer wrote: > This function allows nvmem consumers to know the size of an nvmem cell > before calling nvmem_cell_write() or nvmem_cell_read(), which is helpful > for drivers that may need to handle devices with different cell sizes. > > Signed-off-by: Jennifer Berringer <jberring@redhat.com> > --- > drivers/nvmem/core.c | 18 ++++++++++++++++++ > include/linux/nvmem-consumer.h | 6 ++++++ > 2 files changed, 24 insertions(+) > > diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c > index d6494dfc20a7..4d0cbd20da48 100644 > --- a/drivers/nvmem/core.c > +++ b/drivers/nvmem/core.c > @@ -1624,6 +1624,24 @@ void nvmem_cell_put(struct nvmem_cell *cell) > } > EXPORT_SYMBOL_GPL(nvmem_cell_put); > > +/** > + * nvmem_cell_size() - Get nvmem cell size in bytes. > + * > + * @cell: nvmem cell. > + * > + * Return: size of the nvmem cell. > + */ > +size_t nvmem_cell_size(struct nvmem_cell *cell) > +{ > + struct nvmem_cell_entry *entry = cell->entry; > + > + if (!entry) > + return 0; > + > + return entry->bytes; > +} > +EXPORT_SYMBOL_GPL(nvmem_cell_size); > + There is a similar patch on the list, could you take a look and see if that is usable in power reset driver. https://lore.kernel.org/lkml/20250306093900.2199442-3-o.rempel@pengutronix.de/T/#m97bbb1870d7140661894a4e806a695e563588524 --srini > static void nvmem_shift_read_buffer_in_place(struct nvmem_cell_entry *cell, void *buf) > { > u8 *p, *b; > diff --git a/include/linux/nvmem-consumer.h b/include/linux/nvmem-consumer.h > index 34c0e58dfa26..a2020527d2d3 100644 > --- a/include/linux/nvmem-consumer.h > +++ b/include/linux/nvmem-consumer.h > @@ -54,6 +54,7 @@ struct nvmem_cell *nvmem_cell_get(struct device *dev, const char *id); > struct nvmem_cell *devm_nvmem_cell_get(struct device *dev, const char *id); > void nvmem_cell_put(struct nvmem_cell *cell); > void devm_nvmem_cell_put(struct device *dev, struct nvmem_cell *cell); > +size_t nvmem_cell_size(struct nvmem_cell *cell); > void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len); > int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len); > int nvmem_cell_read_u8(struct device *dev, const char *cell_id, u8 *val); > @@ -117,6 +118,11 @@ static inline void nvmem_cell_put(struct nvmem_cell *cell) > { > } > > +static inline size_t nvmem_cell_size(struct nvmem_cell *cell) > +{ > + return 0; > +} > + > static inline void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len) > { > return ERR_PTR(-EOPNOTSUPP);
Hello, On 3/7/25 12:42, Srinivas Kandagatla wrote: > Hi Jennifer, > > There is a similar patch on the list, could you take a look and see if that is usable in power reset driver. > > https://lore.kernel.org/lkml/20250306093900.2199442-3-o.rempel@pengutronix.de/T/#m97bbb1870d7140661894a4e806a695e563588524 > > --srini Yes, the nvmem_cell_get_size() function defined in that patch would make my own nvmem_cell_size() function in this patch redundant. I can update my reboot mode driver change to depend on that patch instead of introducing my own function for the same purpose.
diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index d6494dfc20a7..4d0cbd20da48 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1624,6 +1624,24 @@ void nvmem_cell_put(struct nvmem_cell *cell) } EXPORT_SYMBOL_GPL(nvmem_cell_put); +/** + * nvmem_cell_size() - Get nvmem cell size in bytes. + * + * @cell: nvmem cell. + * + * Return: size of the nvmem cell. + */ +size_t nvmem_cell_size(struct nvmem_cell *cell) +{ + struct nvmem_cell_entry *entry = cell->entry; + + if (!entry) + return 0; + + return entry->bytes; +} +EXPORT_SYMBOL_GPL(nvmem_cell_size); + static void nvmem_shift_read_buffer_in_place(struct nvmem_cell_entry *cell, void *buf) { u8 *p, *b; diff --git a/include/linux/nvmem-consumer.h b/include/linux/nvmem-consumer.h index 34c0e58dfa26..a2020527d2d3 100644 --- a/include/linux/nvmem-consumer.h +++ b/include/linux/nvmem-consumer.h @@ -54,6 +54,7 @@ struct nvmem_cell *nvmem_cell_get(struct device *dev, const char *id); struct nvmem_cell *devm_nvmem_cell_get(struct device *dev, const char *id); void nvmem_cell_put(struct nvmem_cell *cell); void devm_nvmem_cell_put(struct device *dev, struct nvmem_cell *cell); +size_t nvmem_cell_size(struct nvmem_cell *cell); void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len); int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len); int nvmem_cell_read_u8(struct device *dev, const char *cell_id, u8 *val); @@ -117,6 +118,11 @@ static inline void nvmem_cell_put(struct nvmem_cell *cell) { } +static inline size_t nvmem_cell_size(struct nvmem_cell *cell) +{ + return 0; +} + static inline void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len) { return ERR_PTR(-EOPNOTSUPP);
This function allows nvmem consumers to know the size of an nvmem cell before calling nvmem_cell_write() or nvmem_cell_read(), which is helpful for drivers that may need to handle devices with different cell sizes. Signed-off-by: Jennifer Berringer <jberring@redhat.com> --- drivers/nvmem/core.c | 18 ++++++++++++++++++ include/linux/nvmem-consumer.h | 6 ++++++ 2 files changed, 24 insertions(+)