]> git.sur5r.net Git - u-boot/blobdiff - board/cray/L1/flash.c
Merge branch 'master' of git://git.denx.de/u-boot-i2c
[u-boot] / board / cray / L1 / flash.c
index 829dbaecbe316411da44fda258be46c43fddcba0..96a1e474a57c38d87e900d4a1b187677a0d915c6 100644 (file)
@@ -2,23 +2,7 @@
  * (C) Copyright 2000
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /*
@@ -35,7 +19,7 @@
  */
 
 #include <common.h>
-#include <ppc4xx.h>
+#include <asm/ppc4xx.h>
 #include <asm/processor.h>
 
 /* The flash chip we use... */
@@ -43,7 +27,7 @@
 #define FLASH_AM320B    0x0009
 
 
-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 */
 
 /*-----------------------------------------------------------------------
  * Functions
@@ -65,7 +49,7 @@ 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) {
                flash_info[i].flash_id = FLASH_UNKNOWN;
        }
 
@@ -79,7 +63,7 @@ unsigned long flash_init (void)
        }
 
        /* Only one bank */
-       if (CFG_MAX_FLASH_BANKS == 1)
+       if (CONFIG_SYS_MAX_FLASH_BANKS == 1)
          {
            /* Setup offsets */
            flash_get_offsets (FLASH_BASE0_PRELIM, &flash_info[0]);
@@ -99,7 +83,6 @@ unsigned long flash_init (void)
 }
 
 
-
 /*-----------------------------------------------------------------------
  */
 static void flash_get_offsets (ulong base, flash_info_t *info)
