
On Mon 2016-05-30 10:43:39, Fabio Estevam wrote:
On Mon, May 30, 2016 at 5:33 AM, Pavel Machek pavel@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;