Re: [RFC PATCH] nvmem: core: add sysfs cell write support

From: Marco Felsch
Date: Mon Feb 19 2024 - 06:54:17 EST


On 24-02-19, Miquel Raynal wrote:
> Hi Marco,
>
> m.felsch@xxxxxxxxxxxxxx wrote on Fri, 16 Feb 2024 11:07:50 +0100:
>
> > Hi Michael,
> >
> > On 24-02-16, Michael Walle wrote:
> > > Hi,
> > >
> > > On Thu Feb 15, 2024 at 10:14 PM CET, Marco Felsch wrote:
> > > > @@ -432,6 +466,7 @@ static int nvmem_populate_sysfs_cells(struct nvmem_device *nvmem)
> > > > struct bin_attribute **cells_attrs, *attrs;
> > > > struct nvmem_cell_entry *entry;
> > > > unsigned int ncells = 0, i = 0;
> > > > + umode_t mode;
> > > > int ret = 0;
> > > >
> > > > mutex_lock(&nvmem_mutex);
> > > > @@ -456,15 +491,18 @@ static int nvmem_populate_sysfs_cells(struct nvmem_device *nvmem)
> > > > goto unlock_mutex;
> > > > }
> > > >
> > > > + mode = nvmem_bin_attr_get_umode(nvmem);
> > > > +
> > > > /* Initialize each attribute to take the name and size of the cell */
> > > > list_for_each_entry(entry, &nvmem->cells, node) {
> > > > sysfs_bin_attr_init(&attrs[i]);
> > > > attrs[i].attr.name = devm_kasprintf(&nvmem->dev, GFP_KERNEL,
> > > > "%s@%x", entry->name,
> > > > entry->offset);
> > > > - attrs[i].attr.mode = 0444;
> > >
> > > cells are not writable if there is a read post process hook, see
> > > __nvmem_cell_entry_write().
> > >
> > > if (entry->read_post_processing)
> > > mode &= ~0222;
> >
> > good point, thanks for the hint :) I will add this and send a non-rfc
> > version if write-support is something you would like to have.
>
> I like the idea but, what about mtd devices (and soon maybe UBI
> devices)? This may only work on EEPROM-like devices I guess, where each
> area is fully independent and where no erasure is actually expected.

For MTD I would say that you need to ensure that you need to align the
cells correctly. The cell-write should handle the page erase/write cycle
properly. E.g. an SPI-NOR need to align the cells to erase-page size or
the nvmem-cell-write need to read-copy-update the cells if they are not
erase-paged aligned.

Regarding UBI(FS) I'm not sure if this is required at all since you have
an filesystem. IMHO nvmem-cells are very lowelevel and are not made for
filesystem backed backends.

That beeing said: I have no problem if we provide write support for
EEPROMs only and adapt it later on to cover spi-nor/nand devices as
well.

Regards,
Marco