u8 *part_num, struct part_info **part);
#endif
-extern nand_info_t nand_info[]; /* info for NAND chips */
-
static int nand_dump_oob(nand_info_t *nand, ulong off)
{
return 0;
}
static int
-arg_off_size(int argc, char *argv[], nand_info_t *nand, ulong *off, ulong *size)
+arg_off_size(int argc, char *argv[], nand_info_t *nand, ulong *off, size_t *size)
{
int idx = nand_curr_device;
#if defined(CONFIG_CMD_JFFS2) && defined(CONFIG_JFFS2_CMDLINE)
}
*off = part->offset;
if (argc >= 2) {
- if (!(str2long(argv[1], size))) {
+ if (!(str2long(argv[1], (ulong *)size))) {
printf("'%s' is not a number\n", argv[1]);
return -1;
}
}
if (argc >= 2) {
- if (!(str2long(argv[1], size))) {
+ if (!(str2long(argv[1], (ulong *)size))) {
printf("'%s' is not a number\n", argv[1]);
return -1;
}
int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
{
int i, dev, ret;
- ulong addr, off, size;
+ ulong addr, off;
+ size_t size;
char *cmd, *s;
nand_info_t *nand;
#ifdef CFG_NAND_QUIET
} else if (s != NULL && !strcmp(s, ".oob")) {
/* read out-of-band data */
if (read)
- ret = nand->read_oob(nand, off, size, (size_t *) &size,
+ ret = nand->read_oob(nand, off, size, &size,
(u_char *) addr);
else
- ret = nand->write_oob(nand, off, size, (size_t *) &size,
+ ret = nand->write_oob(nand, off, size, &size,
(u_char *) addr);
} else {
if (read)
{
int r;
char *ep, *s;
- ulong cnt;
+ size_t cnt;
image_header_t *hdr;
int jffs2 = 0;
+#if defined(CONFIG_FIT)
+ const void *fit_hdr;
+#endif
s = strchr(cmd, '.');
if (s != NULL &&
case IMAGE_FORMAT_LEGACY:
hdr = (image_header_t *)addr;
- if (!image_check_magic (hdr)) {
- printf("\n** Bad Magic Number 0x%x **\n",
- image_get_magic (hdr));
- show_boot_progress (-57);
- return 1;
- }
show_boot_progress (57);
-
image_print_contents (hdr);
cnt = image_get_image_size (hdr);
break;
#if defined(CONFIG_FIT)
case IMAGE_FORMAT_FIT:
- fit_unsupported ("nand_load_image");
- return 1;
+ fit_hdr = (const void *)addr;
+ if (!fit_check_format (fit_hdr)) {
+ show_boot_progress (-150);
+ puts ("** Bad FIT image format\n");
+ return 1;
+ }
+ show_boot_progress (151);
+ puts ("Fit image detected...\n");
+
+ cnt = fit_get_size (fit_hdr);
+ break;
#endif
default:
+ show_boot_progress (-57);
puts ("** Unknown image type\n");
return 1;
}
}
show_boot_progress (58);
+#if defined(CONFIG_FIT)
+ /* This cannot be done earlier, we need complete FIT image in RAM first */
+ if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
+ fit_print_contents ((const void *)addr);
+#endif
+
/* Loading ok, update default load address */
load_addr = addr;
if (strncmp (argv[1], "read", 4) == 0 ||
strncmp (argv[1], "write", 5) == 0) {
- ulong addr = simple_strtoul (argv[2], NULL, 16);
- ulong off = simple_strtoul (argv[3], NULL, 16);
- ulong size = simple_strtoul (argv[4], NULL, 16);
- int cmd = (strncmp (argv[1], "read", 4) == 0) ?
- NANDRW_READ : NANDRW_WRITE;
- int ret, total;
+ ulong addr = simple_strtoul (argv[2], NULL, 16);
+ off_t off = simple_strtoul (argv[3], NULL, 16);
+ size_t size = simple_strtoul (argv[4], NULL, 16);
+ int cmd = (strncmp (argv[1], "read", 4) == 0) ?
+ NANDRW_READ : NANDRW_WRITE;
+ size_t total;
+ int ret;
char *cmdtail = strchr (argv[1], '.');
if (cmdtail && !strncmp (cmdtail, ".oob", 2)) {
/* read out-of-band data */
if (cmd & NANDRW_READ) {
ret = nand_read_oob (nand_dev_desc + curr_device,
- off, size, (size_t *) & total,
+ off, size, &total,
(u_char *) addr);
} else {
ret = nand_write_oob (nand_dev_desc + curr_device,
- off, size, (size_t *) & total,
+ off, size, &total,
(u_char *) addr);
}
return ret;
ret = nand_legacy_rw (nand_dev_desc + curr_device,
cmd, off, size,
- (size_t *) & total,
+ &total,
(u_char *) addr);
printf (" %d bytes %s: %s\n", total,
ulong offset = 0;
image_header_t *hdr;
int rcode = 0;
+#if defined(CONFIG_FIT)
+ const void *fit_hdr;
+#endif
+
show_boot_progress (52);
switch (argc) {
case 1:
switch (genimg_get_format ((void *)addr)) {
case IMAGE_FORMAT_LEGACY:
hdr = (image_header_t *)addr;
+ image_print_contents (hdr);
- if (image_check_magic (hdr)) {
-
- image_print_contents (hdr);
-
- cnt = image_get_image_size (hdr);
- cnt -= SECTORSIZE;
- } else {
- printf ("\n** Bad Magic Number 0x%x **\n",
- image_get_magic (hdr));
- show_boot_progress (-57);
- return 1;
- }
+ cnt = image_get_image_size (hdr);
+ cnt -= SECTORSIZE;
break;
#if defined(CONFIG_FIT)
case IMAGE_FORMAT_FIT:
- fit_unsupported ("nboot");
- return 1;
+ fit_hdr = (const void *)addr;
+ if (!fit_check_format (fit_hdr)) {
+ show_boot_progress (-150);
+ puts ("** Bad FIT image format\n");
+ return 1;
+ }
+ show_boot_progress (151);
+ puts ("Fit image detected...\n");
+
+ cnt = fit_get_size (fit_hdr);
+ break;
#endif
default:
+ show_boot_progress (-57);
puts ("** Unknown image type\n");
return 1;
}
}
show_boot_progress (58);
+#if defined(CONFIG_FIT)
+ /* This cannot be done earlier, we need complete FIT image in RAM first */
+ if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
+ fit_print_contents ((const void *)addr);
+#endif
+
/* Loading ok, update default load address */
load_addr = addr;