]> git.sur5r.net Git - u-boot/blobdiff - board/atc/flash.c
Merge branch 'master' of git://git.denx.de/u-boot-at91
[u-boot] / board / atc / flash.c
index 4bcf2ee7f34e697249d3c2f622454742dd9b1374..fd76723e898530e4f16c7db94fec3eed9a8d00b7 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <common.h>
 
-flash_info_t   flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips        */
+flash_info_t   flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; /* info for FLASH chips */
 
 /* NOTE - CONFIG_FLASH_16BIT means the CPU interface is 16-bit, it
  *        has nothing to do with the flash chip being 8-bit or 16-bit.
@@ -67,40 +67,40 @@ unsigned long flash_init (void)
        int i;
 
        /* Init: no FLASHes known */
-       for (i=0; i < CFG_MAX_FLASH_BANKS; ++i) {
+       for (i=0; i < CONFIG_SYS_MAX_FLASH_BANKS; ++i) {
 #if 0
                ulong flashbase = (i == 0) ? PHYS_FLASH_1 : PHYS_FLASH_2;
 #else
-               ulong flashbase = CFG_FLASH_BASE;
+               ulong flashbase = CONFIG_SYS_FLASH_BASE;
 #endif
 
                memset(&flash_info[i], 0, sizeof(flash_info_t));
 
-               flash_info[i].size = 
+               flash_info[i].size =
                        flash_get_size((FPW *)flashbase, &flash_info[i]);
 
                if (flash_info[i].flash_id == FLASH_UNKNOWN) {
                        printf ("## Unknown FLASH on Bank %d - Size = 0x%08lx\n",
                        i, flash_info[i].size);
                }
-               
+
                size += flash_info[i].size;
        }
 
-#if CFG_MONITOR_BASE >= CFG_FLASH_BASE
+#if CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH_BASE
        /* monitor protection ON by default */
        flash_protect(FLAG_PROTECT_SET,
-                     CFG_MONITOR_BASE,
-                     CFG_MONITOR_BASE+CFG_MONITOR_LEN-1,
-                     flash_get_info(CFG_MONITOR_BASE));
+                     CONFIG_SYS_MONITOR_BASE,
+                     CONFIG_SYS_MONITOR_BASE+monitor_flash_len-1,
+                     flash_get_info(CONFIG_SYS_MONITOR_BASE));
 #endif
 
-#ifdef CFG_ENV_IS_IN_FLASH
+#ifdef CONFIG_ENV_IS_IN_FLASH
        /* ENV protection ON by default */
        flash_protect(FLAG_PROTECT_SET,
-                     CFG_ENV_ADDR,
-                     CFG_ENV_ADDR+CFG_ENV_SIZE-1,
-                     flash_get_info(CFG_ENV_ADDR));
+                     CONFIG_ENV_ADDR,
+                     CONFIG_ENV_ADDR+CONFIG_ENV_SIZE-1,
+                     flash_get_info(CONFIG_ENV_ADDR));
 #endif
 
 
