* [PATCH v4 0/2] mtd: spi-nand: Add support for randomizer feature @ 2026-02-03 2:13 ` Cheng Ming Lin 0 siblings, 0 replies; 12+ messages in thread From: Cheng Ming Lin @ 2026-02-03 2:13 UTC (permalink / raw) To: Miquel Raynal, Vignesh Raghavendra Cc: Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin From: Cheng Ming Lin <chengminglin@mxic.com.tw> This patch series introduces randomizer support for SPI NAND devices. Patch 1 adds the hook and initialization logic to the core framework. Patch 2 implements the randomizer setting specifically for Macronix chips (MX35LF/UF series) and allows control via device tree. v4: * Fix a build error in spinand_randomizer_init() where a value was returned from a void function. (Reported by kernel test robot) * Update the return type to int. v3: * Revert the device tree property to the vendor-specific "mxic,randomizer-enable" to strictly follow vendor-specific bindings. * Update the 'set_randomizer' callback signature to accept a boolean 'enable' argument, allowing the feature to be explicitly enabled or disabled. * Switch the implementation to use the standard SET_FEATURE command to modify the Configuration Register (0x10), replacing the previous special program command method. v2: * Create a global NAND DT property Cheng Ming Lin (2): mtd: spi-nand: Add support for randomizer mtd: spi-nand: macronix: Enable randomizer support drivers/mtd/nand/spi/core.c | 23 ++++++++++++++++ drivers/mtd/nand/spi/macronix.c | 47 ++++++++++++++++++++++++++------- include/linux/mtd/spinand.h | 9 +++++++ 3 files changed, 69 insertions(+), 10 deletions(-) -- 2.25.1 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 0/2] mtd: spi-nand: Add support for randomizer feature @ 2026-02-03 2:13 ` Cheng Ming Lin 0 siblings, 0 replies; 12+ messages in thread From: Cheng Ming Lin @ 2026-02-03 2:13 UTC (permalink / raw) To: Miquel Raynal, Vignesh Raghavendra Cc: Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin From: Cheng Ming Lin <chengminglin@mxic.com.tw> This patch series introduces randomizer support for SPI NAND devices. Patch 1 adds the hook and initialization logic to the core framework. Patch 2 implements the randomizer setting specifically for Macronix chips (MX35LF/UF series) and allows control via device tree. v4: * Fix a build error in spinand_randomizer_init() where a value was returned from a void function. (Reported by kernel test robot) * Update the return type to int. v3: * Revert the device tree property to the vendor-specific "mxic,randomizer-enable" to strictly follow vendor-specific bindings. * Update the 'set_randomizer' callback signature to accept a boolean 'enable' argument, allowing the feature to be explicitly enabled or disabled. * Switch the implementation to use the standard SET_FEATURE command to modify the Configuration Register (0x10), replacing the previous special program command method. v2: * Create a global NAND DT property Cheng Ming Lin (2): mtd: spi-nand: Add support for randomizer mtd: spi-nand: macronix: Enable randomizer support drivers/mtd/nand/spi/core.c | 23 ++++++++++++++++ drivers/mtd/nand/spi/macronix.c | 47 ++++++++++++++++++++++++++------- include/linux/mtd/spinand.h | 9 +++++++ 3 files changed, 69 insertions(+), 10 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 1/2] mtd: spi-nand: Add support for randomizer 2026-02-03 2:13 ` Cheng Ming Lin @ 2026-02-03 2:13 ` Cheng Ming Lin -1 siblings, 0 replies; 12+ messages in thread From: Cheng Ming Lin @ 2026-02-03 2:13 UTC (permalink / raw) To: Miquel Raynal, Vignesh Raghavendra Cc: Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin From: Cheng Ming Lin <chengminglin@mxic.com.tw> This patch adds support for the randomizer feature. It introduces a 'set_randomizer' callback in 'struct spinand_info' and 'struct spinand_device'. If a driver implements this callback, the core will call it during device initialization (spinand_init) to enable the randomizer. Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw> --- drivers/mtd/nand/spi/core.c | 23 +++++++++++++++++++++++ include/linux/mtd/spinand.h | 9 +++++++++ 2 files changed, 32 insertions(+) diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c index d207286572d8..4f8ff94f5ccc 100644 --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c @@ -206,6 +206,12 @@ static int spinand_cont_read_enable(struct spinand_device *spinand, return spinand->set_cont_read(spinand, enable); } +static int spinand_randomizer_enable(struct spinand_device *spinand, + bool enable) +{ + return spinand->set_randomizer(spinand, enable); +} + static int spinand_check_ecc_status(struct spinand_device *spinand, u8 status) { struct nand_device *nand = spinand_to_nand(spinand); @@ -1218,6 +1224,19 @@ static int spinand_create_dirmaps(struct spinand_device *spinand) return 0; } +static int spinand_randomizer_init(struct spinand_device *spinand) +{ + int ret; + + if (spinand->set_randomizer) { + ret = spinand_randomizer_enable(spinand, true); + if (ret) + return ret; + } + + return 0; +} + static const struct nand_ops spinand_ops = { .erase = spinand_erase, .markbad = spinand_markbad, @@ -1412,6 +1431,7 @@ int spinand_match_and_init(struct spinand_device *spinand, spinand->user_otp = &table[i].user_otp; spinand->read_retries = table[i].read_retries; spinand->set_read_retry = table[i].set_read_retry; + spinand->set_randomizer = table[i].set_randomizer; op = spinand_select_op_variant(spinand, info->op_variants.read_cache); @@ -1588,6 +1608,9 @@ static int spinand_init(struct spinand_device *spinand) * ECC initialization must have happened previously. */ spinand_cont_read_init(spinand); + ret = spinand_randomizer_init(spinand); + if (ret) + goto err_cleanup_nanddev; mtd->_read_oob = spinand_mtd_read; mtd->_write_oob = spinand_mtd_write; diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h index ce76f5c632e1..e01315a71222 100644 --- a/include/linux/mtd/spinand.h +++ b/include/linux/mtd/spinand.h @@ -501,6 +501,7 @@ struct spinand_user_otp { * @user_otp: SPI NAND user OTP info. * @read_retries: the number of read retry modes supported * @set_read_retry: enable/disable read retry for data recovery + * @set_randomizer: enable/disable randomizer support * * Each SPI NAND manufacturer driver should have a spinand_info table * describing all the chips supported by the driver. @@ -527,6 +528,8 @@ struct spinand_info { unsigned int read_retries; int (*set_read_retry)(struct spinand_device *spinand, unsigned int read_retry); + int (*set_randomizer)(struct spinand_device *spinand, + bool enable); }; #define SPINAND_ID(__method, ...) \ @@ -580,6 +583,9 @@ struct spinand_info { .read_retries = __read_retries, \ .set_read_retry = __set_read_retry +#define SPINAND_RANDOMIZER(__set_randomizer) \ + .set_randomizer = __set_randomizer + #define SPINAND_INFO(__model, __id, __memorg, __eccreq, __op_variants, \ __flags, ...) \ { \ @@ -635,6 +641,7 @@ struct spinand_dirmap { * @user_otp: SPI NAND user OTP info. * @read_retries: the number of read retry modes supported * @set_read_retry: Enable/disable the read retry feature + * @set_randomizer: Enable/disable the randomizer feature */ struct spinand_device { struct nand_device base; @@ -668,6 +675,8 @@ struct spinand_device { bool cont_read_possible; int (*set_cont_read)(struct spinand_device *spinand, bool enable); + int (*set_randomizer)(struct spinand_device *spinand, + bool enable); const struct spinand_fact_otp *fact_otp; const struct spinand_user_otp *user_otp; -- 2.25.1 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/ ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 1/2] mtd: spi-nand: Add support for randomizer @ 2026-02-03 2:13 ` Cheng Ming Lin 0 siblings, 0 replies; 12+ messages in thread From: Cheng Ming Lin @ 2026-02-03 2:13 UTC (permalink / raw) To: Miquel Raynal, Vignesh Raghavendra Cc: Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin From: Cheng Ming Lin <chengminglin@mxic.com.tw> This patch adds support for the randomizer feature. It introduces a 'set_randomizer' callback in 'struct spinand_info' and 'struct spinand_device'. If a driver implements this callback, the core will call it during device initialization (spinand_init) to enable the randomizer. Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw> --- drivers/mtd/nand/spi/core.c | 23 +++++++++++++++++++++++ include/linux/mtd/spinand.h | 9 +++++++++ 2 files changed, 32 insertions(+) diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c index d207286572d8..4f8ff94f5ccc 100644 --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c @@ -206,6 +206,12 @@ static int spinand_cont_read_enable(struct spinand_device *spinand, return spinand->set_cont_read(spinand, enable); } +static int spinand_randomizer_enable(struct spinand_device *spinand, + bool enable) +{ + return spinand->set_randomizer(spinand, enable); +} + static int spinand_check_ecc_status(struct spinand_device *spinand, u8 status) { struct nand_device *nand = spinand_to_nand(spinand); @@ -1218,6 +1224,19 @@ static int spinand_create_dirmaps(struct spinand_device *spinand) return 0; } +static int spinand_randomizer_init(struct spinand_device *spinand) +{ + int ret; + + if (spinand->set_randomizer) { + ret = spinand_randomizer_enable(spinand, true); + if (ret) + return ret; + } + + return 0; +} + static const struct nand_ops spinand_ops = { .erase = spinand_erase, .markbad = spinand_markbad, @@ -1412,6 +1431,7 @@ int spinand_match_and_init(struct spinand_device *spinand, spinand->user_otp = &table[i].user_otp; spinand->read_retries = table[i].read_retries; spinand->set_read_retry = table[i].set_read_retry; + spinand->set_randomizer = table[i].set_randomizer; op = spinand_select_op_variant(spinand, info->op_variants.read_cache); @@ -1588,6 +1608,9 @@ static int spinand_init(struct spinand_device *spinand) * ECC initialization must have happened previously. */ spinand_cont_read_init(spinand); + ret = spinand_randomizer_init(spinand); + if (ret) + goto err_cleanup_nanddev; mtd->_read_oob = spinand_mtd_read; mtd->_write_oob = spinand_mtd_write; diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h index ce76f5c632e1..e01315a71222 100644 --- a/include/linux/mtd/spinand.h +++ b/include/linux/mtd/spinand.h @@ -501,6 +501,7 @@ struct spinand_user_otp { * @user_otp: SPI NAND user OTP info. * @read_retries: the number of read retry modes supported * @set_read_retry: enable/disable read retry for data recovery + * @set_randomizer: enable/disable randomizer support * * Each SPI NAND manufacturer driver should have a spinand_info table * describing all the chips supported by the driver. @@ -527,6 +528,8 @@ struct spinand_info { unsigned int read_retries; int (*set_read_retry)(struct spinand_device *spinand, unsigned int read_retry); + int (*set_randomizer)(struct spinand_device *spinand, + bool enable); }; #define SPINAND_ID(__method, ...) \ @@ -580,6 +583,9 @@ struct spinand_info { .read_retries = __read_retries, \ .set_read_retry = __set_read_retry +#define SPINAND_RANDOMIZER(__set_randomizer) \ + .set_randomizer = __set_randomizer + #define SPINAND_INFO(__model, __id, __memorg, __eccreq, __op_variants, \ __flags, ...) \ { \ @@ -635,6 +641,7 @@ struct spinand_dirmap { * @user_otp: SPI NAND user OTP info. * @read_retries: the number of read retry modes supported * @set_read_retry: Enable/disable the read retry feature + * @set_randomizer: Enable/disable the randomizer feature */ struct spinand_device { struct nand_device base; @@ -668,6 +675,8 @@ struct spinand_device { bool cont_read_possible; int (*set_cont_read)(struct spinand_device *spinand, bool enable); + int (*set_randomizer)(struct spinand_device *spinand, + bool enable); const struct spinand_fact_otp *fact_otp; const struct spinand_user_otp *user_otp; -- 2.25.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] mtd: spi-nand: Add support for randomizer 2026-02-03 2:13 ` Cheng Ming Lin @ 2026-02-03 14:40 ` Miquel Raynal -1 siblings, 0 replies; 12+ messages in thread From: Miquel Raynal @ 2026-02-03 14:40 UTC (permalink / raw) To: Cheng Ming Lin Cc: Vignesh Raghavendra, Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin Hello Cheng Ming, On 03/02/2026 at 10:13:57 +08, Cheng Ming Lin <linchengming884@gmail.com> wrote: > From: Cheng Ming Lin <chengminglin@mxic.com.tw> > > This patch adds support for the randomizer feature. > > It introduces a 'set_randomizer' callback in 'struct spinand_info' and > 'struct spinand_device'. > > If a driver implements this callback, the core will call it during > device initialization (spinand_init) to enable the randomizer. I recently had a request regarding the sunxi controller driver randomizer. I would like to get back to having a nand wide randomizer DT property, because a Macronix specific value honestly no longer makes sense. Randomizers have been there for ages, they are not so often used because scrambling data is not convenient for developers but they may have a real interest depending on the NAND chip or the external conditions. We will need two mutually exclusive optional properties in nand-chip.yaml: nand-enable-randomizer; nand-disable-randomizer; BTW, where is the patch adding the property to the bindings? Did we already merge it? I do not find it anymore. Looking at the current implementation, I really don't like the core always calling in the "init" and the manufacturer driver reading the DT and deciding whether or not it enables it. > Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw> > --- > drivers/mtd/nand/spi/core.c | 23 +++++++++++++++++++++++ > include/linux/mtd/spinand.h | 9 +++++++++ > 2 files changed, 32 insertions(+) > > diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c > index d207286572d8..4f8ff94f5ccc 100644 > --- a/drivers/mtd/nand/spi/core.c > +++ b/drivers/mtd/nand/spi/core.c > @@ -206,6 +206,12 @@ static int spinand_cont_read_enable(struct spinand_device *spinand, > return spinand->set_cont_read(spinand, enable); > } > > +static int spinand_randomizer_enable(struct spinand_device *spinand, > + bool enable) > +{ > + return spinand->set_randomizer(spinand, enable); This helper seems mostly useless. > +} > + > static int spinand_check_ecc_status(struct spinand_device *spinand, u8 status) > { > struct nand_device *nand = spinand_to_nand(spinand); > @@ -1218,6 +1224,19 @@ static int spinand_create_dirmaps(struct spinand_device *spinand) > return 0; > } > > +static int spinand_randomizer_init(struct spinand_device *spinand) > +{ > + int ret; > + > + if (spinand->set_randomizer) { > + ret = spinand_randomizer_enable(spinand, true); Please directly call the hook. Given the previous feedback, you should change "true" to be based on the presence of the DT property. > + if (ret) > + return ret; > + } > + > + return 0; > +} Rest LGTM. Thanks, Miquèl ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] mtd: spi-nand: Add support for randomizer @ 2026-02-03 14:40 ` Miquel Raynal 0 siblings, 0 replies; 12+ messages in thread From: Miquel Raynal @ 2026-02-03 14:40 UTC (permalink / raw) To: Cheng Ming Lin Cc: Vignesh Raghavendra, Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin Hello Cheng Ming, On 03/02/2026 at 10:13:57 +08, Cheng Ming Lin <linchengming884@gmail.com> wrote: > From: Cheng Ming Lin <chengminglin@mxic.com.tw> > > This patch adds support for the randomizer feature. > > It introduces a 'set_randomizer' callback in 'struct spinand_info' and > 'struct spinand_device'. > > If a driver implements this callback, the core will call it during > device initialization (spinand_init) to enable the randomizer. I recently had a request regarding the sunxi controller driver randomizer. I would like to get back to having a nand wide randomizer DT property, because a Macronix specific value honestly no longer makes sense. Randomizers have been there for ages, they are not so often used because scrambling data is not convenient for developers but they may have a real interest depending on the NAND chip or the external conditions. We will need two mutually exclusive optional properties in nand-chip.yaml: nand-enable-randomizer; nand-disable-randomizer; BTW, where is the patch adding the property to the bindings? Did we already merge it? I do not find it anymore. Looking at the current implementation, I really don't like the core always calling in the "init" and the manufacturer driver reading the DT and deciding whether or not it enables it. > Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw> > --- > drivers/mtd/nand/spi/core.c | 23 +++++++++++++++++++++++ > include/linux/mtd/spinand.h | 9 +++++++++ > 2 files changed, 32 insertions(+) > > diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c > index d207286572d8..4f8ff94f5ccc 100644 > --- a/drivers/mtd/nand/spi/core.c > +++ b/drivers/mtd/nand/spi/core.c > @@ -206,6 +206,12 @@ static int spinand_cont_read_enable(struct spinand_device *spinand, > return spinand->set_cont_read(spinand, enable); > } > > +static int spinand_randomizer_enable(struct spinand_device *spinand, > + bool enable) > +{ > + return spinand->set_randomizer(spinand, enable); This helper seems mostly useless. > +} > + > static int spinand_check_ecc_status(struct spinand_device *spinand, u8 status) > { > struct nand_device *nand = spinand_to_nand(spinand); > @@ -1218,6 +1224,19 @@ static int spinand_create_dirmaps(struct spinand_device *spinand) > return 0; > } > > +static int spinand_randomizer_init(struct spinand_device *spinand) > +{ > + int ret; > + > + if (spinand->set_randomizer) { > + ret = spinand_randomizer_enable(spinand, true); Please directly call the hook. Given the previous feedback, you should change "true" to be based on the presence of the DT property. > + if (ret) > + return ret; > + } > + > + return 0; > +} Rest LGTM. Thanks, Miquèl ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] mtd: spi-nand: Add support for randomizer 2026-02-03 14:40 ` Miquel Raynal @ 2026-02-04 1:47 ` Cheng Ming Lin -1 siblings, 0 replies; 12+ messages in thread From: Cheng Ming Lin @ 2026-02-04 1:47 UTC (permalink / raw) To: Miquel Raynal Cc: Vignesh Raghavendra, Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin Hi Miquel, Miquel Raynal <miquel.raynal@bootlin.com> 於 2026年2月3日週二 下午10:40寫道: > > Hello Cheng Ming, > > On 03/02/2026 at 10:13:57 +08, Cheng Ming Lin <linchengming884@gmail.com> wrote: > > > From: Cheng Ming Lin <chengminglin@mxic.com.tw> > > > > This patch adds support for the randomizer feature. > > > > It introduces a 'set_randomizer' callback in 'struct spinand_info' and > > 'struct spinand_device'. > > > > If a driver implements this callback, the core will call it during > > device initialization (spinand_init) to enable the randomizer. > > I recently had a request regarding the sunxi controller driver > randomizer. I would like to get back to having a nand wide randomizer DT > property, because a Macronix specific value honestly no longer makes > sense. Randomizers have been there for ages, they are not so often used > because scrambling data is not convenient for developers but they may > have a real interest depending on the NAND chip or the external > conditions. > > We will need two mutually exclusive optional properties in > nand-chip.yaml: > nand-enable-randomizer; > nand-disable-randomizer; Agreed. It makes sense to switch to generic device tree properties as you suggested. I will introduce nand-enable-randomizer and nand-disable-randomizer in nand-chip.yaml. In addition, I will also update the Macronix raw nand flash driver to use these generic randomizer properties for consistency. > > BTW, where is the patch adding the property to the bindings? Did we > already merge it? I do not find it anymore. It has not been merged yet. Since the current patch series uses the vendor-specific property "mxic,randomizer-enable", I did not include a patch to update the generic bindings. I will include a new patch in v5 to add these properties to nand-chip.yaml. > > Looking at the current implementation, I really don't like the core > always calling in the "init" and the manufacturer driver reading the DT > and deciding whether or not it enables it. I agree. I will refactor the logic in v5 so that the core parses the generic DT properties (nand-enable-randomizer and nand-disable-randomizer). Then, spinand_randomizer_init will determine the state and pass a boolean argument to the set_randomizer callback, leaving the driver to strictly handle the hardware configuration. > > > Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw> > > --- > > drivers/mtd/nand/spi/core.c | 23 +++++++++++++++++++++++ > > include/linux/mtd/spinand.h | 9 +++++++++ > > 2 files changed, 32 insertions(+) > > > > diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c > > index d207286572d8..4f8ff94f5ccc 100644 > > --- a/drivers/mtd/nand/spi/core.c > > +++ b/drivers/mtd/nand/spi/core.c > > @@ -206,6 +206,12 @@ static int spinand_cont_read_enable(struct spinand_device *spinand, > > return spinand->set_cont_read(spinand, enable); > > } > > > > +static int spinand_randomizer_enable(struct spinand_device *spinand, > > + bool enable) > > +{ > > + return spinand->set_randomizer(spinand, enable); > > This helper seems mostly useless. > > > +} > > + > > static int spinand_check_ecc_status(struct spinand_device *spinand, u8 status) > > { > > struct nand_device *nand = spinand_to_nand(spinand); > > @@ -1218,6 +1224,19 @@ static int spinand_create_dirmaps(struct spinand_device *spinand) > > return 0; > > } > > > > +static int spinand_randomizer_init(struct spinand_device *spinand) > > +{ > > + int ret; > > + > > + if (spinand->set_randomizer) { > > + ret = spinand_randomizer_enable(spinand, true); > > Please directly call the hook. > > Given the previous feedback, you should change "true" to be based on the > presence of the DT property. > > > + if (ret) > > + return ret; > > + } > > + > > + return 0; > > +} > > Rest LGTM. > > Thanks, > Miquèl Thanks, Cheng Ming Lin ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] mtd: spi-nand: Add support for randomizer @ 2026-02-04 1:47 ` Cheng Ming Lin 0 siblings, 0 replies; 12+ messages in thread From: Cheng Ming Lin @ 2026-02-04 1:47 UTC (permalink / raw) To: Miquel Raynal Cc: Vignesh Raghavendra, Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin Hi Miquel, Miquel Raynal <miquel.raynal@bootlin.com> 於 2026年2月3日週二 下午10:40寫道: > > Hello Cheng Ming, > > On 03/02/2026 at 10:13:57 +08, Cheng Ming Lin <linchengming884@gmail.com> wrote: > > > From: Cheng Ming Lin <chengminglin@mxic.com.tw> > > > > This patch adds support for the randomizer feature. > > > > It introduces a 'set_randomizer' callback in 'struct spinand_info' and > > 'struct spinand_device'. > > > > If a driver implements this callback, the core will call it during > > device initialization (spinand_init) to enable the randomizer. > > I recently had a request regarding the sunxi controller driver > randomizer. I would like to get back to having a nand wide randomizer DT > property, because a Macronix specific value honestly no longer makes > sense. Randomizers have been there for ages, they are not so often used > because scrambling data is not convenient for developers but they may > have a real interest depending on the NAND chip or the external > conditions. > > We will need two mutually exclusive optional properties in > nand-chip.yaml: > nand-enable-randomizer; > nand-disable-randomizer; Agreed. It makes sense to switch to generic device tree properties as you suggested. I will introduce nand-enable-randomizer and nand-disable-randomizer in nand-chip.yaml. In addition, I will also update the Macronix raw nand flash driver to use these generic randomizer properties for consistency. > > BTW, where is the patch adding the property to the bindings? Did we > already merge it? I do not find it anymore. It has not been merged yet. Since the current patch series uses the vendor-specific property "mxic,randomizer-enable", I did not include a patch to update the generic bindings. I will include a new patch in v5 to add these properties to nand-chip.yaml. > > Looking at the current implementation, I really don't like the core > always calling in the "init" and the manufacturer driver reading the DT > and deciding whether or not it enables it. I agree. I will refactor the logic in v5 so that the core parses the generic DT properties (nand-enable-randomizer and nand-disable-randomizer). Then, spinand_randomizer_init will determine the state and pass a boolean argument to the set_randomizer callback, leaving the driver to strictly handle the hardware configuration. > > > Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw> > > --- > > drivers/mtd/nand/spi/core.c | 23 +++++++++++++++++++++++ > > include/linux/mtd/spinand.h | 9 +++++++++ > > 2 files changed, 32 insertions(+) > > > > diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c > > index d207286572d8..4f8ff94f5ccc 100644 > > --- a/drivers/mtd/nand/spi/core.c > > +++ b/drivers/mtd/nand/spi/core.c > > @@ -206,6 +206,12 @@ static int spinand_cont_read_enable(struct spinand_device *spinand, > > return spinand->set_cont_read(spinand, enable); > > } > > > > +static int spinand_randomizer_enable(struct spinand_device *spinand, > > + bool enable) > > +{ > > + return spinand->set_randomizer(spinand, enable); > > This helper seems mostly useless. > > > +} > > + > > static int spinand_check_ecc_status(struct spinand_device *spinand, u8 status) > > { > > struct nand_device *nand = spinand_to_nand(spinand); > > @@ -1218,6 +1224,19 @@ static int spinand_create_dirmaps(struct spinand_device *spinand) > > return 0; > > } > > > > +static int spinand_randomizer_init(struct spinand_device *spinand) > > +{ > > + int ret; > > + > > + if (spinand->set_randomizer) { > > + ret = spinand_randomizer_enable(spinand, true); > > Please directly call the hook. > > Given the previous feedback, you should change "true" to be based on the > presence of the DT property. > > > + if (ret) > > + return ret; > > + } > > + > > + return 0; > > +} > > Rest LGTM. > > Thanks, > Miquèl Thanks, Cheng Ming Lin ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] mtd: spi-nand: Add support for randomizer 2026-02-04 1:47 ` Cheng Ming Lin @ 2026-02-04 8:33 ` Miquel Raynal -1 siblings, 0 replies; 12+ messages in thread From: Miquel Raynal @ 2026-02-04 8:33 UTC (permalink / raw) To: Cheng Ming Lin Cc: Vignesh Raghavendra, Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin Hi Cheng Ming, >> Looking at the current implementation, I really don't like the core >> always calling in the "init" and the manufacturer driver reading the DT >> and deciding whether or not it enables it. > > I agree. I will refactor the logic in v5 so that the core parses the > generic DT properties (nand-enable-randomizer and > nand-disable-randomizer). > > Then, spinand_randomizer_init will determine the state and pass a > boolean argument to the set_randomizer callback, leaving the driver > to strictly handle the hardware configuration. Perfect. Thanks, Miquèl ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] mtd: spi-nand: Add support for randomizer @ 2026-02-04 8:33 ` Miquel Raynal 0 siblings, 0 replies; 12+ messages in thread From: Miquel Raynal @ 2026-02-04 8:33 UTC (permalink / raw) To: Cheng Ming Lin Cc: Vignesh Raghavendra, Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin Hi Cheng Ming, >> Looking at the current implementation, I really don't like the core >> always calling in the "init" and the manufacturer driver reading the DT >> and deciding whether or not it enables it. > > I agree. I will refactor the logic in v5 so that the core parses the > generic DT properties (nand-enable-randomizer and > nand-disable-randomizer). > > Then, spinand_randomizer_init will determine the state and pass a > boolean argument to the set_randomizer callback, leaving the driver > to strictly handle the hardware configuration. Perfect. Thanks, Miquèl ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 2/2] mtd: spi-nand: macronix: Enable randomizer support 2026-02-03 2:13 ` Cheng Ming Lin @ 2026-02-03 2:13 ` Cheng Ming Lin -1 siblings, 0 replies; 12+ messages in thread From: Cheng Ming Lin @ 2026-02-03 2:13 UTC (permalink / raw) To: Miquel Raynal, Vignesh Raghavendra Cc: Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin From: Cheng Ming Lin <chengminglin@mxic.com.tw> Implement the 'set_randomizer' callback for Macronix SPI NAND chips. This feature is controlled via the "mxic,randomizer-enable" device tree property. The randomizer is enabled by setting bit 1 of the Configuration Register (address 0x10). This patch adds support for the following chips: - MX35LFxG24AD series - MX35UFxG24AD series When the randomizer is enabled, data is scrambled internally during program operations and automatically descrambled during read operations. This helps reduce bit errors caused by program disturbance. Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw> --- drivers/mtd/nand/spi/macronix.c | 47 ++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c index edf63b9996cf..0212d44b1a3f 100644 --- a/drivers/mtd/nand/spi/macronix.c +++ b/drivers/mtd/nand/spi/macronix.c @@ -14,6 +14,8 @@ #define MACRONIX_ECCSR_BF_LAST_PAGE(eccsr) FIELD_GET(GENMASK(3, 0), eccsr) #define MACRONIX_ECCSR_BF_ACCUMULATED_PAGES(eccsr) FIELD_GET(GENMASK(7, 4), eccsr) #define MACRONIX_CFG_CONT_READ BIT(2) +#define MACRONIX_CFG_RANDOMIZER_EN BIT(1) +#define MACRONIX_FEATURE_ADDR_RANDOMIZER 0x10 #define MACRONIX_FEATURE_ADDR_READ_RETRY 0x70 #define MACRONIX_NUM_READ_RETRY_MODES 5 @@ -155,6 +157,21 @@ static int macronix_set_read_retry(struct spinand_device *spinand, return spi_mem_exec_op(spinand->spimem, &op); } +static int macronix_set_randomizer(struct spinand_device *spinand, bool enable) +{ + struct device_node *np = spinand->spimem->spi->dev.of_node; + int ret; + + if (of_property_read_bool(np, "mxic,randomizer-enable")) { + ret = spinand_write_reg_op(spinand, MACRONIX_FEATURE_ADDR_RANDOMIZER, + enable ? MACRONIX_CFG_RANDOMIZER_EN : 0); + if (ret) + return ret; + } + + return 0; +} + static const struct spinand_info macronix_spinand_table[] = { SPINAND_INFO("MX35LF1GE4AB", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x12), @@ -213,7 +230,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_QE_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35LF2G24AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x24, 0x03), NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1), @@ -225,7 +243,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_PROG_PLANE_SELECT_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35LF2G24AD-Z4I8", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x64, 0x03), NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), @@ -236,7 +255,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_QE_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35LF4G24AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x35, 0x03), NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 2, 1, 1), @@ -248,7 +268,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_PROG_PLANE_SELECT_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35LF4G24AD-Z4I8", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x75, 0x03), NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1), @@ -259,7 +280,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_QE_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX31LF1GE4BC", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x1e), NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), @@ -305,7 +327,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF4G24AD-Z4I8", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xf5, 0x03), NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1), @@ -317,7 +340,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF4GE4AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb7, 0x03), NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1), @@ -355,7 +379,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF2G24AD-Z4I8", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xe4, 0x03), NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), @@ -367,7 +392,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF2GE4AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa6, 0x03), NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), @@ -413,7 +439,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF1GE4AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x96, 0x03), NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), -- 2.25.1 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/ ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 2/2] mtd: spi-nand: macronix: Enable randomizer support @ 2026-02-03 2:13 ` Cheng Ming Lin 0 siblings, 0 replies; 12+ messages in thread From: Cheng Ming Lin @ 2026-02-03 2:13 UTC (permalink / raw) To: Miquel Raynal, Vignesh Raghavendra Cc: Richard Weinberger, Tudor Ambarus, Martin Kurbanov, Mikhail Kshevetskiy, Pratyush Yadav, linux-mtd, linux-kernel, alvinzhou, Cheng Ming Lin From: Cheng Ming Lin <chengminglin@mxic.com.tw> Implement the 'set_randomizer' callback for Macronix SPI NAND chips. This feature is controlled via the "mxic,randomizer-enable" device tree property. The randomizer is enabled by setting bit 1 of the Configuration Register (address 0x10). This patch adds support for the following chips: - MX35LFxG24AD series - MX35UFxG24AD series When the randomizer is enabled, data is scrambled internally during program operations and automatically descrambled during read operations. This helps reduce bit errors caused by program disturbance. Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw> --- drivers/mtd/nand/spi/macronix.c | 47 ++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c index edf63b9996cf..0212d44b1a3f 100644 --- a/drivers/mtd/nand/spi/macronix.c +++ b/drivers/mtd/nand/spi/macronix.c @@ -14,6 +14,8 @@ #define MACRONIX_ECCSR_BF_LAST_PAGE(eccsr) FIELD_GET(GENMASK(3, 0), eccsr) #define MACRONIX_ECCSR_BF_ACCUMULATED_PAGES(eccsr) FIELD_GET(GENMASK(7, 4), eccsr) #define MACRONIX_CFG_CONT_READ BIT(2) +#define MACRONIX_CFG_RANDOMIZER_EN BIT(1) +#define MACRONIX_FEATURE_ADDR_RANDOMIZER 0x10 #define MACRONIX_FEATURE_ADDR_READ_RETRY 0x70 #define MACRONIX_NUM_READ_RETRY_MODES 5 @@ -155,6 +157,21 @@ static int macronix_set_read_retry(struct spinand_device *spinand, return spi_mem_exec_op(spinand->spimem, &op); } +static int macronix_set_randomizer(struct spinand_device *spinand, bool enable) +{ + struct device_node *np = spinand->spimem->spi->dev.of_node; + int ret; + + if (of_property_read_bool(np, "mxic,randomizer-enable")) { + ret = spinand_write_reg_op(spinand, MACRONIX_FEATURE_ADDR_RANDOMIZER, + enable ? MACRONIX_CFG_RANDOMIZER_EN : 0); + if (ret) + return ret; + } + + return 0; +} + static const struct spinand_info macronix_spinand_table[] = { SPINAND_INFO("MX35LF1GE4AB", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x12), @@ -213,7 +230,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_QE_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35LF2G24AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x24, 0x03), NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1), @@ -225,7 +243,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_PROG_PLANE_SELECT_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35LF2G24AD-Z4I8", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x64, 0x03), NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), @@ -236,7 +255,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_QE_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35LF4G24AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x35, 0x03), NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 2, 1, 1), @@ -248,7 +268,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_PROG_PLANE_SELECT_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35LF4G24AD-Z4I8", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x75, 0x03), NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1), @@ -259,7 +280,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_HAS_QE_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX31LF1GE4BC", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x1e), NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), @@ -305,7 +327,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF4G24AD-Z4I8", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xf5, 0x03), NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1), @@ -317,7 +340,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF4GE4AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb7, 0x03), NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1), @@ -355,7 +379,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF2G24AD-Z4I8", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xe4, 0x03), NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), @@ -367,7 +392,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF2GE4AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa6, 0x03), NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), @@ -413,7 +439,8 @@ static const struct spinand_info macronix_spinand_table[] = { SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, macronix_ecc_get_status), SPINAND_READ_RETRY(MACRONIX_NUM_READ_RETRY_MODES, - macronix_set_read_retry)), + macronix_set_read_retry), + SPINAND_RANDOMIZER(macronix_set_randomizer)), SPINAND_INFO("MX35UF1GE4AD", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x96, 0x03), NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), -- 2.25.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-02-04 8:34 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-02-03 2:13 [PATCH v4 0/2] mtd: spi-nand: Add support for randomizer feature Cheng Ming Lin 2026-02-03 2:13 ` Cheng Ming Lin 2026-02-03 2:13 ` [PATCH v4 1/2] mtd: spi-nand: Add support for randomizer Cheng Ming Lin 2026-02-03 2:13 ` Cheng Ming Lin 2026-02-03 14:40 ` Miquel Raynal 2026-02-03 14:40 ` Miquel Raynal 2026-02-04 1:47 ` Cheng Ming Lin 2026-02-04 1:47 ` Cheng Ming Lin 2026-02-04 8:33 ` Miquel Raynal 2026-02-04 8:33 ` Miquel Raynal 2026-02-03 2:13 ` [PATCH v4 2/2] mtd: spi-nand: macronix: Enable randomizer support Cheng Ming Lin 2026-02-03 2:13 ` Cheng Ming Lin
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.