[PATCH V3] sf: Querying write-protect status before operating the flash

Jagan Teki jagan at amarulasolutions.com
Wed Nov 17 09:13:28 CET 2021


On Wed, Nov 17, 2021 at 1:33 PM Michael Walle <michael at walle.cc> wrote:
>
> Hi,
>
> Am 2021-11-17 03:48, schrieb chaochao2021666 at 163.com:
> > From: chao zeng <chao.zeng at siemens.com>
> >
> > When operating the write-protection flash,spi_flash_std_write() and
> > spi_flash_std_erase() would return wrong result.The flash is protected,
> > but write or erase the flash would show "OK".
> >
> > Check the flash write protection state before operating the flash
> > and give a prompt to show it has been locked if the write-protection
> > has enbale
> >
> > Signed-off-by: chao zeng <chao.zeng at siemens.com>
> >
> > ---
> >
> > Changes for V2:
> >      - Return 0 not ENOPROTOOPT to refelect the flash feature
> >      - Output prompt information
> > Changes for V3:
> >      - Modify output information
> >      - Delete return statement
> > ---
> >  drivers/mtd/spi/sf_probe.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> >
> > diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
> > index f461082e03..f9e879aec5 100644
> > --- a/drivers/mtd/spi/sf_probe.c
> > +++ b/drivers/mtd/spi/sf_probe.c
> > @@ -109,6 +109,9 @@ static int spi_flash_std_write(struct udevice
> > *dev, u32 offset, size_t len,
> >       struct mtd_info *mtd = &flash->mtd;
> >       size_t retlen;
> >
> > +     if (flash->flash_is_locked && flash->flash_is_locked(flash, offset,
> > len))
> > +             printf("SF: Operate on the protected area.Writes will be
> > ignored\n");
>
> I don't think this is the correct place for this output. This could
> also be called from a board file programmatically and then it might
> display this error, which is annoying.
>
> Also, this is issuing an additional command "read SR" for every write.
>
> What is your intention here? To make the user aware that he is going
> to write to a write-protected region when he is using the "sf" command?
> If that is the case, this should be added to that command instead.
>
> > +
> >       return mtd->_write(mtd, offset, len, &retlen, buf);
> >  }
> >
> > @@ -127,6 +130,9 @@ static int spi_flash_std_erase(struct udevice
> > *dev, u32 offset, size_t len)
> >       instr.addr = offset;
> >       instr.len = len;
> >
> > +     if (flash->flash_is_locked && flash->flash_is_locked(flash, offset,
> > len))
> > +             printf("SF: Operate on the protected area.Erase will be ignored\n");

My fundamental question, why cannot we use 'sf protect' then 'sf write'?

Jagan.


More information about the U-Boot mailing list