Optimized spi-flash bar writing code and also removed
unnecessary bank_sel in read_ops.

Signed-off-by: Jagan Teki <jt...@openedev.com>
Cc: Simon Glass <s...@chromium.org>
Cc: Michal Simek <michal.si...@xilinx.com>
Cc: Siva Durga Prasad Paladugu <siva...@xilinx.com>
---
Changes for v4, v3, v2:
        - none

 drivers/mtd/spi/sf_ops.c | 41 +++++++++++++----------------------------
 1 file changed, 13 insertions(+), 28 deletions(-)

diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index b33fe5a..6e457ec 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -95,15 +95,14 @@ int spi_flash_cmd_write_config(struct spi_flash *flash, u8 
wc)
 #endif
 
 #ifdef CONFIG_SPI_FLASH_BAR
-static int spi_flash_cmd_bankaddr_write(struct spi_flash *flash, u8 bank_sel)
+static int spi_flash_write_bank(struct spi_flash *flash, u32 offset)
 {
-       u8 cmd;
+       u8 cmd, bank_sel;
        int ret;
 
-       if (flash->bank_curr == bank_sel) {
-               debug("SF: not require to enable bank%d\n", bank_sel);
-               return bank_sel;
-       }
+       bank_sel = offset / (SPI_FLASH_16MB_BOUN << flash->shift);
+       if (bank_sel == flash->bank_curr)
+               goto bar_end;
 
        cmd = flash->bank_write_cmd;
        ret = spi_flash_write_common(flash, &cmd, 1, &bank_sel, 1);
@@ -111,25 +110,10 @@ static int spi_flash_cmd_bankaddr_write(struct spi_flash 
*flash, u8 bank_sel)
                debug("SF: fail to write bank register\n");
                return ret;
        }
-       flash->bank_curr = bank_sel;
-
-       return 0;
-}
-
-static int spi_flash_bank(struct spi_flash *flash, u32 offset)
-{
-       u8 bank_sel;
-       int ret;
-
-       bank_sel = offset / (SPI_FLASH_16MB_BOUN << flash->shift);
-
-       ret = spi_flash_cmd_bankaddr_write(flash, bank_sel);
-       if (ret) {
-               debug("SF: fail to set bank%d\n", bank_sel);
-               return ret;
-       }
 
-       return bank_sel;
+bar_end:
+       flash->bank_curr = bank_sel;
+       return flash->bank_curr;
 }
 #endif
 
@@ -285,7 +269,7 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 
offset, size_t len)
                        spi_flash_dual_flash(flash, &erase_addr);
 #endif
 #ifdef CONFIG_SPI_FLASH_BAR
-               ret = spi_flash_bank(flash, erase_addr);
+               ret = spi_flash_write_bank(flash, erase_addr);
                if (ret < 0)
                        return ret;
 #endif
@@ -327,7 +311,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 
offset,
                        spi_flash_dual_flash(flash, &write_addr);
 #endif
 #ifdef CONFIG_SPI_FLASH_BAR
-               ret = spi_flash_bank(flash, write_addr);
+               ret = spi_flash_write_bank(flash, write_addr);
                if (ret < 0)
                        return ret;
 #endif
@@ -422,9 +406,10 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 
offset,
                        spi_flash_dual_flash(flash, &read_addr);
 #endif
 #ifdef CONFIG_SPI_FLASH_BAR
-               bank_sel = spi_flash_bank(flash, read_addr);
-               if (bank_sel < 0)
+               ret = spi_flash_write_bank(flash, read_addr);
+               if (ret < 0)
                        return ret;
+               bank_sel = flash->bank_curr;
 #endif
                remain_len = ((SPI_FLASH_16MB_BOUN << flash->shift) *
                                (bank_sel + 1)) - offset;
-- 
1.9.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to