@@ -163,14 +163,14 @@ static flash_info_t *flash_get_info(ulong base)
 {
        int i;
        flash_info_t * info;
-       
-       for (i = 0; i < CFG_MAX_FLASH_BANKS; i ++) {
+
+       for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i ++) {
                info = & flash_info[i];
                if (info->start[0] <= base && base < info->start[0] + info->size)
                        break;
        }
-       
-       return i == CFG_MAX_FLASH_BANKS ? 0 : info;
+
+       return i == CONFIG_SYS_MAX_FLASH_BANKS ? 0 : info;
 }
 
 /*-----------------------------------------------------------------------
@@ -181,7 +181,7 @@ void flash_print_info (flash_info_t *info)
        int i;
        uchar *boottype;
        uchar *bootletter;
-       uchar *fmt;
+       char *fmt;
        uchar botbootletter[] = "B";
        uchar topbootletter[] = "T";
        uchar botboottype[] = "bottom boot sector";
@@ -216,32 +216,32 @@ void flash_print_info (flash_info_t *info)
        case FLASH_AM640U:
                fmt = "29LV641D (64 Mbit, uniform sectors)\n";
                break;
-        case FLASH_28F800C3B:
-        case FLASH_28F800C3T:
+       case FLASH_28F800C3B:
+       case FLASH_28F800C3T:
                fmt = "28F800C3%s (8 Mbit, %s)\n";
                break;
        case FLASH_INTEL800B:
        case FLASH_INTEL800T:
                fmt = "28F800B3%s (8 Mbit, %s)\n";
                break;
-        case FLASH_28F160C3B:
-        case FLASH_28F160C3T:
+       case FLASH_28F160C3B:
+       case FLASH_28F160C3T:
                fmt = "28F160C3%s (16 Mbit, %s)\n";
                break;
        case FLASH_INTEL160B:
        case FLASH_INTEL160T:
                fmt = "28F160B3%s (16 Mbit, %s)\n";
                break;
-        case FLASH_28F320C3B:
-        case FLASH_28F320C3T:
+       case FLASH_28F320C3B:
+       case FLASH_28F320C3T:
                fmt = "28F320C3%s (32 Mbit, %s)\n";
                break;
        case FLASH_INTEL320B:
        case FLASH_INTEL320T:
                fmt = "28F320B3%s (32 Mbit, %s)\n";
                break;
-        case FLASH_28F640C3B:
-        case FLASH_28F640C3T:
+       case FLASH_28F640C3B:
+       case FLASH_28F640C3T:
                fmt = "28F640C3%s (64 Mbit, %s)\n";
                break;
        case FLASH_INTEL640B:
@@ -292,9 +292,8 @@ ulong flash_get_size (FPWV *addr, flash_info_t *info)
        /* The manufacturer codes are only 1 byte, so just use 1 byte.
         * This works for any bus width and any FLASH device width.
         */
