]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - board/trab/flash.c
rename CFG_ macros to CONFIG_SYS
[karo-tx-uboot.git] / board / trab / flash.c
index 8cdd82400bba2b49b2314d14489fa328f97e4c9f..317b61d87e4cffe005c6eb589ab12965aead3ba5 100644 (file)
@@ -28,7 +28,7 @@
 
 static ulong flash_get_size (vu_long *addr, flash_info_t *info);
 
-flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];
 
 
 #define CMD_READ_ARRAY         0x00F000F0
@@ -42,9 +42,9 @@ flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
 #define CMD_UNLOCK_BYPASS_RES1 0x00900090
 #define CMD_UNLOCK_BYPASS_RES2 0x00000000
 
-#define MEM_FLASH_ADDR         (*(volatile u32 *)CFG_FLASH_BASE)
-#define MEM_FLASH_ADDR1                (*(volatile u32 *)(CFG_FLASH_BASE + (0x00000555 << 2)))
-#define MEM_FLASH_ADDR2                (*(volatile u32 *)(CFG_FLASH_BASE + (0x000002AA << 2)))
+#define MEM_FLASH_ADDR         (*(volatile u32 *)CONFIG_SYS_FLASH_BASE)
+#define MEM_FLASH_ADDR1                (*(volatile u32 *)(CONFIG_SYS_FLASH_BASE + (0x00000555 << 2)))
+#define MEM_FLASH_ADDR2                (*(volatile u32 *)(CONFIG_SYS_FLASH_BASE + (0x000002AA << 2)))
 
 #define BIT_ERASE_DONE         0x00800080
 #define BIT_RDY_MASK           0x00800080
@@ -63,17 +63,17 @@ ulong flash_init (void)
        int i, j;
        ulong size = 0;
 
-       for (i=0; i<CFG_MAX_FLASH_BANKS; ++i) {
+       for (i=0; i<CONFIG_SYS_MAX_FLASH_BANKS; ++i) {
                ulong flashbase = 0;
                flash_info_t *info = &flash_info[i];
 
                /* Init: no FLASHes known */
                info->flash_id = FLASH_UNKNOWN;
 
-               size += flash_get_size (CFG_FLASH_BASE, info);
+               size += flash_get_size (CONFIG_SYS_FLASH_BASE, info);
 
                if (i == 0)
-                       flashbase = CFG_FLASH_BASE;
+                       flashbase = CONFIG_SYS_FLASH_BASE;
                else
                        panic ("configured too many flash banks!\n");
                for (j = 0; j < info->sector_count; j++) {
@@ -102,18 +102,18 @@ ulong flash_init (void)
         * Protect monitor and environment sectors
         */
        flash_protect ( FLAG_PROTECT_SET,
-                       CFG_FLASH_BASE,
-                       CFG_FLASH_BASE + monitor_flash_len - 1,
+                       CONFIG_SYS_FLASH_BASE,
+                       CONFIG_SYS_FLASH_BASE + monitor_flash_len - 1,
                        &flash_info[0]);
 
        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]);
 
-#ifdef CFG_ENV_ADDR_REDUND
+#ifdef CONFIG_ENV_ADDR_REDUND
        flash_protect ( FLAG_PROTECT_SET,
-                       CFG_ENV_ADDR_REDUND,
-                       CFG_ENV_ADDR_REDUND + CFG_ENV_SIZE_REDUND - 1,
+                       CONFIG_ENV_ADDR_REDUND,
+                       CONFIG_ENV_ADDR_REDUND + CONFIG_ENV_SIZE_REDUND - 1,
                        &flash_info[0]);
 #endif
 
@@ -257,7 +257,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
                                result = *addr;
 
                                /* check timeout */
-                               if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
+                               if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
                                        MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
                                        chip1 = TMO;
                                        break;
@@ -281,10 +281,12 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
 
                        if (chip1 == ERR || chip2 == ERR) {
                                rc = ERR_PROG_ERROR;
+                               printf ("Flash erase error\n");
                                goto outahere;
                        }
                        if (chip1 == TMO) {
                                rc = ERR_TIMOUT;
+                               printf ("Flash erase timeout error\n");
                                goto outahere;
                        }
                }
