public inbox for linux-arm-kernel@lists.infradead.org 
 help / color / mirror / Atom feed
From: khilman@ti•com (Kevin Hilman)
To: linux-arm-kernel@lists•infradead.org
Subject: [PATCH 08/10] omap2+: Use dmtimer macros for clocksource
Date: Thu, 23 Jun 2011 10:10:50 -0700	[thread overview]
Message-ID: <87iprwa2xx.fsf@ti.com> (raw)
In-Reply-To: <20110620092345.357.11154.stgit@kaulin> (Tony Lindgren's message of "Mon, 20 Jun 2011 02:23:45 -0700")

Tony Lindgren <tony@atomide•com> writes:

> Use dmtimer macros for clocksource. As with the clockevent,
> this allows us to initialize the rest of dmtimer code later on.
>
> Note that eventually we will be initializing the timesource
> from init_early so sched_clock will work properly for
> CONFIG_PRINTK_TIME.
>
> Signed-off-by: Tony Lindgren <tony@atomide•com>
> Reviewed-by: Kevin Hilman <khilman@ti•com>
> ---
>  arch/arm/mach-omap2/timer-gp.c   |   64 +++++++++++++++++++++-----------------
>  arch/arm/plat-omap/counter_32k.c |    2 +
>  2 files changed, 37 insertions(+), 29 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
> index cf2ec85..52e295e 100644
> --- a/arch/arm/mach-omap2/timer-gp.c
> +++ b/arch/arm/mach-omap2/timer-gp.c
> @@ -262,20 +262,22 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
>   * sync counter.  See clocksource setup in plat-omap/counter_32k.c
>   */
>  
> -static void __init omap2_gp_clocksource_init(void)
> +static void __init omap2_gp_clocksource_init(int unused, const char *dummy)
>  {
>  	omap_init_clocksource_32k();
>  }
>  
>  #else
> +
> +static struct omap_dm_timer clksrc;
> +
>  /*
>   * clocksource
>   */
>  static DEFINE_CLOCK_DATA(cd);
> -static struct omap_dm_timer *gpt_clocksource;
>  static cycle_t clocksource_read_cycles(struct clocksource *cs)
>  {
> -	return (cycle_t)omap_dm_timer_read_counter(gpt_clocksource);
> +	return (cycle_t)__omap_dm_timer_read_counter(clksrc.io_base, 1);
>  }
>  
>  static struct clocksource clocksource_gpt = {
> @@ -290,43 +292,48 @@ static void notrace dmtimer_update_sched_clock(void)
>  {
>  	u32 cyc;
>  
> -	cyc = omap_dm_timer_read_counter(gpt_clocksource);
> +	cyc = __omap_dm_timer_read_counter(clksrc.io_base, 1);
>  
>  	update_sched_clock(&cd, cyc, (u32)~0);
>  }
>  
> -/* Setup free-running counter for clocksource */
> -static void __init omap2_gp_clocksource_init(void)
> +unsigned long long notrace sched_clock(void)
>  {
> -	static struct omap_dm_timer *gpt;
> -	u32 tick_rate;
> -	static char err1[] __initdata = KERN_ERR
> -		"%s: failed to request dm-timer\n";
> -	static char err2[] __initdata = KERN_ERR
> -		"%s: can't register clocksource!\n";
> +	u32 cyc = 0;
>  
> -	gpt = omap_dm_timer_request();
> -	if (!gpt)
> -		printk(err1, clocksource_gpt.name);
> -	gpt_clocksource = gpt;
> +	if (clksrc.reserved)
> +		cyc = __omap_dm_timer_read_counter(clksrc.io_base, 1);
>  
> -	omap_dm_timer_set_source(gpt, OMAP_TIMER_SRC_SYS_CLK);
> -	tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gpt));
> +	return cyc_to_sched_clock(&cd, cyc, (u32)~0);
> +}
> +
> +/* Setup free-running counter for clocksource */
> +static void __init omap2_gp_clocksource_init(int gptimer_id,
> +						const char *fck_source)
> +{
> +	int res;
> +
> +	res = omap_dm_timer_init_one(&clksrc, gptimer_id, fck_source);

This function makes calls into "real" driver, but is called from
sys_timer.init so happens before driver is initialized.


> +	BUG_ON(res);
>  
> -	omap_dm_timer_set_load_start(gpt, 1, 0);
> +	pr_info("OMAP clocksource: GPTIMER%d at %lu Hz\n",
> +		gptimer_id, clksrc.rate);
>  
> -	init_sched_clock(&cd, dmtimer_update_sched_clock, 32, tick_rate);
> +	omap_dm_timer_set_load_start(&clksrc, 1, 0);

Here's another call into the real driver.  I think you need
__omap_dm_timer_set_load_start() here.

> +	init_sched_clock(&cd, dmtimer_update_sched_clock, 32, clksrc.rate);
>  
> -	if (clocksource_register_hz(&clocksource_gpt, tick_rate))
> -		printk(err2, clocksource_gpt.name);
> +	if (clocksource_register_hz(&clocksource_gpt, clksrc.rate))
> +		pr_err("Could not register clocksource %s\n",
> +			clocksource_gpt.name);
>  }
>  #endif

