diff options
Diffstat (limited to 'board/sc520_cdp/flash_old.c')
-rw-r--r-- | board/sc520_cdp/flash_old.c | 126 |
1 files changed, 63 insertions, 63 deletions
diff --git a/board/sc520_cdp/flash_old.c b/board/sc520_cdp/flash_old.c index d4204a8..416b01d 100644 --- a/board/sc520_cdp/flash_old.c +++ b/board/sc520_cdp/flash_old.c @@ -1,7 +1,7 @@ /* * (C) Copyright 2002 * Daniel Engström, Omicron Ceti AB, daniel@omicron.se - * + * * (C) Copyright 2002 * Sysgo Real-Time Solutions, GmbH <www.elinos.com> * Alex Zuepke <azu@sysgo.de> @@ -67,22 +67,22 @@ ulong flash_init(void) { int i, j; ulong size = 0; - + for (i = 0; i < SC520_MAX_FLASH_BANKS; i++) { ulong flashbase = 0; - int sectsize = 0; + int sectsize = 0; if (i==0 || i==2) { - /* FixMe: this assumes that bank 0 and 2 + /* FixMe: this assumes that bank 0 and 2 * are mapped to the two 8Mb banks */ flash_info[i].flash_id = (AMD_MANUFACT & FLASH_VENDMASK) | (AMD_ID_LV016B & FLASH_TYPEMASK); - + flash_info[i].size = AMD29LV016_SIZE*4; flash_info[i].sector_count = AMD29LV016_SECTORS; sectsize = (AMD29LV016_SIZE*4)/AMD29LV016_SECTORS; } else { - /* FixMe: this assumes that bank1 is unmapped + /* FixMe: this assumes that bank1 is unmapped * (or mapped to the same flash bank as BOOTCS) */ flash_info[i].flash_id = 0; flash_info[i].size = 0; @@ -103,14 +103,14 @@ ulong flash_init(void) default: panic("configured to many flash banks!\n"); } - + for (j = 0; j < flash_info[i].sector_count; j++) { flash_info[i].start[j] = sectsize; flash_info[i].start[j] = flashbase + j * sectsize; } size += flash_info[i].size; } - + /* * Protect monitor and environment sectors */ @@ -118,7 +118,7 @@ ulong flash_init(void) i386boot_start-SC520_FLASH_BANK0_BASE, i386boot_end-SC520_FLASH_BANK0_BASE, &flash_info[0]); - + #ifdef CFG_ENV_ADDR flash_protect(FLAG_PROTECT_SET, CFG_ENV_ADDR, @@ -142,7 +142,7 @@ void flash_print_info(flash_info_t *info) printf("Unknown Vendor "); break; } - + switch (info->flash_id & FLASH_TYPEMASK) { case (AMD_ID_LV016B & FLASH_TYPEMASK): printf("4x Amd29LV016B (16Mbit)\n"); @@ -152,10 +152,10 @@ void flash_print_info(flash_info_t *info) goto done; break; } - + printf(" Size: %ld MB in %d Sectors\n", info->size >> 20, info->sector_count); - + printf(" Sector Start Addresses:"); for (i = 0; i < info->sector_count; i++) { if ((i % 5) == 0) { @@ -165,7 +165,7 @@ void flash_print_info(flash_info_t *info) info->protect[i] ? " (RO)" : " "); } printf ("\n"); - + done: } @@ -180,20 +180,20 @@ int flash_erase(flash_info_t *info, int s_first, int s_last) int chip1, chip2; /* first look for protection bits */ - + if (info->flash_id == FLASH_UNKNOWN) { return ERR_UNKNOWN_FLASH_TYPE; } - + if ((s_first < 0) || (s_first > s_last)) { return ERR_INVAL; } - + if ((info->flash_id & FLASH_VENDMASK) != (AMD_MANUFACT & FLASH_VENDMASK)) { return ERR_UNKNOWN_FLASH_VENDOR; } - + prot = 0; for (sect=s_first; sect<=s_last; ++sect) { if (info->protect[sect]) { @@ -203,7 +203,7 @@ int flash_erase(flash_info_t *info, int s_first, int s_last) if (prot) { return ERR_PROTECTED; } - + /* * Disable interrupts which might cause a timeout * here. Remember that our exception vectors are @@ -212,77 +212,77 @@ int flash_erase(flash_info_t *info, int s_first, int s_last) * chip is in programming mode. */ iflag = disable_interrupts(); - + /* Start erase on unprotected sectors */ for (sect = s_first; sect<=s_last && !ctrlc(); sect++) { printf("Erasing sector %2d ... ", sect); - + /* arm simple, non interrupt dependent timer */ reset_timer(); - - if (info->protect[sect] == 0) { + + if (info->protect[sect] == 0) { /* not protected */ ulong addr = info->start[sect]; - + writel(CMD_UNLOCK1, addr + 1); writel(CMD_UNLOCK2, addr + 2); writel(CMD_ERASE_SETUP, addr + 1); - + writel(CMD_UNLOCK1, addr + 1); writel(CMD_UNLOCK2, addr + 2); writel(CMD_ERASE_CONFIRM, addr); - + /* wait until flash is ready */ chip1 = chip2 = 0; - + do { result = readl(addr); - + /* check timeout */ if (get_timer(0) > CFG_FLASH_ERASE_TOUT) { writel(CMD_READ_ARRAY, addr + 1); chip1 = TMO; break; } - + if (!chip1 && (result & 0xFFFF) & BIT_ERASE_DONE) { chip1 = READY; } - + if (!chip1 && (result & 0xFFFF) & BIT_PROGRAM_ERROR) { chip1 = ERR; } - + if (!chip2 && (result >> 16) & BIT_ERASE_DONE) { chip2 = READY; } - + if (!chip2 && (result >> 16) & BIT_PROGRAM_ERROR) { chip2 = ERR; } - + } while (!chip1 || !chip2); - + writel(CMD_READ_ARRAY, addr + 1); - + if (chip1 == ERR || chip2 == ERR) { rc = ERR_PROG_ERROR; goto outahere; } - + if (chip1 == TMO) { rc = ERR_TIMOUT; goto outahere; } - + printf("ok.\n"); } else { /* it was protected */ - + printf("protected!\n"); } } - + if (ctrlc()) { printf("User Interrupt!\n"); } @@ -290,11 +290,11 @@ int flash_erase(flash_info_t *info, int s_first, int s_last) outahere: /* allow flash to settle - wait 10 ms */ udelay(10000); - + if (iflag) { enable_interrupts(); } - + return rc; } @@ -309,7 +309,7 @@ volatile static int write_word(flash_info_t *info, ulong dest, ulong data) int rc = ERR_OK; int iflag; int chip1, chip2; - + /* * Check if Flash is (sufficiently) erased */ @@ -317,7 +317,7 @@ volatile static int write_word(flash_info_t *info, ulong dest, ulong data) if ((result & data) != data) { return ERR_NOT_ERASED; } - + /* * Disable interrupts which might cause a timeout * here. Remember that our exception vectors are @@ -332,61 +332,61 @@ volatile static int write_word(flash_info_t *info, ulong dest, ulong data) writel(CMD_UNLOCK_BYPASS, addr + 1); writel(addr, CMD_PROGRAM); writel(addr, data); - + /* arm simple, non interrupt dependent timer */ reset_timer(); - + /* wait until flash is ready */ chip1 = chip2 = 0; do { result = readl(addr); - + /* check timeout */ if (get_timer(0) > CFG_FLASH_ERASE_TOUT) { chip1 = ERR | TMO; break; } - + if (!chip1 && ((result & 0x80) == (data & 0x80))) { chip1 = READY; } - + if (!chip1 && ((result & 0xFFFF) & BIT_PROGRAM_ERROR)) { result = readl(addr); - + if ((result & 0x80) == (data & 0x80)) { chip1 = READY; } else { chip1 = ERR; } } - + if (!chip2 && ((result & (0x80 << 16)) == (data & (0x80 << 16)))) { chip2 = READY; } - + if (!chip2 && ((result >> 16) & BIT_PROGRAM_ERROR)) { result = readl(addr); - + if ((result & (0x80 << 16)) == (data & (0x80 << 16))) { chip2 = READY; } else { chip2 = ERR; } } - + } while (!chip1 || !chip2); - + writel(CMD_READ_ARRAY, addr); - + if (chip1 == ERR || chip2 == ERR || readl(addr) != data) { rc = ERR_PROG_ERROR; } - + if (iflag) { enable_interrupts(); } - + return rc; } @@ -399,9 +399,9 @@ int write_buff(flash_info_t *info, uchar *src, ulong addr, ulong cnt) ulong cp, wp, data; int l; int i, rc; - + wp = (addr & ~3); /* get lower word aligned address */ - + /* * handle unaligned start bytes */ @@ -418,13 +418,13 @@ int write_buff(flash_info_t *info, uchar *src, ulong addr, ulong cnt) for (; cnt==0 && i<4; ++i, ++cp) { data = (data >> 8) | (*(uchar *)cp << 24); } - + if ((rc = write_word(info, wp, data)) != 0) { return rc; } wp += 4; } - + /* * handle word aligned part */ @@ -437,11 +437,11 @@ int write_buff(flash_info_t *info, uchar *src, ulong addr, ulong cnt) wp += 4; cnt -= 4; } - + if (cnt == 0) { return ERR_OK; } - + /* * handle unaligned tail bytes */ @@ -453,6 +453,6 @@ int write_buff(flash_info_t *info, uchar *src, ulong addr, ulong cnt) for (; i<4; ++i, ++cp) { data = (data >> 8) | (*(uchar *)cp << 24); } - + return write_word(info, wp, data); } |