diff options
author | Mugunthan V N <mugunthanvnm@ti.com> | 2017-06-26 19:12:51 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-07-11 22:41:44 -0400 |
commit | ad92dff28c26b127391692e4d675a463ee4a4215 (patch) | |
tree | ce21b53edc58c4fe55c24cac4e11fcef6bb94927 /cmd/nand.c | |
parent | 8d3a25685e4aac7070365a2b3c53c2c81b27930f (diff) |
cmd: nand: abstract global variable usage for dm conversion
nand_info is used all over the file so abstract it with
get_nand_dev_by_index() which will help for DM conversion.
Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Diffstat (limited to 'cmd/nand.c')
-rw-r--r-- | cmd/nand.c | 69 |
1 files changed, 39 insertions, 30 deletions
diff --git a/cmd/nand.c b/cmd/nand.c index 72ca88a943..d6542e50f2 100644 --- a/cmd/nand.c +++ b/cmd/nand.c @@ -115,20 +115,20 @@ free_dat: static int set_dev(int dev) { - if (dev < 0 || dev >= CONFIG_SYS_MAX_NAND_DEVICE || !nand_info[dev]) { - puts("No such device\n"); - return -1; - } + struct mtd_info *mtd = get_nand_dev_by_index(dev); + + if (!mtd) + return -ENODEV; if (nand_curr_device == dev) return 0; - printf("Device %d: %s", dev, nand_info[dev]->name); + printf("Device %d: %s", dev, mtd->name); puts("... is now current device\n"); nand_curr_device = dev; #ifdef CONFIG_SYS_NAND_SELECT_DEVICE - board_nand_select_device(nand_info[dev]->priv, dev); + board_nand_select_device(mtd->priv, dev); #endif return 0; @@ -188,7 +188,7 @@ int do_nand_env_oob(cmd_tbl_t *cmdtp, int argc, char *const argv[]) { int ret; uint32_t oob_buf[ENV_OFFSET_SIZE/sizeof(uint32_t)]; - struct mtd_info *mtd = nand_info[0]; + struct mtd_info *mtd = get_nand_dev_by_index(0); char *cmd = argv[1]; if (CONFIG_SYS_MAX_NAND_DEVICE == 0 || !mtd) { @@ -213,9 +213,10 @@ int do_nand_env_oob(cmd_tbl_t *cmdtp, int argc, char *const argv[]) if (argc < 3) goto usage; + mtd = get_nand_dev_by_index(idx); /* We don't care about size, or maxsize. */ if (mtd_arg_off(argv[2], &idx, &addr, &maxsize, &maxsize, - MTD_DEV_TYPE_NAND, nand_info[idx]->size)) { + MTD_DEV_TYPE_NAND, mtd->size)) { puts("Offset or partition name expected\n"); return 1; } @@ -283,9 +284,14 @@ usage: static void nand_print_and_set_info(int idx) { - struct mtd_info *mtd = nand_info[idx]; - struct nand_chip *chip = mtd_to_nand(mtd); + struct mtd_info *mtd; + struct nand_chip *chip; + + mtd = get_nand_dev_by_index(idx); + if (!mtd) + return; + chip = mtd_to_nand(mtd); printf("Device %d: ", idx); if (chip->numchips > 1) printf("%dx ", chip->numchips); @@ -348,7 +354,7 @@ static void adjust_size_for_badblocks(loff_t *size, loff_t offset, int dev) /* We grab the nand info object here fresh because this is usually * called after arg_off_size() which can change the value of dev. */ - struct mtd_info *mtd = nand_info[dev]; + struct mtd_info *mtd = get_nand_dev_by_index(dev); loff_t maxoffset = offset + *size; int badblocks = 0; @@ -397,10 +403,8 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (strcmp(cmd, "info") == 0) { putc('\n'); - for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++) { - if (nand_info[i]) - nand_print_and_set_info(i); - } + for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++) + nand_print_and_set_info(i); return 0; } @@ -432,12 +436,11 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) * one before these commands can run, even if a partition specifier * for another device is to be used. */ - if (dev < 0 || dev >= CONFIG_SYS_MAX_NAND_DEVICE || - !nand_info[dev]) { + mtd = get_nand_dev_by_index(dev); + if (!mtd) { puts("\nno devices available\n"); return 1; } - mtd = nand_info[dev]; if (strcmp(cmd, "bad") == 0) { printf("\nDevice %d bad blocks:\n", dev); @@ -496,13 +499,13 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) /* skip first two or three arguments, look for offset and size */ if (mtd_arg_off_size(argc - o, argv + o, &dev, &off, &size, &maxsize, MTD_DEV_TYPE_NAND, - nand_info[dev]->size) != 0) + mtd->size) != 0) return 1; if (set_dev(dev)) return 1; - mtd = nand_info[dev]; + mtd = get_nand_dev_by_index(dev); memset(&opts, 0, sizeof(opts)); opts.offset = off; @@ -565,13 +568,13 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (mtd_arg_off(argv[3], &dev, &off, &size, &maxsize, MTD_DEV_TYPE_NAND, - nand_info[dev]->size)) + mtd->size)) return 1; if (set_dev(dev)) return 1; - mtd = nand_info[dev]; + mtd = get_nand_dev_by_index(dev); if (argc > 4 && !str2long(argv[4], &pagecount)) { printf("'%s' is not a number\n", argv[4]); @@ -588,7 +591,7 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (mtd_arg_off_size(argc - 3, argv + 3, &dev, &off, &size, &maxsize, MTD_DEV_TYPE_NAND, - nand_info[dev]->size) != 0) + mtd->size) != 0) return 1; if (set_dev(dev)) @@ -600,7 +603,7 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) rwsize = size; } - mtd = nand_info[dev]; + mtd = get_nand_dev_by_index(dev); if (!s || !strcmp(s, ".jffs2") || !strcmp(s, ".e") || !strcmp(s, ".i")) { @@ -760,13 +763,15 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (mtd_arg_off_size(argc - 2, argv + 2, &dev, &off, &size, &maxsize, MTD_DEV_TYPE_NAND, - nand_info[dev]->size) < 0) + mtd->size) < 0) return 1; if (set_dev(dev)) return 1; - if (!nand_unlock(nand_info[dev], off, size, allexcept)) { + mtd = get_nand_dev_by_index(dev); + + if (!nand_unlock(mtd, off, size, allexcept)) { puts("NAND flash successfully unlocked\n"); } else { puts("Error unlocking NAND flash, " @@ -929,6 +934,7 @@ static int do_nandboot(cmd_tbl_t *cmdtp, int flag, int argc, char *boot_device = NULL; int idx; ulong addr, offset = 0; + struct mtd_info *mtd; #if defined(CONFIG_CMD_MTDPARTS) struct mtd_device *dev; struct part_info *part; @@ -948,8 +954,10 @@ static int do_nandboot(cmd_tbl_t *cmdtp, int flag, int argc, addr = simple_strtoul(argv[1], NULL, 16); else addr = CONFIG_SYS_LOAD_ADDR; - return nand_load_image(cmdtp, nand_info[dev->id->num], - part->offset, addr, argv[0]); + + mtd = get_nand_dev_by_index(dev->id->num); + return nand_load_image(cmdtp, mtd, part->offset, + addr, argv[0]); } } #endif @@ -991,14 +999,15 @@ usage: idx = simple_strtoul(boot_device, NULL, 16); - if (idx < 0 || idx >= CONFIG_SYS_MAX_NAND_DEVICE || !nand_info[idx]) { + mtd = get_nand_dev_by_index(idx); + if (!mtd) { printf("\n** Device %d not available\n", idx); bootstage_error(BOOTSTAGE_ID_NAND_AVAILABLE); return 1; } bootstage_mark(BOOTSTAGE_ID_NAND_AVAILABLE); - return nand_load_image(cmdtp, nand_info[idx], offset, addr, argv[0]); + return nand_load_image(cmdtp, mtd, offset, addr, argv[0]); } U_BOOT_CMD(nboot, 4, 1, do_nandboot, |