Kevin

  parent reply	other threads:[~2011-06-23 17:10 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-20  9:23 [PATCH 00/10] init_early cleanup for omap init_irq and init_timer Tony Lindgren
2011-06-20  9:23 ` [PATCH 01/10] omap: Use separate init_irq functions to avoid cpu_is_omap tests early Tony Lindgren
2011-06-20  9:54   ` Russell King - ARM Linux
2011-06-20 10:14     ` Tony Lindgren
2011-06-27 17:08   ` Kevin Hilman
2011-06-20  9:23 ` [PATCH 02/10] omap: Set separate timer init functions to avoid cpu_is_omap tests Tony Lindgren
2011-06-20  9:23 ` [PATCH 03/10] omap: Move dmtimer defines to dmtimer.h Tony Lindgren
2011-06-20  9:56   ` Russell King - ARM Linux
2011-06-20 10:17     ` Tony Lindgren
2011-06-20  9:23 ` [PATCH 04/10] omap: Make a subset of dmtimer functions into inline functions Tony Lindgren
2011-06-20  9:23 ` [PATCH 05/10] omap2+: Use dmtimer macros for clockevent Tony Lindgren
2011-06-23 17:07   ` Kevin Hilman
2011-06-27  7:39     ` Tony Lindgren
2011-06-20  9:23 ` [PATCH 06/10] omap2+: Remove gptimer_wakeup for now Tony Lindgren
2011-06-20  9:39   ` Santosh Shilimkar
2011-06-20  9:48     ` Tony Lindgren
2011-06-23 15:05       ` Kevin Hilman
2011-06-23 15:13         ` Santosh Shilimkar
2011-06-27  8:08           ` Tony Lindgren
2011-06-27 16:30             ` Kevin Hilman
2011-06-27 18:16               ` Tony Lindgren
2011-06-27 17:32   ` Kevin Hilman
2011-06-27 19:19     ` Tony Lindgren
2011-06-27 21:16       ` Kevin Hilman
2011-06-20  9:23 ` [PATCH 07/10] omap2+: Reserve clocksource and timesource and initialize dmtimer later Tony Lindgren
2011-06-23 17:01   ` Kevin Hilman
2011-06-27  7:48     ` Tony Lindgren
2011-06-27 16:41       ` Kevin Hilman
2011-06-23 17:13   ` Kevin Hilman
2011-06-27  7:51     ` Tony Lindgren
2011-06-27 10:44       ` Tony Lindgren
2011-06-20  9:23 ` [PATCH 08/10] omap2+: Use dmtimer macros for clocksource Tony Lindgren
2011-06-23 15:28   ` Kevin Hilman
2011-06-23 16:47     ` Kevin Hilman
2011-06-23 17:10   ` Kevin Hilman [this message]
2011-06-27  7:54     ` Tony Lindgren
2011-06-27 10:48       ` Tony Lindgren
2011-06-27 16:41         ` Kevin Hilman
2011-06-20  9:23 ` [PATCH 09/10] omap2+: Remove omap2_gp_clockevent_set_gptimer Tony Lindgren
2011-06-20  9:23 ` [PATCH 10/10] omap2+: Rename timer-gp.c into timer.c to combine timer init functions Tony Lindgren
  -- strict thread matches above, loose matches on Subject: below --
2011-03-28 22:21 [PATCH 00/10] omap init_early changes for irq and timer init Tony Lindgren
2011-03-28 22:21 ` [PATCH 08/10] omap2+: Use dmtimer macros for clocksource Tony Lindgren

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=87iprwa2xx.fsf@ti.com \
    --to=khilman@ti$(echo .)com \
    --cc=linux-arm-kernel@lists$(echo .)infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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