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

Heiko Schocher hs at denx.de
Sun Jul 5 07:57:49 CEST 2015


Hello Masahiro,

Am 04.07.2015 um 19:07 schrieb Masahiro Yamada:
> 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(-)

Thanks!

Acked-by: Heiko Schocher <hs at denx.de>

bye,
Heiko
>>
>> 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
>
>
>

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany


More information about the U-Boot mailing list