From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Simek Date: Tue, 10 Jul 2012 10:11:32 +0200 Subject: [U-Boot] [PATCH 08/12] microblaze: timer: Prepare for device-tree initialization In-Reply-To: <1341858364.3219.62.camel@keto> References: <1341825639-23475-1-git-send-email-monstr@monstr.eu> <1341825639-23475-8-git-send-email-monstr@monstr.eu> <1341858364.3219.62.camel@keto> Message-ID: <4FFBE3B4.7060902@monstr.eu> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 07/09/2012 08:26 PM, Stephan Linz wrote: > Hi Michal, > > Am Montag, den 09.07.2012, 11:20 +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 >> --- >> 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..dfaaaf5 100644 >> --- a/arch/microblaze/cpu/timer.c >> +++ b/arch/microblaze/cpu/timer.c >> @@ -27,42 +27,30 @@ >> #include >> >> 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); >> + u32 irq = 0; > > should be int irq = -1; (see below) > >> + 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&& irq&& preload) { > > it should be: > > if (tmr&& irq>= 0&& preload) { > > irq valid --> irq>= 0 > irq invalid --> irq == -1 Correct - will be in the v2. Thanks, Michal -- Michal Simek, Ing. (M.Eng) w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/ Microblaze U-BOOT custodian