On 01/08/19 11:22 AM, Boris Brezillon wrote: > On Thu, 1 Aug 2019 10:00:51 +0530 > Vignesh Raghavendra <vigneshr@xxxxxx> wrote: > >> From: Boris Brezillon <boris.brezillon@xxxxxxxxxxx> >> >> The m25p80 driver is actually a generic wrapper around the spi-mem >> layer. Not only the driver name is misleading, but we'd expect such a >> common logic to be directly available in the core. Another reason for >> moving this code is that SPI NOR controller drivers should >> progressively be replaced by SPI controller drivers implementing the >> spi_mem_ops interface, and when the conversion is done, we should have >> a single spi-nor driver directly interfacing with the spi-mem layer. >> >> While moving the code we also fix a longstanding issue when >> non-DMA-able buffers are passed by the MTD layer. >> >> Signed-off-by: Boris Brezillon <boris.brezillon@xxxxxxxxxxx> >> Signed-off-by: Vignesh Raghavendra <vigneshr@xxxxxx> >> --- >> v3: >> Simplify register read/write by dropping spi_nor_exec_op() and using >> spi_mem_exec_op() directly >> Modify spi_nor_spimem_xfer_data() to drop "enum spi_nor_protocol proto" >> Fix misc coding style comments by Tudor >> >> v2: >> Add docs for new functions added >> Add spi_nor_ prefix to new functions >> Incorporate Andrey's patches https://lkml.org/lkml/2019/4/1/32 >> to avoid looping spi_nor_spimem_* APIs >> >> drivers/mtd/devices/Kconfig | 18 - >> drivers/mtd/devices/Makefile | 1 - >> drivers/mtd/devices/m25p80.c | 347 ------------------- >> drivers/mtd/spi-nor/Kconfig | 2 + >> drivers/mtd/spi-nor/spi-nor.c | 632 ++++++++++++++++++++++++++++++++-- >> include/linux/mtd/spi-nor.h | 3 + >> 6 files changed, 604 insertions(+), 399 deletions(-) >> delete mode 100644 drivers/mtd/devices/m25p80.c >> > > [...] > > >> @@ -348,6 +530,16 @@ static int read_cr(struct spi_nor *nor) >> */ >> static int write_sr(struct spi_nor *nor, u8 val) >> { >> + if (nor->spimem) { >> + struct spi_mem_op op = >> + SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR, 1), >> + SPI_MEM_OP_NO_ADDR, >> + SPI_MEM_OP_NO_DUMMY, >> + SPI_MEM_OP_DATA_IN(1, nor->bouncebuf, 1)); >> + >> + return spi_mem_exec_op(nor->spimem, &op); >> + } >> + >> nor->bouncebuf[0] = val; > > The above line should be moved at the beginning of the function if you > want the spimem path to work correctly. Good catch! will send v4 with this fixed -- Regards Vignesh ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/