-       udelay(1000000);//psl
-       //psl   switch (addr[1] & 0xff) {
-       switch (addr[0] & 0xff) {//psl
+       udelay(100);
+       switch (addr[0] & 0xff) {
 
        case (uchar)AMD_MANUFACT:
                info->flash_id = FLASH_MAN_AMD;
@@ -312,7 +311,6 @@ ulong flash_get_size (FPWV *addr, flash_info_t *info)
        }
 
        /* Check 16 bits or 32 bits of ID so work on 32 or 16 bit bus. */
-       //psl   if (info->flash_id != FLASH_UNKNOWN) switch (addr[0]) {
        if (info->flash_id != FLASH_UNKNOWN) switch (addr[1]) {
 
        case (FPW)AMD_ID_LV640U:        /* 29LV640 and 29LV641 have same ID */
@@ -478,7 +476,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
                udelay (1000);
 
                while ((*addr & (FPW)0x00800080) != (FPW)0x00800080) {
-                       if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
+                       if ((now = get_timer(start)) > CONFIG_SYS_FLASH_ERASE_TOUT) {
                                printf ("Timeout\n");
 
                                if (intel) {
@@ -492,14 +490,14 @@ int       flash_erase (flash_info_t *info, int s_first, int s_last)
                        }
 
                        /* show that we're waiting */
-                       if ((get_timer(last)) > CFG_HZ) {/* every second */
+                       if ((get_timer(last)) > CONFIG_SYS_HZ) {/* every second */
                                putc ('.');
                                last = get_timer(0);
                        }
                }
 
                /* show that we're waiting */
-               if ((get_timer(last)) > CFG_HZ) {       /* every second */
+               if ((get_timer(last)) > CONFIG_SYS_HZ) {        /* every second */
                        putc ('.');
                        last = get_timer(0);
                }
@@ -519,46 +517,46 @@ int       flash_erase (flash_info_t *info, int s_first, int s_last)
  */
 int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
 {
-    FPW data = 0; /* 16 or 32 bit word, matches flash bus width on MPC8XX */
-    int bytes;   /* number of bytes to program in current word         */
-    int left;    /* number of bytes left to program                    */
-    int i, res;
+       FPW data = 0; /* 16 or 32 bit word, matches flash bus width on MPC8XX */
+       int bytes;        /* number of bytes to program in current word         */
+       int left;         /* number of bytes left to program                    */
+       int i, res;
 
-    for (left = cnt, res = 0;
-        left > 0 && res == 0;
-        addr += sizeof(data), left -= sizeof(data) - bytes) {
+       for (left = cnt, res = 0;
+                left > 0 && res == 0;
+                addr += sizeof(data), left -= sizeof(data) - bytes) {
 
-        bytes = addr & (sizeof(data) - 1);
-        addr &= ~(sizeof(data) - 1);
+               bytes = addr & (sizeof(data) - 1);
+               addr &= ~(sizeof(data) - 1);
 
-       /* combine source and destination data so can program
-        * an entire word of 16 or 32 bits
-        */
-        for (i = 0; i < sizeof(data); i++) {
-            data <<= 8;
-            if (i < bytes || i - bytes >= left )
-               data += *((uchar *)addr + i);
-           else
-               data += *src++;
-       }
+               /* combine source and destination data so can program
+                * an entire word of 16 or 32 bits
+                */
+               for (i = 0; i < sizeof(data); i++) {
+                       data <<= 8;
+                       if (i < bytes || i - bytes >= left )
+                               data += *((uchar *)addr + i);
+                       else
+                               data += *src++;
+               }
 
-       /* write one word to the flash */
-       switch (info->flash_id & FLASH_VENDMASK) {
-       case FLASH_MAN_AMD:
-               res = write_word_amd(info, (FPWV *)addr, data);
-               break;
-       case FLASH_MAN_INTEL:
-               res = write_word_intel(info, (FPWV *)addr, data);
-               break;
-       default:
-               /* unknown flash type, error! */
-               printf ("missing or unknown FLASH type\n");
-               res = 1;        /* not really a timeout, but gives error */
-               break;
+               /* write one word to the flash */
+               switch (info->flash_id & FLASH_VENDMASK) {
+               case FLASH_MAN_AMD:
+                       res = write_word_amd(info, (FPWV *)addr, data);
+                       break;
+               case FLASH_MAN_INTEL:
+                       res = write_word_intel(info, (FPWV *)addr, data);
+                       break;
+               default:
+                       /* unknown flash type, error! */
+                       printf ("missing or unknown FLASH type\n");
+                       res = 1;        /* not really a timeout, but gives error */
+                       break;
+               }
        }
-    }
 
-    return (res);
+       return (res);
 }
 
 /*-----------------------------------------------------------------------
@@ -573,43 +571,43 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
  */
 static int write_word_amd (flash_info_t *info, FPWV *dest, FPW data)
 {
-    ulong start;
-    int flag;
-    int res = 0;       /* result, assume success       */
-    FPWV *base;                /* first address in flash bank  */
-
-    /* Check if Flash is (sufficiently) erased */
-    if ((*dest & data) != data) {
-       return (2);
-    }
+       ulong start;
+       int flag;
+       int res = 0;    /* result, assume success       */
+       FPWV *base;             /* first address in flash bank  */
+
+       /* Check if Flash is (sufficiently) erased */
+       if ((*dest & data) != data) {
+               return (2);
+       }
 
 
-    base = (FPWV *)(info->start[0]);
+       base = (FPWV *)(info->start[0]);
 
-    /* Disable interrupts which might cause a timeout here */
-    flag = disable_interrupts();
+       /* Disable interrupts which might cause a timeout here */
+       flag = disable_interrupts();
 
-    base[FLASH_CYCLE1] = (FPW)0x00AA00AA;      /* unlock */
-    base[FLASH_CYCLE2] = (FPW)0x00550055;      /* unlock */
-    base[FLASH_CYCLE1] = (FPW)0x00A000A0;      /* selects program mode */
+       base[FLASH_CYCLE1] = (FPW)0x00AA00AA;   /* unlock */
+       base[FLASH_CYCLE2] = (FPW)0x00550055;   /* unlock */
+       base[FLASH_CYCLE1] = (FPW)0x00A000A0;   /* selects program mode */
 
-    *dest = data;              /* start programming the data   */
+       *dest = data;           /* start programming the data   */
 
-    /* re-enable interrupts if necessary */
-    if (flag)
-       enable_interrupts();
+       /* re-enable interrupts if necessary */
+       if (flag)
+               enable_interrupts();
 
-    start = get_timer (0);
+       start = get_timer (0);
 
-    /* data polling for D7 */
-    while (res == 0 && (*dest & (FPW)0x00800080) != (data & (FPW)0x00800080)) {
-       if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
-           *dest = (FPW)0x00F000F0;    /* reset bank */
-           res = 1;
+       /* data polling for D7 */
+       while (res == 0 && (*dest & (FPW)0x00800080) != (data & (FPW)0x00800080)) {
+               if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
+                       *dest = (FPW)0x00F000F0;        /* reset bank */
+                       res = 1;
+               }
        }
-    }
 
-    return (res);
+       return (res);
 }
 
 /*-----------------------------------------------------------------------
@@ -624,42 +622,42 @@ static int write_word_amd (flash_info_t *info, FPWV *dest, FPW data)
  */
 static int write_word_intel (flash_info_t *info, FPWV *dest, FPW data)
 {
-    ulong start;
-    int flag;
-    int res = 0;       /* result, assume success       */
+       ulong start;
+       int flag;
+       int res = 0;    /* result, assume success       */
 
-    /* Check if Flash is (sufficiently) erased */
-    if ((*dest & data) != data) {
-       return (2);
-    }
+       /* Check if Flash is (sufficiently) erased */
+       if ((*dest & data) != data) {
+               return (2);
+       }
 
-    /* Disable interrupts which might cause a timeout here */
-    flag = disable_interrupts();
+       /* Disable interrupts which might cause a timeout here */
+       flag = disable_interrupts();
 
-    *dest = (FPW)0x00500050;   /* clear status register        */
-    *dest = (FPW)0x00FF00FF;   /* make sure in read mode       */
-    *dest = (FPW)0x00400040;   /* program setup                */
+       *dest = (FPW)0x00500050;        /* clear status register        */
+       *dest = (FPW)0x00FF00FF;        /* make sure in read mode       */
+       *dest = (FPW)0x00400040;        /* program setup                */
 
-    *dest = data;              /* start programming the data   */
+       *dest = data;           /* start programming the data   */
 
-    /* re-enable interrupts if necessary */
-    if (flag)
-       enable_interrupts();
+       /* re-enable interrupts if necessary */
+       if (flag)
+               enable_interrupts();
 
-    start = get_timer (0);
+       start = get_timer (0);
 
-    while (res == 0 && (*dest & (FPW)0x00800080) != (FPW)0x00800080) {
-       if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
-           *dest = (FPW)0x00B000B0;    /* Suspend program      */
-           res = 1;
+       while (res == 0 && (*dest & (FPW)0x00800080) != (FPW)0x00800080) {
+               if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
+                       *dest = (FPW)0x00B000B0;        /* Suspend program      */
+                       res = 1;
+               }
        }
-    }
 
-    if (res == 0 && (*dest & (FPW)0x00100010))
-       res = 1;        /* write failed, time out error is close enough */
+       if (res == 0 && (*dest & (FPW)0x00100010))
+               res = 1;        /* write failed, time out error is close enough */
 
-    *dest = (FPW)0x00500050;   /* clear status register        */
-    *dest = (FPW)0x00FF00FF;   /* make sure in read mode       */
+       *dest = (FPW)0x00500050;        /* clear status register        */
+       *dest = (FPW)0x00FF00FF;        /* make sure in read mode       */
 
-    return (res);
+       return (res);
 }