From: Marco Felsch <m.felsch@pengutronix.de> To: tudor.ambarus@microchip.com, miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com, sergei.shtylyov@cogentembedded.com, boris.brezillon@collabora.com, michael@walle.cc, j.neuschaefer@gmx.net Cc: linux-mtd@lists.infradead.org, kernel@pengutronix.de, linux-kernel@vger.kernel.org Subject: [PATCH 1/3] mtd: spi-nor: sst: fix write support for SST_WRITE marked devices Date: Fri, 11 Sep 2020 16:47:01 +0200 [thread overview] Message-ID: <20200911144703.25409-2-m.felsch@pengutronix.de> (raw) In-Reply-To: <20200911144703.25409-1-m.felsch@pengutronix.de> The sst write support for devices using the special SST_WRITE routine is broken since commit commit df5c21002cf4 ("mtd: spi-nor: use spi-mem dirmap API") because the spi_nor_create_write_dirmap() function checks SPINOR_OP_AAI_WP and sst_write_second. These checks are not valid during probe. The check seems also to be broken since the "op->addr.nbytes = 0" causes the devm_spi_mem_dirmap_create() function to return PTR_ERR(-EINVAL) and the probe() function will fail. It seems that the commit only copy'n'pasted the existing logic. Use the correct SST_WRITE flag and return 0 to fix both issues. Fixes: df5c21002cf4 ("mtd: spi-nor: use spi-mem dirmap API") Signed-off-by: Marco Felsch <m.felsch@pengutronix.de> --- drivers/mtd/spi-nor/core.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index 65eff4ce6ab1..31869ac245a8 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -3289,15 +3289,21 @@ static int spi_nor_create_write_dirmap(struct spi_nor *nor) }; struct spi_mem_op *op = &info.op_tmpl; + /* + * Most SST SPI-NOR's have a special write routine.which should so + * dirmap.wdesc is not supported for these. + */ + if (nor->info->flags & SST_WRITE) { + nor->dirmap.wdesc = NULL; + return 0; + } + /* get transfer protocols. */ op->cmd.buswidth = spi_nor_get_protocol_inst_nbits(nor->write_proto); op->addr.buswidth = spi_nor_get_protocol_addr_nbits(nor->write_proto); op->dummy.buswidth = op->addr.buswidth; op->data.buswidth = spi_nor_get_protocol_data_nbits(nor->write_proto); - if (nor->program_opcode == SPINOR_OP_AAI_WP && nor->sst_write_second) - op->addr.nbytes = 0; - nor->dirmap.wdesc = devm_spi_mem_dirmap_create(nor->dev, nor->spimem, &info); return PTR_ERR_OR_ZERO(nor->dirmap.wdesc); -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Marco Felsch <m.felsch@pengutronix.de> To: tudor.ambarus@microchip.com, miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com, sergei.shtylyov@cogentembedded.com, boris.brezillon@collabora.com, michael@walle.cc, j.neuschaefer@gmx.net Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@pengutronix.de Subject: [PATCH 1/3] mtd: spi-nor: sst: fix write support for SST_WRITE marked devices Date: Fri, 11 Sep 2020 16:47:01 +0200 [thread overview] Message-ID: <20200911144703.25409-2-m.felsch@pengutronix.de> (raw) In-Reply-To: <20200911144703.25409-1-m.felsch@pengutronix.de> The sst write support for devices using the special SST_WRITE routine is broken since commit commit df5c21002cf4 ("mtd: spi-nor: use spi-mem dirmap API") because the spi_nor_create_write_dirmap() function checks SPINOR_OP_AAI_WP and sst_write_second. These checks are not valid during probe. The check seems also to be broken since the "op->addr.nbytes = 0" causes the devm_spi_mem_dirmap_create() function to return PTR_ERR(-EINVAL) and the probe() function will fail. It seems that the commit only copy'n'pasted the existing logic. Use the correct SST_WRITE flag and return 0 to fix both issues. Fixes: df5c21002cf4 ("mtd: spi-nor: use spi-mem dirmap API") Signed-off-by: Marco Felsch <m.felsch@pengutronix.de> --- drivers/mtd/spi-nor/core.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index 65eff4ce6ab1..31869ac245a8 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -3289,15 +3289,21 @@ static int spi_nor_create_write_dirmap(struct spi_nor *nor) }; struct spi_mem_op *op = &info.op_tmpl; + /* + * Most SST SPI-NOR's have a special write routine.which should so + * dirmap.wdesc is not supported for these. + */ + if (nor->info->flags & SST_WRITE) { + nor->dirmap.wdesc = NULL; + return 0; + } + /* get transfer protocols. */ op->cmd.buswidth = spi_nor_get_protocol_inst_nbits(nor->write_proto); op->addr.buswidth = spi_nor_get_protocol_addr_nbits(nor->write_proto); op->dummy.buswidth = op->addr.buswidth; op->data.buswidth = spi_nor_get_protocol_data_nbits(nor->write_proto); - if (nor->program_opcode == SPINOR_OP_AAI_WP && nor->sst_write_second) - op->addr.nbytes = 0; - nor->dirmap.wdesc = devm_spi_mem_dirmap_create(nor->dev, nor->spimem, &info); return PTR_ERR_OR_ZERO(nor->dirmap.wdesc); -- 2.20.1 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2020-09-11 16:53 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-11 14:47 [PATCH 0/3] MTD: SST SPI-NOR fixes Marco Felsch 2020-09-11 14:47 ` Marco Felsch 2020-09-11 14:47 ` Marco Felsch [this message] 2020-09-11 14:47 ` [PATCH 1/3] mtd: spi-nor: sst: fix write support for SST_WRITE marked devices Marco Felsch 2020-09-14 12:00 ` Vignesh Raghavendra 2020-09-14 12:00 ` Vignesh Raghavendra 2020-09-16 9:36 ` Tudor.Ambarus 2020-09-16 9:36 ` Tudor.Ambarus 2020-09-11 14:47 ` [PATCH 2/3] mtd: spi-nor: sst: add missing write_enable Marco Felsch 2020-09-11 14:47 ` Marco Felsch 2020-09-11 14:47 ` [PATCH 3/3] mtd: spi-nor: sst: move sst_write_second to local driver Marco Felsch 2020-09-11 14:47 ` Marco Felsch 2020-11-24 20:35 ` [PATCH 0/3] MTD: SST SPI-NOR fixes Michael Auchter 2020-11-24 20:35 ` Michael Auchter
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=20200911144703.25409-2-m.felsch@pengutronix.de \ --to=m.felsch@pengutronix.de \ --cc=boris.brezillon@collabora.com \ --cc=j.neuschaefer@gmx.net \ --cc=kernel@pengutronix.de \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mtd@lists.infradead.org \ --cc=michael@walle.cc \ --cc=miquel.raynal@bootlin.com \ --cc=richard@nod.at \ --cc=sergei.shtylyov@cogentembedded.com \ --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.