[Skiboot] [PATCH] flash: Support adding the no-erase property to flash
William Kennington
wak at google.com
Sat Sep 2 03:01:54 AEST 2017
https://github.com/torvalds/linux/blob/master/Documentation/ABI/testing/sysfs-class-mtd#L65
"No erase necessary"
On Fri, Sep 1, 2017 at 12:16 AM Suraj Jitindar Singh <
sjitindarsingh at gmail.com> wrote:
> Hi,
>
> On Mon, 2017-08-28 at 23:48 -0700, William A. Kennington III wrote:
> > Currently, flash devices like mbox-flash ignore erase commands. This
> > means that issuing an erase from userspace, through the mtd device,
> > and
> > back returns a successful operation that does nothing. Unfortunately
> > this makes userspace tools unhappy. Linux MTD devices support the
> > MTD_NO_ERASE flag which conveys that writes do not require erases on
> > the
> > underlying flash devices. We should set this property on all of our
> > devices which do not require erases to be performed.
> >
> > NOTE: This still requires a linux kernel component to set the
> > MTD_NO_ERASE flag from the device tree property.
>
> Can I just check, does the MTD_NO_ERASE flag mean that the mtd device
> doesn't have an erase function, or that an erase isn't necessary before
> a write?
>
> Because the V2 mbox has an erase method which mbox-flash will call when
> an erase is performed. So if it means there isn't an erase function
> then this is incorrect.
>
> If it means that an erase isn't required before a write however then I
> support this as the mbox protocol explicitly states this to be the
> case.
>
> Thanks,
> Suraj
>
> >
> > Signed-off-by: William A. Kennington III <wak at google.com>
> > ---
> > core/flash.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/core/flash.c b/core/flash.c
> > index 53e6eba08..9e230174f 100644
> > --- a/core/flash.c
> > +++ b/core/flash.c
> > @@ -31,6 +31,7 @@
> > struct flash {
> > struct list_node list;
> > bool busy;
> > + bool no_erase;
> > struct blocklevel_device *bl;
> > uint64_t size;
> > uint32_t block_size;
> > @@ -199,6 +200,8 @@ static struct dt_node *flash_add_dt_node(struct
> > flash *flash, int id)
> > dt_add_property_u64(flash_node, "reg", flash->size);
> > dt_add_property_cells(flash_node, "ibm,flash-block-size",
> > flash->block_size);
> > + if (flash->no_erase)
> > + dt_add_property(flash_node, "no-erase", NULL, 0);
> >
> > /* we fix to 32-bits */
> > dt_add_property_cells(flash_node, "#address-cells", 1);
> > @@ -281,6 +284,7 @@ int flash_register(struct blocklevel_device *bl)
> >
> > flash->busy = false;
> > flash->bl = bl;
> > + flash->no_erase = !(bl->flags & WRITE_NEED_ERASE);
> > flash->size = size;
> > flash->block_size = block_size;
> > flash->id = num_flashes();
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/skiboot/attachments/20170901/df337923/attachment.html>
More information about the Skiboot
mailing list