From: lee.jones@linaro.org (Lee Jones)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 12/36] mtd: st_spi_fsm: Prepare the read/write FSM message sequence(s)
Date: Thu, 20 Mar 2014 09:20:44 +0000 [thread overview]
Message-ID: <1395307268-12721-13-git-send-email-lee.jones@linaro.org> (raw)
In-Reply-To: <1395307268-12721-1-git-send-email-lee.jones@linaro.org>
The FSM Serial Flash Controller is driven by issuing a standard set of
register writes we call a message sequence. This patch supplies a method
to prepare read/write FSM message sequence(s) based on chip capability
and configuration.
Acked-by Angus Clark <angus.clark@st.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
drivers/mtd/devices/st_spi_fsm.c | 69 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/drivers/mtd/devices/st_spi_fsm.c b/drivers/mtd/devices/st_spi_fsm.c
index 5a1b470..83cf9df 100644
--- a/drivers/mtd/devices/st_spi_fsm.c
+++ b/drivers/mtd/devices/st_spi_fsm.c
@@ -489,6 +489,75 @@ stfsm_search_seq_rw_configs(struct stfsm *fsm,
return NULL;
}
+/* Prepare a READ/WRITE sequence according to configuration parameters */
+static void stfsm_prepare_rw_seq(struct stfsm *fsm,
+ struct stfsm_seq *seq,
+ struct seq_rw_config *cfg)
+{
+ int addr1_cycles, addr2_cycles;
+ int i = 0;
+
+ memset(seq, 0, sizeof(*seq));
+
+ /* Add READ/WRITE OPC */
+ seq->seq_opc[i++] = (SEQ_OPC_PADS_1 |
+ SEQ_OPC_CYCLES(8) |
+ SEQ_OPC_OPCODE(cfg->cmd));
+
+ /* Add WREN OPC for a WRITE sequence */
+ if (cfg->write)
+ seq->seq_opc[i++] = (SEQ_OPC_PADS_1 |
+ SEQ_OPC_CYCLES(8) |
+ SEQ_OPC_OPCODE(FLASH_CMD_WREN) |
+ SEQ_OPC_CSDEASSERT);
+
+ /* Address configuration (24 or 32-bit addresses) */
+ addr1_cycles = (fsm->info->flags & FLASH_FLAG_32BIT_ADDR) ? 16 : 8;
+ addr1_cycles /= cfg->addr_pads;
+ addr2_cycles = 16 / cfg->addr_pads;
+ seq->addr_cfg = ((addr1_cycles & 0x3f) << 0 | /* ADD1 cycles */
+ (cfg->addr_pads - 1) << 6 | /* ADD1 pads */
+ (addr2_cycles & 0x3f) << 16 | /* ADD2 cycles */
+ ((cfg->addr_pads - 1) << 22)); /* ADD2 pads */
+
+ /* Data/Sequence configuration */
+ seq->seq_cfg = ((cfg->data_pads - 1) << 16 |
+ SEQ_CFG_STARTSEQ |
+ SEQ_CFG_CSDEASSERT);
+ if (!cfg->write)
+ seq->seq_cfg |= SEQ_CFG_READNOTWRITE;
+
+ /* Mode configuration (no. of pads taken from addr cfg) */
+ seq->mode = ((cfg->mode_data & 0xff) << 0 | /* data */
+ (cfg->mode_cycles & 0x3f) << 16 | /* cycles */
+ (cfg->addr_pads - 1) << 22); /* pads */
+
+ /* Dummy configuration (no. of pads taken from addr cfg) */
+ seq->dummy = ((cfg->dummy_cycles & 0x3f) << 16 | /* cycles */
+ (cfg->addr_pads - 1) << 22); /* pads */
+
+
+ /* Instruction sequence */
+ i = 0;
+ if (cfg->write)
+ seq->seq[i++] = STFSM_INST_CMD2;
+
+ seq->seq[i++] = STFSM_INST_CMD1;
+
+ seq->seq[i++] = STFSM_INST_ADD1;
+ seq->seq[i++] = STFSM_INST_ADD2;
+
+ if (cfg->mode_cycles)
+ seq->seq[i++] = STFSM_INST_MODE;
+
+ if (cfg->dummy_cycles)
+ seq->seq[i++] = STFSM_INST_DUMMY;
+
+ seq->seq[i++] =
+ cfg->write ? STFSM_INST_DATA_WRITE : STFSM_INST_DATA_READ;
+ seq->seq[i++] = STFSM_INST_STOP;
+}
+
static void stfsm_read_jedec(struct stfsm *fsm, uint8_t *const jedec)
{
const struct stfsm_seq *seq = &stfsm_seq_read_jedec;
--
1.8.3.2
next prev parent reply other threads:[~2014-03-20 9:20 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-20 9:20 [PATCH v6 00/36] mtd: st_spi_fsm: Add new driver Lee Jones
2014-03-20 9:20 ` [PATCH v6 01/36] mtd: st_spi_fsm: Allocate resources and register with MTD framework Lee Jones
2014-04-07 8:12 ` Paul Bolle
2014-04-07 9:11 ` Lee Jones
2014-04-07 9:41 ` Paul Bolle
2014-04-07 11:08 ` Lee Jones
2014-03-20 9:20 ` [PATCH v6 02/36] mtd: st_spi_fsm: Supply all register address and bit logic defines Lee Jones
2014-03-20 9:20 ` [PATCH v6 03/36] mtd: st_spi_fsm: Initialise and configure the FSM for normal working conditions Lee Jones
2014-03-20 9:20 ` [PATCH v6 04/36] mtd: st_spi_fsm: Supply framework for device requests Lee Jones
2014-03-20 9:20 ` [PATCH v6 05/36] mtd: st_spi_fsm: Supply a method to read from the FSM's FIFO Lee Jones
2014-03-20 9:20 ` [PATCH v6 06/36] mtd: st_spi_fsm: Add support for JEDEC ID extraction Lee Jones
2014-03-20 9:20 ` [PATCH v6 07/36] mtd: devices: Provide header for shared OPCODEs and SFDP commands Lee Jones
2014-03-20 9:20 ` [PATCH v6 08/36] mtd: st_spi_fsm: Provide device look-up table Lee Jones
2014-03-20 9:20 ` [PATCH v6 09/36] mtd: st_spi_fsm: Dynamically setup flash device based on JEDEC ID Lee Jones
2014-03-20 9:20 ` [PATCH v6 10/36] mtd: st_spi_fsm: Search for preferred FSM message sequence configurations Lee Jones
2014-03-20 9:20 ` [PATCH v6 11/36] mtd: st_spi_fsm: Use device size to determine address width Lee Jones
2014-03-20 9:20 ` Lee Jones [this message]
2014-03-20 9:20 ` [PATCH v6 13/36] mtd: st_spi_fsm: Add device-tree binding documentation Lee Jones
2014-03-20 9:20 ` [PATCH v6 14/36] mtd: st_spi_fsm: Fetch boot-device from mode pins Lee Jones
2014-03-20 9:20 ` [PATCH v6 15/36] mtd: st_spi_fsm: Provide the erase one sector sequence Lee Jones
2014-03-20 9:20 ` [PATCH v6 16/36] mtd: st_spi_fsm: Provide the sequence for enabling 32bit addressing mode Lee Jones
2014-03-20 9:20 ` [PATCH v6 17/36] mtd: st_spi_fsm: Prepare read/write sequences according to configuration Lee Jones
2014-03-20 9:20 ` [PATCH v6 18/36] mtd: st_spi_fsm: Add a check to if the chip can handle an SoC reset Lee Jones
2014-03-20 9:20 ` [PATCH v6 19/36] mtd: st_spi_fsm: Provide a method to put the chip into 32bit addressing mode Lee Jones
2014-03-20 9:20 ` [PATCH v6 20/36] mtd: st_spi_fsm: Update the flash Volatile Configuration Register Lee Jones
2014-03-20 9:20 ` [PATCH v6 21/36] mtd: st_spi_fsm: Provide the default read/write configurations Lee Jones
2014-03-20 9:20 ` [PATCH v6 22/36] mtd: st_spi_fsm: Supply the N25Qxxx specific read configurations Lee Jones
2014-03-20 9:20 ` [PATCH v6 23/36] mtd: st_spi_fsm: Supply the N25Qxxx chip specific configuration call-back Lee Jones
2014-03-20 9:20 ` [PATCH v6 24/36] mtd: st_spi_fsm: Prepare default sequences for read/write/erase Lee Jones
2014-03-20 9:20 ` [PATCH v6 25/36] mtd: st_spi_fsm: Add the ability to read from a Serial Flash device Lee Jones
2014-03-20 9:20 ` [PATCH v6 26/36] mtd: st_spi_fsm: Write to Flash via the FSM FIFO Lee Jones
2014-03-20 9:20 ` [PATCH v6 27/36] mtd: st_spi_fsm: Supply a busy wait for post-write status Lee Jones
2014-03-20 9:21 ` [PATCH v6 28/36] mtd: st_spi_fsm: Erase partly or as a whole a Serial Flash device Lee Jones
2014-03-20 9:21 ` [PATCH v6 29/36] mtd: st_spi_fsm: Add the ability to read the FSM's status Lee Jones
2014-03-20 9:21 ` [PATCH v6 30/36] mtd: st_spi_fsm: Add the ability to write to FSM's status register Lee Jones
2014-03-20 9:21 ` [PATCH v6 31/36] mtd: st_spi_fsm: Supply the MX25xxx chip specific configuration call-back Lee Jones
2014-03-20 9:21 ` [PATCH v6 32/36] mtd: st_spi_fsm: Supply the S25FLxxx " Lee Jones
2014-03-20 9:21 ` [PATCH v6 33/36] mtd: st_spi_fsm: Supply the W25Qxxx " Lee Jones
2014-03-20 9:21 ` [PATCH v6 34/36] mtd: st_spi_fsm: Move runtime configurable msg sequences into device's struct Lee Jones
2014-03-20 9:21 ` [PATCH v6 35/36] mtd: st_spi_fsm: Convert ST SPI FSM (NOR) Flash driver to new DT partitions Lee Jones
2014-03-20 9:21 ` [PATCH v6 36/36] ARM: STi: Add support for the FSM Serial Flash Controller Lee Jones
2014-03-20 11:27 ` Brian Norris
2014-03-20 15:51 ` Lee Jones
2014-03-20 9:48 ` [PATCH v6 00/36] mtd: st_spi_fsm: Add new driver Brian Norris
2014-03-20 11:19 ` Brian Norris
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1395307268-12721-13-git-send-email-lee.jones@linaro.org \
--to=lee.jones@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).