From: daniel.lezcano@linaro.org (Daniel Lezcano)
To: linux-snps-arc@lists.infradead.org
Subject: [PATCH v4 1/5] ARC: clockevent: DT based probe
Date: Wed, 13 Apr 2016 14:59:22 +0200 [thread overview]
Message-ID: <20160413125922.GA14715@linaro.org> (raw)
In-Reply-To: <1460547605-26184-2-git-send-email-vgupta@synopsys.com>
On Wed, Apr 13, 2016@05:10:01PM +0530, Vineet Gupta wrote:
> - timer frequency is derived from DT (no longer rely on top level
> DT "clock-frequency" probed early and exported by asm/clk.h)
>
> - TIMER0_IRQ need not be exported across arch code, confined to intc as
> it is property of same
>
> Cc: Daniel Lezcano <daniel.lezcano at linaro.org>
> Signed-off-by: Vineet Gupta <vgupta at synopsys.com>
> ---
[ ... ]
> +static void noinline arc_get_timer_clk(struct device_node *node)
> +{
> + struct clk *clk;
> + int ret;
> +
> + clk = of_clk_get(node, 0);
> + if (IS_ERR(clk))
> + panic("Can't get timer clock");
> +
Don't panic here. Change the function to return an error and let the
caller to handle it.
> + ret = clk_prepare_enable(clk);
> + if (ret)
> + pr_err("Couldn't enable parent clock\n");
> +
> + arc_timer_freq = clk_get_rate(clk);
> +}
> +
[ ... ]
> +static void __init arc_clockevent_setup(struct device_node *node)
> {
> struct clock_event_device *evt = this_cpu_ptr(&arc_clockevent_device);
> int ret;
>
> register_cpu_notifier(&arc_timer_cpu_nb);
>
> + arc_timer_irq = irq_of_parse_and_map(node, 0);
> + if (arc_timer_irq <= 0)
> + panic("Can't parse IRQ");
> +
> + arc_get_timer_clk(node);
Connected to the comment above, check the return code.
> +
> + evt->irq = arc_timer_irq;
> evt->cpumask = cpumask_of(smp_processor_id());
> - clockevents_config_and_register(evt, arc_get_core_freq(),
> + clockevents_config_and_register(evt, arc_timer_freq,
> 0, ARC_TIMER_MAX);
>
> /* Needs apriori irq_set_percpu_devid() done in intc map function */
> @@ -291,6 +312,7 @@ static void __init arc_clockevent_setup(void)
>
> enable_percpu_irq(arc_timer_irq, 0);
> }
> +CLOCKSOURCE_OF_DECLARE(arc_clkevt, "snps,arc-timer", arc_clockevent_setup);
>
> /*
> * Called from start_kernel() - boot CPU only
> @@ -299,7 +321,6 @@ static void __init arc_clockevent_setup(void)
> * -Also sets up any global state needed for timer subsystem:
> * - for "counting" timer, registers a clocksource, usable across CPUs
> * (provided that underlying counter h/w is synchronized across cores)
> - * - for "event" timer, sets up TIMER0 IRQ (as that is platform agnostic)
> */
> void __init time_init(void)
> {
> @@ -315,7 +336,5 @@ void __init time_init(void)
> * CLK upto 4.29 GHz can be safely represented in 32 bits
> * because Max 32 bit number is 4,294,967,295
> */
> - clocksource_register_hz(&arc_counter, arc_get_core_freq());
> -
> - arc_clockevent_setup();
> + clocksource_register_hz(&arc_counter, arc_timer_freq);
> }
> --
> 2.5.0
>
WARNING: multiple messages have this Message-ID (diff)
From: Daniel Lezcano <daniel.lezcano@linaro.org>
To: Vineet Gupta <Vineet.Gupta1@synopsys.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Jason Cooper <jason@lakedaemon.net>,
linux-snps-arc@lists.infradead.org, linux-kernel@vger.kernel.org,
Noam Camus <noamc@ezchip.com>
Subject: Re: [PATCH v4 1/5] ARC: clockevent: DT based probe
Date: Wed, 13 Apr 2016 14:59:22 +0200 [thread overview]
Message-ID: <20160413125922.GA14715@linaro.org> (raw)
In-Reply-To: <1460547605-26184-2-git-send-email-vgupta@synopsys.com>
On Wed, Apr 13, 2016 at 05:10:01PM +0530, Vineet Gupta wrote:
> - timer frequency is derived from DT (no longer rely on top level
> DT "clock-frequency" probed early and exported by asm/clk.h)
>
> - TIMER0_IRQ need not be exported across arch code, confined to intc as
> it is property of same
>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> ---
[ ... ]
> +static void noinline arc_get_timer_clk(struct device_node *node)
> +{
> + struct clk *clk;
> + int ret;
> +
> + clk = of_clk_get(node, 0);
> + if (IS_ERR(clk))
> + panic("Can't get timer clock");
> +
Don't panic here. Change the function to return an error and let the
caller to handle it.
> + ret = clk_prepare_enable(clk);
> + if (ret)
> + pr_err("Couldn't enable parent clock\n");
> +
> + arc_timer_freq = clk_get_rate(clk);
> +}
> +
[ ... ]
> +static void __init arc_clockevent_setup(struct device_node *node)
> {
> struct clock_event_device *evt = this_cpu_ptr(&arc_clockevent_device);
> int ret;
>
> register_cpu_notifier(&arc_timer_cpu_nb);
>
> + arc_timer_irq = irq_of_parse_and_map(node, 0);
> + if (arc_timer_irq <= 0)
> + panic("Can't parse IRQ");
> +
> + arc_get_timer_clk(node);
Connected to the comment above, check the return code.
> +
> + evt->irq = arc_timer_irq;
> evt->cpumask = cpumask_of(smp_processor_id());
> - clockevents_config_and_register(evt, arc_get_core_freq(),
> + clockevents_config_and_register(evt, arc_timer_freq,
> 0, ARC_TIMER_MAX);
>
> /* Needs apriori irq_set_percpu_devid() done in intc map function */
> @@ -291,6 +312,7 @@ static void __init arc_clockevent_setup(void)
>
> enable_percpu_irq(arc_timer_irq, 0);
> }
> +CLOCKSOURCE_OF_DECLARE(arc_clkevt, "snps,arc-timer", arc_clockevent_setup);
>
> /*
> * Called from start_kernel() - boot CPU only
> @@ -299,7 +321,6 @@ static void __init arc_clockevent_setup(void)
> * -Also sets up any global state needed for timer subsystem:
> * - for "counting" timer, registers a clocksource, usable across CPUs
> * (provided that underlying counter h/w is synchronized across cores)
> - * - for "event" timer, sets up TIMER0 IRQ (as that is platform agnostic)
> */
> void __init time_init(void)
> {
> @@ -315,7 +336,5 @@ void __init time_init(void)
> * CLK upto 4.29 GHz can be safely represented in 32 bits
> * because Max 32 bit number is 4,294,967,295
> */
> - clocksource_register_hz(&arc_counter, arc_get_core_freq());
> -
> - arc_clockevent_setup();
> + clocksource_register_hz(&arc_counter, arc_timer_freq);
> }
> --
> 2.5.0
>
next prev parent reply other threads:[~2016-04-13 12:59 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-13 11:40 [PATCH v4 0/5] Modernize ARC clocksource/clockevent/intc drivers Vineet Gupta
2016-04-13 11:40 ` Vineet Gupta
2016-04-13 11:40 ` [PATCH v4 1/5] ARC: clockevent: DT based probe Vineet Gupta
2016-04-13 11:40 ` Vineet Gupta
2016-04-13 12:59 ` Daniel Lezcano [this message]
2016-04-13 12:59 ` Daniel Lezcano
2016-04-14 9:32 ` Vineet Gupta
2016-04-14 9:32 ` Vineet Gupta
2016-04-14 10:05 ` Daniel Lezcano
2016-04-14 10:05 ` Daniel Lezcano
2016-04-18 6:46 ` [PATCH v5] " Vineet Gupta
2016-04-18 6:46 ` Vineet Gupta
2016-04-18 9:08 ` Daniel Lezcano
2016-04-18 9:08 ` Daniel Lezcano
2016-04-13 11:40 ` [PATCH v4 2/5] ARC: clocksource: " Vineet Gupta
2016-04-13 11:40 ` Vineet Gupta
2016-04-13 16:22 ` Marc Zyngier
2016-04-13 16:22 ` Marc Zyngier
2016-04-14 9:26 ` Vineet Gupta
2016-04-14 9:26 ` Vineet Gupta
2016-04-14 9:32 ` Marc Zyngier
2016-04-14 9:32 ` Marc Zyngier
2016-04-14 9:36 ` Vineet Gupta
2016-04-14 9:36 ` Vineet Gupta
2016-04-13 11:40 ` [PATCH v4 3/5] ARC: irq: export some IRQs again Vineet Gupta
2016-04-13 11:40 ` Vineet Gupta
2016-04-13 11:40 ` [PATCH v4 4/5] ARC: [intc-*] Do a domain lookup in primary handler for hwirq -> linux virq Vineet Gupta
2016-04-13 11:40 ` Vineet Gupta
2016-04-13 11:40 ` [PATCH v4 5/5] ARC: [intc-*] switch to linear domain Vineet Gupta
2016-04-13 11:40 ` Vineet Gupta
2016-04-18 6:51 ` Vineet Gupta
2016-04-18 6:51 ` Vineet Gupta
2016-04-18 9:41 ` Marc Zyngier
2016-04-18 9:41 ` Marc Zyngier
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=20160413125922.GA14715@linaro.org \
--to=daniel.lezcano@linaro.org \
--cc=linux-snps-arc@lists.infradead.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: link
Be 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.