]> git.sur5r.net Git - u-boot/blobdiff - board/pm826/flash.c
Merge branch 'next' of git://git.denx.de/u-boot-mpc83xx
[u-boot] / board / pm826 / flash.c
index 4d5147bf78c54fb44b01dd501ce060b17f234b8a..e8d4176e37aa2f78508cae019f7fdadb4e8c97c8 100644 (file)
@@ -5,30 +5,14 @@
  * Flash Routines for Intel devices
  *
  *--------------------------------------------------------------------
- * 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+ 
  */
 
 #include <common.h>
 #include <mpc8xx.h>
 
 
-flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];
 
 /*-----------------------------------------------------------------------
  */
@@ -69,6 +53,11 @@ ulong flash_get_size (volatile unsigned long *baseaddr,
                info->sector_count = 39;
                info->size = 0x00800000;        /* 4 * 2 MB = 8 MB      */
                break;
+       case INTEL_ID_28F640C3B:
+               info->flash_id = FLASH_28F640C3B;
+               info->sector_count = 135;
+               info->size = 0x02000000;        /* 16 * 2 MB = 32 MB    */
+               break;
        default:
                return (0);                     /* no or unknown flash  */
        }
@@ -79,10 +68,11 @@ ulong flash_get_size (volatile unsigned long *baseaddr,
                volatile unsigned long *tmp = baseaddr;
 
                /* set up sector start adress table (bottom sector type)
-                * AND unlock the sectors (if our chip is 160C3)
+                * AND unlock the sectors (if our chip is 160C3 or 640C3)
                 */
                for (i = 0; i < info->sector_count; i++) {
-                       if ((info->flash_id & FLASH_TYPEMASK) == FLASH_28F160C3B) {
+                       if (((info->flash_id & FLASH_TYPEMASK) == FLASH_28F160C3B) ||
+                           ((info->flash_id & FLASH_TYPEMASK) == FLASH_28F640C3B)) {
                                tmp[0] = 0x00600060;
                                tmp[1] = 0x00600060;
                                tmp[0] = 0x00D000D0;
@@ -110,13 +100,13 @@ unsigned long flash_init (void)
 
        /* 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;
        }
 
        /* Static FLASH Bank configuration here (only one bank) */
 
-       size_b0 = flash_get_size ((ulong *) CFG_FLASH0_BASE, &flash_info[0]);
+       size_b0 = flash_get_size ((ulong *) CONFIG_SYS_FLASH0_BASE, &flash_info[0]);
        if (flash_info[0].flash_id == FLASH_UNKNOWN || size_b0 == 0) {
                printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n",
                                size_b0, size_b0 >> 20);
@@ -126,25 +116,25 @@ unsigned long flash_init (void)
         */
 
 #ifndef CONFIG_BOOT_ROM
-       /* If U-Boot is  booted from ROM the CFG_MONITOR_BASE > CFG_FLASH0_BASE
+       /* If U-Boot is  booted from ROM the CONFIG_SYS_MONITOR_BASE > CONFIG_SYS_FLASH0_BASE
         * but we shouldn't protect it.
         */
 
-# if CFG_MONITOR_BASE >= CFG_FLASH0_BASE
+# if CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH0_BASE
        flash_protect (FLAG_PROTECT_SET,
-                      CFG_MONITOR_BASE,
-                      CFG_MONITOR_BASE + CFG_MONITOR_LEN - 1, &flash_info[0]
+                      CONFIG_SYS_MONITOR_BASE,
+                      CONFIG_SYS_MONITOR_BASE + monitor_flash_len - 1, &flash_info[0]
        );
 # endif
 #endif /* CONFIG_BOOT_ROM */
 
-#if (CFG_ENV_IS_IN_FLASH == 1) && defined(CFG_ENV_ADDR)
-# ifndef  CFG_ENV_SIZE
-#  define CFG_ENV_SIZE CFG_ENV_SECT_SIZE
+#if defined(CONFIG_ENV_IS_IN_FLASH) && defined(CONFIG_ENV_ADDR)
+# ifndef  CONFIG_ENV_SIZE
+#  define CONFIG_ENV_SIZE      CONFIG_ENV_SECT_SIZE
 # endif
        flash_protect (FLAG_PROTECT_SET,
-                      CFG_ENV_ADDR,
-                      CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
+                      CONFIG_ENV_ADDR,
+                      CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1, &flash_info[0]);
 #endif
 
        return (size_b0);
@@ -177,6 +167,9 @@ void flash_print_info (flash_info_t * info)
        case FLASH_28F160F3B:
                printf ("28F160F3B (16 M, bottom sector)\n");
                break;
+       case FLASH_28F640C3B:
+               printf ("28F640C3B (64 M, bottom sector)\n");
+               break;
        default:
                printf ("Unknown Chip Type\n");
                break;
@@ -258,7 +251,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
                        last = start;
                        while ((addr[0] & 0x00800080) != 0x00800080 ||
                                   (addr[1] & 0x00800080) != 0x00800080) {
-                               if ((now = get_timer (start)) > CFG_FLASH_ERASE_TOUT) {
+                               if ((now = get_timer (start)) > CONFIG_SYS_FLASH_ERASE_TOUT) {
                                        printf ("Timeout (erase suspended!)\n");
                                        /* Suspend erase
                                         */
@@ -353,7 +346,7 @@ static int write_word (flash_info_t * info, volatile unsigned long *addr,
 
        start = get_timer (0);
        while ((*addr & 0x00800080) != 0x00800080) {
-               if (get_timer (start) > CFG_FLASH_WRITE_TOUT) {
+               if (get_timer (start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
                        /* Suspend program
                         */
                        *addr = 0x00B000B0;