int do_flinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { #ifndef CONFIG_SYS_NO_FLASH ulong bank; #endif #ifdef CONFIG_HAS_DATAFLASH dataflash_print_info(); #endif #ifndef CONFIG_SYS_NO_FLASH if (argc == 1) { /* print info for all FLASH banks */ for (bank=0; bank <CONFIG_SYS_MAX_FLASH_BANKS; ++bank) { printf ("\nBank # %ld: ", bank+1); flash_print_info (&flash_info[bank]); } return 0; } bank = simple_strtoul(argv[1], NULL, 16); if ((bank < 1) || (bank > CONFIG_SYS_MAX_FLASH_BANKS)) { printf ("Only FLASH Banks # 1 ... # %d supported\n", CONFIG_SYS_MAX_FLASH_BANKS); return 1; } printf ("\nBank # %ld: ", bank); flash_print_info (&flash_info[bank-1]); #endif /* CONFIG_SYS_NO_FLASH */ return 0; }
void do_flinfo (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) { ulong bank; if (argc == 1) { /* print info for all FLASH banks */ for (bank=0; bank <CFG_MAX_FLASH_BANKS; ++bank) { printf ("\nBank # %ld: ", bank+1); flash_print_info (&flash_info[bank]); } return; } bank = simple_strtoul(argv[1], NULL, 16); if ((bank < 1) || (bank > CFG_MAX_FLASH_BANKS)) { printf ("Only FLASH Banks # 1 ... # %d supported\n", CFG_MAX_FLASH_BANKS); return; } printf ("\nBank # %ld: ", bank); flash_print_info (&flash_info[bank-1]); }
unsigned long flash_init(void) { ulong sector_size; ar9100_flash_geom_t *geom; ushort venid, devid; int i; printf("ar9100 flash_init\n"); flash_info->flash_id = read_id(); venid = VENDOR_ID(flash_info->flash_id); devid = DEVICE_ID(flash_info->flash_id); for (i = 0; flash_geom_tbl[i].name != NULL; i++) { if (venid == flash_geom_tbl[i].vendor_id && devid == flash_geom_tbl[i].device_id) { break; } } geom = &flash_geom_tbl[i]; if (geom->name == NULL) { printf("Unknown flash device\n"); return -1; } flash_info->size = geom->size; /* bytes */ flash_info->sector_count = geom->nsectors; sector_size = (geom->sector_size * 16); /* One Erase block size */ for (i = 0; i < flash_info->sector_count; i++) { flash_info->start[i] = CFG_FLASH_BASE + (i * sector_size); flash_info->protect[i] = 0; } flash_print_info(flash_info); return (flash_info->size); }