* [PATCH v5 0/6] Add octal DTR support for Macronix flash
@ 2023-11-17 8:38 Jaime Liao
2023-11-17 8:38 ` [PATCH v5 1/6] mtd: spi-nor: add Octal " Jaime Liao
` (6 more replies)
0 siblings, 7 replies; 26+ messages in thread
From: Jaime Liao @ 2023-11-17 8:38 UTC (permalink / raw)
To: linux-mtd, tudor.ambarus, pratyush, michael, miquel.raynal
Cc: leoyu, jaimeliao
From: JaimeLiao <jaimeliao@mxic.com.tw>
Add method for Macronix Octal DTR Eable/Disable.
Merge Tudor's patch "Allow specifying the byte order in DTR mode"
Add support for Macronix flash
v5:
Remove manufacturer read id function.
For increased readability, seperate Flash IDs based on whether
it supports RWW feature.
v4:
Add patch for adding manufacturer read id function.
remove patch "hook manufacturer by checking first byte id"
v3:
Add patch for hook manufacturer by comparing ID 1st byte.
Add patches for specifying the byte order in DTR mode by merging
Tudor's patch.
v2:
Following exsting rules to re-create Macronix specify Octal DTR method.
change signature to jaimeliao@mxic.com.tw
Clear sector size information in flash INFO.
JaimeLiao (6):
mtd: spi-nor: add Octal DTR support for Macronix flash
spi: spi-mem: Allow specifying the byte order in DTR mode
mtd: spi-nor: core: Allow specifying the byte order in DTR mode
mtd: spi-nor: sfdp: Get the 8D-8D-8D byte order from BFPT
mtd: spi-nor: add support for Macronix Octal flash with RWW feature
mtd: spi-nor: add support for Macronix Octal flash
drivers/mtd/spi-nor/core.c | 8 ++
drivers/mtd/spi-nor/core.h | 1 +
drivers/mtd/spi-nor/macronix.c | 181 +++++++++++++++++++++++++++++++++
drivers/mtd/spi-nor/sfdp.c | 4 +
drivers/mtd/spi-nor/sfdp.h | 1 +
drivers/spi/spi-mem.c | 4 +
include/linux/spi/spi-mem.h | 6 ++
7 files changed, 205 insertions(+)
--
2.25.1
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v5 1/6] mtd: spi-nor: add Octal DTR support for Macronix flash
2023-11-17 8:38 [PATCH v5 0/6] Add octal DTR support for Macronix flash Jaime Liao
@ 2023-11-17 8:38 ` Jaime Liao
2023-11-17 8:38 ` [PATCH v5 2/6] spi: spi-mem: Allow specifying the byte order in DTR mode Jaime Liao
` (5 subsequent siblings)
6 siblings, 0 replies; 26+ messages in thread
From: Jaime Liao @ 2023-11-17 8:38 UTC (permalink / raw)
To: linux-mtd, tudor.ambarus, pratyush, michael, miquel.raynal
Cc: leoyu, jaimeliao
From: JaimeLiao <jaimeliao@mxic.com.tw>
Create Macronix specify method for enable Octal DTR mode and
set 20 dummy cycles to allow running at the maximum supported
frequency for Macronix Octal flash.
Use number of dummy cycles which is parse by SFDP then convert
it to bit pattern and set in CR2 register.
Set CR2 register for enable octal DTR mode.
Use Read ID to confirm that enabling/diabling octal DTR mode
was successful.
Macronix ID format is A-A-B-B-C-C in octal DTR mode.
To ensure the successful enablement of octal DTR mode, confirm
that the 6-byte data is entirely correct.
Signed-off-by: JaimeLiao <jaimeliao@mxic.com.tw>
Co-developed-by: Tudor Ambarus <tudor.ambarus@linaro.org>
---
drivers/mtd/spi-nor/macronix.c | 100 +++++++++++++++++++++++++++++++++
1 file changed, 100 insertions(+)
diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
index ea6be95e75a5..dee71776b1a8 100644
--- a/drivers/mtd/spi-nor/macronix.c
+++ b/drivers/mtd/spi-nor/macronix.c
@@ -8,6 +8,24 @@
#include "core.h"
+#define SPINOR_OP_MXIC_RD_ANY_REG 0x71 /* Read volatile configuration register 2 */
+#define SPINOR_OP_MXIC_WR_ANY_REG 0x72 /* Write volatile configuration register 2 */
+#define SPINOR_REG_MXIC_CR2_MODE 0x00000000 /* CR2 address for setting octal DTR mode */
+#define SPINOR_REG_MXIC_CR2_DC 0x00000300 /* CR2 address for setting dummy cycles */
+#define SPINOR_REG_MXIC_OPI_DTR_EN 0x2 /* Enable Octal DTR */
+#define SPINOR_REG_MXIC_SPI_EN 0x0 /* Enable SPI */
+#define SPINOR_REG_MXIC_ADDR_BYTES 4 /* Fixed R/W volatile address bytes to 4 */
+/* Convert dummy cycles to bit pattern */
+#define SPINOR_REG_MXIC_DC(p) \
+ ((20 - p)/2)
+
+/* Macronix SPI NOR flash operations. */
+#define MXIC_NOR_WR_ANY_REG_OP(naddr, addr, ndata, buf) \
+ SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_MXIC_WR_ANY_REG, 0), \
+ SPI_MEM_OP_ADDR(naddr, addr, 0), \
+ SPI_MEM_OP_NO_DUMMY, \
+ SPI_MEM_OP_DATA_OUT(ndata, buf, 0))
+
static int
mx25l25635_post_bfpt_fixups(struct spi_nor *nor,
const struct sfdp_parameter_header *bfpt_header,
@@ -185,6 +203,87 @@ static const struct flash_info macronix_nor_parts[] = {
}
};
+static int macronix_nor_octal_dtr_en(struct spi_nor *nor)
+{
+ struct spi_mem_op op;
+ u8 *buf = nor->bouncebuf, i;
+ int ret;
+
+ /* Use dummy cycles which is parse by SFDP and convert to bit pattern. */
+ buf[0] = SPINOR_REG_MXIC_DC(nor->params->reads[SNOR_CMD_READ_8_8_8_DTR].num_wait_states);
+ op = (struct spi_mem_op)
+ MXIC_NOR_WR_ANY_REG_OP(SPINOR_REG_MXIC_ADDR_BYTES,
+ SPINOR_REG_MXIC_CR2_DC, 1, buf);
+
+ ret = spi_nor_write_any_volatile_reg(nor, &op, nor->reg_proto);
+ if (ret)
+ return ret;
+
+ /* Set the octal and DTR enable bits. */
+ buf[0] = SPINOR_REG_MXIC_OPI_DTR_EN;
+ op = (struct spi_mem_op)
+ MXIC_NOR_WR_ANY_REG_OP(SPINOR_REG_MXIC_ADDR_BYTES,
+ SPINOR_REG_MXIC_CR2_MODE, 1, buf);
+ ret = spi_nor_write_any_volatile_reg(nor, &op, nor->reg_proto);
+ if (ret)
+ return ret;
+
+ /* Read flash ID to make sure the switch was successful. */
+ ret = spi_nor_read_id(nor, 4, 4, buf, SNOR_PROTO_8_8_8_DTR);
+ if (ret) {
+ dev_dbg(nor->dev, "error %d reading JEDEC ID after enabling 8D-8D-8D mode\n", ret);
+ return ret;
+ }
+
+ /* Macronix SPI-NOR flash 8D-8D-8D read ID would get 6 bytes data A-A-B-B-C-C */
+ for (i = 0; i < nor->info->id->len; i++)
+ if (buf[i * 2] != buf[(i * 2) + 1] ||
+ buf[i * 2] != nor->info->id->bytes[i])
+ return -EINVAL;
+
+ return 0;
+}
+
+static int macronix_nor_octal_dtr_dis(struct spi_nor *nor)
+{
+ struct spi_mem_op op;
+ u8 *buf = nor->bouncebuf;
+ int ret;
+
+ /*
+ * The register is 1-byte wide, but 1-byte transactions are not
+ * allowed in 8D-8D-8D mode. Since there is no register at the
+ * next location, just initialize the value to 0 and let the
+ * transaction go on.
+ */
+ buf[0] = SPINOR_REG_MXIC_SPI_EN;
+ buf[1] = 0x0;
+ op = (struct spi_mem_op)
+ MXIC_NOR_WR_ANY_REG_OP(SPINOR_REG_MXIC_ADDR_BYTES,
+ SPINOR_REG_MXIC_CR2_MODE, 2, buf);
+ ret = spi_nor_write_any_volatile_reg(nor, &op, SNOR_PROTO_8_8_8_DTR);
+ if (ret)
+ return ret;
+
+ /* Read flash ID to make sure the switch was successful. */
+ ret = spi_nor_read_id(nor, 0, 0, buf, SNOR_PROTO_1_1_1);
+ if (ret) {
+ dev_dbg(nor->dev, "error %d reading JEDEC ID after disabling 8D-8D-8D mode\n", ret);
+ return ret;
+ }
+
+ if (memcmp(buf, nor->info->id->bytes, nor->info->id->len))
+ return -EINVAL;
+
+ return 0;
+}
+
+static int macronix_nor_set_octal_dtr(struct spi_nor *nor, bool enable)
+{
+ return enable ? macronix_nor_octal_dtr_en(nor) :
+ macronix_nor_octal_dtr_dis(nor);
+}
+
static void macronix_nor_default_init(struct spi_nor *nor)
{
nor->params->quad_enable = spi_nor_sr1_bit6_quad_enable;
@@ -194,6 +293,7 @@ static int macronix_nor_late_init(struct spi_nor *nor)
{
if (!nor->params->set_4byte_addr_mode)
nor->params->set_4byte_addr_mode = spi_nor_set_4byte_addr_mode_en4b_ex4b;
+ nor->params->set_octal_dtr = macronix_nor_set_octal_dtr;
return 0;
}
--
2.25.1
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 2/6] spi: spi-mem: Allow specifying the byte order in DTR mode
2023-11-17 8:38 [PATCH v5 0/6] Add octal DTR support for Macronix flash Jaime Liao
2023-11-17 8:38 ` [PATCH v5 1/6] mtd: spi-nor: add Octal " Jaime Liao
@ 2023-11-17 8:38 ` Jaime Liao
2023-11-17 9:17 ` Tudor Ambarus
2023-11-17 8:38 ` [PATCH v5 3/6] mtd: spi-nor: core: " Jaime Liao
` (4 subsequent siblings)
6 siblings, 1 reply; 26+ messages in thread
From: Jaime Liao @ 2023-11-17 8:38 UTC (permalink / raw)
To: linux-mtd, tudor.ambarus, pratyush, michael, miquel.raynal
Cc: leoyu, jaimeliao
From: JaimeLiao <jaimeliao@mxic.com.tw>
There are NOR flashes (Macronix) that swap the bytes on a 16-bit
boundary when configured in Octal DTR mode. The byte order of
16-bit words is swapped when read or written in Octal Double
Transfer Rate (DTR) mode compared to Single Transfer Rate (STR)
modes. If one writes D0 D1 D2 D3 bytes using 1-1-1 mode, and uses
8D-8D-8D SPI mode for reading, it will read back D1 D0 D3 D2.
Swapping the bytes may introduce some endianness problems. It can
affect the boot sequence if the entire boot sequence is not handled
in either 8D-8D-8D mode or 1-1-1 mode. So we must swap the bytes
back to have the same byte order as in STR modes. Fortunately there
are controllers that could swap the bytes back at runtime,
addressing the flash's endiannesses requirements. Provide a way for
the upper layers to specify the byte order in Octal DTR mode.
Merge Tudor's patch and add modifications for suiting newer version
of Linux kernel.
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: JaimeLiao <jaimeliao@mxic.com.tw>
---
drivers/spi/spi-mem.c | 4 ++++
include/linux/spi/spi-mem.h | 6 ++++++
2 files changed, 10 insertions(+)
diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
index edd7430d4c05..9c03b5617fff 100644
--- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c
@@ -172,6 +172,10 @@ bool spi_mem_default_supports_op(struct spi_mem *mem,
if (!spi_mem_controller_is_capable(ctlr, dtr))
return false;
+ if (op->data.dtr_swab16 &&
+ !(spi_mem_controller_is_capable(ctlr, dtr_swab16)))
+ return false;
+
if (op->cmd.nbytes != 2)
return false;
} else {
diff --git a/include/linux/spi/spi-mem.h b/include/linux/spi/spi-mem.h
index 6b0a7dc48a4b..d4935c5c3c7a 100644
--- a/include/linux/spi/spi-mem.h
+++ b/include/linux/spi/spi-mem.h
@@ -89,6 +89,8 @@ enum spi_mem_data_dir {
* @dummy.dtr: whether the dummy bytes should be sent in DTR mode or not
* @data.buswidth: number of IO lanes used to send/receive the data
* @data.dtr: whether the data should be sent in DTR mode or not
+ * @data.dtr_swab16: whether the byte order of 16-bit words is swapped when read
+ * or written in Octal DTR mode compared to STR mode.
* @data.ecc: whether error correction is required or not
* @data.dir: direction of the transfer
* @data.nbytes: number of data bytes to send/receive. Can be zero if the
@@ -123,6 +125,7 @@ struct spi_mem_op {
struct {
u8 buswidth;
u8 dtr : 1;
+ u8 dtr_swab16 : 1;
u8 ecc : 1;
u8 __pad : 6;
enum spi_mem_data_dir dir;
@@ -294,10 +297,13 @@ struct spi_controller_mem_ops {
/**
* struct spi_controller_mem_caps - SPI memory controller capabilities
* @dtr: Supports DTR operations
+ * @dtr_swab16: Supports swapping bytes on a 16 bit boundary when configured in
+ * Octal DTR
* @ecc: Supports operations with error correction
*/
struct spi_controller_mem_caps {
bool dtr;
+ bool dtr_swab16;
bool ecc;
};
--
2.25.1
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 3/6] mtd: spi-nor: core: Allow specifying the byte order in DTR mode
2023-11-17 8:38 [PATCH v5 0/6] Add octal DTR support for Macronix flash Jaime Liao
2023-11-17 8:38 ` [PATCH v5 1/6] mtd: spi-nor: add Octal " Jaime Liao
2023-11-17 8:38 ` [PATCH v5 2/6] spi: spi-mem: Allow specifying the byte order in DTR mode Jaime Liao
@ 2023-11-17 8:38 ` Jaime Liao
2023-11-21 8:40 ` Michael Walle
2023-11-17 8:38 ` [PATCH v5 4/6] mtd: spi-nor: sfdp: Get the 8D-8D-8D byte order from BFPT Jaime Liao
` (3 subsequent siblings)
6 siblings, 1 reply; 26+ messages in thread
From: Jaime Liao @ 2023-11-17 8:38 UTC (permalink / raw)
To: linux-mtd, tudor.ambarus, pratyush, michael, miquel.raynal
Cc: leoyu, jaimeliao
From: JaimeLiao <jaimeliao@mxic.com.tw>
Macronix swaps bytes on a 16-bit boundary when configured in Octal DTR.
The byte order of 16-bit words is swapped when read or written in 8D-8D-8D
mode compared to STR modes. Allow operations to specify the byte order in
DTR mode, so that controllers can swap the bytes back at run-time to
address the flash's endianness requirements, if they are capable. If the
controllers are not capable of swapping the bytes, the protocol is
downgrade via spi_nor_spimem_adjust_hwcaps(). When available, the swapping
of the bytes is always done regardless if it's a data or register access,
so that we comply with the JESD216 requirements: "Byte order of 16-bit
words is swapped when read in 8D-8D-8D mode compared to 1-1-1".
Merge Tudor's patch and add modifications for suiting newer version
of Linux kernel.
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: JaimeLiao <jaimeliao@mxic.com.tw>
---
drivers/mtd/spi-nor/core.c | 8 ++++++++
drivers/mtd/spi-nor/core.h | 1 +
2 files changed, 9 insertions(+)
diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
index 1c443fe568cf..f659dd037a25 100644
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
@@ -70,6 +70,13 @@ static u8 spi_nor_get_cmd_ext(const struct spi_nor *nor,
}
}
+static inline bool spi_nor_is_octal_dtr_swab16(const struct spi_nor *nor,
+ enum spi_nor_protocol proto)
+{
+ return (proto == SNOR_PROTO_8_8_8_DTR) &&
+ (nor->flags & SNOR_F_DTR_SWAB16);
+}
+
/**
* spi_nor_spimem_setup_op() - Set up common properties of a spi-mem op.
* @nor: pointer to a 'struct spi_nor'
@@ -105,6 +112,7 @@ void spi_nor_spimem_setup_op(const struct spi_nor *nor,
op->addr.dtr = true;
op->dummy.dtr = true;
op->data.dtr = true;
+ op->data.dtr_swab16 = spi_nor_is_octal_dtr_swab16(nor, proto);
/* 2 bytes per clock cycle in DTR mode. */
op->dummy.nbytes *= 2;
diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h
index 93cd2fc3606d..fe1259b32110 100644
--- a/drivers/mtd/spi-nor/core.h
+++ b/drivers/mtd/spi-nor/core.h
@@ -140,6 +140,7 @@ enum spi_nor_option_flags {
SNOR_F_RWW = BIT(14),
SNOR_F_ECC = BIT(15),
SNOR_F_NO_WP = BIT(16),
+ SNOR_F_DTR_SWAB16 = BIT(17),
};
struct spi_nor_read_command {
--
2.25.1
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 4/6] mtd: spi-nor: sfdp: Get the 8D-8D-8D byte order from BFPT
2023-11-17 8:38 [PATCH v5 0/6] Add octal DTR support for Macronix flash Jaime Liao
` (2 preceding siblings ...)
2023-11-17 8:38 ` [PATCH v5 3/6] mtd: spi-nor: core: " Jaime Liao
@ 2023-11-17 8:38 ` Jaime Liao
2023-11-17 8:38 ` [PATCH v5 5/6] mtd: spi-nor: add support for Macronix Octal flash with RWW feature Jaime Liao
` (2 subsequent siblings)
6 siblings, 0 replies; 26+ messages in thread
From: Jaime Liao @ 2023-11-17 8:38 UTC (permalink / raw)
To: linux-mtd, tudor.ambarus, pratyush, michael, miquel.raynal
Cc: leoyu, jaimeliao
From: JaimeLiao <jaimeliao@mxic.com.tw>
Parse BFPT in order to retrieve the byte order in 8D-8D-8D mode.
This info flag will be used as a basis to determine whether
there is byte swapping of data for SPI NOR flash in octal
DTR mode.
The controller driver will check whether byte swapping is supported
to determin whether the corresponding operation are supported, thus
avoiding the generation of unexpected data order.
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: JaimeLiao <jaimeliao@mxic.com.tw>
---
drivers/mtd/spi-nor/sfdp.c | 4 ++++
drivers/mtd/spi-nor/sfdp.h | 1 +
2 files changed, 5 insertions(+)
diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c
index b3b11dfed789..2241207556bf 100644
--- a/drivers/mtd/spi-nor/sfdp.c
+++ b/drivers/mtd/spi-nor/sfdp.c
@@ -650,6 +650,10 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
return -EOPNOTSUPP;
}
+ /* Byte order in 8D-8D-8D mode */
+ if (bfpt.dwords[SFDP_DWORD(18)] & BFPT_DWORD18_BYTE_ORDER_SWAPPED)
+ nor->flags |= SNOR_F_DTR_SWAB16;
+
return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt);
}
diff --git a/drivers/mtd/spi-nor/sfdp.h b/drivers/mtd/spi-nor/sfdp.h
index 6eb99e1cdd61..eba760941d43 100644
--- a/drivers/mtd/spi-nor/sfdp.h
+++ b/drivers/mtd/spi-nor/sfdp.h
@@ -123,6 +123,7 @@ struct sfdp_bfpt {
#define BFPT_DWORD18_CMD_EXT_INV (0x1UL << 29) /* Invert */
#define BFPT_DWORD18_CMD_EXT_RES (0x2UL << 29) /* Reserved */
#define BFPT_DWORD18_CMD_EXT_16B (0x3UL << 29) /* 16-bit opcode */
+#define BFPT_DWORD18_BYTE_ORDER_SWAPPED BIT(31) /* Byte order of 16-bit words in 8D-8D-8D mode */
struct sfdp_parameter_header {
u8 id_lsb;
--
2.25.1
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 5/6] mtd: spi-nor: add support for Macronix Octal flash with RWW feature
2023-11-17 8:38 [PATCH v5 0/6] Add octal DTR support for Macronix flash Jaime Liao
` (3 preceding siblings ...)
2023-11-17 8:38 ` [PATCH v5 4/6] mtd: spi-nor: sfdp: Get the 8D-8D-8D byte order from BFPT Jaime Liao
@ 2023-11-17 8:38 ` Jaime Liao
2023-11-17 9:21 ` Tudor Ambarus
2023-11-17 8:38 ` [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash Jaime Liao
2023-11-17 8:48 ` [PATCH v5 0/6] Add octal DTR support for Macronix flash Michael Walle
6 siblings, 1 reply; 26+ messages in thread
From: Jaime Liao @ 2023-11-17 8:38 UTC (permalink / raw)
To: linux-mtd, tudor.ambarus, pratyush, michael, miquel.raynal
Cc: leoyu, jaimeliao
From: JaimeLiao <jaimeliao@mxic.com.tw>
Adding Macronix Octal flash for Octal DTR support.
The octaflash series can be divided into the following types:
MX25 series : Serial NOR Flash.
MX66 series : Serial NOR Flash with stacked die.(Size larger than 1Gb)
LM/UM series : Up to 250MHz clock frequency with both DTR/STR operation.
LW/UW series : Support simultaneous Read-while-Write operation in multiple
bank architecture. Read-while-write feature which means read
data one bank while another bank is programing or erasing.
MX25LM : 3.0V Octal I/O
-https://www.mxic.com.tw/Lists/Datasheet/Attachments/8729/MX25LM51245G,%203V,%20512Mb,%20v1.1.pdf
MX25UM : 1.8V Octal I/O
-https://www.mxic.com.tw/Lists/Datasheet/Attachments/8967/MX25UM51245G,%201.8V,%20512Mb,%20v1.5.pdf
MX66LM : 3.0V Octal I/O with stacked die
-https://www.mxic.com.tw/Lists/Datasheet/Attachments/8748/MX66LM1G45G,%203V,%201Gb,%20v1.1.pdf
MX66UM : 1.8V Octal I/O with stacked die
-https://www.mxic.com.tw/Lists/Datasheet/Attachments/8711/MX66UM1G45G,%201.8V,%201Gb,%20v1.1.pdf
MX25LW : 3.0V Octal I/O with Read-while-Write
MX25UW : 1.8V Octal I/O with Read-while-Write
MX66LW : 3.0V Octal I/O with Read-while-Write and stack die
MX66UW : 1.8V Octal I/O with Read-while-Write and stack die
As below are the SFDP table dump.
zynq> cat jedec_id
c28437
zynq> cat manufacturer
macronix
zynq> cat partname
mx25uw6345g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff0300ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff8b7901008f1200c4cc04674630b030b0f4bdd55c
000000ff101000200000000000007c234800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043060f0021dcffff
zynq> md5sum sfdp
c6fb57b8fdd4c35b5f0dacc4a1f7d4f4 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 8388608 (8M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c28137
zynq> cat manufacturer
macronix
zynq> cat partname
mx25uw6445g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff0300ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff897901008d1200c4cc04674630b030b0f4bdd55c
000000ff101000200000000000007ca34800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043060f0021dcffff
zynq> md5sum sfdp
b09aeedb0cfd0f77adc7e08592d295a9 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 8388608 (8M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c28438
zynq> cat manufacturer
macronix
zynq> cat partname
mx25uw12345g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff0700ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff8b7901008f1200c9cc04674630b030b0f4bdd55c
000000ff101000200000000000007c234800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043060f0021dcffff
zynq> md5sum sfdp
a3eb609c08894c84270ad06efc03766c sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 16777216 (16M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c28138
zynq> cat manufacturer
macronix
zynq> cat partname
mx25uw12845g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff000000000000000000000000
00000000e5208affffffff0700ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff8b7901008f1200c9cc04674630b030b0f4bdd55c
000000ff101000200000000000007ca34800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043060f0021dcffff
zynq> md5sum sfdp
9eacff90d7aa7cf737b970e0f2a7f2c6 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 16777216 (16M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c28439
zynq> cat manufacturer
macronix
zynq> cat partname
mx25uw25345g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff0f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff87790100841200d2cc04674630b030b0f4bdd55c
000000ff101000200000000000007c234800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043060f0021dcffff
zynq> md5sum sfdp
f7712440f8ce0adb538dfa0c10579c79 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 33554432 (32M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c28139
zynq> cat manufacturer
macronix
zynq> cat partname
mx25uw25645g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff0f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff897901008d1200d2cc04674630b030b0f4bdd55c
000000ff101000200000000000007ca34800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043060f0021dcffff
zynq> md5sum sfdp
e43ab2dbcbcf99cebc74964c5dcf3ee2 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 33554432 (32M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2843a
zynq> cat manufacturer
macronix
zynq> cat partname
mx25uw51345g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff8b7901008f1200e2cc04674630b030b0f4bdd55c
000000ff101000200000000000007c234800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043060f0021dcffff
zynq> md5sum sfdp
cdccbfad3c384e77f3a5f7847b57b148 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 67108864 (64M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2863a
zynq> cat manufacturer
macronix
zynq> cat partname
mx25lw51245g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff000000000000000000000000
00000000e5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff8b7901008f1200e2cc04674630b030b0f4bdd55c
000000ff101000200000000000007ca34800000000006666000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
0000000014351c0043060f0021dcffff
zynq> md5sum sfdp
bb32ccaca6814f3104b985ac91bd65ac sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 67108864 (64M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2843b
zynq> cat manufacturer
macronix
zynq> cat partname
mx66uw1g345g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff3f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff8b7901008f1200e2cc04674630b030b0f4bdd55c
000000ff101000200000147c00007c234800000000008888000000000000
00400fd1fff30fd1fff300050090060500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000000000000000
0000000000000000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043061f0021dcffff
zynq> md5sum sfdp
dd3ef0a8d22ee81fc5bccdcb67dee6ca sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 134217728 (128M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2813b
zynq> cat manufacturer
macronix
zynq> cat partname
mx66uw1g45g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff3f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff8b7901008f1200e2cc04674630b030b0f4bdd55c
000000ff101000200000000000007ca34800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043060f0021dcffff
zynq> md5sum sfdp
b89a53266007fce06ba7cc4c0956f917 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 134217728 (128M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2843c
zynq> cat manufacturer
macronix
zynq> cat partname
mx66uw2g345g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff7f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff87790100841200e2cc04674630b030b0f4bdd55c
000000ff101000200000147c00007c234800000000007777000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000000001445988043061f0021dcffff
zynq> md5sum sfdp
00447475e039e67c256a8d75d5885ae8 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 268435456 (256M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2943c
zynq> cat manufacturer
macronix
zynq> cat partname
mx66uw2g345gx0
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff7f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff87790100841200e2cc04674630b030b0f4bdd55c
000000ff101000200000000000007c234800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043061f0021dcffff
zynq> md5sum sfdp
839ad44d1e758bea30bd9917ba763ba6 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 268435456 (256M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
Signed-off-by: JaimeLiao <jaimeliao@mxic.com.tw>
---
drivers/mtd/spi-nor/macronix.c | 60 ++++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
index dee71776b1a8..48e570c04ad9 100644
--- a/drivers/mtd/spi-nor/macronix.c
+++ b/drivers/mtd/spi-nor/macronix.c
@@ -200,6 +200,66 @@ static const struct flash_info macronix_nor_parts[] = {
.name = "mx25l3255e",
.size = SZ_4M,
.no_sfdp_flags = SECT_4K,
+ }, {
+ .id = SNOR_ID(0xc2, 0x84, 0x37),
+ .name = "mx25uw6345g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x81, 0x37),
+ .name = "mx25uw6445g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x84, 0x38),
+ .name = "mx25uw12345g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x81, 0x38),
+ .name = "mx25uw12845g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x84, 0x39),
+ .name = "mx25uw25345g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x81, 0x39),
+ .name = "mx25uw25645g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x84, 0x3a),
+ .name = "mx25uw51345g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x86, 0x3a),
+ .name = "mx25lw51245g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x84, 0x3b),
+ .name = "mx66uw1g345g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x81, 0x3b),
+ .name = "mx66uw1g45g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x84, 0x3c),
+ .name = "mx66uw2g345g",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x94, 0x3c),
+ .name = "mx66uw2g345gx0",
+ .n_banks = 4,
+ .flags = SPI_NOR_RWW,
}
};
--
2.25.1
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash
2023-11-17 8:38 [PATCH v5 0/6] Add octal DTR support for Macronix flash Jaime Liao
` (4 preceding siblings ...)
2023-11-17 8:38 ` [PATCH v5 5/6] mtd: spi-nor: add support for Macronix Octal flash with RWW feature Jaime Liao
@ 2023-11-17 8:38 ` Jaime Liao
2023-11-17 8:57 ` Michael Walle
2023-11-17 9:23 ` Tudor Ambarus
2023-11-17 8:48 ` [PATCH v5 0/6] Add octal DTR support for Macronix flash Michael Walle
6 siblings, 2 replies; 26+ messages in thread
From: Jaime Liao @ 2023-11-17 8:38 UTC (permalink / raw)
To: linux-mtd, tudor.ambarus, pratyush, michael, miquel.raynal
Cc: leoyu, jaimeliao
From: JaimeLiao <jaimeliao@mxic.com.tw>
Adding Macronix Octal flash for Octal DTR support.
The octaflash series can be divided into the following types:
MX25 series : Serial NOR Flash.
MX66 series : Serial NOR Flash with stacked die.(Size larger than 1Gb)
LM/UM series : Up to 250MHz clock frequency with both DTR/STR operation.
LW/UW series : Support simultaneous Read-while-Write operation in multiple
bank architecture. Read-while-write feature which means read
data one bank while another bank is programing or erasing.
MX25LM : 3.0V Octal I/O
-https://www.mxic.com.tw/Lists/Datasheet/Attachments/8729/MX25LM51245G,%203V,%20512Mb,%20v1.1.pdf
MX25UM : 1.8V Octal I/O
-https://www.mxic.com.tw/Lists/Datasheet/Attachments/8967/MX25UM51245G,%201.8V,%20512Mb,%20v1.5.pdf
MX66LM : 3.0V Octal I/O with stacked die
-https://www.mxic.com.tw/Lists/Datasheet/Attachments/8748/MX66LM1G45G,%203V,%201Gb,%20v1.1.pdf
MX66UM : 1.8V Octal I/O with stacked die
-https://www.mxic.com.tw/Lists/Datasheet/Attachments/8711/MX66UM1G45G,%201.8V,%201Gb,%20v1.1.pdf
MX25LW : 3.0V Octal I/O with Read-while-Write
MX25UW : 1.8V Octal I/O with Read-while-Write
MX66LW : 3.0V Octal I/O with Read-while-Write and stack die
MX66UW : 1.8V Octal I/O with Read-while-Write and stack die
As below are the SFDP table dump.
zynq> cat jedec_id
c28339
zynq> cat manufacturer
macronix
zynq> cat partname
mx25um25345g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff0f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff87690100821200d2cc02673830b030b0f4bdd55c
000000ff101000200000000000007c234800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
040900001445988043060f0021dcffff
zynq> md5sum sfdp
950e623745a002e1747008592e6dbdf9 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 33554432 (32M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c28039
zynq> cat manufacturer
macronix
zynq> cat partname
mx25um25645g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff0f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff87790100841200d2cc02673830b030b0f4bdd55c
000000ff101000200000000000007ca34800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a000014359c8043060f0021dcffff
zynq> md5sum sfdp
d652779f17770dc833cd96262cb2a620 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 33554432 (32M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c28539
zynq> cat manufacturer
macronix
zynq> cat partname
mx25lm25645g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff0f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff87690100821200d2cc02673830b030b0f4bdd55c
000000ff101000200000000000007ca34800000000006666000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
0000000014351c0043060f0021dcffff
zynq> md5sum sfdp
ec258f831ac737454c7eb9f6a8a4495a sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 33554432 (32M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2803a
zynq> cat manufacturer
macronix
zynq> cat partname
mx25um51245g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff8b7901008f1200e2cc04674630b030b0f4bdd55c
000000ff101000200000000000007ca34800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a000014359c8043060f0021dcffff
zynq> md5sum sfdp
75d81c1eb2fd2767634f1d0dfbb3be35 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 67108864 (64M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2853a
zynq> cat manufacturer
macronix
zynq> cat partname
mx25lm51245g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff897901008d1200e2cc02674430b030b0f4bdd55c
000000ff101000200000000000007ca34800000000006666000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
0000000014351c0043060f0021dcffff
zynq> md5sum sfdp
214868617d74e6bfb2c45444d5d6fff0 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 67108864 (64M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2803b
zynq> cat manufacturer
macronix
zynq> cat partname
mx66um1g45g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff3f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff897901008d1200e2cc02674430b030b0f4bdd55c
000000ff101000200000000000007ca34800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a000014359c8043060f0021dcffff
zynq> md5sum sfdp
eea09d64679e64f627402b39a177e356 sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 134217728 (128M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
zynq> cat jedec_id
c2853b
zynq> cat manufacturer
macronix
zynq> cat partname
mx66lm1g45g
zynq> xxd -p sfdp
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff3f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff87690100821200e2cc02673830b030b0f4bdd55c
000000ff101000200000000000007ca34800000000006666000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
0000000014351c0043060f0021dcffff
zynq> md5sum sfdp
7b46113b529d58a6335531a10f14a76e sfdp
zynq> mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 134217728 (128M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
Signed-off-by: JaimeLiao <jaimeliao@mxic.com.tw>
---
drivers/mtd/spi-nor/macronix.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
index 48e570c04ad9..2115a25b21ce 100644
--- a/drivers/mtd/spi-nor/macronix.c
+++ b/drivers/mtd/spi-nor/macronix.c
@@ -260,6 +260,27 @@ static const struct flash_info macronix_nor_parts[] = {
.name = "mx66uw2g345gx0",
.n_banks = 4,
.flags = SPI_NOR_RWW,
+ }, {
+ .id = SNOR_ID(0xc2, 0x83, 0x39),
+ .name = "mx25um25345g",
+ }, {
+ .id = SNOR_ID(0xc2, 0x80, 0x39),
+ .name = "mx25um25645g",
+ }, {
+ .id = SNOR_ID(0xc2, 0x85, 0x39),
+ .name = "mx25lm25645g",
+ }, {
+ .id = SNOR_ID(0xc2, 0x80, 0x3a),
+ .name = "mx25um51245g",
+ }, {
+ .id = SNOR_ID(0xc2, 0x85, 0x3a),
+ .name = "mx25lm51245g",
+ }, {
+ .id = SNOR_ID(0xc2, 0x80, 0x3b),
+ .name = "mx66um1g45g",
+ }, {
+ .id = SNOR_ID(0xc2, 0x85, 0x3b),
+ .name = "mx66lm1g45g",
}
};
--
2.25.1
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [PATCH v5 0/6] Add octal DTR support for Macronix flash
2023-11-17 8:38 [PATCH v5 0/6] Add octal DTR support for Macronix flash Jaime Liao
` (5 preceding siblings ...)
2023-11-17 8:38 ` [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash Jaime Liao
@ 2023-11-17 8:48 ` Michael Walle
2023-11-17 10:09 ` liao jaime
6 siblings, 1 reply; 26+ messages in thread
From: Michael Walle @ 2023-11-17 8:48 UTC (permalink / raw)
To: Jaime Liao
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi Jaime,
> Add method for Macronix Octal DTR Eable/Disable.
> Merge Tudor's patch "Allow specifying the byte order in DTR mode"
> Add support for Macronix flash
I skimmed over the patches and they look good, but where is the
controller part of this? I.e. which driver is using the dtr_swab16
bit?
There should be a working setup.
-michael
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash
2023-11-17 8:38 ` [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash Jaime Liao
@ 2023-11-17 8:57 ` Michael Walle
2023-11-17 9:05 ` Tudor Ambarus
[not found] ` <CAAQoYRkw5hUONJ32sGKxgv5XtO24Vc6=KojankTG73u5E7jPBw@mail.gmail.com>
2023-11-17 9:23 ` Tudor Ambarus
1 sibling, 2 replies; 26+ messages in thread
From: Michael Walle @ 2023-11-17 8:57 UTC (permalink / raw)
To: Jaime Liao
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi,
> diff --git a/drivers/mtd/spi-nor/macronix.c
> b/drivers/mtd/spi-nor/macronix.c
> index 48e570c04ad9..2115a25b21ce 100644
> --- a/drivers/mtd/spi-nor/macronix.c
> +++ b/drivers/mtd/spi-nor/macronix.c
> @@ -260,6 +260,27 @@ static const struct flash_info
> macronix_nor_parts[] = {
> .name = "mx66uw2g345gx0",
> .n_banks = 4,
> .flags = SPI_NOR_RWW,
> + }, {
> + .id = SNOR_ID(0xc2, 0x83, 0x39),
> + .name = "mx25um25345g",
> + }, {
> + .id = SNOR_ID(0xc2, 0x80, 0x39),
> + .name = "mx25um25645g",
> + }, {
> + .id = SNOR_ID(0xc2, 0x85, 0x39),
> + .name = "mx25lm25645g",
> + }, {
> + .id = SNOR_ID(0xc2, 0x80, 0x3a),
> + .name = "mx25um51245g",
> + }, {
> + .id = SNOR_ID(0xc2, 0x85, 0x3a),
> + .name = "mx25lm51245g",
> + }, {
> + .id = SNOR_ID(0xc2, 0x80, 0x3b),
> + .name = "mx66um1g45g",
> + }, {
> + .id = SNOR_ID(0xc2, 0x85, 0x3b),
> + .name = "mx66lm1g45g",
You need this because of the manufacturer fixup, correct? I'd like to
avoid these "empty" entries if possible. The name is useless to the
kernel
and sometimes incorrect. Therefore, at least drop it and just list the
IDs.
Tudor, Pratyush, what do you think about calling the vendor fixups
by just looking at the JEDEC manufacturer ID *iff* there is no
entry in the flashdb? As a fallback so to speak. That would also
help for the chip erase topic, because I'd presume the chip erase
op is the same among the flashes of one vendor. So there could be
a vendor fixup, to set the chip erase op.
-michael
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash
2023-11-17 8:57 ` Michael Walle
@ 2023-11-17 9:05 ` Tudor Ambarus
[not found] ` <CAAQoYRkw5hUONJ32sGKxgv5XtO24Vc6=KojankTG73u5E7jPBw@mail.gmail.com>
1 sibling, 0 replies; 26+ messages in thread
From: Tudor Ambarus @ 2023-11-17 9:05 UTC (permalink / raw)
To: Michael Walle, Jaime Liao
Cc: linux-mtd, pratyush, miquel.raynal, leoyu, jaimeliao
On 11/17/23 08:57, Michael Walle wrote:
> Hi,
>
>> diff --git a/drivers/mtd/spi-nor/macronix.c
>> b/drivers/mtd/spi-nor/macronix.c
>> index 48e570c04ad9..2115a25b21ce 100644
>> --- a/drivers/mtd/spi-nor/macronix.c
>> +++ b/drivers/mtd/spi-nor/macronix.c
>> @@ -260,6 +260,27 @@ static const struct flash_info
>> macronix_nor_parts[] = {
>> .name = "mx66uw2g345gx0",
>> .n_banks = 4,
>> .flags = SPI_NOR_RWW,
>> + }, {
>> + .id = SNOR_ID(0xc2, 0x83, 0x39),
>> + .name = "mx25um25345g",
>> + }, {
>> + .id = SNOR_ID(0xc2, 0x80, 0x39),
>> + .name = "mx25um25645g",
>> + }, {
>> + .id = SNOR_ID(0xc2, 0x85, 0x39),
>> + .name = "mx25lm25645g",
>> + }, {
>> + .id = SNOR_ID(0xc2, 0x80, 0x3a),
>> + .name = "mx25um51245g",
>> + }, {
>> + .id = SNOR_ID(0xc2, 0x85, 0x3a),
>> + .name = "mx25lm51245g",
>> + }, {
>> + .id = SNOR_ID(0xc2, 0x80, 0x3b),
>> + .name = "mx66um1g45g",
>> + }, {
>> + .id = SNOR_ID(0xc2, 0x85, 0x3b),
>> + .name = "mx66lm1g45g",
>
> You need this because of the manufacturer fixup, correct? I'd like to
> avoid these "empty" entries if possible. The name is useless to the kernel
> and sometimes incorrect. Therefore, at least drop it and just list the
> IDs.
>
I agree.
> Tudor, Pratyush, what do you think about calling the vendor fixups
> by just looking at the JEDEC manufacturer ID *iff* there is no
> entry in the flashdb? As a fallback so to speak. That would also
> help for the chip erase topic, because I'd presume the chip erase
> op is the same among the flashes of one vendor. So there could be
> a vendor fixup, to set the chip erase op.
>
sounds good!
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 2/6] spi: spi-mem: Allow specifying the byte order in DTR mode
2023-11-17 8:38 ` [PATCH v5 2/6] spi: spi-mem: Allow specifying the byte order in DTR mode Jaime Liao
@ 2023-11-17 9:17 ` Tudor Ambarus
2023-11-17 10:00 ` liao jaime
0 siblings, 1 reply; 26+ messages in thread
From: Tudor Ambarus @ 2023-11-17 9:17 UTC (permalink / raw)
To: Jaime Liao, linux-mtd, pratyush, michael, miquel.raynal; +Cc: leoyu, jaimeliao
On 11/17/23 08:38, Jaime Liao wrote:
> From: JaimeLiao <jaimeliao@mxic.com.tw>
>
> There are NOR flashes (Macronix) that swap the bytes on a 16-bit
> boundary when configured in Octal DTR mode. The byte order of
> 16-bit words is swapped when read or written in Octal Double
> Transfer Rate (DTR) mode compared to Single Transfer Rate (STR)
> modes. If one writes D0 D1 D2 D3 bytes using 1-1-1 mode, and uses
> 8D-8D-8D SPI mode for reading, it will read back D1 D0 D3 D2.
> Swapping the bytes may introduce some endianness problems. It can
> affect the boot sequence if the entire boot sequence is not handled
> in either 8D-8D-8D mode or 1-1-1 mode. So we must swap the bytes
> back to have the same byte order as in STR modes. Fortunately there
> are controllers that could swap the bytes back at runtime,
> addressing the flash's endiannesses requirements. Provide a way for
> the upper layers to specify the byte order in Octal DTR mode.
>
> Merge Tudor's patch and add modifications for suiting newer version
> of Linux kernel.
>
> Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
> Signed-off-by: JaimeLiao <jaimeliao@mxic.com.tw>
> ---
> drivers/spi/spi-mem.c | 4 ++++
> include/linux/spi/spi-mem.h | 6 ++++++
> 2 files changed, 10 insertions(+)
>
> diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
> index edd7430d4c05..9c03b5617fff 100644
> --- a/drivers/spi/spi-mem.c
> +++ b/drivers/spi/spi-mem.c
> @@ -172,6 +172,10 @@ bool spi_mem_default_supports_op(struct spi_mem *mem,
> if (!spi_mem_controller_is_capable(ctlr, dtr))
> return false;
>
> + if (op->data.dtr_swab16 &&
> + !(spi_mem_controller_is_capable(ctlr, dtr_swab16)))
> + return false;
> +
so if the controller supports swapping back the bytes, then 8d-8d-8d
will be supported, otherwise not. Shall the swap back be user configurable?
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 5/6] mtd: spi-nor: add support for Macronix Octal flash with RWW feature
2023-11-17 8:38 ` [PATCH v5 5/6] mtd: spi-nor: add support for Macronix Octal flash with RWW feature Jaime Liao
@ 2023-11-17 9:21 ` Tudor Ambarus
2023-11-17 10:01 ` liao jaime
0 siblings, 1 reply; 26+ messages in thread
From: Tudor Ambarus @ 2023-11-17 9:21 UTC (permalink / raw)
To: Jaime Liao, linux-mtd, pratyush, michael, miquel.raynal; +Cc: leoyu, jaimeliao
Is RWW SFDP discoverable?
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash
2023-11-17 8:38 ` [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash Jaime Liao
2023-11-17 8:57 ` Michael Walle
@ 2023-11-17 9:23 ` Tudor Ambarus
1 sibling, 0 replies; 26+ messages in thread
From: Tudor Ambarus @ 2023-11-17 9:23 UTC (permalink / raw)
To: Jaime Liao, linux-mtd, pratyush, michael, miquel.raynal; +Cc: leoyu, jaimeliao
On 11/17/23 08:38, Jaime Liao wrote:
> Adding Macronix Octal flash for Octal DTR support.
Do all these flashes swap bytes on a 16bit boundary?
Do all these flashes correctly set BFPT_DWORD18_BYTE_ORDER_SWAPPED?
same questions on the previous patch.
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 2/6] spi: spi-mem: Allow specifying the byte order in DTR mode
2023-11-17 9:17 ` Tudor Ambarus
@ 2023-11-17 10:00 ` liao jaime
0 siblings, 0 replies; 26+ messages in thread
From: liao jaime @ 2023-11-17 10:00 UTC (permalink / raw)
To: Tudor Ambarus
Cc: linux-mtd, pratyush, michael, miquel.raynal, leoyu, jaimeliao
Hi
>
>
>
> On 11/17/23 08:38, Jaime Liao wrote:
> > From: JaimeLiao <jaimeliao@mxic.com.tw>
> >
> > There are NOR flashes (Macronix) that swap the bytes on a 16-bit
> > boundary when configured in Octal DTR mode. The byte order of
> > 16-bit words is swapped when read or written in Octal Double
> > Transfer Rate (DTR) mode compared to Single Transfer Rate (STR)
> > modes. If one writes D0 D1 D2 D3 bytes using 1-1-1 mode, and uses
> > 8D-8D-8D SPI mode for reading, it will read back D1 D0 D3 D2.
> > Swapping the bytes may introduce some endianness problems. It can
> > affect the boot sequence if the entire boot sequence is not handled
> > in either 8D-8D-8D mode or 1-1-1 mode. So we must swap the bytes
> > back to have the same byte order as in STR modes. Fortunately there
> > are controllers that could swap the bytes back at runtime,
> > addressing the flash's endiannesses requirements. Provide a way for
> > the upper layers to specify the byte order in Octal DTR mode.
> >
> > Merge Tudor's patch and add modifications for suiting newer version
> > of Linux kernel.
> >
> > Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
> > Signed-off-by: JaimeLiao <jaimeliao@mxic.com.tw>
> > ---
> > drivers/spi/spi-mem.c | 4 ++++
> > include/linux/spi/spi-mem.h | 6 ++++++
> > 2 files changed, 10 insertions(+)
> >
> > diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
> > index edd7430d4c05..9c03b5617fff 100644
> > --- a/drivers/spi/spi-mem.c
> > +++ b/drivers/spi/spi-mem.c
> > @@ -172,6 +172,10 @@ bool spi_mem_default_supports_op(struct spi_mem *mem,
> > if (!spi_mem_controller_is_capable(ctlr, dtr))
> > return false;
> >
> > + if (op->data.dtr_swab16 &&
> > + !(spi_mem_controller_is_capable(ctlr, dtr_swab16)))
> > + return false;
> > +
>
> so if the controller supports swapping back the bytes, then 8d-8d-8d
> will be supported, otherwise not. Shall the swap back be user configurable?
Yes, I validate it on macronix spi controller driver.
8d-8d-8d mode will not support if controller driver didn't support
swapping bytes.
Thanks
Jaime
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 5/6] mtd: spi-nor: add support for Macronix Octal flash with RWW feature
2023-11-17 9:21 ` Tudor Ambarus
@ 2023-11-17 10:01 ` liao jaime
0 siblings, 0 replies; 26+ messages in thread
From: liao jaime @ 2023-11-17 10:01 UTC (permalink / raw)
To: Tudor Ambarus
Cc: linux-mtd, pratyush, michael, miquel.raynal, leoyu, jaimeliao
Hi Tudor
>
> Is RWW SFDP discoverable?
No.
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 0/6] Add octal DTR support for Macronix flash
2023-11-17 8:48 ` [PATCH v5 0/6] Add octal DTR support for Macronix flash Michael Walle
@ 2023-11-17 10:09 ` liao jaime
2023-11-17 10:26 ` Michael Walle
0 siblings, 1 reply; 26+ messages in thread
From: liao jaime @ 2023-11-17 10:09 UTC (permalink / raw)
To: Michael Walle
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi Michael
>
> Hi Jaime,
>
> > Add method for Macronix Octal DTR Eable/Disable.
> > Merge Tudor's patch "Allow specifying the byte order in DTR mode"
> > Add support for Macronix flash
>
> I skimmed over the patches and they look good, but where is the
> controller part of this? I.e. which driver is using the dtr_swab16
> bit?
> There should be a working setup.
I think controller should info dtr_swab16 support in spi_controller_mem_caps.
8d-8d-8d will not be enable if the flash swap bytes and controller
driver not support
dtr_swab16.
>
> -michael
Thanks
Jaime
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 0/6] Add octal DTR support for Macronix flash
2023-11-17 10:09 ` liao jaime
@ 2023-11-17 10:26 ` Michael Walle
2023-11-20 1:50 ` liao jaime
0 siblings, 1 reply; 26+ messages in thread
From: Michael Walle @ 2023-11-17 10:26 UTC (permalink / raw)
To: liao jaime
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi,
>> > Add method for Macronix Octal DTR Eable/Disable.
>> > Merge Tudor's patch "Allow specifying the byte order in DTR mode"
>> > Add support for Macronix flash
>>
>> I skimmed over the patches and they look good, but where is the
>> controller part of this? I.e. which driver is using the dtr_swab16
>> bit?
>> There should be a working setup.
> I think controller should info dtr_swab16 support in
> spi_controller_mem_caps.
> 8d-8d-8d will not be enable if the flash swap bytes and controller
> driver not support
> dtr_swab16.
What I meant is that this patchset is missing a driver for the
controller.
Which controller does support it? We don't add code which is then not
used
at all. Or what I am missing here?
-michael
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 0/6] Add octal DTR support for Macronix flash
2023-11-17 10:26 ` Michael Walle
@ 2023-11-20 1:50 ` liao jaime
2023-11-21 8:29 ` Michael Walle
0 siblings, 1 reply; 26+ messages in thread
From: liao jaime @ 2023-11-20 1:50 UTC (permalink / raw)
To: Michael Walle
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi Michael
>
> Hi,
>
> >> > Add method for Macronix Octal DTR Eable/Disable.
> >> > Merge Tudor's patch "Allow specifying the byte order in DTR mode"
> >> > Add support for Macronix flash
> >>
> >> I skimmed over the patches and they look good, but where is the
> >> controller part of this? I.e. which driver is using the dtr_swab16
> >> bit?
> >> There should be a working setup.
> > I think controller should info dtr_swab16 support in
> > spi_controller_mem_caps.
> > 8d-8d-8d will not be enable if the flash swap bytes and controller
> > driver not support
> > dtr_swab16.
>
> What I meant is that this patchset is missing a driver for the
> controller.
> Which controller does support it? We don't add code which is then not
> used
> at all. Or what I am missing here?
For this part, I validated on macronix spi host controller(spi-mxic.c).
I add ".dtr_swab16 = true;" in mxic_spi_mem_caps for patchset validation.
Do you mean that I need to patch dtr_swab16 support for spi-mxic.c as well?
>
> -michael
Thanks
Jaime
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 0/6] Add octal DTR support for Macronix flash
2023-11-20 1:50 ` liao jaime
@ 2023-11-21 8:29 ` Michael Walle
2023-11-21 8:32 ` liao jaime
0 siblings, 1 reply; 26+ messages in thread
From: Michael Walle @ 2023-11-21 8:29 UTC (permalink / raw)
To: liao jaime
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi,
> Do you mean that I need to patch dtr_swab16 support for spi-mxic.c as
> well?
Yes. Otherwise, this code wouldn't be used at all.
-michael
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 0/6] Add octal DTR support for Macronix flash
2023-11-21 8:29 ` Michael Walle
@ 2023-11-21 8:32 ` liao jaime
0 siblings, 0 replies; 26+ messages in thread
From: liao jaime @ 2023-11-21 8:32 UTC (permalink / raw)
To: Michael Walle
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi Michael
>
> Hi,
>
> > Do you mean that I need to patch dtr_swab16 support for spi-mxic.c as
> > well?
>
> Yes. Otherwise, this code wouldn't be used at all.
Got it.
Thanks for your reply.
>
> -michael
Thanks
Jaime
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 3/6] mtd: spi-nor: core: Allow specifying the byte order in DTR mode
2023-11-17 8:38 ` [PATCH v5 3/6] mtd: spi-nor: core: " Jaime Liao
@ 2023-11-21 8:40 ` Michael Walle
2023-11-21 9:53 ` liao jaime
0 siblings, 1 reply; 26+ messages in thread
From: Michael Walle @ 2023-11-21 8:40 UTC (permalink / raw)
To: Jaime Liao
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi,
> +static inline bool spi_nor_is_octal_dtr_swab16(const struct spi_nor
> *nor,
> + enum spi_nor_protocol proto)
> +{
> + return (proto == SNOR_PROTO_8_8_8_DTR) &&
> + (nor->flags & SNOR_F_DTR_SWAB16);
> +}
I think you can keep this code, but SNOR_F_DTR_SWAB16 only makes sense
for
SNOR_PROTO_8_8_8_DTR, because this is the only protocol where one clock
cycle transfers more than 8 bit. Are there any other use cases?
-michael
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash
[not found] ` <CAAQoYRkw5hUONJ32sGKxgv5XtO24Vc6=KojankTG73u5E7jPBw@mail.gmail.com>
@ 2023-11-21 8:51 ` Michael Walle
2023-11-21 9:09 ` Tudor Ambarus
0 siblings, 1 reply; 26+ messages in thread
From: Michael Walle @ 2023-11-21 8:51 UTC (permalink / raw)
To: liao jaime
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi Jaime,
[please keep the CC list in replies].
>> and sometimes incorrect. Therefore, at least drop it and just list the
>> IDs.
> Could I know patch 6/6 only or patch 5/6 should remove name as well?
I'd say yes. Tudor? Pratyush? New flash additions without names?
As, mentioned last time, for OF we might introduce an of_compatible
(thats then ABI) - or - we can use the numeric ID in the device tree,
as it's already used for PHY IDs or PCI IDs.
Jaime, could you try to use
/* Apply vendor fixups */
{ .id = SNOR_ID(0xc2) }
-michael
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash
2023-11-21 8:51 ` Michael Walle
@ 2023-11-21 9:09 ` Tudor Ambarus
2023-11-22 3:15 ` liao jaime
0 siblings, 1 reply; 26+ messages in thread
From: Tudor Ambarus @ 2023-11-21 9:09 UTC (permalink / raw)
To: Michael Walle, liao jaime
Cc: linux-mtd, pratyush, miquel.raynal, leoyu, jaimeliao
On 11/21/23 08:51, Michael Walle wrote:
> Hi Jaime,
>
> [please keep the CC list in replies].
>
>>> and sometimes incorrect. Therefore, at least drop it and just list the
>>> IDs.
>> Could I know patch 6/6 only or patch 5/6 should remove name as well?
>
> I'd say yes. Tudor? Pratyush? New flash additions without names?
Why do you need a flash addition in the first place? Haven't we agreed
that we'll apply the vendor fixup based on the manufacturer ID?
Anyway, flash additions without names is fine by me.
Cheers,
ta
>
> As, mentioned last time, for OF we might introduce an of_compatible
> (thats then ABI) - or - we can use the numeric ID in the device tree,
> as it's already used for PHY IDs or PCI IDs.
>
> Jaime, could you try to use
>
> /* Apply vendor fixups */
> { .id = SNOR_ID(0xc2) }
>
> -michael
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 3/6] mtd: spi-nor: core: Allow specifying the byte order in DTR mode
2023-11-21 8:40 ` Michael Walle
@ 2023-11-21 9:53 ` liao jaime
0 siblings, 0 replies; 26+ messages in thread
From: liao jaime @ 2023-11-21 9:53 UTC (permalink / raw)
To: Michael Walle
Cc: linux-mtd, tudor.ambarus, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi Michael
>
> Hi,
>
> > +static inline bool spi_nor_is_octal_dtr_swab16(const struct spi_nor
> > *nor,
> > + enum spi_nor_protocol proto)
> > +{
> > + return (proto == SNOR_PROTO_8_8_8_DTR) &&
> > + (nor->flags & SNOR_F_DTR_SWAB16);
> > +}
>
> I think you can keep this code, but SNOR_F_DTR_SWAB16 only makes sense
> for
> SNOR_PROTO_8_8_8_DTR, because this is the only protocol where one clock
> cycle transfers more than 8 bit. Are there any other use cases?
No, as I know 8_8_8_DTR swapped byte only.
>
> -michael
Thanks
Jaime
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash
2023-11-21 9:09 ` Tudor Ambarus
@ 2023-11-22 3:15 ` liao jaime
2023-11-22 10:16 ` Michael Walle
0 siblings, 1 reply; 26+ messages in thread
From: liao jaime @ 2023-11-22 3:15 UTC (permalink / raw)
To: Tudor Ambarus
Cc: Michael Walle, linux-mtd, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi
>
>
>
> On 11/21/23 08:51, Michael Walle wrote:
> > Hi Jaime,
> >
> > [please keep the CC list in replies].
> >
> >>> and sometimes incorrect. Therefore, at least drop it and just list the
> >>> IDs.
> >> Could I know patch 6/6 only or patch 5/6 should remove name as well?
> >
> > I'd say yes. Tudor? Pratyush? New flash additions without names?
>
> Why do you need a flash addition in the first place? Haven't we agreed
> that we'll apply the vendor fixup based on the manufacturer ID?
>
> Anyway, flash additions without names is fine by me.
>
> Cheers,
> ta
> >
> > As, mentioned last time, for OF we might introduce an of_compatible
> > (thats then ABI) - or - we can use the numeric ID in the device tree,
> > as it's already used for PHY IDs or PCI IDs.
> >
> > Jaime, could you try to use
> >
> > /* Apply vendor fixups */
> > { .id = SNOR_ID(0xc2) }
I have validate some flash without "name" and looks good.
But I got some log with (null) like below:
SPI-NOR SPI0.0: (null) (32768 Kbytes)
and
zynq> cat jedec_id
c2943c
zynq> cat manufacturer
macronix
zynq> cat partname
(null)
Is this result acceptable to everyone?
> >
> > -michael
Thanks
Jaime
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash
2023-11-22 3:15 ` liao jaime
@ 2023-11-22 10:16 ` Michael Walle
0 siblings, 0 replies; 26+ messages in thread
From: Michael Walle @ 2023-11-22 10:16 UTC (permalink / raw)
To: liao jaime
Cc: Tudor Ambarus, linux-mtd, pratyush, miquel.raynal, leoyu,
jaimeliao
Hi,
>> >>> and sometimes incorrect. Therefore, at least drop it and just list the
>> >>> IDs.
>> >> Could I know patch 6/6 only or patch 5/6 should remove name as well?
>> >
>> > I'd say yes. Tudor? Pratyush? New flash additions without names?
>>
>> Why do you need a flash addition in the first place? Haven't we agreed
>> that we'll apply the vendor fixup based on the manufacturer ID?
>>
>> Anyway, flash additions without names is fine by me.
>>
>> Cheers,
>> ta
>> >
>> > As, mentioned last time, for OF we might introduce an of_compatible
>> > (thats then ABI) - or - we can use the numeric ID in the device tree,
>> > as it's already used for PHY IDs or PCI IDs.
>> >
>> > Jaime, could you try to use
>> >
>> > /* Apply vendor fixups */
>> > { .id = SNOR_ID(0xc2) }
> I have validate some flash without "name" and looks good.
Great :)
> But I got some log with (null) like below:
>
> SPI-NOR SPI0.0: (null) (32768 Kbytes)
dev_info(dev, "%s (%lld Kbytes)\n", info->name ?: "",
(long long)mtd->size >> 10);
Maybe we should print the vendor and the name and
both are optional? I don't have a strong opinion here
as long as it's not "(null)" because that looks like
a bug.
> and
>
> zynq> cat jedec_id
> c2943c
> zynq> cat manufacturer
> macronix
> zynq> cat partname
> (null)
There is spi_nor_sysfs_is_visible() you can hide this property the
same was as the manufacturer property is hidden.
Also, please update
Documentation/ABI/testing/sysfs-bus-spi-devices-spi-nor in this case:
The attribute is optional. User space shouldn't rely on it to
be present or even correct. Instead, user space should read the
jedec_id attribute.
-michael
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2023-11-22 10:16 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-17 8:38 [PATCH v5 0/6] Add octal DTR support for Macronix flash Jaime Liao
2023-11-17 8:38 ` [PATCH v5 1/6] mtd: spi-nor: add Octal " Jaime Liao
2023-11-17 8:38 ` [PATCH v5 2/6] spi: spi-mem: Allow specifying the byte order in DTR mode Jaime Liao
2023-11-17 9:17 ` Tudor Ambarus
2023-11-17 10:00 ` liao jaime
2023-11-17 8:38 ` [PATCH v5 3/6] mtd: spi-nor: core: " Jaime Liao
2023-11-21 8:40 ` Michael Walle
2023-11-21 9:53 ` liao jaime
2023-11-17 8:38 ` [PATCH v5 4/6] mtd: spi-nor: sfdp: Get the 8D-8D-8D byte order from BFPT Jaime Liao
2023-11-17 8:38 ` [PATCH v5 5/6] mtd: spi-nor: add support for Macronix Octal flash with RWW feature Jaime Liao
2023-11-17 9:21 ` Tudor Ambarus
2023-11-17 10:01 ` liao jaime
2023-11-17 8:38 ` [PATCH v5 6/6] mtd: spi-nor: add support for Macronix Octal flash Jaime Liao
2023-11-17 8:57 ` Michael Walle
2023-11-17 9:05 ` Tudor Ambarus
[not found] ` <CAAQoYRkw5hUONJ32sGKxgv5XtO24Vc6=KojankTG73u5E7jPBw@mail.gmail.com>
2023-11-21 8:51 ` Michael Walle
2023-11-21 9:09 ` Tudor Ambarus
2023-11-22 3:15 ` liao jaime
2023-11-22 10:16 ` Michael Walle
2023-11-17 9:23 ` Tudor Ambarus
2023-11-17 8:48 ` [PATCH v5 0/6] Add octal DTR support for Macronix flash Michael Walle
2023-11-17 10:09 ` liao jaime
2023-11-17 10:26 ` Michael Walle
2023-11-20 1:50 ` liao jaime
2023-11-21 8:29 ` Michael Walle
2023-11-21 8:32 ` liao jaime
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox