[PATCH 1/2] mtd: spi-nor: cadence-quadspi: Refactor indirect read/write sequence.
Cyrille Pitchen
cyrille.pitchen at wedev4u.fr
Wed Dec 20 07:00:20 PST 2017
Hi Vignesh,
Le 07/12/2017 à 07:38, Vignesh R a écrit :
> Move configuring of indirect read/write start address to
> cqspi_indirect_*_execute() function and rename cqspi_indirect_*_setup()
> function. This will help to reuse cqspi_indirect_*_setup() function for
> supporting direct access mode.
>
> Signed-off-by: Vignesh R <vigneshr at ti.com>
This patch looks good to me.
Best regards,
Cyrille
> ---
> drivers/mtd/spi-nor/cadence-quadspi.c | 27 ++++++++++++---------------
> 1 file changed, 12 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c
> index 75a2bc447a99..becc7d714ab8 100644
> --- a/drivers/mtd/spi-nor/cadence-quadspi.c
> +++ b/drivers/mtd/spi-nor/cadence-quadspi.c
> @@ -450,8 +450,7 @@ static int cqspi_command_write_addr(struct spi_nor *nor,
> return cqspi_exec_flash_cmd(cqspi, reg);
> }
>
> -static int cqspi_indirect_read_setup(struct spi_nor *nor,
> - const unsigned int from_addr)
> +static int cqspi_read_setup(struct spi_nor *nor)
> {
> struct cqspi_flash_pdata *f_pdata = nor->priv;
> struct cqspi_st *cqspi = f_pdata->cqspi;
> @@ -459,7 +458,6 @@ static int cqspi_indirect_read_setup(struct spi_nor *nor,
> unsigned int dummy_clk = 0;
> unsigned int reg;
>
> - writel(from_addr, reg_base + CQSPI_REG_INDIRECTRDSTARTADDR);
>
> reg = nor->read_opcode << CQSPI_REG_RD_INSTR_OPCODE_LSB;
> reg |= cqspi_calc_rdreg(nor, nor->read_opcode);
> @@ -493,8 +491,8 @@ static int cqspi_indirect_read_setup(struct spi_nor *nor,
> return 0;
> }
>
> -static int cqspi_indirect_read_execute(struct spi_nor *nor,
> - u8 *rxbuf, const unsigned n_rx)
> +static int cqspi_indirect_read_execute(struct spi_nor *nor, u8 *rxbuf,
> + loff_t from_addr, const size_t n_rx)
> {
> struct cqspi_flash_pdata *f_pdata = nor->priv;
> struct cqspi_st *cqspi = f_pdata->cqspi;
> @@ -504,6 +502,7 @@ static int cqspi_indirect_read_execute(struct spi_nor *nor,
> unsigned int bytes_to_read = 0;
> int ret = 0;
>
> + writel(from_addr, reg_base + CQSPI_REG_INDIRECTRDSTARTADDR);
> writel(remaining, reg_base + CQSPI_REG_INDIRECTRDBYTES);
>
> /* Clear all interrupts. */
> @@ -570,8 +569,7 @@ static int cqspi_indirect_read_execute(struct spi_nor *nor,
> return ret;
> }
>
> -static int cqspi_indirect_write_setup(struct spi_nor *nor,
> - const unsigned int to_addr)
> +static int cqspi_write_setup(struct spi_nor *nor)
> {
> unsigned int reg;
> struct cqspi_flash_pdata *f_pdata = nor->priv;
> @@ -584,8 +582,6 @@ static int cqspi_indirect_write_setup(struct spi_nor *nor,
> reg = cqspi_calc_rdreg(nor, nor->program_opcode);
> writel(reg, reg_base + CQSPI_REG_RD_INSTR);
>
> - writel(to_addr, reg_base + CQSPI_REG_INDIRECTWRSTARTADDR);
> -
> reg = readl(reg_base + CQSPI_REG_SIZE);
> reg &= ~CQSPI_REG_SIZE_ADDRESS_MASK;
> reg |= (nor->addr_width - 1);
> @@ -593,8 +589,8 @@ static int cqspi_indirect_write_setup(struct spi_nor *nor,
> return 0;
> }
>
> -static int cqspi_indirect_write_execute(struct spi_nor *nor,
> - const u8 *txbuf, const unsigned n_tx)
> +static int cqspi_indirect_write_execute(struct spi_nor *nor, loff_t to_addr,
> + const u8 *txbuf, const size_t n_tx)
> {
> const unsigned int page_size = nor->page_size;
> struct cqspi_flash_pdata *f_pdata = nor->priv;
> @@ -604,6 +600,7 @@ static int cqspi_indirect_write_execute(struct spi_nor *nor,
> unsigned int write_bytes;
> int ret;
>
> + writel(to_addr, reg_base + CQSPI_REG_INDIRECTWRSTARTADDR);
> writel(remaining, reg_base + CQSPI_REG_INDIRECTWRBYTES);
>
> /* Clear all interrupts. */
> @@ -900,11 +897,11 @@ static ssize_t cqspi_write(struct spi_nor *nor, loff_t to,
> if (ret)
> return ret;
>
> - ret = cqspi_indirect_write_setup(nor, to);
> + ret = cqspi_write_setup(nor);
> if (ret)
> return ret;
>
> - ret = cqspi_indirect_write_execute(nor, buf, len);
> + ret = cqspi_indirect_write_execute(nor, to, buf, len);
> if (ret)
> return ret;
>
> @@ -920,11 +917,11 @@ static ssize_t cqspi_read(struct spi_nor *nor, loff_t from,
> if (ret)
> return ret;
>
> - ret = cqspi_indirect_read_setup(nor, from);
> + ret = cqspi_read_setup(nor);
> if (ret)
> return ret;
>
> - ret = cqspi_indirect_read_execute(nor, buf, len);
> + ret = cqspi_indirect_read_execute(nor, buf, from, len);
> if (ret)
> return ret;
>
>
More information about the linux-mtd
mailing list