sf: Add spi_flash_read_bar
authorJagan Teki <jteki@openedev.com>
Wed, 2 Sep 2015 06:09:47 +0000 (11:39 +0530)
committerJagan Teki <jteki@openedev.com>
Sun, 25 Oct 2015 14:47:03 +0000 (20:17 +0530)
Add spi_flash_read_bar function for reading bar and
discovering bar commands at probe time.

Cc: Michal Simek <michal.simek@xilinx.com>
Cc: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Jagan Teki <jteki@openedev.com>
drivers/mtd/spi/sf_probe.c

index 954376d..f17ec17 100644 (file)
@@ -99,6 +99,37 @@ static int spi_flash_set_qeb(struct spi_flash *flash, u8 idcode0)
        }
 }
 
+#ifdef CONFIG_SPI_FLASH_BAR
+static int spi_flash_read_bank(struct spi_flash *flash, u8 idcode0)
+{
+       u8 curr_bank = 0;
+       int ret;
+
+       if (flash->size <= SPI_FLASH_16MB_BOUN)
+               goto bank_end;
+
+       switch (idcode0) {
+       case SPI_FLASH_CFI_MFR_SPANSION:
+               flash->bank_read_cmd = CMD_BANKADDR_BRRD;
+               flash->bank_write_cmd = CMD_BANKADDR_BRWR;
+       default:
+               flash->bank_read_cmd = CMD_EXTNADDR_RDEAR;
+               flash->bank_write_cmd = CMD_EXTNADDR_WREAR;
+       }
+
+       ret = spi_flash_read_common(flash, &flash->bank_read_cmd, 1,
+                                   &curr_bank, 1);
+       if (ret) {
+               debug("SF: fail to read bank addr register\n");
+               return ret;
+       }
+
+bank_end:
+       flash->bank_curr = curr_bank;
+       return 0;
+}
+#endif
+
 static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode,
                                     struct spi_flash *flash)
 {
@@ -235,25 +266,9 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode,
 
        /* Configure the BAR - discover bank cmds and read current bank */
 #ifdef CONFIG_SPI_FLASH_BAR
-       u8 curr_bank = 0;
-       if (flash->size > SPI_FLASH_16MB_BOUN) {
-               int ret;
-
-               flash->bank_read_cmd = (idcode[0] == 0x01) ?
-                                       CMD_BANKADDR_BRRD : CMD_EXTNADDR_RDEAR;
-               flash->bank_write_cmd = (idcode[0] == 0x01) ?
-                                       CMD_BANKADDR_BRWR : CMD_EXTNADDR_WREAR;
-
-               ret = spi_flash_read_common(flash, &flash->bank_read_cmd, 1,
-                                           &curr_bank, 1);
-               if (ret) {
-                       debug("SF: fail to read bank addr register\n");
-                       return ret;
-               }
-               flash->bank_curr = curr_bank;
-       } else {
-               flash->bank_curr = curr_bank;
-       }
+       int ret = spi_flash_read_bank(flash, idcode[0]);
+       if (ret < 0)
+               return ret;
 #endif
 
        /* Flash powers up read-only, so clear BP# bits */