Re: [PATCH v5 3/3] mtd: spi-nand: macronix: Enable randomizer support
From: Cheng Ming Lin
Date: Mon Feb 23 2026 - 00:52:58 EST
Hi Miquel,
Miquel Raynal <miquel.raynal@xxxxxxxxxxx> 於 2026年2月12日週四 下午6:55寫道:
>
> On 11/02/2026 at 18:05:53 +08, Cheng Ming Lin <linchengming884@xxxxxxxxx> wrote:
>
> > From: Cheng Ming Lin <chengminglin@xxxxxxxxxxx>
> >
> > Implement the 'set_randomizer' callback for Macronix SPI NAND chips.
> > 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@xxxxxxxxxxx>
> > ---
> > drivers/mtd/nand/spi/macronix.c | 46 +++++++++++++++++++++++++--------
> > 1 file changed, 35 insertions(+), 11 deletions(-)
> >
> > diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c
> > index edf63b9996cf..3a9ab146426b 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
> >
> > @@ -146,7 +148,7 @@ static int macronix_set_cont_read(struct spinand_device *spinand, bool enable)
> > * Return: 0 on success, a negative error code otherwise.
> > */
> > static int macronix_set_read_retry(struct spinand_device *spinand,
> > - unsigned int retry_mode)
> > + unsigned int retry_mode)
>
> This is unrelated, it should be in an other commit.
>
> > {
> > struct spi_mem_op op = SPINAND_SET_FEATURE_1S_1S_1S_OP(MACRONIX_FEATURE_ADDR_READ_RETRY,
> > spinand->scratchbuf);
> > @@ -155,6 +157,18 @@ 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)
> > +{
> > + int ret;
> > +
> > + ret = spinand_write_reg_op(spinand, MACRONIX_FEATURE_ADDR_RANDOMIZER,
> > + enable ? MACRONIX_CFG_RANDOMIZER_EN :
> > 0);
>
> You can directly return. Same in the core BTW.
Sure, I will fix it and send v6.
>
> Otherwise with this and the binding document fixed, looks ok.
>
> Thanks,
> Miquèl
Thanks,
Cheng Ming Lin