[U-Boot] Between 2015.10 and 2016.01, SPI flash changed erase size, and saveenv stopped working

Pavel Machek pavel at denx.de
Mon May 30 22:25:13 CEST 2016


On Mon 2016-05-30 10:43:39, Fabio Estevam wrote:
> On Mon, May 30, 2016 at 5:33 AM, Pavel Machek <pavel at denx.de> wrote:
> 
> > Commit c3c016cf75360c2a0d0a065b64b438aaf7720576 is a part of the problem:
> >
> > offset 0x40000 is protected and cannot be erased
> > => sf help
> > No SPI flash selected. Please run `sf probe'
> > => sf probe
> > ...
> > SF: Detected N25Q512 with page size 256 Bytes, erase size 4 KiB, total
> > 64 MiB
> > cadence_spi_set_speed: speed=1000000
> > => sf protect unlock 0x40000 0x20000
> > cadence_spi_xfer: len=1 [bytes]
> > cadence_spi_xfer: len=1 [bytes]
> > => saveenv
> > Saving Environment to SPI Flash...
> 
> Does this quick hack help? I am wondering if yous SPI flash power up
> with the SR field protected:

Yes, it helps. Thanks! I can now write to the enviornment.

But it still does not look like locking is working quite correctly:

Best regards,
								Pavel

=> sf protect lock 0xe0000 0x10000
=> saveenv
Saving Environment to SPI Flash...
read_ops: at e1000, len f000
read: 61440 remains
read: 28672 remains
Erasing SPI flash...SF: erase 20  e  0  0 (e0000)
SF: erase 20  e 10  0 (e1000)
SF: erase 20  e 20  0 (e2000)
SF: erase 20  e 30  0 (e3000)
SF: erase 20  e 40  0 (e4000)
SF: erase 20  e 50  0 (e5000)
SF: erase 20  e 60  0 (e6000)
SF: erase 20  e 70  0 (e7000)
SF: erase 20  e 80  0 (e8000)
SF: erase 20  e 90  0 (e9000)
SF: erase 20  e a0  0 (ea000)
SF: erase 20  e b0  0 (eb000)
SF: erase 20  e c0  0 (ec000)
SF: erase 20  e d0  0 (ed000)
SF: erase 20  e e0  0 (ee000)
SF: erase 20  e f0  0 (ef000)
Writing to SPI flash...SF: 0x0bf4dd50 => cmd = { 0x02 0x0e0000 }
chunk_len = 256
SF: 0x0bf4de50 => cmd = { 0x02 0x0e0100 } chunk_len = 256
SF: 0x0bf4df50 => cmd = { 0x02 0x0e0200 } chunk_len = 256
SF: 0x0bf4e050 => cmd = { 0x02 0x0e0300 } chunk_len = 256
SF: 0x0bf4e150 => cmd = { 0x02 0x0e0400 } chunk_len = 256
SF: 0x0bf4e250 => cmd = { 0x02 0x0e0500 } chunk_len = 256


> --- a/drivers/mtd/spi/spi_flash.c
> +++ b/drivers/mtd/spi/spi_flash.c
> @@ -1021,11 +1021,7 @@ int spi_flash_scan(struct spi_flash *flash)
>                 return -EPROTONOSUPPORT;
>         }
> 
> -       /* Flash powers up read-only, so clear BP# bits */
> -       if (idcode[0] == SPI_FLASH_CFI_MFR_ATMEL ||
> -           idcode[0] == SPI_FLASH_CFI_MFR_MACRONIX ||
> -           idcode[0] == SPI_FLASH_CFI_MFR_SST)
> -               write_sr(flash, 0);
> +       write_sr(flash, 0);
> 
>         /* Assign spi data */
>         flash->name = params->name;

-- 
(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