mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-17 22:49:02 +00:00
mtd: fix false positive "Offset exceeds device limit" error
Since commit 09c3280754
(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.
Acked-by: Heiko Schocher <hs@denx.de>
Acked-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
parent
fa31377ef0
commit
f18d11163e
2 changed files with 6 additions and 4 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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__ */
|
||||
|
|
Loading…
Add table
Reference in a new issue