[U-Boot-Users] [PATCH] Nios: timer with variable period; POST preparation
Stephan Linz
linz at mazet.de
Fri Feb 13 09:45:05 CET 2004
Hi all,
Hi Scott,
here are two small patches I need for my upcoming new Nios board support.
Scott, could you check-up the patches at your DK1C20 board and note Wolfgang
and me so we can put it into CVS ? -- thanks.
1/2 tick timer supports variable (programmable) periods (min. 1 ms tick)
2/2 some small preparation for upcoming POST support for Nios arch
--
Best regards,
Stephan Linz
-------------- next part --------------
* Patch by Stephan Linz, 12 Feb 2004
- add support for NIOS timer with variable period preload counter value
-------------- next part --------------
diff -purN -x CVS u-boot-20040210cvs/cpu/nios/interrupts.c u-boot-20040210cvs-timer_varper/cpu/nios/interrupts.c
--- u-boot-20040210cvs/cpu/nios/interrupts.c 2004-01-03 19:43:49.000000000 +0000
+++ u-boot-20040210cvs-timer_varper/cpu/nios/interrupts.c 2004-02-12 22:32:37.000000000 +0000
@@ -128,6 +128,10 @@ int interrupt_init (void)
tmr->control &= ~NIOS_TIMER_ITO;
tmr->control |= NIOS_TIMER_STOP;
+#if defined(CFG_NIOS_TMRCNT)
+ tmr->periodl = CFG_NIOS_TMRCNT & 0xffff;
+ tmr->periodh = (CFG_NIOS_TMRCNT >> 16) & 0xffff;
+#endif
#endif
for (vec=0; vec<64; vec++ ) {
diff -purN -x CVS u-boot-20040210cvs/doc/README.nios u-boot-20040210cvs-timer_varper/doc/README.nios
--- u-boot-20040210cvs/doc/README.nios 2004-02-09 23:12:25.000000000 +0000
+++ u-boot-20040210cvs-timer_varper/doc/README.nios 2004-02-12 22:42:32.000000000 +0000
@@ -100,6 +100,9 @@ CFG_NIOS_TMRIRQ -- the interrupt request
CFG_NIOS_TMRMS -- the period of the timer in milliseconds.
+CFG_NIOS_TMRCNT -- the preloadable counter value for the timer if it has
+ no fixed period.
+
CFG_NIOS_ASMIBASE -- the base address of the ASMI peripheral.
(standard-32: na_asmi_base).
diff -purN -x CVS u-boot-20040210cvs/include/configs/DK1C20.h u-boot-20040210cvs-timer_varper/include/configs/DK1C20.h
--- u-boot-20040210cvs/include/configs/DK1C20.h 2004-02-09 23:12:25.000000000 +0000
+++ u-boot-20040210cvs-timer_varper/include/configs/DK1C20.h 2004-02-12 22:38:49.000000000 +0000
@@ -146,17 +146,60 @@
#if (CFG_NIOS_CPU_TICK_TIMER == 0)
-#error *** CFG_ERROR: tick timer at TIMER0 not supported, expand your config.h
+#define CFG_NIOS_TMRBASE CFG_NIOS_CPU_TIMER0 /* TIMER0 as tick */
+#define CFG_NIOS_TMRIRQ CFG_NIOS_CPU_TIMER0_IRQ
+
+#if (CFG_NIOS_CPU_TIMER0_FP == 1) /* fixed period */
+
+#if (CFG_NIOS_CPU_TIMER0_PER >= CFG_HZ)
+#define CFG_NIOS_TMRMS (CFG_NIOS_CPU_TIMER0_PER / CFG_HZ)
+#else
+#error *** CFG_ERROR: you have to use a timer periode greater than CFG_HZ
+#endif
+
+#undef CFG_NIOS_TMRCNT /* no preloadable counter value */
+
+#elif (CFG_NIOS_CPU_TIMER0_FP == 0) /* variable period */
+
+#if (CFG_HZ <= 1000)
+#define CFG_NIOS_TMRMS (1000 / CFG_HZ)
+#else
+#error *** CFG_ERROR: sorry, CFG_HZ have to be less than 1000
+#endif
+
+#define CFG_NIOS_TMRCNT (CONFIG_SYS_CLK_FREQ / CFG_HZ)
+
+#else
+#error *** CFG_ERROR: you have to define CFG_NIOS_CPU_TIMER0_FP correct
+#endif
#elif (CFG_NIOS_CPU_TICK_TIMER == 1)
#define CFG_NIOS_TMRBASE CFG_NIOS_CPU_TIMER1 /* TIMER1 as tick */
#define CFG_NIOS_TMRIRQ CFG_NIOS_CPU_TIMER1_IRQ
+#if (CFG_NIOS_CPU_TIMER1_FP == 1) /* fixed period */
+
#if (CFG_NIOS_CPU_TIMER1_PER >= CFG_HZ)
#define CFG_NIOS_TMRMS (CFG_NIOS_CPU_TIMER1_PER / CFG_HZ)
#else
-#error *** CFG_ERROR: you have to use a timer periode of more than CFG_HZ
+#error *** CFG_ERROR: you have to use a timer periode greater than CFG_HZ
+#endif
+
+#undef CFG_NIOS_TMRCNT /* no preloadable counter value */
+
+#elif (CFG_NIOS_CPU_TIMER1_FP == 0) /* variable period */
+
+#if (CFG_HZ <= 1000)
+#define CFG_NIOS_TMRMS (1000 / CFG_HZ)
+#else
+#error *** CFG_ERROR: sorry, CFG_HZ have to be less than 1000
+#endif
+
+#define CFG_NIOS_TMRCNT (CONFIG_SYS_CLK_FREQ / CFG_HZ)
+
+#else
+#error *** CFG_ERROR: you have to define CFG_NIOS_CPU_TIMER1_FP correct
#endif
#endif /* CFG_NIOS_CPU_TICK_TIMER */
diff -purN -x CVS u-boot-20040210cvs/include/configs/DK1S10.h u-boot-20040210cvs-timer_varper/include/configs/DK1S10.h
--- u-boot-20040210cvs/include/configs/DK1S10.h 2004-02-09 23:12:26.000000000 +0000
+++ u-boot-20040210cvs-timer_varper/include/configs/DK1S10.h 2004-02-12 22:36:27.000000000 +0000
@@ -168,10 +168,28 @@
#define CFG_NIOS_TMRBASE CFG_NIOS_CPU_TIMER0 /* TIMER0 as tick */
#define CFG_NIOS_TMRIRQ CFG_NIOS_CPU_TIMER0_IRQ
+#if (CFG_NIOS_CPU_TIMER0_FP == 1) /* fixed period */
+
#if (CFG_NIOS_CPU_TIMER0_PER >= CFG_HZ)
#define CFG_NIOS_TMRMS (CFG_NIOS_CPU_TIMER0_PER / CFG_HZ)
#else
-#error *** CFG_ERROR: you have to use a timer periode of more than CFG_HZ
+#error *** CFG_ERROR: you have to use a timer periode greater than CFG_HZ
+#endif
+
+#undef CFG_NIOS_TMRCNT /* no preloadable counter value */
+
+#elif (CFG_NIOS_CPU_TIMER0_FP == 0) /* variable period */
+
+#if (CFG_HZ <= 1000)
+#define CFG_NIOS_TMRMS (1000 / CFG_HZ)
+#else
+#error *** CFG_ERROR: sorry, CFG_HZ have to be less than 1000
+#endif
+
+#define CFG_NIOS_TMRCNT (CONFIG_SYS_CLK_FREQ / CFG_HZ)
+
+#else
+#error *** CFG_ERROR: you have to define CFG_NIOS_CPU_TIMER0_FP correct
#endif
#elif (CFG_NIOS_CPU_TICK_TIMER == 1)
@@ -179,10 +197,28 @@
#define CFG_NIOS_TMRBASE CFG_NIOS_CPU_TIMER1 /* TIMER1 as tick */
#define CFG_NIOS_TMRIRQ CFG_NIOS_CPU_TIMER1_IRQ
+#if (CFG_NIOS_CPU_TIMER1_FP == 1) /* fixed period */
+
#if (CFG_NIOS_CPU_TIMER1_PER >= CFG_HZ)
#define CFG_NIOS_TMRMS (CFG_NIOS_CPU_TIMER1_PER / CFG_HZ)
#else
-#error *** CFG_ERROR: you have to use a timer periode of more than CFG_HZ
+#error *** CFG_ERROR: you have to use a timer periode greater than CFG_HZ
+#endif
+
+#undef CFG_NIOS_TMRCNT /* no preloadable counter value */
+
+#elif (CFG_NIOS_CPU_TIMER1_FP == 0) /* variable period */
+
+#if (CFG_HZ <= 1000)
+#define CFG_NIOS_TMRMS (1000 / CFG_HZ)
+#else
+#error *** CFG_ERROR: sorry, CFG_HZ have to be less than 1000
+#endif
+
+#define CFG_NIOS_TMRCNT (CONFIG_SYS_CLK_FREQ / CFG_HZ)
+
+#else
+#error *** CFG_ERROR: you have to define CFG_NIOS_CPU_TIMER1_FP correct
#endif
#endif /* CFG_NIOS_CPU_TICK_TIMER */
-------------- next part --------------
* Patch by Stephan Linz, 12 Feb 2004
- prepare POST framework support for NIOS targets
-------------- next part --------------
diff -purN -x CVS u-boot-20040210cvs-timer_varper/include/asm-nios/cache.h u-boot-20040210cvs-prepare_post/include/asm-nios/cache.h
--- u-boot-20040210cvs-timer_varper/include/asm-nios/cache.h 1970-01-01 00:00:00.000000000 +0000
+++ u-boot-20040210cvs-prepare_post/include/asm-nios/cache.h 2004-02-12 23:18:00.000000000 +0000
@@ -0,0 +1 @@
+/*FIXME: Implement this! */
diff -purN -x CVS u-boot-20040210cvs-timer_varper/include/asm-nios/global_data.h u-boot-20040210cvs-prepare_post/include/asm-nios/global_data.h
--- u-boot-20040210cvs-timer_varper/include/asm-nios/global_data.h 2003-10-10 10:05:43.000000000 +0000
+++ u-boot-20040210cvs-prepare_post/include/asm-nios/global_data.h 2004-02-12 23:18:00.000000000 +0000
@@ -34,6 +34,10 @@ typedef struct global_data {
unsigned long reloc_off; /* Relocation Offset */
unsigned long env_addr; /* Address of Environment struct */
unsigned long env_valid; /* Checksum of Environment valid */
+#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
+ unsigned long post_log_word; /* Record POST activities */
+ unsigned long post_init_f_time; /* When post_init_f started */
+#endif
void **jt; /* Standalone app jump table */
} gd_t;
More information about the U-Boot
mailing list