@@ -340,7 +342,9 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
 #endif
        iflag = disable_interrupts ();
 
-       *addr = CMD_PROGRAM;
+       MEM_FLASH_ADDR1 = CMD_UNLOCK1;
+       MEM_FLASH_ADDR2 = CMD_UNLOCK2;
+       MEM_FLASH_ADDR1 = CMD_PROGRAM;
        *addr = data;
 
        /* arm simple, non interrupt dependent timer */
@@ -352,7 +356,7 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
                result = *addr;
 
                /* check timeout */
-               if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
+               if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
                        chip1 = ERR | TMO;
                        break;
                }
@@ -384,8 +388,13 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
 
        *addr = CMD_READ_ARRAY;
 
-       if (chip1 == ERR || chip2 == ERR || *addr != data)
+       if (chip1 == ERR || chip2 == ERR || *addr != data) {
                rc = ERR_PROG_ERROR;
+               printf ("Flash program error\n");
+               debug ("chip1: %#x, chip2: %#x, addr: %#lx *addr: %#lx, "
+                      "data: %#lx\n",
+                      chip1, chip2, addr, *addr, data);
+       }
 
        if (iflag)
                enable_interrupts ();
@@ -408,10 +417,6 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
        int l;
        int i, rc;
 
-       MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-       MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-       MEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;
-
        wp = (addr & ~3);       /* get lower word aligned address */
 
        /*
@@ -479,9 +484,6 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
 
        Done:
 
-       MEM_FLASH_ADDR = CMD_UNLOCK_BYPASS_RES1;
-       MEM_FLASH_ADDR = CMD_UNLOCK_BYPASS_RES2;
-
        return (rc);
 }
 
@@ -515,7 +517,7 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
                info->flash_id = FLASH_UNKNOWN;
                info->sector_count = 0;
                info->size = 0;
-               addr[0] = 0x00FF00FF;           /* restore read mode */
+               addr[0] = CMD_READ_ARRAY;       /* restore read mode */
                debug ("## flash_init: unknown manufacturer\n");
                return (0);                     /* no or unknown flash  */
        }
@@ -530,7 +532,7 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
                info->sector_count = 71;
                info->size = 0x00800000;
 
-               addr[0] = 0x00FF00FF;           /* restore read mode */
+               addr[0] = CMD_READ_ARRAY;       /* restore read mode */
                break;                          /* =>  8 MB             */
 
        case AMD_ID_LV640U:
@@ -538,7 +540,7 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
                info->sector_count = 128;
                info->size = 0x01000000;
 
-               addr[0] = 0x00F000F0;           /* restore read mode */
+               addr[0] = CMD_READ_ARRAY;       /* restore read mode */
                break;                          /* => 16 MB             */
 
        case MX_ID_LV320B:
@@ -546,21 +548,21 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
                info->sector_count = 71;
                info->size = 0x00800000;
 
-               addr[0] = 0x00FF00FF;           /* restore read mode */
+               addr[0] = CMD_READ_ARRAY;       /* restore read mode */
                break;                          /* =>  8 MB             */
 
        default:
                debug ("## flash_init: unknown flash chip\n");
                info->flash_id = FLASH_UNKNOWN;
-               addr[0] = 0x00FF00FF;           /* restore read mode */
+               addr[0] = CMD_READ_ARRAY;       /* restore read mode */
                return (0);                     /* => no or unknown flash */
 
        }
 
-       if (info->sector_count > CFG_MAX_FLASH_SECT) {
+       if (info->sector_count > CONFIG_SYS_MAX_FLASH_SECT) {
                printf ("** ERROR: sector count %d > max (%d) **\n",
-                       info->sector_count, CFG_MAX_FLASH_SECT);
-               info->sector_count = CFG_MAX_FLASH_SECT;
+                       info->sector_count, CONFIG_SYS_MAX_FLASH_SECT);
+               info->sector_count = CONFIG_SYS_MAX_FLASH_SECT;
        }
 
        return (info->size);