[PATCH v3 2/2] mtd: spi-nor: Add support for flash reset

Potthuri, Sai Krishna sai.krishna.potthuri at amd.com
Mon Oct 3 03:06:18 PDT 2022


Hi Tudor Ambarus,

> -----Original Message-----
> From: Tudor.Ambarus at microchip.com <Tudor.Ambarus at microchip.com>
> Sent: Monday, October 3, 2022 3:13 PM
> To: Potthuri, Sai Krishna <sai.krishna.potthuri at amd.com>;
> pratyush at kernel.org; michael at walle.cc; miquel.raynal at bootlin.com;
> richard at nod.at; vigneshr at ti.com; robh+dt at kernel.org;
> krzysztof.kozlowski+dt at linaro.org
> Cc: devicetree at vger.kernel.org; linux-mtd at lists.infradead.org; linux-
> kernel at vger.kernel.org; saikrishna12468 at gmail.com; git (AMD-Xilinx)
> <git at amd.com>
> Subject: Re: [PATCH v3 2/2] mtd: spi-nor: Add support for flash reset
> 
> On 9/8/22 09:44, Sai Krishna Potthuri wrote:
> > EXTERNAL EMAIL: Do not click links or open attachments unless you know
> > the content is safe
> >
> > Add support for spi-nor flash reset via GPIO controller by reading the
> > reset-gpio property. If there is a valid GPIO specifier then reset
> > will be performed by asserting and deasserting the GPIO using gpiod
> > APIs otherwise it will not perform any operation.
> >
> > Signed-off-by: Sai Krishna Potthuri <sai.krishna.potthuri at amd.com>
> > Reviewed-by: Michael Walle <michael at walle.cc>
> > ---
> >  drivers/mtd/spi-nor/core.c | 25 +++++++++++++++++++++++++
> >  1 file changed, 25 insertions(+)
> >
> > diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
> > index f2c64006f8d7..a78ab9bae2be 100644
> > --- a/drivers/mtd/spi-nor/core.c
> > +++ b/drivers/mtd/spi-nor/core.c
> > @@ -2933,6 +2933,27 @@ static void spi_nor_set_mtd_info(struct spi_nor
> *nor)
> >         mtd->_put_device = spi_nor_put_device;  }
> >
> > +static int spi_nor_hw_reset(struct spi_nor *nor) {
> > +       struct gpio_desc *reset;
> > +
> > +       reset = devm_gpiod_get_optional(nor->dev, "reset",
> GPIOD_OUT_LOW);
> > +       if (IS_ERR_OR_NULL(reset))
> > +               return PTR_ERR_OR_ZERO(reset);
> > +
> > +       /*
> > +        * Experimental delay values by looking at different flash device
> > +        * vendors datasheets.
> > +        */
> > +       usleep_range(1, 5);
> > +       gpiod_set_value_cansleep(reset, 1);
> > +       usleep_range(100, 150);
> > +       gpiod_set_value_cansleep(reset, 0);
> > +       usleep_range(1000, 1200);
> > +
> > +       return 0;
> > +}
> > +
> >  int spi_nor_scan(struct spi_nor *nor, const char *name,
> >                  const struct spi_nor_hwcaps *hwcaps)  { @@ -2965,6
> > +2986,10 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
> >         if (!nor->bouncebuf)
> >                 return -ENOMEM;
> >
> > +       ret = spi_nor_hw_reset(nor);
> 
> Should we condition the calling of this method by the absence of the
> "broken-flash-reset"
> dt prop?
This is the suggestion from Michael on top of my initial series for which
i also agreed to have this call unconditionally. If device tree is having this
reset property then we can do the reset in any case.

Regards
Sai Krishna



More information about the linux-mtd mailing list