From: Stephan Linz <linz@li-pro.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 08/12] microblaze: timer: Prepare for device-tree initialization
Date: Mon, 09 Jul 2012 21:06:18 +0200 [thread overview]
Message-ID: <1341860778.3219.64.camel@keto> (raw)
In-Reply-To: <1341825639-23475-8-git-send-email-monstr@monstr.eu>
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 <monstr@monstr.eu>
> ---
> 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 <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))
> + ;
Hi Michal,
> + } else {
> + for (i = 0; i < (usec * XILINX_CLOCK_FREQ / 10000000); i++)
> + ;
this part should be enclosed by #ifdef XILINX_CLOCK_FREQ
br,
Stephan Linz
> + }
> }
> -#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;
> + 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) {
> + 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 8cf4266..ddbc862 100644
> --- a/arch/microblaze/lib/board.c
> +++ b/arch/microblaze/lib/board.c
> @@ -40,9 +40,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
> @@ -72,9 +69,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 44934eb..9f90107 100644
> --- a/include/configs/microblaze-generic.h
> +++ b/include/configs/microblaze-generic.h
> @@ -102,19 +102,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)
> # 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 */
--
Viele Gr??e,
Stephan Linz
______________________________________________________________________________
MB-Ref: http://www.li-pro.de/xilinx_mb:mbref:start
OpenDCC: http://www.li-pro.net/opendcc.phtml
PC/M: http://www.li-pro.net/pcm.phtml
Sourceforge: http://sourceforge.net/users/slz
Gitorious: https://gitorious.org/~slz
next prev parent reply other threads:[~2012-07-09 19:06 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-09 9:20 [U-Boot] [PATCH 01/12] microblaze: board: Remove compilation warning Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 02/12] microblaze: Remove extern from board.c Michal Simek
2012-07-09 21:10 ` Simon Glass
2012-07-10 8:24 ` Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 03/12] microblaze: intc: Clear interrupt code Michal Simek
2012-07-09 21:21 ` Simon Glass
2012-07-10 8:34 ` Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 04/12] microblaze: intc: Registering interrupt should return value Michal Simek
2012-07-09 21:22 ` Simon Glass
2012-07-10 8:52 ` Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 05/12] microblaze: intc: Coding style cleanup Michal Simek
2012-07-09 21:23 ` Simon Glass
2012-07-10 8:55 ` Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 06/12] microblaze: intc: Add device-tree driver configuration Michal Simek
2012-07-09 21:26 ` Simon Glass
2012-07-10 9:07 ` Michal Simek
2012-07-10 21:02 ` Simon Glass
2012-07-11 5:32 ` Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 07/12] microblaze: Move __udelay implementation Michal Simek
2012-07-09 21:28 ` Simon Glass
2012-07-10 8:25 ` Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 08/12] microblaze: timer: Prepare for device-tree initialization Michal Simek
2012-07-09 18:26 ` Stephan Linz
2012-07-10 8:11 ` Michal Simek
2012-07-09 19:06 ` Stephan Linz [this message]
2012-07-10 8:16 ` Michal Simek
2012-07-10 18:36 ` Stephan Linz
2012-07-11 6:07 ` Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 09/12] microblaze: timer: Add device-tree driver configuration Michal Simek
2012-07-09 18:25 ` Stephan Linz
2012-07-09 21:32 ` Simon Glass
2012-07-10 9:23 ` Michal Simek
2012-07-10 9:34 ` Michal Simek
2012-07-10 21:04 ` Simon Glass
2012-07-11 6:18 ` Michal Simek
2012-07-11 9:53 ` Simon Glass
2012-07-09 9:20 ` [U-Boot] [PATCH 10/12] microblaze: Call serial multi initialization Michal Simek
2012-07-09 21:32 ` Simon Glass
2012-07-10 8:27 ` Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 11/12] microblaze: Clean microblaze initialization Michal Simek
2012-07-09 9:20 ` [U-Boot] [PATCH 12/12] microblaze: board: Use bi_flashstart instead of CONFIG_SYS_FLASH_BASE Michal Simek
2012-07-09 21:08 ` [U-Boot] [PATCH 01/12] microblaze: board: Remove compilation warning Simon Glass
2012-07-10 8:17 ` Michal Simek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1341860778.3219.64.camel@keto \
--to=linz@li-pro.net \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox