Merge with /home/wd/git/u-boot/custodian/u-boot-testing
[oweals/u-boot.git] / board / sc520_cdp / flash_old.c
index d4204a8ced9ff64a03bff9b70903416a0e20ddb9..3c0f6d6a6803cf7c4b75956b3a75ed69e1201264 100644 (file)
@@ -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;
@@ -101,16 +101,16 @@ ulong flash_init(void)
                        flashbase = SC520_FLASH_BANK0_BASE;
                        break;
                default:
-                       panic("configured to many flash banks!\n");
+                       panic("configured too 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);
 }