sandbox: Switch over to generic board
[oweals/u-boot.git] / board / altera / common / flash.c
index 0fa74abfd47033cb53119454a4fa6a6e7cd617c0..83bb7c222c63687743e935df91949fec99f7c325 100644 (file)
@@ -25,7 +25,7 @@
 #include <common.h>
 #include <nios.h>
 
-flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];
 
 /*--------------------------------------------------------------------*/
 void flash_print_info (flash_info_t * info)
@@ -68,10 +68,9 @@ void flash_print_info (flash_info_t * info)
 
 int flash_erase (flash_info_t * info, int s_first, int s_last)
 {
-       volatile CFG_FLASH_WORD_SIZE *addr = (CFG_FLASH_WORD_SIZE *) (info->start[0]);
-       volatile CFG_FLASH_WORD_SIZE *addr2;
+       volatile CONFIG_SYS_FLASH_WORD_SIZE *addr = (CONFIG_SYS_FLASH_WORD_SIZE *) (info->start[0]);
+       volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2;
        int prot, sect;
-       int any = 0;
        unsigned oldpri;
        ulong start;
 
@@ -94,6 +93,12 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
                printf ("\n");
        }
 
+#ifdef DEBUG
+       for (sect = s_first; sect <= s_last; sect++) {
+               printf("- Erase: Sect: %i @ 0x%08x\n", sect,  info->start[sect]);
+       }
+#endif
+
        /* NOTE: disabling interrupts on Nios can be very bad since it
         * also disables the LO_LIMIT exception. It's better here to
         * set the interrupt priority to 3 & restore it when we're done.
@@ -107,34 +112,33 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
         */
        for (sect = s_first; sect <= s_last; sect++) {
                if (info->protect[sect] == 0) { /* not protected */
-                       addr2 = (CFG_FLASH_WORD_SIZE *) (info->start[sect]);
+                       addr2 = (CONFIG_SYS_FLASH_WORD_SIZE *) (info->start[sect]);
                        *addr = 0xaa;
                        *addr = 0x55;
                        *addr = 0x80;
                        *addr = 0xaa;
                        *addr = 0x55;
                        *addr2 = 0x30;
-                       any = 1;
-               }
-       }
-
-       /* Now just wait for 0xff & provide some user feedback while
-        * we wait.
-        */
-       if (any) {
-               addr2 = (CFG_FLASH_WORD_SIZE *) (info->start[sect]);
-               start = get_timer (0);
-               while (*addr2 != 0xff) {
-                       udelay (1000 * 1000);
-                       putc ('.');
-                       if (get_timer (start) > CFG_FLASH_ERASE_TOUT) {
-                               printf ("timeout\n");
-                               return 1;
+                       /* Now just wait for 0xff & provide some user
+                        * feedback while we wait. Here we have to grant
+                        * timer interrupts. Otherwise get_timer() can't
+                        * work right. */
+                       ipri(oldpri);
+                       start = get_timer (0);
+                       while (*addr2 != 0xff) {
+                               udelay (1000 * 1000);
+                               putc ('.');
+                               if (get_timer (start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
+                                       printf ("timeout\n");
+                                       return 1;
+                               }
                        }
+                       oldpri = ipri (3); /* disallow non important irqs again */
                }
-               printf ("\n");
        }
 
+       printf ("\n");
+
        /* Restore interrupt priority */
        ipri (oldpri);
 
@@ -177,7 +181,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
                /* Verify write */
                start = get_timer (0);
                while (*dst != b) {
-                       if (get_timer (start) > CFG_FLASH_WRITE_TOUT) {
+                       if (get_timer (start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
                                ipri (oldpri);
                                return 1;
                        }