public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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

  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