Hi Michal, looks fine, but ... (see below)
Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek: > microblaze: Fix CONFIG_SYS_HZ usage in board config > > Do not use hardcoded value. Use CONFIG_SYS_HZ instead. > Separate static configuration to single block. > > Signed-off-by: Michal Simek <mon...@monstr.eu> > > --- > v2: Fix irq type irq == -1 means no IRQ > --- > arch/microblaze/cpu/timer.c | 69 ++++++++++++----------- > arch/microblaze/include/asm/microblaze_timer.h | 3 + > arch/microblaze/lib/board.c | 5 -- > include/configs/microblaze-generic.h | 12 +---- > 4 files changed, 41 insertions(+), 48 deletions(-) > > diff --git a/arch/microblaze/cpu/timer.c b/arch/microblaze/cpu/timer.c > index cc6b897..1330401 100644 > --- a/arch/microblaze/cpu/timer.c > +++ b/arch/microblaze/cpu/timer.c > @@ -27,42 +27,30 @@ > #include <asm/microblaze_intc.h> > > volatile int timestamp = 0; > +microblaze_timer_t *tmr; > > -#ifdef CONFIG_SYS_TIMER_0 > ulong get_timer (ulong base) > { > - return (timestamp - base); > + if (tmr) > + return timestamp - base; > + return timestamp++ - base; > } > -#else > -ulong get_timer (ulong base) > -{ > - return (timestamp++ - base); > -} > -#endif > > -#ifdef CONFIG_SYS_TIMER_0 > void __udelay(unsigned long usec) > { > - int i; > + u32 i; > > - i = get_timer(0); > - while ((get_timer(0) - i) < (usec / 1000)) > - ; > + if (tmr) { > + i = get_timer(0); > + while ((get_timer(0) - i) < (usec / 1000)) > + ; > + } else { > + for (i = 0; i < (usec * XILINX_CLOCK_FREQ / 10000000); i++) > + ; > + } > } > -#else > -void __udelay(unsigned long usec) > -{ > - unsigned int i; > > - for (i = 0; i < (usec * CONFIG_XILINX_CLOCK_FREQ / 10000000); i++) > - ; > -} > -#endif > - > -#ifdef CONFIG_SYS_TIMER_0 > -microblaze_timer_t *tmr = (microblaze_timer_t *) (CONFIG_SYS_TIMER_0_ADDR); > - > -void timer_isr (void *arg) > +static void timer_isr(void *arg) > { > timestamp++; > tmr->control = tmr->control | TIMER_INTERRUPT; > @@ -70,15 +58,30 @@ void timer_isr (void *arg) > > int timer_init (void) > { > - tmr->loadreg = CONFIG_SYS_TIMER_0_PRELOAD; > - tmr->control = TIMER_INTERRUPT | TIMER_RESET; > - tmr->control = > - TIMER_ENABLE | TIMER_ENABLE_INTR | TIMER_RELOAD | TIMER_DOWN_COUNT; > - timestamp = 0; > - install_interrupt_handler (CONFIG_SYS_TIMER_0_IRQ, timer_isr, (void > *)tmr); > + int irq = -1; > + u32 preload = 0; > + u32 ret = 0; > + > +#if defined(CONFIG_SYS_TIMER_0_ADDR) && defined(CONFIG_SYS_INTC_0_NUM) > + preload = XILINX_CLOCK_FREQ / CONFIG_SYS_HZ; > + irq = CONFIG_SYS_TIMER_0_IRQ; > + tmr = (microblaze_timer_t *) (CONFIG_SYS_TIMER_0_ADDR); > +#endif > + > + if (tmr && preload && irq >= 0) { > + tmr->loadreg = preload; > + tmr->control = TIMER_INTERRUPT | TIMER_RESET; > + tmr->control = TIMER_ENABLE | TIMER_ENABLE_INTR |\ > + TIMER_RELOAD | TIMER_DOWN_COUNT; > + timestamp = 0; > + ret = install_interrupt_handler (irq, timer_isr, (void *)tmr); > + if (ret) > + tmr = NULL; > + } > + > + /* No problem if timer is not found/initialized */ > return 0; > } > -#endif > > /* > * This function is derived from PowerPC code (read timebase as long long). > diff --git a/arch/microblaze/include/asm/microblaze_timer.h > b/arch/microblaze/include/asm/microblaze_timer.h > index 844c8db..28e8b02 100644 > --- a/arch/microblaze/include/asm/microblaze_timer.h > +++ b/arch/microblaze/include/asm/microblaze_timer.h > @@ -39,3 +39,6 @@ typedef volatile struct microblaze_timer_t { > int loadreg; /* load register TLR */ > int counter; /* timer/counter register */ > } microblaze_timer_t; > + > +int timer_init(void); > + > diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c > index b5f21d8..fde109f 100644 > --- a/arch/microblaze/lib/board.c > +++ b/arch/microblaze/lib/board.c > @@ -42,9 +42,6 @@ DECLARE_GLOBAL_DATA_PTR; > #ifdef CONFIG_SYS_GPIO_0 > extern int gpio_init (void); > #endif > -#ifdef CONFIG_SYS_TIMER_0 > -extern int timer_init (void); > -#endif > #ifdef CONFIG_SYS_FSL_2 > extern void fsl_init2 (void); > #endif > @@ -74,9 +71,7 @@ init_fnc_t *init_sequence[] = { > gpio_init, > #endif > interrupts_init, > -#ifdef CONFIG_SYS_TIMER_0 > timer_init, > -#endif > #ifdef CONFIG_SYS_FSL_2 > fsl_init2, > #endif > diff --git a/include/configs/microblaze-generic.h > b/include/configs/microblaze-generic.h > index 1266cf7..21ddb2b 100644 > --- a/include/configs/microblaze-generic.h > +++ b/include/configs/microblaze-generic.h > @@ -115,19 +115,11 @@ > #endif > > /* timer */ > -#ifdef XILINX_TIMER_BASEADDR > -# if (XILINX_TIMER_IRQ != -1) > -# define CONFIG_SYS_TIMER_0 1 > +#if defined(XILINX_TIMER_BASEADD) && defined(XILINX_TIMER_IRQ) typo here XILINX_TIMER_BASEADD <--- missing 'R' br, Stephan > # define CONFIG_SYS_TIMER_0_ADDR XILINX_TIMER_BASEADDR > # define CONFIG_SYS_TIMER_0_IRQ XILINX_TIMER_IRQ > -# define FREQUENCE XILINX_CLOCK_FREQ > -# define CONFIG_SYS_TIMER_0_PRELOAD ( FREQUENCE/1000 ) > -# endif > -#elif XILINX_CLOCK_FREQ > -# define CONFIG_XILINX_CLOCK_FREQ XILINX_CLOCK_FREQ > -#else > -# error BAD CLOCK FREQ > #endif > + > /* FSL */ > /* #define CONFIG_SYS_FSL_2 */ > /* #define FSL_INTR_2 1 */ _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot