|
@@ -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 */
|