From: lee.jones@linaro.org (Lee Jones)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 09/36] mtd: st_spi_fsm: Provide device look-up table
Date: Fri, 29 Nov 2013 12:18:58 +0000 [thread overview]
Message-ID: <1385727565-25794-10-git-send-email-lee.jones@linaro.org> (raw)
In-Reply-To: <1385727565-25794-1-git-send-email-lee.jones@linaro.org>
Supply a lookup table of all the devices we intend to support. This table
is used to store device information such as; a human readable device name,
their JEDEC ID (plus the extended version), sector size and amount, a bit
store of a device's capabilities, its maximum running frequency and
possible use of a per-device configuration call-back.
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
drivers/mtd/devices/st_spi_fsm.h | 137 +++++++++++++++++++++++++++++++++++++++
1 file changed, 137 insertions(+)
diff --git a/drivers/mtd/devices/st_spi_fsm.h b/drivers/mtd/devices/st_spi_fsm.h
index 5c6c55e..fd1472e 100644
--- a/drivers/mtd/devices/st_spi_fsm.h
+++ b/drivers/mtd/devices/st_spi_fsm.h
@@ -253,4 +253,141 @@ struct stfsm_seq {
} __attribute__((__packed__, aligned(4)));
#define STFSM_SEQ_SIZE sizeof(struct stfsm_seq)
+/* SPI Flash Device Table */
+struct flash_info {
+ char *name;
+ /*
+ * JEDEC id zero means "no ID" (most older chips); otherwise it has
+ * a high byte of zero plus three data bytes: the manufacturer id,
+ * then a two byte device id.
+ */
+ u32 jedec_id;
+ u16 ext_id;
+ /*
+ * The size listed here is what works with FLASH_CMD_SE, which isn't
+ * necessarily called a "sector" by the vendor.
+ */
+ unsigned sector_size;
+ u16 n_sectors;
+ u32 flags;
+ /*
+ * Note, where FAST_READ is supported, freq_max specifies the
+ * FAST_READ frequency, not the READ frequency.
+ */
+ u32 max_freq;
+ int (*config)(struct stfsm *);
+};
+
+static struct flash_info flash_types[] = {
+ /*
+ * ST Microelectronics/Numonyx --
+ * (newer production versions may have feature updates
+ * (eg faster operating frequency)
+ */
+#define M25P_FLAG (FLASH_FLAG_READ_WRITE | FLASH_FLAG_READ_FAST)
+ { "m25p40", 0x202013, 0, 64 * 1024, 8, M25P_FLAG, 25, NULL },
+ { "m25p80", 0x202014, 0, 64 * 1024, 16, M25P_FLAG, 25, NULL },
+ { "m25p16", 0x202015, 0, 64 * 1024, 32, M25P_FLAG, 25, NULL },
+ { "m25p32", 0x202016, 0, 64 * 1024, 64, M25P_FLAG, 50, NULL },
+ { "m25p64", 0x202017, 0, 64 * 1024, 128, M25P_FLAG, 50, NULL },
+ { "m25p128", 0x202018, 0, 256 * 1024, 64, M25P_FLAG, 50, NULL },
+
+#define M25PX_FLAG (FLASH_FLAG_READ_WRITE | \
+ FLASH_FLAG_READ_FAST | \
+ FLASH_FLAG_READ_1_1_2 | \
+ FLASH_FLAG_WRITE_1_1_2)
+ { "m25px32", 0x207116, 0, 64 * 1024, 64, M25PX_FLAG, 75, NULL },
+ { "m25px64", 0x207117, 0, 64 * 1024, 128, M25PX_FLAG, 75, NULL },
+
+#define MX25_FLAG (FLASH_FLAG_READ_WRITE | \
+ FLASH_FLAG_READ_FAST | \
+ FLASH_FLAG_READ_1_1_2 | \
+ FLASH_FLAG_READ_1_2_2 | \
+ FLASH_FLAG_READ_1_1_4 | \
+ FLASH_FLAG_READ_1_4_4 | \
+ FLASH_FLAG_WRITE_1_4_4 | \
+ FLASH_FLAG_SE_4K | \
+ FLASH_FLAG_SE_32K)
+ { "mx25l25635e", 0xc22019, 0, 64*1024, 512,
+ (MX25_FLAG | FLASH_FLAG_32BIT_ADDR | FLASH_FLAG_RESET), 70, NULL },
+
+#define N25Q_FLAG (FLASH_FLAG_READ_WRITE | \
+ FLASH_FLAG_READ_FAST | \
+ FLASH_FLAG_READ_1_1_2 | \
+ FLASH_FLAG_READ_1_2_2 | \
+ FLASH_FLAG_READ_1_1_4 | \
+ FLASH_FLAG_READ_1_4_4 | \
+ FLASH_FLAG_WRITE_1_1_2 | \
+ FLASH_FLAG_WRITE_1_2_2 | \
+ FLASH_FLAG_WRITE_1_1_4 | \
+ FLASH_FLAG_WRITE_1_4_4)
+ { "n25q128", 0x20ba18, 0, 64 * 1024, 256, N25Q_FLAG, 108, NULL },
+ { "n25q256", 0x20ba19, 0, 64 * 1024, 512,
+ N25Q_FLAG | FLASH_FLAG_32BIT_ADDR, 108, NULL },
+
+ /*
+ * Spansion S25FLxxxP
+ * - 256KiB and 64KiB sector variants (identified by ext. JEDEC)
+ */
+#define S25FLXXXP_FLAG (FLASH_FLAG_READ_WRITE | \
+ FLASH_FLAG_READ_1_1_2 | \
+ FLASH_FLAG_READ_1_2_2 | \
+ FLASH_FLAG_READ_1_1_4 | \
+ FLASH_FLAG_READ_1_4_4 | \
+ FLASH_FLAG_WRITE_1_1_4 | \
+ FLASH_FLAG_READ_FAST)
+ { "s25fl129p0", 0x012018, 0x4d00, 256 * 1024, 64, S25FLXXXP_FLAG, 80,
+ NULL },
+ { "s25fl129p1", 0x012018, 0x4d01, 64 * 1024, 256, S25FLXXXP_FLAG, 80,
+ NULL },
+
+ /*
+ * Spansion S25FLxxxS
+ * - 256KiB and 64KiB sector variants (identified by ext. JEDEC)
+ * - RESET# signal supported by die but not bristled out on all
+ * package types. The package type is a function of board design,
+ * so this information is captured in the board's flags.
+ * - Supports 'DYB' sector protection. Depending on variant, sectors
+ * may default to locked state on power-on.
+ */
+#define S25FLXXXS_FLAG (S25FLXXXP_FLAG | \
+ FLASH_FLAG_RESET | \
+ FLASH_FLAG_DYB_LOCKING)
+ { "s25fl128s0", 0x012018, 0x0300, 256 * 1024, 64, S25FLXXXS_FLAG, 80,
+ NULL },
+ { "s25fl128s1", 0x012018, 0x0301, 64 * 1024, 256, S25FLXXXS_FLAG, 80,
+ NULL },
+ { "s25fl256s0", 0x010219, 0x4d00, 256 * 1024, 128,
+ S25FLXXXS_FLAG | FLASH_FLAG_32BIT_ADDR, 80, NULL },
+ { "s25fl256s1", 0x010219, 0x4d01, 64 * 1024, 512,
+ S25FLXXXS_FLAG | FLASH_FLAG_32BIT_ADDR, 80, NULL },
+
+ /* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */
+#define W25X_FLAG (FLASH_FLAG_READ_WRITE | \
+ FLASH_FLAG_READ_FAST | \
+ FLASH_FLAG_READ_1_1_2 | \
+ FLASH_FLAG_WRITE_1_1_2)
+ { "w25x40", 0xef3013, 0, 64 * 1024, 8, W25X_FLAG, 75, NULL },
+ { "w25x80", 0xef3014, 0, 64 * 1024, 16, W25X_FLAG, 75, NULL },
+ { "w25x16", 0xef3015, 0, 64 * 1024, 32, W25X_FLAG, 75, NULL },
+ { "w25x32", 0xef3016, 0, 64 * 1024, 64, W25X_FLAG, 75, NULL },
+ { "w25x64", 0xef3017, 0, 64 * 1024, 128, W25X_FLAG, 75, NULL },
+
+ /* Winbond -- w25q "blocks" are 64K, "sectors" are 4KiB */
+#define W25Q_FLAG (FLASH_FLAG_READ_WRITE | \
+ FLASH_FLAG_READ_FAST | \
+ FLASH_FLAG_READ_1_1_2 | \
+ FLASH_FLAG_READ_1_2_2 | \
+ FLASH_FLAG_READ_1_1_4 | \
+ FLASH_FLAG_READ_1_4_4 | \
+ FLASH_FLAG_WRITE_1_1_4)
+ { "w25q80", 0xef4014, 0, 64 * 1024, 16, W25Q_FLAG, 80, NULL },
+ { "w25q16", 0xef4015, 0, 64 * 1024, 32, W25Q_FLAG, 80, NULL },
+ { "w25q32", 0xef4016, 0, 64 * 1024, 64, W25Q_FLAG, 80, NULL },
+ { "w25q64", 0xef4017, 0, 64 * 1024, 128, W25Q_FLAG, 80, NULL },
+
+ /* Sentinel */
+ { NULL, 0x000000, 0, 0, 0, 0, 0, NULL },
+};
+
#endif /* ST_SPI_FSM_H */
--
1.8.3.2
next prev parent reply other threads:[~2013-11-29 12:18 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-29 12:18 [PATCH v3 00/36] mtd: st_spi_fsm: Add new driver Lee Jones
2013-11-29 12:18 ` [PATCH v3 01/36] mtd: st_spi_fsm: Allocate resources and register with MTD framework Lee Jones
2013-12-02 13:52 ` srinivas kandagatla
2013-12-10 18:47 ` Brian Norris
2013-12-10 20:46 ` Brian Norris
2013-12-11 8:48 ` Lee Jones
2013-12-11 9:37 ` Angus Clark
2013-12-11 18:01 ` Brian Norris
2013-11-29 12:18 ` [PATCH v3 02/36] mtd: st_spi_fsm: Supply all register address and bit logic defines Lee Jones
2013-11-29 12:18 ` [PATCH v3 03/36] mtd: st_spi_fsm: Initialise and configure the FSM for normal working conditions Lee Jones
2013-12-10 19:01 ` Brian Norris
2013-12-10 20:08 ` Brian Norris
2013-11-29 12:18 ` [PATCH v3 04/36] mtd: st_spi_fsm: Supply framework for device requests Lee Jones
2013-12-10 20:19 ` Brian Norris
2013-12-13 14:35 ` Angus Clark
2013-11-29 12:18 ` [PATCH v3 05/36] mtd: st_spi_fsm: Supply a method to read from the FSM's FIFO Lee Jones
2013-11-29 12:18 ` [PATCH v3 06/36] mtd: st_spi_fsm: Supply defines for the possible flash command opcodes Lee Jones
2013-11-29 12:18 ` [PATCH v3 07/36] mtd: st_spi_fsm: Add support for JEDEC ID extraction Lee Jones
2013-11-29 12:18 ` [PATCH v3 08/36] mtd: devices: Provide header for shared OPCODEs and SFDP commands Lee Jones
2013-12-10 21:48 ` Brian Norris
2013-12-10 22:23 ` Brian Norris
2013-12-13 15:46 ` Angus Clark
2013-12-13 15:06 ` Angus Clark
2013-11-29 12:18 ` Lee Jones [this message]
2013-12-10 22:03 ` [PATCH v3 09/36] mtd: st_spi_fsm: Provide device look-up table Brian Norris
2013-12-17 9:17 ` Angus Clark
2014-01-07 16:11 ` Lee Jones
2013-11-29 12:18 ` [PATCH v3 10/36] mtd: st_spi_fsm: Dynamically setup flash device based on JEDEC ID Lee Jones
2013-11-29 12:19 ` [PATCH v3 11/36] mtd: st_spi_fsm: Search for preferred FSM message sequence configurations Lee Jones
2013-12-11 1:06 ` Brian Norris
2013-12-17 9:57 ` Angus Clark
2013-12-17 10:46 ` Lee Jones
2013-12-17 10:56 ` Angus Clark
2013-11-29 12:19 ` [PATCH v3 12/36] mtd: st_spi_fsm: Fetch platform specific configurations Lee Jones
2013-11-29 12:19 ` [PATCH v3 13/36] mtd: st_spi_fsm: Prepare the read/write FSM message sequence(s) Lee Jones
2013-11-29 12:19 ` [PATCH v3 14/36] mtd: st_spi_fsm: Add device-tree binding documentation Lee Jones
2013-11-29 19:07 ` Linus Walleij
2013-12-02 11:03 ` Lee Jones
2013-12-03 10:23 ` Linus Walleij
2013-12-03 11:31 ` Lee Jones
2013-12-03 12:22 ` Linus Walleij
2013-12-03 12:31 ` Lee Jones
2013-11-29 12:19 ` [PATCH v3 15/36] mtd: st_spi_fsm: Fetch boot-device from mode pins Lee Jones
2013-12-11 1:27 ` Brian Norris
2013-11-29 12:19 ` [PATCH v3 16/36] mtd: st_spi_fsm: Provide the erase one sector sequence Lee Jones
2013-11-29 12:19 ` [PATCH v3 17/36] mtd: st_spi_fsm: Provide the sequence for enabling 32bit addressing mode Lee Jones
2013-11-29 12:19 ` [PATCH v3 18/36] mtd: st_spi_fsm: Prepare read/write sequences according to configuration Lee Jones
2013-11-29 12:19 ` [PATCH v3 19/36] mtd: st_spi_fsm: Add a check to if the chip can handle an SoC reset Lee Jones
2013-11-29 12:19 ` [PATCH v3 20/36] mtd: st_spi_fsm: Provide a method to put the chip into 32bit addressing mode Lee Jones
2013-12-11 1:49 ` Brian Norris
2013-11-29 12:19 ` [PATCH v3 21/36] mtd: st_spi_fsm: Update the flash Volatile Configuration Register Lee Jones
2013-11-29 12:19 ` [PATCH v3 22/36] mtd: st_spi_fsm: Provide the default read/write configurations Lee Jones
2013-12-11 1:37 ` Brian Norris
2013-11-29 12:19 ` [PATCH v3 23/36] mtd: st_spi_fsm: Supply the N25Qxxx specific read configurations Lee Jones
2013-11-29 12:19 ` [PATCH v3 24/36] mtd: st_spi_fsm: Supply the N25Qxxx chip specific configuration call-back Lee Jones
2013-12-11 2:33 ` Brian Norris
2013-11-29 12:19 ` [PATCH v3 25/36] mtd: st_spi_fsm: Prepare default sequences for read/write/erase Lee Jones
2013-11-29 12:19 ` [PATCH v3 26/36] mtd: st_spi_fsm: Add the ability to read from a Serial Flash device Lee Jones
2013-12-11 2:09 ` Brian Norris
2013-11-29 12:19 ` [PATCH v3 27/36] mtd: st_spi_fsm: Write to Flash via the FSM FIFO Lee Jones
2013-11-29 12:19 ` [PATCH v3 28/36] mtd: st_spi_fsm: Supply a busy wait for post-write status Lee Jones
2013-12-11 2:13 ` Brian Norris
2013-11-29 12:19 ` [PATCH v3 29/36] mtd: st_spi_fsm: Add the ability to write to a Serial Flash device Lee Jones
2013-11-29 12:19 ` [PATCH v3 30/36] mtd: st_spi_fsm: Erase partly or as a whole " Lee Jones
2013-12-11 2:19 ` Brian Norris
2013-11-29 12:19 ` [PATCH v3 31/36] mtd: st_spi_fsm: Add the ability to read the FSM's status Lee Jones
2013-11-29 12:19 ` [PATCH v3 32/36] mtd: st_spi_fsm: Add the ability to write to FSM's status register Lee Jones
2013-11-29 12:19 ` [PATCH v3 33/36] mtd: st_spi_fsm: Supply the MX25xxx chip specific configuration call-back Lee Jones
2013-12-11 2:25 ` Brian Norris
2013-11-29 12:19 ` [PATCH v3 34/36] mtd: st_spi_fsm: Supply the S25FLxxx " Lee Jones
2013-11-29 12:19 ` [PATCH v3 35/36] mtd: st_spi_fsm: Supply the W25Qxxx " Lee Jones
2013-11-29 12:19 ` [PATCH v3 36/36] ARM: STi: Add support for the FSM Serial Flash Controller Lee Jones
2013-12-02 13:05 ` srinivas kandagatla
2013-12-02 13:20 ` Lee Jones
2013-12-02 13:26 ` srinivas kandagatla
2013-12-02 13:43 ` Lee Jones
2013-12-02 13:56 ` srinivas kandagatla
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=1385727565-25794-10-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).