@@ -116,10 +99,10 @@ static void flash_get_offsets (ulong base, flash_info_t *info)
 void flash_print_info  (flash_info_t *info)
 {
        int i;
-        int k;
-        int size;
-        int erased;
-        volatile unsigned long *flash;
+       int k;
+       int size;
+       int erased;
+       volatile unsigned long *flash;
 
        if (info->flash_id == FLASH_UNKNOWN) {
                printf ("missing or unknown FLASH type\n");
@@ -143,24 +126,24 @@ void flash_print_info  (flash_info_t *info)
 
        printf ("  Sector Start Addresses:");
        for (i=0; i<info->sector_count; ++i) {
-                /*
-                 * Check if whole sector is erased
-                 */
-                if (i != (info->sector_count-1))
-                  size = info->start[i+1] - info->start[i];
-                else
-                  size = info->start[0] + info->size - info->start[i];
-                erased = 1;
-                flash = (volatile unsigned long *)info->start[i];
-                size = size >> 2;        /* divide by 4 for longword access */
-                for (k=0; k<size; k++)
-                  {
-                    if (*flash++ != 0xffffffff)
-                      {
-                        erased = 0;
-                        break;
-                      }
-                  }
+               /*
+                * Check if whole sector is erased
+                */
+               if (i != (info->sector_count-1))
+                 size = info->start[i+1] - info->start[i];
+               else
+                 size = info->start[0] + info->size - info->start[i];
+               erased = 1;
+               flash = (volatile unsigned long *)info->start[i];
+               size = size >> 2;        /* divide by 4 for longword access */
+               for (k=0; k<size; k++)
+                 {
+                   if (*flash++ != 0xffffffff)
+                     {
+                       erased = 0;
+                       break;
+                     }
+                 }
 
                if ((i % 5) == 0)
                        printf ("\n   ");
@@ -189,7 +172,7 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
        short i;
        FLASH_WORD_SIZE value;
        ulong base = (ulong)addr;
-        volatile FLASH_WORD_SIZE *addr2 = (FLASH_WORD_SIZE *)addr;
+       volatile FLASH_WORD_SIZE *addr2 = (FLASH_WORD_SIZE *)addr;
 
        /* Write auto select command: read Manufacturer ID */
        addr2[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;
@@ -232,7 +215,7 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
                /* read sector protection at sector address, (A7 .. A0) = 0x02 */
                /* D0 = 1 if protected */
                addr2 = (volatile FLASH_WORD_SIZE *)(info->start[i]);
-        info->protect[i] = addr2[2] & 1;
+       info->protect[i] = addr2[2] & 1;
        }
 
        /*
@@ -254,15 +237,15 @@ int wait_for_DQ7(flash_info_t *info, int sect)
        start = get_timer (0);
     last  = start;
     while ((addr[0] & (FLASH_WORD_SIZE)0x00800080) != (FLASH_WORD_SIZE)0x00800080) {
-        if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
-            printf ("Timeout\n");
-            return -1;
-        }
-        /* show that we're waiting */
-        if ((now - last) > 1000) {  /* every second */
-            putc ('.');
-            last = now;
-        }
+       if ((now = get_timer(start)) > CONFIG_SYS_FLASH_ERASE_TOUT) {
+           printf ("Timeout\n");
+           return -1;
+       }
+       /* show that we're waiting */
+       if ((now - last) > 1000) {  /* every second */
+           putc ('.');
+           last = now;
+       }
     }
        return 0;
 }
@@ -274,7 +257,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
 {
        volatile FLASH_WORD_SIZE *addr = (FLASH_WORD_SIZE *)(info->start[0]);
        volatile FLASH_WORD_SIZE *addr2;
-       int flag, prot, sect, l_sect;
+       int flag, prot, sect;
 
        if ((s_first < 0) || (s_first > s_last)) {
                if (info->flash_id == FLASH_UNKNOWN) {
@@ -304,16 +287,14 @@ int       flash_erase (flash_info_t *info, int s_first, int s_last)
                printf ("\n");
        }
 
-       l_sect = -1;
-
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
        /* Start erase on unprotected sectors */
        for (sect = s_first; sect<=s_last; sect++) {
                if (info->protect[sect] == 0) { /* not protected */
-                   addr2 = (FLASH_WORD_SIZE *)(info->start[sect]);
-                   printf("Erasing sector %p\n", addr2);
+                       addr2 = (FLASH_WORD_SIZE *)(info->start[sect]);
+                       printf("Erasing sector %p\n", addr2);
 
                        addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;
                        addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055;
@@ -321,15 +302,14 @@ int       flash_erase (flash_info_t *info, int s_first, int s_last)
                        addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;
                        addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055;
                        addr2[0] = (FLASH_WORD_SIZE)0x00300030;  /* sector erase */
-                   l_sect = sect;
-                   /*
-                    * Wait for each sector to complete, it's more
-                    * reliable.  According to AMD Spec, you must
-                    * issue all erase commands within a specified
-                    * timeout.  This has been seen to fail, especially
-                    * if printf()s are included (for debug)!!
-                    */
-                   wait_for_DQ7(info, sect);
+                       /*
+                        * Wait for each sector to complete, it's more
+                        * reliable.  According to AMD Spec, you must
+                        * issue all erase commands within a specified
+                        * timeout.  This has been seen to fail, especially
+                        * if printf()s are included (for debug)!!
+                        */
+                       wait_for_DQ7(info, sect);
                }
        }
 
@@ -427,42 +407,42 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
  */
 static int write_word (flash_info_t *info, ulong dest, ulong data)
 {
-        volatile FLASH_WORD_SIZE *addr2 = (FLASH_WORD_SIZE *)(info->start[0]);
-        volatile FLASH_WORD_SIZE *dest2 = (FLASH_WORD_SIZE *)dest;
-        volatile FLASH_WORD_SIZE *data2 = (FLASH_WORD_SIZE *)&data;
+       volatile FLASH_WORD_SIZE *addr2 = (FLASH_WORD_SIZE *)(info->start[0]);
+       volatile FLASH_WORD_SIZE *dest2 = (FLASH_WORD_SIZE *)dest;
+       volatile FLASH_WORD_SIZE *data2 = (FLASH_WORD_SIZE *)&data;
        ulong start;
        int flag;
-        int i;
+       int i;
 
        /* Check if Flash is (sufficiently) erased */
        if ((*((volatile FLASH_WORD_SIZE *)dest) &
-             (FLASH_WORD_SIZE)data) != (FLASH_WORD_SIZE)data) {
+            (FLASH_WORD_SIZE)data) != (FLASH_WORD_SIZE)data) {
                return (2);
        }
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
-        for (i=0; i<4/sizeof(FLASH_WORD_SIZE); i++)
-          {
-            addr2[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;
-            addr2[ADDR1] = (FLASH_WORD_SIZE)0x00550055;
-            addr2[ADDR0] = (FLASH_WORD_SIZE)0x00A000A0;
-
-            dest2[i] = data2[i];
-
-            /* re-enable interrupts if necessary */
-            if (flag)
-              enable_interrupts();
-
-            /* data polling for D7 */
-            start = get_timer (0);
-            while ((dest2[i] & (FLASH_WORD_SIZE)0x00800080) !=
-                   (data2[i] & (FLASH_WORD_SIZE)0x00800080)) {
-              if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
-                return (1);
-              }
-            }
-          }
+       for (i=0; i<4/sizeof(FLASH_WORD_SIZE); i++)
+         {
+           addr2[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;
+           addr2[ADDR1] = (FLASH_WORD_SIZE)0x00550055;
+           addr2[ADDR0] = (FLASH_WORD_SIZE)0x00A000A0;
+
+           dest2[i] = data2[i];
+
+           /* re-enable interrupts if necessary */
+           if (flag)
+             enable_interrupts();
+
+           /* data polling for D7 */
+           start = get_timer (0);
+           while ((dest2[i] & (FLASH_WORD_SIZE)0x00800080) !=
+                  (data2[i] & (FLASH_WORD_SIZE)0x00800080)) {
+             if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
+               return (1);
+             }
+           }
+         }
 
        return (0);
 }