From: Tony Lindgren <tony@atomide.com> To: Stephen Boyd <sboyd@codeaurora.org> Cc: linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, Russell King <linux@arm.linux.org.uk>, linux-kernel@vger.kernel.org Subject: Re: [PATCH 03/10] ARM: smp_twd: Divorce smp_twd from local timer API Date: Tue, 12 Mar 2013 10:06:41 -0700 [thread overview] Message-ID: <20130312170640.GC22059@atomide.com> (raw) In-Reply-To: <513E82EE.2040407@codeaurora.org> * Stephen Boyd <sboyd@codeaurora.org> [130311 18:25]: > On 03/11/13 15:50, Tony Lindgren wrote: > > * Stephen Boyd <sboyd@codeaurora.org> [130311 15:22]: > >> Ok. qemu works for me before applying my patches. I've added this into > >> the series before this patch to fix the boot issue. > > OK thanks: > > > > > > Actually, it's worse. From reading the code it looks like quite a few > other machines register a clockevent and get jiffies going so they can > calibrate the twd. I also see that Rob Herring's pull request to move > smp_twd to CLKSRC_OF_DECLARE is going to conflict with any changes I > make in the board files. I think we need to make the twd use the > late_time_init callback if there is no clock rate and ignore the other > patch I sent out a few hours ago. Basically, squash this into this 3/10 > patch. Looks reasonable to me to keep things working. Regards, Tony > ----8<----- > > diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c > index a1185d3..c58918f 100644 > --- a/arch/arm/kernel/smp_twd.c > +++ b/arch/arm/kernel/smp_twd.c > @@ -90,8 +90,10 @@ static int twd_timer_ack(void) > return 0; > } > > -static void twd_timer_stop(struct clock_event_device *clk) > +static void twd_timer_stop(void) > { > + struct clock_event_device *clk = __this_cpu_ptr(twd_evt); > + > twd_set_mode(CLOCK_EVT_MODE_UNUSED, clk); > disable_percpu_irq(clk->irq); > } > @@ -265,8 +267,9 @@ static void twd_get_clock(struct device_node *np) > /* > * Setup the local clock events for a CPU. > */ > -static int __cpuinit twd_timer_setup(struct clock_event_device *clk) > +static void __cpuinit twd_timer_setup(void) > { > + struct clock_event_device *clk = __this_cpu_ptr(twd_evt); > int cpu = smp_processor_id(); > > /* > @@ -275,9 +278,9 @@ static int __cpuinit twd_timer_setup(struct clock_event_device *clk) > */ > if (per_cpu(percpu_setup_called, cpu)) { > __raw_writel(0, twd_base + TWD_TIMER_CONTROL); > - clockevents_register_device(__this_cpu_ptr(twd_evt)); > + clockevents_register_device(clk); > enable_percpu_irq(clk->irq, 0); > - return 0; > + return; > } > per_cpu(percpu_setup_called, cpu) = true; > > @@ -302,20 +305,18 @@ static int __cpuinit twd_timer_setup(struct clock_event_device *clk) > 0xf, 0xffffffff); > enable_percpu_irq(clk->irq, 0); > > - return 0; > + return; > } > > static int __cpuinit twd_timer_cpu_notify(struct notifier_block *self, > unsigned long action, void *hcpu) > { > - struct clock_event_device *evt = this_cpu_ptr(twd_evt); > - > switch (action & ~CPU_TASKS_FROZEN) { > case CPU_STARTING: > - twd_timer_setup(evt); > + twd_timer_setup(); > break; > case CPU_DYING: > - twd_timer_stop(evt); > + twd_timer_stop(); > break; > } > > @@ -348,8 +349,15 @@ static int __init twd_local_timer_common_register(struct device_node *np) > > twd_get_clock(np); > > - /* Immediately configure the timer on the boot CPU */ > - twd_timer_setup(this_cpu_ptr(twd_evt)); > + /* > + * Immediately configure the timer on the boot CPU, unless we need > + * jiffies to be incrementing to calibrate the rate in which case > + * setup the timer in late_time_init. > + */ > + if (twd_timer_rate) > + twd_timer_setup(); > + else > + late_time_init = twd_timer_setup; > > return 0; > > > -- > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, > hosted by The Linux Foundation > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/
WARNING: multiple messages have this Message-ID (diff)
From: tony@atomide.com (Tony Lindgren) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 03/10] ARM: smp_twd: Divorce smp_twd from local timer API Date: Tue, 12 Mar 2013 10:06:41 -0700 [thread overview] Message-ID: <20130312170640.GC22059@atomide.com> (raw) In-Reply-To: <513E82EE.2040407@codeaurora.org> * Stephen Boyd <sboyd@codeaurora.org> [130311 18:25]: > On 03/11/13 15:50, Tony Lindgren wrote: > > * Stephen Boyd <sboyd@codeaurora.org> [130311 15:22]: > >> Ok. qemu works for me before applying my patches. I've added this into > >> the series before this patch to fix the boot issue. > > OK thanks: > > > > > > Actually, it's worse. From reading the code it looks like quite a few > other machines register a clockevent and get jiffies going so they can > calibrate the twd. I also see that Rob Herring's pull request to move > smp_twd to CLKSRC_OF_DECLARE is going to conflict with any changes I > make in the board files. I think we need to make the twd use the > late_time_init callback if there is no clock rate and ignore the other > patch I sent out a few hours ago. Basically, squash this into this 3/10 > patch. Looks reasonable to me to keep things working. Regards, Tony > ----8<----- > > diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c > index a1185d3..c58918f 100644 > --- a/arch/arm/kernel/smp_twd.c > +++ b/arch/arm/kernel/smp_twd.c > @@ -90,8 +90,10 @@ static int twd_timer_ack(void) > return 0; > } > > -static void twd_timer_stop(struct clock_event_device *clk) > +static void twd_timer_stop(void) > { > + struct clock_event_device *clk = __this_cpu_ptr(twd_evt); > + > twd_set_mode(CLOCK_EVT_MODE_UNUSED, clk); > disable_percpu_irq(clk->irq); > } > @@ -265,8 +267,9 @@ static void twd_get_clock(struct device_node *np) > /* > * Setup the local clock events for a CPU. > */ > -static int __cpuinit twd_timer_setup(struct clock_event_device *clk) > +static void __cpuinit twd_timer_setup(void) > { > + struct clock_event_device *clk = __this_cpu_ptr(twd_evt); > int cpu = smp_processor_id(); > > /* > @@ -275,9 +278,9 @@ static int __cpuinit twd_timer_setup(struct clock_event_device *clk) > */ > if (per_cpu(percpu_setup_called, cpu)) { > __raw_writel(0, twd_base + TWD_TIMER_CONTROL); > - clockevents_register_device(__this_cpu_ptr(twd_evt)); > + clockevents_register_device(clk); > enable_percpu_irq(clk->irq, 0); > - return 0; > + return; > } > per_cpu(percpu_setup_called, cpu) = true; > > @@ -302,20 +305,18 @@ static int __cpuinit twd_timer_setup(struct clock_event_device *clk) > 0xf, 0xffffffff); > enable_percpu_irq(clk->irq, 0); > > - return 0; > + return; > } > > static int __cpuinit twd_timer_cpu_notify(struct notifier_block *self, > unsigned long action, void *hcpu) > { > - struct clock_event_device *evt = this_cpu_ptr(twd_evt); > - > switch (action & ~CPU_TASKS_FROZEN) { > case CPU_STARTING: > - twd_timer_setup(evt); > + twd_timer_setup(); > break; > case CPU_DYING: > - twd_timer_stop(evt); > + twd_timer_stop(); > break; > } > > @@ -348,8 +349,15 @@ static int __init twd_local_timer_common_register(struct device_node *np) > > twd_get_clock(np); > > - /* Immediately configure the timer on the boot CPU */ > - twd_timer_setup(this_cpu_ptr(twd_evt)); > + /* > + * Immediately configure the timer on the boot CPU, unless we need > + * jiffies to be incrementing to calibrate the rate in which case > + * setup the timer in late_time_init. > + */ > + if (twd_timer_rate) > + twd_timer_setup(); > + else > + late_time_init = twd_timer_setup; > > return 0; > > > -- > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, > hosted by The Linux Foundation > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo at vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2013-03-12 17:06 UTC|newest] Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-03-07 0:03 [PATCHv2 0/10] Remove ARM local timer API Stephen Boyd 2013-03-07 0:03 ` Stephen Boyd 2013-03-07 0:03 ` [PATCH 01/10] clocksource: add generic dummy timer driver Stephen Boyd 2013-03-07 0:03 ` Stephen Boyd 2013-03-07 14:00 ` Thomas Gleixner 2013-03-07 14:00 ` Thomas Gleixner 2013-03-07 21:41 ` Stephen Boyd 2013-03-07 21:41 ` Stephen Boyd 2013-03-07 0:03 ` [PATCH 02/10] ARM: smp: Remove duplicate dummy timer implementation Stephen Boyd 2013-03-07 0:03 ` Stephen Boyd 2013-03-07 0:03 ` Stephen Boyd 2013-03-07 0:03 ` [PATCH 03/10] ARM: smp_twd: Divorce smp_twd from local timer API Stephen Boyd 2013-03-07 0:03 ` Stephen Boyd 2013-03-08 0:40 ` Tony Lindgren 2013-03-08 0:40 ` Tony Lindgren 2013-03-08 1:14 ` Stephen Boyd 2013-03-08 1:14 ` Stephen Boyd 2013-03-08 18:07 ` Tony Lindgren 2013-03-08 18:07 ` Tony Lindgren 2013-03-08 18:17 ` Stephen Boyd 2013-03-08 18:17 ` Stephen Boyd 2013-03-08 19:48 ` Tony Lindgren 2013-03-08 19:48 ` Tony Lindgren 2013-03-08 19:50 ` Stephen Boyd 2013-03-08 19:50 ` Stephen Boyd 2013-03-08 20:08 ` Tony Lindgren 2013-03-08 20:08 ` Tony Lindgren 2013-03-08 20:17 ` Stephen Boyd 2013-03-08 20:17 ` Stephen Boyd 2013-03-08 20:29 ` Tony Lindgren 2013-03-08 20:29 ` Tony Lindgren 2013-03-09 1:06 ` Stephen Boyd 2013-03-09 1:06 ` Stephen Boyd 2013-03-11 17:28 ` Tony Lindgren 2013-03-11 17:28 ` Tony Lindgren 2013-03-11 22:17 ` Stephen Boyd 2013-03-11 22:17 ` Stephen Boyd 2013-03-11 22:50 ` Tony Lindgren 2013-03-11 22:50 ` Tony Lindgren 2013-03-12 1:20 ` Stephen Boyd 2013-03-12 1:20 ` Stephen Boyd 2013-03-12 17:06 ` Tony Lindgren [this message] 2013-03-12 17:06 ` Tony Lindgren 2013-03-07 0:04 ` [PATCH 04/10] ARM: OMAP2+: Divorce " Stephen Boyd 2013-03-07 0:04 ` Stephen Boyd 2013-03-08 19:50 ` Tony Lindgren 2013-03-08 19:50 ` Tony Lindgren 2013-03-11 15:29 ` Santosh Shilimkar 2013-03-11 15:29 ` Santosh Shilimkar 2013-03-11 15:29 ` Santosh Shilimkar 2013-03-07 0:04 ` [PATCH 05/10] ARM: EXYNOS4: Divorce mct " Stephen Boyd 2013-03-07 0:04 ` Stephen Boyd 2013-03-07 0:04 ` Stephen Boyd 2013-03-07 0:04 ` [PATCH 06/10] ARM: PRIMA2: Divorce timer-marco " Stephen Boyd 2013-03-07 0:04 ` Stephen Boyd 2013-03-07 0:04 ` [PATCH 07/10] ARM: msm: Divorce msm_timer " Stephen Boyd 2013-03-07 0:04 ` Stephen Boyd 2013-03-07 0:04 ` [PATCH 08/10] clocksource: time-armada-370-xp: Fix sparse warning Stephen Boyd 2013-03-07 0:04 ` Stephen Boyd 2013-03-07 0:04 ` [PATCH 09/10] clocksource: time-armada-370-xp: Divorce from local timer API Stephen Boyd 2013-03-07 0:04 ` Stephen Boyd 2013-03-07 0:04 ` [PATCH 10/10] ARM: smp: Remove " Stephen Boyd 2013-03-07 0:04 ` Stephen Boyd 2013-03-08 19:55 ` Tony Lindgren 2013-03-08 19:55 ` 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=20130312170640.GC22059@atomide.com \ --to=tony@atomide.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux@arm.linux.org.uk \ --cc=sboyd@codeaurora.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.