From ec4c544bed9b026cdf93084fb0daa73ec53a9cda Mon Sep 17 00:00:00 2001 From: wdenk Date: Mon, 9 Feb 2004 23:12:24 +0000 Subject: 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 --- board/altera/common/flash.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) (limited to 'board/altera/common') diff --git a/board/altera/common/flash.c b/board/altera/common/flash.c index 0fa74ab..2638ea8 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); -- cgit v1.1