From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Sun, 05 Jul 2015 07:57:49 +0200 Subject: [U-Boot] [PATCH] mtd: fix false positive "Offset exceeds device limit" error In-Reply-To: References: <1435754149-19462-1-git-send-email-yamada.masahiro@socionext.com> Message-ID: <5598C75D.80502@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 : >> 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 >> --- >> >> drivers/mtd/mtd_uboot.c | 5 +++-- >> include/linux/mtd/mtd.h | 5 +++-- >> 2 files changed, 6 insertions(+), 4 deletions(-) Thanks! Acked-by: Heiko Schocher 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