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.ha...@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
> 
> 
> 

Reply via email to