diff options
author | Wolfgang Denk <wd@denx.de> | 2007-08-16 12:04:37 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2007-08-16 12:04:37 +0200 |
commit | 592391a6e5c8999e546671ac8efd71a311a03f07 (patch) | |
tree | 5bc810c997cd2a0be418eadaae85caa17102d444 /common | |
parent | 002275a3ed8b114885f6702d6d544d0780dfe689 (diff) | |
parent | a5a38f4fd7e5366d706ff6a985f9b6715ddbc98b (diff) | |
download | u-boot-imx-592391a6e5c8999e546671ac8efd71a311a03f07.zip u-boot-imx-592391a6e5c8999e546671ac8efd71a311a03f07.tar.gz u-boot-imx-592391a6e5c8999e546671ac8efd71a311a03f07.tar.bz2 |
Merge with /home/wd/git/u-boot/master
Diffstat (limited to 'common')
-rw-r--r-- | common/cmd_nand.c | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/common/cmd_nand.c b/common/cmd_nand.c index c72612d..254a775 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -468,14 +468,31 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand, ulong offset, ulong addr, char *cmd) { int r; - char *ep; + char *ep, *s; ulong cnt; image_header_t *hdr; + int jffs2 = 0; + + s = strchr(cmd, '.'); + if (s != NULL && + (!strcmp(s, ".jffs2") || !strcmp(s, ".e") || !strcmp(s, ".i"))) + jffs2 = 1; printf("\nLoading from %s, offset 0x%lx\n", nand->name, offset); cnt = nand->oobblock; - r = nand_read(nand, offset, &cnt, (u_char *) addr); + if (jffs2) { + nand_read_options_t opts; + memset(&opts, 0, sizeof(opts)); + opts.buffer = (u_char*) addr; + opts.length = cnt; + opts.offset = offset; + opts.quiet = 1; + r = nand_read_opts(nand, &opts); + } else { + r = nand_read(nand, offset, &cnt, (u_char *) addr); + } + if (r) { puts("** Read error\n"); show_boot_progress (-56); @@ -495,8 +512,18 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand, print_image_hdr(hdr); cnt = (ntohl(hdr->ih_size) + sizeof (image_header_t)); + if (jffs2) { + nand_read_options_t opts; + memset(&opts, 0, sizeof(opts)); + opts.buffer = (u_char*) addr; + opts.length = cnt; + opts.offset = offset; + opts.quiet = 1; + r = nand_read_opts(nand, &opts); + } else { + r = nand_read(nand, offset, &cnt, (u_char *) addr); + } - r = nand_read(nand, offset, &cnt, (u_char *) addr); if (r) { puts("** Read error\n"); show_boot_progress (-58); @@ -545,7 +572,7 @@ int do_nandboot(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) if (argc > 3) goto usage; if (argc == 3) - addr = simple_strtoul(argv[2], NULL, 16); + addr = simple_strtoul(argv[1], NULL, 16); else addr = CFG_LOAD_ADDR; return nand_load_image(cmdtp, &nand_info[dev->id->num], @@ -604,7 +631,7 @@ usage: U_BOOT_CMD(nboot, 4, 1, do_nandboot, "nboot - boot from NAND device\n", - "[partition] | [[[loadAddr] dev] offset]\n"); + "[.jffs2] [partition] | [[[loadAddr] dev] offset]\n"); #endif |