[U-Boot] [PATCHv3] mtd: sf: Add CONFIG_SPI_N25Q256A_RESET for software-reset

Pavel Machek pavel at denx.de
Sun May 10 19:53:46 CEST 2015


On Sun 2015-05-10 17:54:01, Jagan Teki wrote:
> On 10 May 2015 at 16:19, Pavel Machek <pavel at denx.de> wrote:
> > On Sun 2015-05-10 11:15:41, Pavel Machek wrote:
> > Add reset for N25Q256A SPI NOR, as U-Boot SPL 2013-socfpga (only
> > version working on that board) sets 4-byte addressing mode.
> >
> > Signed-off-by: Pavel Machek <pavel at denx.de>
> >
> > ---
> > Diff to v3: Marek insists this is Micron specific, so lets rename the
> > config option.
> >
> > diff --git a/README b/README
> > index ee65fdb..69f9e5b 100644
> > --- a/README
> > +++ b/README
> > @@ -2775,6 +2775,10 @@ CBFS (Coreboot Filesystem) support
> >                 Timeout for waiting until spi transfer completed.
> >                 default: (CONFIG_SYS_HZ/100)     /* 10 ms */
> >
> > +               CONFIG_SPI_MICRON_RESET
> > +               Reset SPI NOR flash. Needed when preloader sets it to 4-byte
> > +               mode, for example.
> > +
> >  - FPGA Support: CONFIG_FPGA
> >
> >                 Enables FPGA subsystem.
> > diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
> > index 201471c..6b39ce8 100644
> > --- a/drivers/mtd/spi/sf_probe.c
> > +++ b/drivers/mtd/spi/sf_probe.c
> > @@ -347,6 +348,28 @@ int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash)
> >                 }
> >         }
> >
> > +#ifdef CONFIG_SPI_MICRON_RESET
> > +#define CMD_RESET_ENABLE 0x66
> > +#define CMD_RESET_MEMORY 0x99
> > +       /*
> > +        * This is needed for the SoCFPGA booting from SPI NOR flash
> > +        * e.g. (MICRON), as U-Boot SPL 2013-socfpga (only version
> > +        * working on that board) sets 4-byte addressing mode.
> > +        */
> > +       ret = spi_flash_cmd(spi, CMD_RESET_ENABLE, NULL, 0);
> > +       if (ret) {
> > +               printf("SF: Failed issue enable reset command\n");
> > +               goto err_read_id;
> > +       }
> > +
> > +       ret = spi_flash_cmd(spi, CMD_RESET_MEMORY, NULL, 0);
> > +       if (ret) {
> > +               printf("SF: Failed issue reset command\n");
> > +               goto err_read_id;
> > +       }
> > +
> > +       printf("SF: Device software reset\n");
> > +#endif
> >  #ifdef CONFIG_OF_CONTROL
> >         if (spi_flash_decode_fdt(gd->fdt_blob, flash)) {
> >                 debug("SF: FDT decode error\n");
> >
> 
> As per my early comments on this thread, I'm not happy with this approach of
> being added flash specific in generic code by simply added like this.
> 
> I encounter similar issue before and I simply reverted [1]
> http://git.denx.de/?p=u-boot.git;a=commit;h=122d805fd4bd478bb83536348291d34ae648364b
> 
> Please think in a different perceptive like adding any flags to specific vendor
> with specific part, but that also require proper tested.

Ok, could you explain how you'd like to have it solved? Should we just
call spi_flash_cmd() from socfpga-specific code?

But I'm pretty sure similar issue will be encountered on different
boards, so it would be good to have it in shared place. Do you want me
to create sf_probe_micron and move it there?

Best regards,
									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html


More information about the U-Boot mailing list