summaryrefslogtreecommitdiff
path: root/board/altera/common/flash.c
diff options
context:
space:
mode:
authorwdenk <wdenk>2004-02-09 23:12:24 +0000
committerwdenk <wdenk>2004-02-09 23:12:24 +0000
commitec4c544bed9b026cdf93084fb0daa73ec53a9cda (patch)
treef34aa12b9723120921bf1b34f10579d7c803f687 /board/altera/common/flash.c
parentb98fff1d6acc57cc54f01740028535ac095237cd (diff)
Patches by Stephan Linz, 30 Jan 2004:
1: - board/altera/common/flash.c:flash_erase(): o allow interrupts befor get_timer() call o check-up each erased sector and avoid unexpected timeouts - board/altera/dk1c20/dk1s10.c:board_early_init_f(): o enclose sevenseg_set() in cpp condition - remove the ASMI configuration for DK1S10_standard_32 (never present) - fix some typed in mistakes in the NIOS documentation 2: - split DK1C20 configuration into several header files: o two new files for each NIOS CPU description o U-Boot related part is remaining in DK1C20.h 3: - split DK1S10 configuration into several header files: o two new files for each NIOS CPU description o U-Boot related part is remaining in DK1S10.h 4: - Add support for the Microtronix Linux Development Kit NIOS CPU configuration at the Altera Nios Development Kit, Stratix Edition (DK-1S10) 5: - Add documentation for the Altera Nios Development Kit, Stratix Edition (DK-1S10) 6: - Add support for the Nios Serial Peripharel Interface (SPI) (master only) 7: - Add support for the common U-Boot SPI framework at RTC driver DS1306
Diffstat (limited to 'board/altera/common/flash.c')
-rw-r--r--board/altera/common/flash.c40
1 files changed, 22 insertions, 18 deletions
diff --git a/board/altera/common/flash.c b/board/altera/common/flash.c
index 0fa74abfd4..2638ea899a 100644
--- a/board/altera/common/flash.c
+++ b/board/altera/common/flash.c
@@ -71,7 +71,6 @@ 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;
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.
@@ -114,27 +119,26 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
*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) > CFG_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);