int flash_sect_protect (int p, ulong addr_first, ulong addr_last) { flash_info_t *info; ulong bank; int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS]; int protected, i; int planned; int rcode; rcode = flash_fill_sect_ranges( addr_first, addr_last, s_first, s_last, &planned ); protected = 0;
int flash_sect_erase (ulong addr_first, ulong addr_last) { flash_info_t *info; ulong bank; #ifdef CFG_MAX_FLASH_BANKS_DETECT int s_first[CFG_MAX_FLASH_BANKS_DETECT], s_last[CFG_MAX_FLASH_BANKS_DETECT]; #else int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS]; #endif int erased = 0; int planned; int rcode = 0; unsigned int val = 0; rcode = flash_fill_sect_ranges (addr_first, addr_last, s_first, s_last, &planned ); if (planned && (rcode == 0)) { info=&flash_info[0]; val = *((volatile unsigned int *)(0xd8110100)); /* sf boot only nand active, nor NOT active */ /*if (((val>>1)&0x3) == 0) if (addr_first < 0xF0000000 || addr_last < 0xF0000000) info = &flash_info_nor[0];*/ for (bank=0;//,info=&flash_info[0]; (bank < CFG_MAX_FLASH_BANKS) && (rcode == 0); ++bank, ++info) { if (s_first[bank]>=0) { erased += s_last[bank] - s_first[bank] + 1; debug ("Erase Flash from 0x%08lx to 0x%08lx " "in Bank # %ld ", info->start[s_first[bank]], (s_last[bank] == info->sector_count) ? info->start[0] + info->size - 1: info->start[s_last[bank]+1] - 1, bank+1); rcode = flash_erase (info, s_first[bank], s_last[bank]); } } printf ("Erased %d sectors\n", erased); } else if (rcode == 0) { puts ("Error: start and/or end address" " not on sector boundary\n"); rcode = 1; } return rcode; }
int flash_sect_protect (int p, ulong addr_first, ulong addr_last) { flash_info_t *info; ulong bank; #ifdef CONFIG_SYS_MAX_FLASH_BANKS_DETECT int s_first[CONFIG_SYS_MAX_FLASH_BANKS_DETECT], s_last[CONFIG_SYS_MAX_FLASH_BANKS_DETECT]; #else int s_first[CONFIG_SYS_MAX_FLASH_BANKS], s_last[CONFIG_SYS_MAX_FLASH_BANKS]; #endif int protected, i; int planned; int rcode; rcode = flash_fill_sect_ranges( addr_first, addr_last, s_first, s_last, &planned ); protected = 0;
int flash_sect_erase (ulong addr_first, ulong addr_last) { flash_info_t *info; ulong bank; #ifdef CFG_MAX_FLASH_BANKS_DETECT int s_first[CFG_MAX_FLASH_BANKS_DETECT], s_last[CFG_MAX_FLASH_BANKS_DETECT]; #else int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS]; #endif int erased = 0; int planned; int rcode = 0; rcode = flash_fill_sect_ranges (addr_first, addr_last, s_first, s_last, &planned ); if (planned && (rcode == 0)) { for (bank=0,info=&flash_info[0]; (bank < CFG_MAX_FLASH_BANKS) && (rcode == 0); ++bank, ++info) { if (s_first[bank]>=0) { erased += s_last[bank] - s_first[bank] + 1; debug ("Erase Flash from 0x%08lx to 0x%08lx " "in Bank # %ld ", info->start[s_first[bank]], (s_last[bank] == info->sector_count) ? info->start[0] + info->size - 1: info->start[s_last[bank]+1] - 1, bank+1); rcode = flash_erase (info, s_first[bank], s_last[bank]); } } // YWDRIVER_MODI sqy 2008/12/2 begin if (filetype == 0) { printf (" Erased %d sectors\n", erased); } // YWDRIVER_MODI sqy 2008/12/2 end } else if (rcode == 0) { puts ("Error: start and/or end address" " not on sector boundary\n"); rcode = 1; } return rcode; }
int flash_sect_erase (ulong addr_first, ulong addr_last) { flash_info_t *info; ulong bank; int s_first[CONFIG_SYS_MAX_FLASH_BANKS], s_last[CONFIG_SYS_MAX_FLASH_BANKS]; int erased = 0; int planned; int rcode = 0; rcode = flash_fill_sect_ranges (addr_first, addr_last, s_first, s_last, &planned ); if (planned && (rcode == 0)) { for (bank=0,info = &flash_info[0]; (bank < CONFIG_SYS_MAX_FLASH_BANKS) && (rcode == 0); ++bank, ++info) { if (s_first[bank]>=0) { erased += s_last[bank] - s_first[bank] + 1; debug("Erase Flash from 0x%08lx to 0x%08lx " "in Bank # %ld ", info->start[s_first[bank]], (s_last[bank] == info->sector_count) ? info->start[0] + info->size - 1: info->start[s_last[bank]+1] - 1, bank+1); #ifdef CONFIG_CHIP_FLASH if(flash_info[CONFIG_CHIP_FLASH_ID].flash_id == info->flash_id) rcode = chip_flash_erase (info, s_first[bank], s_last[bank]); else #endif rcode = flash_erase (info, s_first[bank], s_last[bank]); } } printf ("Erased %d sectors\n", erased); } else if (rcode == 0) { puts ("Error: start and/or end address" " not on sector boundary\n"); rcode = 1; } return rcode; }
int flash_sect_erase(ulong addr_first, ulong addr_last) { flash_info_t *info; ulong bank; #ifdef CFG_MAX_FLASH_BANKS_DETECT int s_first[CFG_MAX_FLASH_BANKS_DETECT], s_last[CFG_MAX_FLASH_BANKS_DETECT]; #else int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS]; #endif int erased = 0; int planned; int rcode = 0; rcode = flash_fill_sect_ranges(addr_first, addr_last, s_first, s_last, &planned); if (planned && (rcode == 0)) { for (bank = 0, info = &flash_info[0]; (bank < CFG_MAX_FLASH_BANKS) && (rcode == 0); ++bank, ++info) { if (s_first[bank] >= 0) { erased += s_last[bank] - s_first[bank] + 1; /* printf("s_last[bank]: %ld\n", s_last[bank]); printf("info->sector_count: %ld\n", info->sector_count); printf("info->size: %ld\n", info->size); printf("info->start[0]: %ld\n", info->start[0]); printf("info->start[s_last[bank] + 1]: %ld\n", info->start[s_last[bank] + 1]); */ printf("Erase flash from 0x%08lX to 0x%08lX in bank #%ld\n", info->start[s_first[bank]], (s_last[bank] == info->sector_count - 1) ? info->start[0] + info->size - 1 : info->start[s_last[bank] + 1] - 1, bank + 1); rcode = flash_erase(info, s_first[bank], s_last[bank]); } } printf("Erased sectors: %d\n\n", erased); } else if (rcode == 0) { puts("## Error: start and/or end address not on sector boundary\n"); rcode = 1; } return rcode; }