[U-Boot] [PATCH] mtd: fix false positive "Offset exceeds device limit" error

Masahiro Yamada yamada.masahiro at socionext.com
Sat Jul 4 19:07:07 CEST 2015


Hey, quick review and apply please?

NAND commands are not working!




2015-07-01 21:35 GMT+09:00 Masahiro Yamada <yamada.masahiro at socionext.com>:
> Since commit 09c3280754f8 (mtd, nand: Move common functions from
> cmd_nand.c to common place), NAND commands would not work at all
> on large devices.
>
>     => nand read 80000000 10000 10000
>
>     NAND read: Offset exceeds device limit
>     => nand erase 100000 100000
>
>     NAND erase: Offset exceeds device limit
>
> The type of the "size" of "struct mtd_info" is uint64_t, while
> mtd_arg_off_size() and mtd_arg_off() treat chipsize as int type.
> The chipsize is wrapped around if the argument is given with 2GB
> or larger.
>
> Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com>
> ---
>
>  drivers/mtd/mtd_uboot.c | 5 +++--
>  include/linux/mtd/mtd.h | 5 +++--
>  2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mtd/mtd_uboot.c b/drivers/mtd/mtd_uboot.c
> index 7197007..c517b9c 100644
> --- a/drivers/mtd/mtd_uboot.c
> +++ b/drivers/mtd/mtd_uboot.c
> @@ -43,7 +43,7 @@ static int get_part(const char *partname, int *idx, loff_t *off, loff_t *size,
>  }
>
>  int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size,
> -               loff_t *maxsize, int devtype, int chipsize)
> +               loff_t *maxsize, int devtype, uint64_t chipsize)
>  {
>         if (!str2off(arg, off))
>                 return get_part(arg, idx, off, size, maxsize, devtype);
> @@ -59,7 +59,8 @@ int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size,
>  }
>
>  int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off,
> -                loff_t *size, loff_t *maxsize, int devtype, int chipsize)
> +                    loff_t *size, loff_t *maxsize, int devtype,
> +                    uint64_t chipsize)
>  {
>         int ret;
>
> diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
> index 33669da..552d4d6 100644
> --- a/include/linux/mtd/mtd.h
> +++ b/include/linux/mtd/mtd.h
> @@ -484,8 +484,9 @@ int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
>  int del_mtd_partitions(struct mtd_info *);
>
>  int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size,
> -               loff_t *maxsize, int devtype, int chipsize);
> +               loff_t *maxsize, int devtype, uint64_t chipsize);
>  int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off,
> -                loff_t *size, loff_t *maxsize, int devtype, int chipsize);
> +                    loff_t *size, loff_t *maxsize, int devtype,
> +                    uint64_t chipsize);
>  #endif
>  #endif /* __MTD_MTD_H__ */
> --
> 1.9.1
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot



-- 
Best Regards
Masahiro Yamada


More information about the U-Boot mailing list