[Skiboot] [PATCH] flash: Support adding the no-erase property to flash
Suraj Jitindar Singh
sjitindarsingh at gmail.com
Fri Sep 1 17:16:51 AEST 2017
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();
More information about the Skiboot
mailing list