From: Miquel Raynal <miquel.raynal@bootlin.com>
To: JaimeLiao <jaimeliao.tw@gmail.com>
Cc: u-boot@lists.denx.de, jagan@amarulasolutions.com,
vigneshr@ti.com, zhengxunli@mxic.com.tw, jaimeliao@mxic.com.tw
Subject: Re: [PATCH v6 1/4] mtd: spi-nor: macronix: add support for Macronix Octal
Date: Mon, 3 Jan 2022 10:30:54 +0100 [thread overview]
Message-ID: <20220103102858.23131890@xps13> (raw)
In-Reply-To: <20211229055620.1466-2-jaimeliao.tw@gmail.com>
Hi Jaime,
You made a typo on Jagan's address, you might need to resend.
The title does not look correct, maybe you miss a word after Octal. And
is it something Macronix specific? I believe this is generic and you
can drop "Macronix" (the second occurrence) from the title.
jaimeliao.tw@gmail.com wrote on Wed, 29 Dec 2021 13:56:17 +0800:
> Follow patch "f6adec1af4b2f5d3012480c6cdce7743b74a6156" for adding
When pointing to an upstream commit I think even in U-Boot the style
should be something like:
<12-digit hash> ("title of the commit")
which at least allows to know which commit we are talking about.
> Macronix flash in Octal DTR mode.
This first part of the commit log should be moved below.
>
> Enable Octal DTR mode with 20 dummy cycles to allow running at the
> maximum supported frequency.
> -https://www.mxic.com.tw/Lists/Datasheet/Attachments/7841/MX25LM51245G,%203V,%20512Mb,%20v1.1.pdf
>
> Signed-off-by: JaimeLiao <jaimeliao.tw@gmail.com>
> ---
> drivers/mtd/spi/spi-nor-core.c | 83 ++++++++++++++++++++++++++++++++++
> include/linux/mtd/spi-nor.h | 12 ++++-
> 2 files changed, 93 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
> index d5d905fa5a..0a6550984b 100644
> --- a/drivers/mtd/spi/spi-nor-core.c
> +++ b/drivers/mtd/spi/spi-nor-core.c
> @@ -3489,6 +3489,85 @@ static struct spi_nor_fixups mt35xu512aba_fixups = {
> };
> #endif /* CONFIG_SPI_FLASH_MT35XU */
>
> +#if CONFIG_IS_ENABLED(SPI_FLASH_MACRONIX)
> +/**
> + * spi_nor_macronix_octal_dtr_enable() - set DTR OPI Enable bit in Configuration Register 2.
This is very specific to Macronix I believe? Please just use a generic
description here.
> + * @nor: pointer to a 'struct spi_nor'
> + *
> + * Set the DTR OPI Enable (DOPI) bit in Configuration Register 2.
> + * Bit 2 of Configuration Register 2 is the DOPI bit for Macronix like OPI memories.
> + *
> + * Return: 0 on success, -errno otherwise.
> + */
> +static int spi_nor_macronix_octal_dtr_enable(struct spi_nor *nor)
> +{
> + struct spi_mem_op op;
> + int ret;
> + u8 buf;
> +
> + ret = write_enable(nor);
> + if (ret)
> + return ret;
> +
> + buf = SPINOR_REG_MXIC_DC_20;
> + op = (struct spi_mem_op)
> + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WR_CR2, 1),
> + SPI_MEM_OP_ADDR(4, SPINOR_REG_MXIC_CR2_DC, 1),
> + SPI_MEM_OP_NO_DUMMY,
> + SPI_MEM_OP_DATA_OUT(1, &buf, 1));
> +
> + ret = spi_mem_exec_op(nor->spi, &op);
> + if (ret)
> + return ret;
> +
> + ret = spi_nor_wait_till_ready(nor);
> + if (ret)
> + return ret;
> +
> + nor->read_dummy = MXIC_MAX_DC;
> + ret = write_enable(nor);
> + if (ret)
> + return ret;
> +
> + buf = SPINOR_REG_MXIC_OPI_DTR_EN;
> + op = (struct spi_mem_op)
> + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WR_CR2, 1),
> + SPI_MEM_OP_ADDR(4, SPINOR_REG_MXIC_CR2_MODE, 1),
> + SPI_MEM_OP_NO_DUMMY,
> + SPI_MEM_OP_DATA_OUT(1, &buf, 1));
> +
> + ret = spi_mem_exec_op(nor->spi, &op);
> + if (ret) {
> + dev_err(nor->dev, "Failed to enable octal DTR mode\n");
> + return ret;
> + }
> + nor->reg_proto = SNOR_PROTO_8_8_8_DTR;
> +
> + return 0;
> +}
> +
> +static void macronix_octal_default_init(struct spi_nor *nor)
> +{
> + nor->octal_dtr_enable = spi_nor_macronix_octal_dtr_enable;
> +}
> +
> +static void macronix_octal_post_sfdp_fixup(struct spi_nor *nor,
> + struct spi_nor_flash_parameter *params)
> +{
> + /*
> + * Adding SNOR_HWCAPS_PP_8_8_8_DTR in hwcaps.mask when
> + * SPI_NOR_OCTAL_DTR_READ flag exists.
> + */
> + if (params->hwcaps.mask & SNOR_HWCAPS_READ_8_8_8_DTR)
> + params->hwcaps.mask |= SNOR_HWCAPS_PP_8_8_8_DTR;
> +}
> +
> +static struct spi_nor_fixups macronix_octal_fixups = {
> + .default_init = macronix_octal_default_init,
> + .post_sfdp = macronix_octal_post_sfdp_fixup,
> +};
> +#endif /* CONFIG_SPI_FLASH_MACRONIX */
> +
> /** spi_nor_octal_dtr_enable() - enable Octal DTR I/O if needed
> * @nor: pointer to a 'struct spi_nor'
> *
> @@ -3655,6 +3734,10 @@ void spi_nor_set_fixups(struct spi_nor *nor)
> if (!strcmp(nor->info->name, "mt35xu512aba"))
> nor->fixups = &mt35xu512aba_fixups;
> #endif
> +
> +#if CONFIG_IS_ENABLED(SPI_FLASH_MACRONIX)
> + nor->fixups = ¯onix_octal_fixups;
> +#endif /* SPI_FLASH_MACRONIX */
> }
>
> int spi_nor_scan(struct spi_nor *nor)
> diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
> index 7ddc4ba2bf..8682368f2f 100644
> --- a/include/linux/mtd/spi-nor.h
> +++ b/include/linux/mtd/spi-nor.h
> @@ -116,8 +116,16 @@
> #define XSR_RDY BIT(7) /* Ready */
>
> /* Used for Macronix and Winbond flashes. */
> -#define SPINOR_OP_EN4B 0xb7 /* Enter 4-byte mode */
> -#define SPINOR_OP_EX4B 0xe9 /* Exit 4-byte mode */
> +#define SPINOR_OP_EN4B 0xb7 /* Enter 4-byte mode */
> +#define SPINOR_OP_EX4B 0xe9 /* Exit 4-byte mode */
> +#define SPINOR_OP_RD_CR2 0x71 /* Read configuration register 2 */
> +#define SPINOR_OP_WR_CR2 0x72 /* Write configuration register 2 */
> +#define SPINOR_OP_MXIC_DTR_RD 0xee /* Fast Read opcode in DTR mode */
> +#define SPINOR_REG_MXIC_CR2_MODE 0x00000000 /* For setting octal DTR mode */
> +#define SPINOR_REG_MXIC_OPI_DTR_EN 0x2 /* Enable Octal DTR */
> +#define SPINOR_REG_MXIC_CR2_DC 0x00000300 /* For setting dummy cycles */
> +#define SPINOR_REG_MXIC_DC_20 0x0 /* Setting dummy cycles to 20 */
> +#define MXIC_MAX_DC 20 /* Maximum value of dummy cycles */
>
> /* Used for Spansion flashes only. */
> #define SPINOR_OP_BRWR 0x17 /* Bank register write */
Thanks,
Miquèl
next prev parent reply other threads:[~2022-01-03 9:31 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-29 5:56 [PATCH v6 0/4] Add octal DTR support for Macronix flash JaimeLiao
2021-12-29 5:56 ` [PATCH v6 1/4] mtd: spi-nor: macronix: add support for Macronix Octal JaimeLiao
2022-01-03 9:30 ` Miquel Raynal [this message]
2022-01-06 1:20 ` liao jaime
2022-01-03 10:38 ` Tudor.Ambarus
2022-01-06 1:57 ` liao jaime
2022-01-10 5:27 ` Pratyush Yadav
2021-12-29 5:56 ` [PATCH v6 2/4] mtd: spi-nor-core: Adding different type of command extension in Soft Reset JaimeLiao
2021-12-29 5:56 ` [PATCH v6 3/4] mtd: spi-nor-core: Add support for Macronix Octal flash JaimeLiao
2022-01-03 10:47 ` Tudor.Ambarus
2022-01-10 5:29 ` Pratyush Yadav
2022-01-14 3:08 ` liao jaime
2021-12-29 5:56 ` [PATCH v6 4/4] mtd: spi-nor: Parse SFDP SCCR Map JaimeLiao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220103102858.23131890@xps13 \
--to=miquel.raynal@bootlin.com \
--cc=jagan@amarulasolutions.com \
--cc=jaimeliao.tw@gmail.com \
--cc=jaimeliao@mxic.com.tw \
--cc=u-boot@lists.denx.de \
--cc=vigneshr@ti.com \
--cc=zhengxunli@mxic.com.tw \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox