sf: probe: Add support for flag status polling
authorJagannadha Sutradharudu Teki <jaganna@xilinx.com>
Wed, 2 Oct 2013 14:07:43 +0000 (19:37 +0530)
committerJagannadha Sutradharudu Teki <jaganna@xilinx.com>
Mon, 7 Oct 2013 12:25:45 +0000 (17:55 +0530)
From Micron, 512MB onwards, flash requires to poll flag status
instead of read status- hence added E_FSR flag on spectific
flash parts.

Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
drivers/mtd/spi/spi_flash_probe.c
include/spi_flash.h

index 9c2e11521f12602193d21dd3829dda1243675515..8ea69158e72b1fe39a7f5cb29654dd761e982dc1 100644 (file)
@@ -94,10 +94,10 @@ static const struct spi_flash_params spi_flash_params_table[] = {
        {"N25Q128A",       0x20bb18, 0x0,       64 * 1024,   256,              SECT_4K},
        {"N25Q256",        0x20ba19, 0x0,       64 * 1024,   512,              SECT_4K},
        {"N25Q256A",       0x20bb19, 0x0,       64 * 1024,   512,              SECT_4K},
-       {"N25Q512",        0x20ba20, 0x0,       64 * 1024,  1024,              SECT_4K},
-       {"N25Q512A",       0x20bb20, 0x0,       64 * 1024,  1024,              SECT_4K},
-       {"N25Q1024",       0x20ba21, 0x0,       64 * 1024,  2048,              SECT_4K},
-       {"N25Q1024A",      0x20bb21, 0x0,       64 * 1024,  2048,              SECT_4K},
+       {"N25Q512",        0x20ba20, 0x0,       64 * 1024,  1024,      E_FSR | SECT_4K},
+       {"N25Q512A",       0x20bb20, 0x0,       64 * 1024,  1024,      E_FSR | SECT_4K},
+       {"N25Q1024",       0x20ba21, 0x0,       64 * 1024,  2048,      E_FSR | SECT_4K},
+       {"N25Q1024A",      0x20bb21, 0x0,       64 * 1024,  2048,      E_FSR | SECT_4K},
 #endif
 #ifdef CONFIG_SPI_FLASH_SST            /* SST */
        {"SST25VF040B",    0xbf258d, 0x0,       64 * 1024,     8,     SECT_4K | SST_WP},
@@ -187,7 +187,6 @@ struct spi_flash *spi_flash_validate_ids(struct spi_slave *spi, u8 *idcode)
 
        flash->spi = spi;
        flash->name = params->name;
-       flash->poll_cmd = CMD_READ_STATUS;
 
        /* Assign spi_flash ops */
        flash->write = spi_flash_cmd_write_multi;
@@ -215,6 +214,13 @@ struct spi_flash *spi_flash_validate_ids(struct spi_slave *spi, u8 *idcode)
                flash->erase_size = flash->sector_size;
        }
 
+       /* Poll cmd seclection */
+       flash->poll_cmd = CMD_READ_STATUS;
+#ifdef CONFIG_SPI_FLASH_STMICRO
+       if (params->flags & E_FSR)
+               flash->poll_cmd = CMD_FLAG_STATUS;
+#endif
+
        /* Flash powers up read-only, so clear BP# bits */
 #if defined(CONFIG_SPI_FLASH_ATMEL) || \
        defined(CONFIG_SPI_FLASH_MACRONIX) || \
index 0d40e6c975c8543630d2deb9d99cfe0bae6f10c5..09af55dee502be67c688d71af1c8d240454d7484 100644 (file)
@@ -20,6 +20,7 @@
 /* SECT flags */
 #define SECT_4K                (1 << 1)
 #define SECT_32K               (1 << 2)
+#define E_FSR                  (1 << 3)
 
 /* SST specific macros */
 #ifdef CONFIG_SPI_FLASH_SST