[PATCH 08/14] ARM: i.MX: xload nand: Pull ECC status checking out of read page
Marco Felsch
m.felsch at pengutronix.de
Wed Nov 2 01:33:14 PDT 2022
Hi Sascha,
On 22-11-01, Sascha Hauer wrote:
> The read page code can be reused by upcoming i.MX7 support, but the ECC
> checking will be different. Pull ECC status checking out of the read
> page code to make that reusable on i.MX7.
>
> Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
> ---
> arch/arm/mach-imx/xload-gpmi-nand.c | 42 ++++++++++++++++++++---------
> 1 file changed, 29 insertions(+), 13 deletions(-)
>
> diff --git a/arch/arm/mach-imx/xload-gpmi-nand.c b/arch/arm/mach-imx/xload-gpmi-nand.c
> index dc4cc45be0..543ec108ba 100644
> --- a/arch/arm/mach-imx/xload-gpmi-nand.c
> +++ b/arch/arm/mach-imx/xload-gpmi-nand.c
> @@ -236,8 +236,6 @@ static int mxs_nand_read_page(struct mxs_nand_info *info, int writesize,
> int cmd_queue_len;
> u8 *cmd_buf;
> int ret;
> - uint8_t *status;
> - int i;
> int timeout;
> int descnum = 0;
> int max_pagenum = info->nand_size /
> @@ -375,20 +373,26 @@ static int mxs_nand_read_page(struct mxs_nand_info *info, int writesize,
> writel(BCH_CTRL_COMPLETE_IRQ,
> bch_regs + BCH_CTRL + STMP_OFFSET_REG_CLR);
>
> - /* Loop over status bytes, accumulating ECC status. */
> - status = databuf + writesize + mxs_nand_aux_status_offset();
> - for (i = 0; i < writesize / MXS_NAND_CHUNK_DATA_CHUNK_SIZE; i++) {
> - if (status[i] == 0xfe) {
> - ret = -EBADMSG;
> - goto err;
> - }
> - }
> -
> ret = 0;
> err:
> return ret;
> }
>
> +static int mxs_nand_get_ecc_status(struct mxs_nand_info *info, void *databuf)
> +{
> + uint8_t *status;
> + int i;
> +
> + /* Loop over status bytes, accumulating ECC status. */
> + status = databuf + info->organization.pagesize + mxs_nand_aux_status_offset();
> + for (i = 0; i < info->organization.pagesize / MXS_NAND_CHUNK_DATA_CHUNK_SIZE; i++) {
> + if (status[i] == 0xfe)
> + return -EBADMSG;
> + }
> +
> + return 0;
> +}
> +
> static int mxs_nand_get_read_status(struct mxs_nand_info *info, void *databuf)
> {
> int ret;
> @@ -851,6 +855,10 @@ static int get_fcb(struct mxs_nand_info *info, void *databuf)
> if (ret)
> continue;
>
> + ret = mxs_nand_get_ecc_status(info, databuf);
> + if (ret)
> + continue;
> +
> memcpy(fcb, databuf + mxs_nand_aux_status_offset(),
> sizeof(*fcb));
>
> @@ -886,7 +894,11 @@ static int get_dbbt(struct mxs_nand_info *info, void *databuf)
> page = startpage + i * info->organization.pages_per_eraseblock;
>
> ret = mxs_nand_read_page(info, info->organization.pagesize,
> - info->organization.oobsize, page, databuf, 0);
> + info->organization.oobsize, page, databuf, 0, false);
Maybe I didn't saw the change, but where did you changed the function
declaration?
Regards,
Marco
> + if (ret)
> + continue;
> +
> + ret = mxs_nand_get_ecc_status(info, databuf);
> if (ret)
> continue;
>
> @@ -900,7 +912,11 @@ static int get_dbbt(struct mxs_nand_info *info, void *databuf)
> return -ENOENT;
>
> ret = mxs_nand_read_page(info, info->organization.pagesize,
> - info->organization.oobsize, page + 4, databuf, 0);
> + info->organization.oobsize, page + 4, databuf, 0, false);
> + if (ret)
> + continue;
> +
> + ret = mxs_nand_get_ecc_status(info, databuf);
> if (ret)
> continue;
>
> --
> 2.30.2
>
>
>
More information about the barebox
mailing list