mtd: st_spi_fsm: Provide a method to put the chip into 32bit addressing mode
authorLee Jones <lee.jones@linaro.org>
Thu, 20 Mar 2014 09:20:51 +0000 (09:20 +0000)
committerBrian Norris <computersforpeace@gmail.com>
Thu, 20 Mar 2014 11:17:18 +0000 (04:17 -0700)
Most Serial Flash chips support 24bit addressing as a default but more
recent incarnations can support 32bit. Based on information provided
though platform specific data and capabilities we can determine whether
or not our current chip can. This patch provides a means to setup the
FSM message sequence to put the chip into 32bit mode.

Acked-by Angus Clark <angus.clark@st.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
drivers/mtd/devices/st_spi_fsm.c

index 7cc4425e7f1f35eeaa065db4114603954434db8a..0a5b70290b1bef9549b960d91ead770f5bb3d01b 100644 (file)
@@ -375,6 +375,8 @@ static struct flash_info flash_types[] = {
        { NULL, 0x000000, 0, 0, 0, 0, 0, NULL },
 };
 
+static struct stfsm_seq stfsm_seq_en_32bit_addr;/* Dynamically populated */
+
 static struct stfsm_seq stfsm_seq_read_jedec = {
        .data_size = TRANSFER_SIZE(8),
        .seq_opc[0] = (SEQ_OPC_PADS_1 |
@@ -523,6 +525,23 @@ static void stfsm_read_fifo(struct stfsm *fsm, uint32_t *buf,
        }
 }
 
+static int stfsm_enter_32bit_addr(struct stfsm *fsm, int enter)
+{
+       struct stfsm_seq *seq = &stfsm_seq_en_32bit_addr;
+       uint32_t cmd = enter ? FLASH_CMD_EN4B_ADDR : FLASH_CMD_EX4B_ADDR;
+
+       seq->seq_opc[0] = (SEQ_OPC_PADS_1 |
+                          SEQ_OPC_CYCLES(8) |
+                          SEQ_OPC_OPCODE(cmd) |
+                          SEQ_OPC_CSDEASSERT);
+
+       stfsm_load_seq(fsm, seq);
+
+       stfsm_wait_seq(fsm);
+
+       return 0;
+}
+
 /*
  * SoC reset on 'boot-from-spi' systems
  *