sf: Remove spansion_s25fss_disable_4KB_erase
authorJagan Teki <jagan@amarulasolutions.com>
Tue, 15 Nov 2016 17:27:42 +0000 (22:57 +0530)
committerJagan Teki <jagan@openedev.com>
Fri, 18 Nov 2016 07:34:53 +0000 (13:04 +0530)
In spansion S25FS-S family the physical sectors are grouped as
normal and parameter sectors. Parameter sectors are 4kB in size
with 8 set located at the bottom or top address of a device.
Normal sectors are similar to other flash family with sizes of
64kB or 32 kB.

To erase whole flash using sector erase(D8h or DCh) won't effect
the parameter sectors, so in order to erase these we must use 4K
sector erase commands (20h or 21h) separately.

So better to erase the whole flash using 4K sector erase instead
of detecting these family parts again and do two different erase
operations.

For this:
- Removed spansion_s25fss_disable_4KB_erase code
- Add SECT_4K for S25FS512S chip

Cc: Yunhui Cui <yunhui.cui@nxp.com>
Cc: Bin Meng <bmeng.cn@gmail.com>
Cc: York Sun <york.sun@nxp.com>
Cc: Vignesh R <vigneshr@ti.com>
Cc: Mugunthan V N <mugunthanvnm@ti.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: Michael Trimarchi <michael@amarulasolutions.com>
Cc: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Jagan Teki <jagan@openedev.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Jagan Teki <jagan@openedev.com>
Tested-by: Jagan Teki <jagan@openedev.com>
drivers/mtd/spi/sf_internal.h
drivers/mtd/spi/sf_params.c
drivers/mtd/spi/spi_flash.c

index 6b2ab7b4a94b67ab13d9947c234a0b56635992ae..9aac0e832a76d3ae0d5947cb8e59c7affc59a0a9 100644 (file)
@@ -98,12 +98,6 @@ int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
                const void *buf);
 #endif
 
-#ifdef CONFIG_SPI_FLASH_SPANSION
-/* Used for Spansion S25FS-S family flash only. */
-#define CMD_SPANSION_RDAR      0x65 /* Read any device register */
-#define CMD_SPANSION_WRAR      0x71 /* Write any device register */
-#endif
-
 #define JEDEC_MFR(info)                ((info)->id[0])
 #define JEDEC_ID(info)         (((info)->id[1]) << 8 | ((info)->id[2]))
 #define JEDEC_EXT(info)                (((info)->id[3]) << 8 | ((info)->id[4]))
index 6157e29e968c3a789aea4fa1c3d614958831c7bf..7b9e5efaf8876165c53713c6399d798c1e312da9 100644 (file)
@@ -99,7 +99,7 @@ const struct spi_flash_info spi_flash_ids[] = {
        {"S25FL256S_256K", INFO(0x010219, 0x4d00, 256 * 1024,   128, RD_FULL | WR_QPP) },
        {"S25FL256S_64K",  INFO(0x010219, 0x4d01,  64 * 1024,   512, RD_FULL | WR_QPP) },
        {"S25FS256S_64K",  INFO6(0x010219, 0x4d0181, 64 * 1024, 512, RD_FULL | WR_QPP | SECT_4K) },
-       {"S25FS512S",      INFO(0x010220, 0x4D00, 128 * 1024,   512, RD_FULL | WR_QPP) },
+       {"S25FS512S",      INFO(0x010220, 0x4D00, 128 * 1024,   512, RD_FULL | WR_QPP | SECT_4K) },
        {"S25FL512S_256K", INFO(0x010220, 0x4d00, 256 * 1024,   256, RD_FULL | WR_QPP) },
        {"S25FL512S_64K",  INFO(0x010220, 0x4d01,  64 * 1024,  1024, RD_FULL | WR_QPP) },
        {"S25FL512S_512K", INFO(0x010220, 0x4f00, 256 * 1024,   256, RD_FULL | WR_QPP) },
index 94304247fba6d9afa709637ae3371d0e7170f8b8..b126a217f729bfcb08e3cd9114269bff5b10f7f9 100644 (file)
@@ -999,43 +999,6 @@ int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash)
 }
 #endif /* CONFIG_IS_ENABLED(OF_CONTROL) */
 
-#ifdef CONFIG_SPI_FLASH_SPANSION
-static int spansion_s25fss_disable_4KB_erase(struct spi_slave *spi)
-{
-       u8 cmd[4];
-       u32 offset = 0x800004; /* CR3V register offset */
-       u8 cr3v;
-       int ret;
-
-       cmd[0] = CMD_SPANSION_RDAR;
-       cmd[1] = offset >> 16;
-       cmd[2] = offset >> 8;
-       cmd[3] = offset >> 0;
-
-       ret = spi_flash_cmd_read(spi, cmd, 4, &cr3v, 1);
-       if (ret)
-               return -EIO;
-       /* CR3V bit3: 4-KB Erase */
-       if (cr3v & 0x8)
-               return 0;
-
-       cmd[0] = CMD_SPANSION_WRAR;
-       cr3v |= 0x8;
-       ret = spi_flash_cmd_write(spi, cmd, 4, &cr3v, 1);
-       if (ret)
-               return -EIO;
-
-       cmd[0] = CMD_SPANSION_RDAR;
-       ret = spi_flash_cmd_read(spi, cmd, 4, &cr3v, 1);
-       if (ret)
-               return -EIO;
-       if (!(cr3v & 0x8))
-               return -EFAULT;
-
-       return 0;
-}
-#endif
-
 int spi_flash_scan(struct spi_flash *flash)
 {
        struct spi_slave *spi = flash->spi;
@@ -1046,48 +1009,6 @@ int spi_flash_scan(struct spi_flash *flash)
        if (IS_ERR_OR_NULL(info))
                return -ENOENT;
 
-#ifdef CONFIG_SPI_FLASH_SPANSION
-       /*
-        * The S25FS-S family physical sectors may be configured as a
-        * hybrid combination of eight 4-kB parameter sectors
-        * at the top or bottom of the address space with all
-        * but one of the remaining sectors being uniform size.
-        * The Parameter Sector Erase commands (20h or 21h) must
-        * be used to erase the 4-kB parameter sectors individually.
-        * The Sector (uniform sector) Erase commands (D8h or DCh)
-        * must be used to erase any of the remaining
-        * sectors, including the portion of highest or lowest address
-        * sector that is not overlaid by the parameter sectors.
-        * The uniform sector erase command has no effect on parameter sectors.
-        */
-       if ((JEDEC_ID(info) == 0x0219 || (JEDEC_ID(info) == 0x0220)) &&
-           (JEDEC_EXT(info) & 0xff00) == 0x4d00) {
-               int ret;
-               u8 idcode[5];
-               u8 id[6];
-
-               /* Read the ID codes again, 5 bytes */
-               ret = spi_flash_cmd(flash->spi, CMD_READ_ID, idcode, sizeof(idcode));
-               if (ret)
-                       return -EIO;
-
-               /* Read the ID codes again, 6 bytes */
-               ret = spi_flash_cmd(flash->spi, CMD_READ_ID, id, sizeof(id));
-               if (ret)
-                       return -EIO;
-
-               ret = memcmp(id, idcode, 5);
-               if (ret)
-                       return -EIO;
-
-               /* 0x81: S25FS-S family 0x80: S25FL-S family */
-               if (id[5] == 0x81) {
-                       ret = spansion_s25fss_disable_4KB_erase(spi);
-                       if (ret)
-                               return ret;
-               }
-       }
-#endif
        /* Flash powers up read-only, so clear BP# bits */
        if (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_ATMEL ||
            JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_MACRONIX ||