[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aKl9hOx2hcZUfg-k@lore-rh-laptop>
Date: Sat, 23 Aug 2025 10:36:20 +0200
From: Lorenzo Bianconi <lorenzo@...nel.org>
To: Mikhail Kshevetskiy <mikhail.kshevetskiy@...sys.eu>
Cc: Ray Liu <ray.liu@...oha.com>, Mark Brown <broonie@...nel.org>,
Jyothi Kumar Seerapu <quic_jseerapu@...cinc.com>,
linux-arm-kernel@...ts.infradead.org, linux-spi@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v4 07/13] spi: airoha: fix reading/writing of flashes
with more than one plane per lun
> Reading UBI on the flash with more than one plane per lun will lead to
> the following error:
>
> ubi0: default fastmap WL pool size: 50
> ubi0: attaching mtd2
> ubi0 error: ubi_add_to_av: two LEBs with same sequence number 403
> eraseblock attaching information dump:
> ec 1
> pnum 538
> lnum 0
> scrub 0
> sqnum 403
> Volume identifier header dump:
> magic 55424921
> version 1
> vol_type 1
> copy_flag 0
> compat 0
> vol_id 1
> lnum 0
> data_size 0
> used_ebs 0
> data_pad 0
> sqnum 403
> hdr_crc c8418a31
> Volume identifier header hexdump:
> 00000000: 55 42 49 21 01 01 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 UBI!............................
> 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 93 00 00 00 00 00 00 00 00 00 00 00 00 c8 41 8a 31 .............................A.1
> ubi0 error: ubi_attach_mtd_dev: failed to attach mtd2, error -22
> UBI error: cannot attach mtd2
> UBI error: cannot initialize UBI, error -22
> UBI init error 22
>
> looking to spi_mem_no_dirmap_read() code we'll see:
>
> static ssize_t spi_mem_no_dirmap_read(struct spi_mem_dirmap_desc *desc,
> u64 offs, size_t len, void *buf)
> {
> struct spi_mem_op op = desc->info.op_tmpl;
> int ret;
>
> // --- see here ---
> op.addr.val = desc->info.offset + offs;
> //-----------------
> op.data.buf.in = buf;
> op.data.nbytes = len;
> ret = spi_mem_adjust_op_size(desc->mem, &op);
> if (ret)
> return ret;
>
> ret = spi_mem_exec_op(desc->mem, &op);
> if (ret)
> return ret;
>
> return op.data.nbytes;
> }
>
> The similar happens for spi_mem_no_dirmap_write(). Thus spi read address should
> take in the account the desc->info.offset.
>
> Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@...sys.eu>
Missing Fixes tag.
Regards,
Lorenzo
> ---
> drivers/spi/spi-airoha-snfi.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/spi/spi-airoha-snfi.c b/drivers/spi/spi-airoha-snfi.c
> index 3431a9c84679..df2d3d717c00 100644
> --- a/drivers/spi/spi-airoha-snfi.c
> +++ b/drivers/spi/spi-airoha-snfi.c
> @@ -727,8 +727,9 @@ static ssize_t airoha_snand_dirmap_read(struct spi_mem_dirmap_desc *desc,
> if (err)
> goto error_dma_unmap;
>
> - /* set read addr */
> - err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_RD_CTL3, 0x0);
> + /* set read addr: zero page offset + descriptor read offset */
> + err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_RD_CTL3,
> + desc->info.offset);
> if (err)
> goto error_dma_unmap;
>
> @@ -872,7 +873,9 @@ static ssize_t airoha_snand_dirmap_write(struct spi_mem_dirmap_desc *desc,
> if (err)
> goto error_dma_unmap;
>
> - err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_PG_CTL2, 0x0);
> + /* set write addr: zero page offset + descriptor write offset */
> + err = regmap_write(as_ctrl->regmap_nfi, REG_SPI_NFI_PG_CTL2,
> + desc->info.offset);
> if (err)
> goto error_dma_unmap;
>
> --
> 2.50.1
>
Download attachment "signature.asc" of type "application/pgp-signature" (229 bytes)
Powered by blists - more mailing lists