From: Michael Walle <michael@walle.cc> To: Tudor Ambarus <tudor.ambarus@microchip.com> Cc: p.yadav@ti.com, miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com, linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, nicolas.ferre@microchip.com Subject: Re: [PATCH v3 9/9] mtd: spi-nor: Introduce templates for SPI NOR operations Date: Tue, 19 Apr 2022 13:45:31 +0200 [thread overview] Message-ID: <d912d9834a219162ef46efad7d332ef3@walle.cc> (raw) In-Reply-To: <20220411091033.98754-10-tudor.ambarus@microchip.com> Am 2022-04-11 11:10, schrieb Tudor Ambarus: > Clean the op declaration and hide the details of each op. With this it > results a cleanner, easier to read code. No functional change expected. > > Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> I haven't gone through all of it. Acked-by: Michael Walle <michael@walle.cc> > --- > v3: new patch taken from, no changes > https://lore.kernel.org/lkml/20220304093011.198173-1-tudor.ambarus@microchip.com/ > > drivers/mtd/spi-nor/core.c | 101 ++++++------------------------- > drivers/mtd/spi-nor/core.h | 102 ++++++++++++++++++++++++++++++++ > drivers/mtd/spi-nor/micron-st.c | 24 ++++---- > drivers/mtd/spi-nor/spansion.c | 26 +++++--- > drivers/mtd/spi-nor/xilinx.c | 12 ++-- > 5 files changed, 158 insertions(+), 107 deletions(-) > > diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c > index 42794328d3b6..fe853532204c 100644 > --- a/drivers/mtd/spi-nor/core.c > +++ b/drivers/mtd/spi-nor/core.c > @@ -359,11 +359,7 @@ int spi_nor_write_enable(struct spi_nor *nor) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREN, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_WREN_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -390,11 +386,7 @@ int spi_nor_write_disable(struct spi_nor *nor) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRDI, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_WRDI_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -454,11 +446,7 @@ int spi_nor_read_sr(struct spi_nor *nor, u8 *sr) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, sr, 0)); > + struct spi_mem_op op = SPI_NOR_RDSR_OP(sr); > > if (nor->reg_proto == SNOR_PROTO_8_8_8_DTR) { > op.addr.nbytes = nor->params->rdsr_addr_nbytes; > @@ -498,11 +486,7 @@ int spi_nor_read_cr(struct spi_nor *nor, u8 *cr) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDCR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, cr, 0)); > + struct spi_mem_op op = SPI_NOR_RDCR_OP(cr); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -531,14 +515,7 @@ int spi_nor_set_4byte_addr_mode(struct spi_nor > *nor, bool enable) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(enable ? > - SPINOR_OP_EN4B : > - SPINOR_OP_EX4B, > - 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_EN4B_EX4B_OP(enable); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -572,11 +549,7 @@ static int spansion_set_4byte_addr_mode(struct > spi_nor *nor, bool enable) > nor->bouncebuf[0] = enable << 7; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_BRWR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(1, nor->bouncebuf, 0)); > + struct spi_mem_op op = SPI_NOR_BRWR_OP(nor->bouncebuf); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -606,11 +579,7 @@ int spi_nor_write_ear(struct spi_nor *nor, u8 ear) > nor->bouncebuf[0] = ear; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREAR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(1, nor->bouncebuf, 0)); > + struct spi_mem_op op = SPI_NOR_WREAR_OP(nor->bouncebuf); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -721,11 +690,7 @@ int spi_nor_global_block_unlock(struct spi_nor > *nor) > return ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_GBULK, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_GBULK_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -760,11 +725,7 @@ int spi_nor_write_sr(struct spi_nor *nor, const > u8 *sr, size_t len) > return ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(len, sr, 0)); > + struct spi_mem_op op = SPI_NOR_WRSR_OP(sr, len); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -964,11 +925,7 @@ static int spi_nor_write_sr2(struct spi_nor *nor, > const u8 *sr2) > return ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR2, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(1, sr2, 0)); > + struct spi_mem_op op = SPI_NOR_WRSR2_OP(sr2); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -1000,11 +957,7 @@ static int spi_nor_read_sr2(struct spi_nor *nor, > u8 *sr2) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR2, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, sr2, 0)); > + struct spi_mem_op op = SPI_NOR_RDSR2_OP(sr2); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -1033,11 +986,7 @@ static int spi_nor_erase_chip(struct spi_nor > *nor) > dev_dbg(nor->dev, " %lldKiB\n", (long long)(nor->mtd.size >> 10)); > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CHIP_ERASE, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_CHIP_ERASE_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->write_proto); > > @@ -1179,10 +1128,8 @@ int spi_nor_erase_sector(struct spi_nor *nor, > u32 addr) > > if (nor->spimem) { > struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(nor->erase_opcode, 0), > - SPI_MEM_OP_ADDR(nor->addr_width, addr, 0), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + SPI_NOR_SECTOR_ERASE_OP(nor->erase_opcode, > + nor->addr_width, addr); > > spi_nor_spimem_setup_op(nor, &op, nor->write_proto); > > @@ -1978,10 +1925,7 @@ static int spi_nor_spimem_check_op(struct > spi_nor *nor, > static int spi_nor_spimem_check_readop(struct spi_nor *nor, > const struct spi_nor_read_command *read) > { > - struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(read->opcode, 0), > - SPI_MEM_OP_ADDR(3, 0, 0), > - SPI_MEM_OP_DUMMY(1, 0), > - SPI_MEM_OP_DATA_IN(2, NULL, 0)); > + struct spi_mem_op op = SPI_NOR_READ_OP(read->opcode); > > spi_nor_spimem_setup_op(nor, &op, read->proto); > > @@ -2004,10 +1948,7 @@ static int spi_nor_spimem_check_readop(struct > spi_nor *nor, > static int spi_nor_spimem_check_pp(struct spi_nor *nor, > const struct spi_nor_pp_command *pp) > { > - struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(pp->opcode, 0), > - SPI_MEM_OP_ADDR(3, 0, 0), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(2, NULL, 0)); > + struct spi_mem_op op = SPI_NOR_PP_OP(pp->opcode); > > spi_nor_spimem_setup_op(nor, &op, pp->proto); > > @@ -2831,10 +2772,7 @@ static void spi_nor_soft_reset(struct spi_nor > *nor) > struct spi_mem_op op; > int ret; > > - op = (struct spi_mem_op)SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_SRSTEN, > 0), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DATA); > + op = (struct spi_mem_op)SPINOR_SRSTEN_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -2844,10 +2782,7 @@ static void spi_nor_soft_reset(struct spi_nor > *nor) > return; > } > > - op = (struct spi_mem_op)SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_SRST, 0), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DATA); > + op = (struct spi_mem_op)SPINOR_SRST_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h > index 7c704475946d..8b7e597fd38c 100644 > --- a/drivers/mtd/spi-nor/core.h > +++ b/drivers/mtd/spi-nor/core.h > @@ -18,6 +18,108 @@ > SPI_MEM_OP_DUMMY(ndummy, 0), \ > SPI_MEM_OP_DATA_IN(len, buf, 0)) > > +#define SPI_NOR_WREN_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREN, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_WRDI_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRDI, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_RDSR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > +#define SPI_NOR_WRSR_OP(buf, len) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(len, buf, 0)) > + > +#define SPI_NOR_RDSR2_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR2, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(1, buf, 0)) > + > +#define SPI_NOR_WRSR2_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR2, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(1, buf, 0)) > + > +#define SPI_NOR_RDCR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDCR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > +#define SPI_NOR_EN4B_EX4B_OP(enable) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(enable ? SPINOR_OP_EN4B : SPINOR_OP_EX4B, > 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_BRWR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_BRWR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(1, buf, 0)) > + > +#define SPI_NOR_WREAR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREAR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(1, buf, 0)) > + > +#define SPI_NOR_GBULK_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_GBULK, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_CHIP_ERASE_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CHIP_ERASE, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_SECTOR_ERASE_OP(opcode, addr_width, addr) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(opcode, 0), \ > + SPI_MEM_OP_ADDR(addr_width, addr, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_READ_OP(opcode) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(opcode, 0), \ > + SPI_MEM_OP_ADDR(3, 0, 0), \ > + SPI_MEM_OP_DUMMY(1, 0), \ > + SPI_MEM_OP_DATA_IN(2, NULL, 0)) > + > +#define SPI_NOR_PP_OP(opcode) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(opcode, 0), \ > + SPI_MEM_OP_ADDR(3, 0, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(2, NULL, 0)) > + > +#define SPINOR_SRSTEN_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_SRSTEN, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPINOR_SRST_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_SRST, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DATA) > + > enum spi_nor_option_flags { > SNOR_F_HAS_SR_TB = BIT(0), > SNOR_F_NO_OP_CHIP_ERASE = BIT(1), > diff --git a/drivers/mtd/spi-nor/micron-st.c > b/drivers/mtd/spi-nor/micron-st.c > index a447762c0d78..26b9a1c2309d 100644 > --- a/drivers/mtd/spi-nor/micron-st.c > +++ b/drivers/mtd/spi-nor/micron-st.c > @@ -35,6 +35,18 @@ > SPI_MEM_OP_NO_DUMMY, \ > SPI_MEM_OP_DATA_OUT(ndata, buf, 0)) > > +#define MICRON_ST_RDFSR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDFSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > +#define MICRON_ST_CLFSR_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLFSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > static int micron_st_nor_octal_dtr_en(struct spi_nor *nor) > { > struct spi_mem_op op; > @@ -324,11 +336,7 @@ static int micron_st_nor_read_fsr(struct spi_nor > *nor, u8 *fsr) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDFSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, fsr, 0)); > + struct spi_mem_op op = MICRON_ST_RDFSR_OP(fsr); > > if (nor->reg_proto == SNOR_PROTO_8_8_8_DTR) { > op.addr.nbytes = nor->params->rdsr_addr_nbytes; > @@ -363,11 +371,7 @@ static void micron_st_nor_clear_fsr(struct spi_nor > *nor) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLFSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = MICRON_ST_CLFSR_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > diff --git a/drivers/mtd/spi-nor/spansion.c > b/drivers/mtd/spi-nor/spansion.c > index 35d8edb515a3..952db7af6932 100644 > --- a/drivers/mtd/spi-nor/spansion.c > +++ b/drivers/mtd/spi-nor/spansion.c > @@ -30,6 +30,18 @@ > SPI_MEM_OP_NO_DUMMY, \ > SPI_MEM_OP_DATA_OUT(ndata, buf, 0)) > > +#define CYPRESS_NOR_RD_ANY_REG_OP(naddr, addr, buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RD_ANY_REG, 0), \ > + SPI_MEM_OP_ADDR(naddr, addr, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > +#define SPANSION_CLSR_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > static int cypress_nor_octal_dtr_en(struct spi_nor *nor) > { > struct spi_mem_op op; > @@ -165,12 +177,12 @@ static int s28hs512t_post_bfpt_fixup(struct > spi_nor *nor, > * CFR3V[4] and set the correct size. > */ > struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RD_ANY_REG, 1), > - SPI_MEM_OP_ADDR(3, SPINOR_REG_CYPRESS_CFR3V, 1), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, nor->bouncebuf, 1)); > + CYPRESS_NOR_RD_ANY_REG_OP(3, SPINOR_REG_CYPRESS_CFR3V, > + nor->bouncebuf); > int ret; > > + spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > + > ret = spi_mem_exec_op(nor->spimem, &op); > if (ret) > return ret; > @@ -320,11 +332,7 @@ static void spansion_nor_clear_sr(struct spi_nor > *nor) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPANSION_CLSR_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > diff --git a/drivers/mtd/spi-nor/xilinx.c > b/drivers/mtd/spi-nor/xilinx.c > index 9459ac2609dc..1d2f5db047bd 100644 > --- a/drivers/mtd/spi-nor/xilinx.c > +++ b/drivers/mtd/spi-nor/xilinx.c > @@ -15,6 +15,12 @@ > #define XSR_PAGESIZE BIT(0) /* Page size in Po2 or Linear */ > #define XSR_RDY BIT(7) /* Ready */ > > +#define XILINX_RDSR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(XILINX_OP_RDSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > #define S3AN_INFO(_jedec_id, _n_sectors, _page_size) \ > .id = { \ > ((_jedec_id) >> 16) & 0xff, \ > @@ -72,11 +78,7 @@ static int xilinx_nor_read_sr(struct spi_nor *nor, > u8 *sr) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(XILINX_OP_RDSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, sr, 0)); > + struct spi_mem_op op = XILINX_RDSR_OP(sr); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); -- -michael
WARNING: multiple messages have this Message-ID (diff)
From: Michael Walle <michael@walle.cc> To: Tudor Ambarus <tudor.ambarus@microchip.com> Cc: p.yadav@ti.com, miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com, linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, nicolas.ferre@microchip.com Subject: Re: [PATCH v3 9/9] mtd: spi-nor: Introduce templates for SPI NOR operations Date: Tue, 19 Apr 2022 13:45:31 +0200 [thread overview] Message-ID: <d912d9834a219162ef46efad7d332ef3@walle.cc> (raw) In-Reply-To: <20220411091033.98754-10-tudor.ambarus@microchip.com> Am 2022-04-11 11:10, schrieb Tudor Ambarus: > Clean the op declaration and hide the details of each op. With this it > results a cleanner, easier to read code. No functional change expected. > > Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> I haven't gone through all of it. Acked-by: Michael Walle <michael@walle.cc> > --- > v3: new patch taken from, no changes > https://lore.kernel.org/lkml/20220304093011.198173-1-tudor.ambarus@microchip.com/ > > drivers/mtd/spi-nor/core.c | 101 ++++++------------------------- > drivers/mtd/spi-nor/core.h | 102 ++++++++++++++++++++++++++++++++ > drivers/mtd/spi-nor/micron-st.c | 24 ++++---- > drivers/mtd/spi-nor/spansion.c | 26 +++++--- > drivers/mtd/spi-nor/xilinx.c | 12 ++-- > 5 files changed, 158 insertions(+), 107 deletions(-) > > diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c > index 42794328d3b6..fe853532204c 100644 > --- a/drivers/mtd/spi-nor/core.c > +++ b/drivers/mtd/spi-nor/core.c > @@ -359,11 +359,7 @@ int spi_nor_write_enable(struct spi_nor *nor) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREN, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_WREN_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -390,11 +386,7 @@ int spi_nor_write_disable(struct spi_nor *nor) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRDI, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_WRDI_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -454,11 +446,7 @@ int spi_nor_read_sr(struct spi_nor *nor, u8 *sr) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, sr, 0)); > + struct spi_mem_op op = SPI_NOR_RDSR_OP(sr); > > if (nor->reg_proto == SNOR_PROTO_8_8_8_DTR) { > op.addr.nbytes = nor->params->rdsr_addr_nbytes; > @@ -498,11 +486,7 @@ int spi_nor_read_cr(struct spi_nor *nor, u8 *cr) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDCR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, cr, 0)); > + struct spi_mem_op op = SPI_NOR_RDCR_OP(cr); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -531,14 +515,7 @@ int spi_nor_set_4byte_addr_mode(struct spi_nor > *nor, bool enable) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(enable ? > - SPINOR_OP_EN4B : > - SPINOR_OP_EX4B, > - 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_EN4B_EX4B_OP(enable); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -572,11 +549,7 @@ static int spansion_set_4byte_addr_mode(struct > spi_nor *nor, bool enable) > nor->bouncebuf[0] = enable << 7; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_BRWR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(1, nor->bouncebuf, 0)); > + struct spi_mem_op op = SPI_NOR_BRWR_OP(nor->bouncebuf); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -606,11 +579,7 @@ int spi_nor_write_ear(struct spi_nor *nor, u8 ear) > nor->bouncebuf[0] = ear; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREAR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(1, nor->bouncebuf, 0)); > + struct spi_mem_op op = SPI_NOR_WREAR_OP(nor->bouncebuf); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -721,11 +690,7 @@ int spi_nor_global_block_unlock(struct spi_nor > *nor) > return ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_GBULK, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_GBULK_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -760,11 +725,7 @@ int spi_nor_write_sr(struct spi_nor *nor, const > u8 *sr, size_t len) > return ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(len, sr, 0)); > + struct spi_mem_op op = SPI_NOR_WRSR_OP(sr, len); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -964,11 +925,7 @@ static int spi_nor_write_sr2(struct spi_nor *nor, > const u8 *sr2) > return ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR2, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(1, sr2, 0)); > + struct spi_mem_op op = SPI_NOR_WRSR2_OP(sr2); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -1000,11 +957,7 @@ static int spi_nor_read_sr2(struct spi_nor *nor, > u8 *sr2) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR2, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, sr2, 0)); > + struct spi_mem_op op = SPI_NOR_RDSR2_OP(sr2); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -1033,11 +986,7 @@ static int spi_nor_erase_chip(struct spi_nor > *nor) > dev_dbg(nor->dev, " %lldKiB\n", (long long)(nor->mtd.size >> 10)); > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CHIP_ERASE, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPI_NOR_CHIP_ERASE_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->write_proto); > > @@ -1179,10 +1128,8 @@ int spi_nor_erase_sector(struct spi_nor *nor, > u32 addr) > > if (nor->spimem) { > struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(nor->erase_opcode, 0), > - SPI_MEM_OP_ADDR(nor->addr_width, addr, 0), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + SPI_NOR_SECTOR_ERASE_OP(nor->erase_opcode, > + nor->addr_width, addr); > > spi_nor_spimem_setup_op(nor, &op, nor->write_proto); > > @@ -1978,10 +1925,7 @@ static int spi_nor_spimem_check_op(struct > spi_nor *nor, > static int spi_nor_spimem_check_readop(struct spi_nor *nor, > const struct spi_nor_read_command *read) > { > - struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(read->opcode, 0), > - SPI_MEM_OP_ADDR(3, 0, 0), > - SPI_MEM_OP_DUMMY(1, 0), > - SPI_MEM_OP_DATA_IN(2, NULL, 0)); > + struct spi_mem_op op = SPI_NOR_READ_OP(read->opcode); > > spi_nor_spimem_setup_op(nor, &op, read->proto); > > @@ -2004,10 +1948,7 @@ static int spi_nor_spimem_check_readop(struct > spi_nor *nor, > static int spi_nor_spimem_check_pp(struct spi_nor *nor, > const struct spi_nor_pp_command *pp) > { > - struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(pp->opcode, 0), > - SPI_MEM_OP_ADDR(3, 0, 0), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_OUT(2, NULL, 0)); > + struct spi_mem_op op = SPI_NOR_PP_OP(pp->opcode); > > spi_nor_spimem_setup_op(nor, &op, pp->proto); > > @@ -2831,10 +2772,7 @@ static void spi_nor_soft_reset(struct spi_nor > *nor) > struct spi_mem_op op; > int ret; > > - op = (struct spi_mem_op)SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_SRSTEN, > 0), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DATA); > + op = (struct spi_mem_op)SPINOR_SRSTEN_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > @@ -2844,10 +2782,7 @@ static void spi_nor_soft_reset(struct spi_nor > *nor) > return; > } > > - op = (struct spi_mem_op)SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_SRST, 0), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DATA); > + op = (struct spi_mem_op)SPINOR_SRST_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h > index 7c704475946d..8b7e597fd38c 100644 > --- a/drivers/mtd/spi-nor/core.h > +++ b/drivers/mtd/spi-nor/core.h > @@ -18,6 +18,108 @@ > SPI_MEM_OP_DUMMY(ndummy, 0), \ > SPI_MEM_OP_DATA_IN(len, buf, 0)) > > +#define SPI_NOR_WREN_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREN, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_WRDI_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRDI, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_RDSR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > +#define SPI_NOR_WRSR_OP(buf, len) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(len, buf, 0)) > + > +#define SPI_NOR_RDSR2_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR2, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(1, buf, 0)) > + > +#define SPI_NOR_WRSR2_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR2, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(1, buf, 0)) > + > +#define SPI_NOR_RDCR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDCR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > +#define SPI_NOR_EN4B_EX4B_OP(enable) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(enable ? SPINOR_OP_EN4B : SPINOR_OP_EX4B, > 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_BRWR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_BRWR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(1, buf, 0)) > + > +#define SPI_NOR_WREAR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREAR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(1, buf, 0)) > + > +#define SPI_NOR_GBULK_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_GBULK, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_CHIP_ERASE_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CHIP_ERASE, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_SECTOR_ERASE_OP(opcode, addr_width, addr) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(opcode, 0), \ > + SPI_MEM_OP_ADDR(addr_width, addr, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPI_NOR_READ_OP(opcode) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(opcode, 0), \ > + SPI_MEM_OP_ADDR(3, 0, 0), \ > + SPI_MEM_OP_DUMMY(1, 0), \ > + SPI_MEM_OP_DATA_IN(2, NULL, 0)) > + > +#define SPI_NOR_PP_OP(opcode) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(opcode, 0), \ > + SPI_MEM_OP_ADDR(3, 0, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(2, NULL, 0)) > + > +#define SPINOR_SRSTEN_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_SRSTEN, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DATA) > + > +#define SPINOR_SRST_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_SRST, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DATA) > + > enum spi_nor_option_flags { > SNOR_F_HAS_SR_TB = BIT(0), > SNOR_F_NO_OP_CHIP_ERASE = BIT(1), > diff --git a/drivers/mtd/spi-nor/micron-st.c > b/drivers/mtd/spi-nor/micron-st.c > index a447762c0d78..26b9a1c2309d 100644 > --- a/drivers/mtd/spi-nor/micron-st.c > +++ b/drivers/mtd/spi-nor/micron-st.c > @@ -35,6 +35,18 @@ > SPI_MEM_OP_NO_DUMMY, \ > SPI_MEM_OP_DATA_OUT(ndata, buf, 0)) > > +#define MICRON_ST_RDFSR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDFSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > +#define MICRON_ST_CLFSR_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLFSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > static int micron_st_nor_octal_dtr_en(struct spi_nor *nor) > { > struct spi_mem_op op; > @@ -324,11 +336,7 @@ static int micron_st_nor_read_fsr(struct spi_nor > *nor, u8 *fsr) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDFSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, fsr, 0)); > + struct spi_mem_op op = MICRON_ST_RDFSR_OP(fsr); > > if (nor->reg_proto == SNOR_PROTO_8_8_8_DTR) { > op.addr.nbytes = nor->params->rdsr_addr_nbytes; > @@ -363,11 +371,7 @@ static void micron_st_nor_clear_fsr(struct spi_nor > *nor) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLFSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = MICRON_ST_CLFSR_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > diff --git a/drivers/mtd/spi-nor/spansion.c > b/drivers/mtd/spi-nor/spansion.c > index 35d8edb515a3..952db7af6932 100644 > --- a/drivers/mtd/spi-nor/spansion.c > +++ b/drivers/mtd/spi-nor/spansion.c > @@ -30,6 +30,18 @@ > SPI_MEM_OP_NO_DUMMY, \ > SPI_MEM_OP_DATA_OUT(ndata, buf, 0)) > > +#define CYPRESS_NOR_RD_ANY_REG_OP(naddr, addr, buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RD_ANY_REG, 0), \ > + SPI_MEM_OP_ADDR(naddr, addr, 0), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > +#define SPANSION_CLSR_OP \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_NO_DATA) > + > static int cypress_nor_octal_dtr_en(struct spi_nor *nor) > { > struct spi_mem_op op; > @@ -165,12 +177,12 @@ static int s28hs512t_post_bfpt_fixup(struct > spi_nor *nor, > * CFR3V[4] and set the correct size. > */ > struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RD_ANY_REG, 1), > - SPI_MEM_OP_ADDR(3, SPINOR_REG_CYPRESS_CFR3V, 1), > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, nor->bouncebuf, 1)); > + CYPRESS_NOR_RD_ANY_REG_OP(3, SPINOR_REG_CYPRESS_CFR3V, > + nor->bouncebuf); > int ret; > > + spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > + > ret = spi_mem_exec_op(nor->spimem, &op); > if (ret) > return ret; > @@ -320,11 +332,7 @@ static void spansion_nor_clear_sr(struct spi_nor > *nor) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_NO_DATA); > + struct spi_mem_op op = SPANSION_CLSR_OP; > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); > > diff --git a/drivers/mtd/spi-nor/xilinx.c > b/drivers/mtd/spi-nor/xilinx.c > index 9459ac2609dc..1d2f5db047bd 100644 > --- a/drivers/mtd/spi-nor/xilinx.c > +++ b/drivers/mtd/spi-nor/xilinx.c > @@ -15,6 +15,12 @@ > #define XSR_PAGESIZE BIT(0) /* Page size in Po2 or Linear */ > #define XSR_RDY BIT(7) /* Ready */ > > +#define XILINX_RDSR_OP(buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(XILINX_OP_RDSR, 0), \ > + SPI_MEM_OP_NO_ADDR, \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_IN(1, buf, 0)) > + > #define S3AN_INFO(_jedec_id, _n_sectors, _page_size) \ > .id = { \ > ((_jedec_id) >> 16) & 0xff, \ > @@ -72,11 +78,7 @@ static int xilinx_nor_read_sr(struct spi_nor *nor, > u8 *sr) > int ret; > > if (nor->spimem) { > - struct spi_mem_op op = > - SPI_MEM_OP(SPI_MEM_OP_CMD(XILINX_OP_RDSR, 0), > - SPI_MEM_OP_NO_ADDR, > - SPI_MEM_OP_NO_DUMMY, > - SPI_MEM_OP_DATA_IN(1, sr, 0)); > + struct spi_mem_op op = XILINX_RDSR_OP(sr); > > spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); -- -michael ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2022-04-19 11:45 UTC|newest] Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-04-11 9:10 [PATCH v3 0/9] mtd: spi-nor: Rework Octal DTR methods Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-11 9:10 ` [PATCH v3 1/9] mtd: spi-nor: Rename method, s/spi_nor_match_id/spi_nor_match_name Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-11 9:10 ` [PATCH v3 2/9] mtd: spi-nor: Introduce spi_nor_match_id() Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-11 9:10 ` [PATCH v3 3/9] mtd: spi-nor: core: Use auto-detection only once Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-19 10:18 ` Michael Walle 2022-04-19 10:18 ` Michael Walle 2022-04-11 9:10 ` [PATCH v3 4/9] mtd: spi-nor: core: Introduce method for RDID op Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-19 11:10 ` Michael Walle 2022-04-19 11:10 ` Michael Walle 2022-04-11 9:10 ` [PATCH v3 5/9] mtd: spi-nor: manufacturers: Use spi_nor_read_id() core method Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-19 11:14 ` Michael Walle 2022-04-19 11:14 ` Michael Walle 2022-04-11 9:10 ` [PATCH v3 6/9] mtd: spi-nor: core: Add helpers to read/write any register Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-19 11:19 ` Michael Walle 2022-04-19 11:19 ` Michael Walle 2022-04-19 11:46 ` Michael Walle 2022-04-19 11:46 ` Michael Walle 2022-04-19 12:08 ` Tudor.Ambarus 2022-04-19 12:08 ` Tudor.Ambarus 2022-04-19 12:32 ` Pratyush Yadav 2022-04-19 12:32 ` Pratyush Yadav 2022-04-19 12:46 ` Michael Walle 2022-04-19 12:46 ` Michael Walle 2022-04-19 12:56 ` Tudor.Ambarus 2022-04-19 12:56 ` Tudor.Ambarus 2022-04-20 4:34 ` Pratyush Yadav 2022-04-20 4:34 ` Pratyush Yadav 2022-04-20 5:20 ` Takahiro Kuwano 2022-04-20 5:20 ` Takahiro Kuwano 2022-04-20 5:25 ` Tudor.Ambarus 2022-04-20 5:25 ` Tudor.Ambarus 2022-04-19 13:02 ` Tudor.Ambarus 2022-04-19 13:02 ` Tudor.Ambarus 2022-04-19 12:59 ` Tudor.Ambarus 2022-04-19 12:59 ` Tudor.Ambarus 2022-04-11 9:10 ` [PATCH v3 7/9] mtd: spi-nor: micron-st: Rework spi_nor_micron_octal_dtr_enable() Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-19 11:43 ` Michael Walle 2022-04-19 11:43 ` Michael Walle 2022-04-11 9:10 ` [PATCH v3 8/9] mtd: spi-nor: spansion: Rework spi_nor_cypress_octal_dtr_enable() Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-19 11:44 ` Michael Walle 2022-04-19 11:44 ` Michael Walle 2022-04-11 9:10 ` [PATCH v3 9/9] mtd: spi-nor: Introduce templates for SPI NOR operations Tudor Ambarus 2022-04-11 9:10 ` Tudor Ambarus 2022-04-19 11:45 ` Michael Walle [this message] 2022-04-19 11:45 ` Michael Walle 2022-04-20 7:49 ` Pratyush Yadav 2022-04-20 7:49 ` Pratyush Yadav
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=d912d9834a219162ef46efad7d332ef3@walle.cc \ --to=michael@walle.cc \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mtd@lists.infradead.org \ --cc=miquel.raynal@bootlin.com \ --cc=nicolas.ferre@microchip.com \ --cc=p.yadav@ti.com \ --cc=richard@nod.at \ --cc=tudor.ambarus@microchip.com \ --cc=vigneshr@ti.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.