Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756873AbbEUWcd (ORCPT ); Thu, 21 May 2015 18:32:33 -0400 Received: from mail-qk0-f177.google.com ([209.85.220.177]:36301 "EHLO mail-qk0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755334AbbEUWcb (ORCPT ); Thu, 21 May 2015 18:32:31 -0400 MIME-Version: 1.0 In-Reply-To: <1432244260-14908-5-git-send-email-ezequiel.garcia@imgtec.com> References: <1432244260-14908-1-git-send-email-ezequiel.garcia@imgtec.com> <1432244260-14908-5-git-send-email-ezequiel.garcia@imgtec.com> Date: Thu, 21 May 2015 15:32:29 -0700 X-Google-Sender-Auth: er5yKp6jAlVKQ85eO3nBnkrtq2I Message-ID: Subject: Re: [PATCH 4/7] clocksource: mips-gic: Update clockevent frequency on clock rate changes From: Andrew Bresticker To: Ezequiel Garcia Cc: "linux-kernel@vger.kernel.org" , Linux-MIPS , Daniel Lezcano , "devicetree@vger.kernel.org" , James Hartley , James Hogan , Thomas Gleixner , Damien Horsley , Govindraj Raja Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2909 Lines: 83 On Thu, May 21, 2015 at 2:37 PM, Ezequiel Garcia wrote: > This commit introduces the clockevent frequency update, using > a clock notifier. It will be used to support CPUFreq on platforms > using MIPS GIC based clockevents. > > Signed-off-by: Ezequiel Garcia > --- > drivers/clocksource/mips-gic-timer.c | 31 ++++++++++++++++++++++++++++++- > 1 file changed, 30 insertions(+), 1 deletion(-) > > diff --git a/drivers/clocksource/mips-gic-timer.c b/drivers/clocksource/mips-gic-timer.c > index 22a4daf..71bbd42 100644 > --- a/drivers/clocksource/mips-gic-timer.c > +++ b/drivers/clocksource/mips-gic-timer.c > @@ -79,6 +79,13 @@ static void gic_clockevent_cpu_exit(struct clock_event_device *cd) > disable_percpu_irq(gic_timer_irq); > } > > +static void gic_update_frequency(void *data) > +{ > + unsigned long rate = (unsigned long)data; > + > + clockevents_update_freq(this_cpu_ptr(&gic_clockevent_device), rate); > +} > + > static int gic_cpu_notifier(struct notifier_block *nb, unsigned long action, > void *data) > { > @@ -94,10 +101,26 @@ static int gic_cpu_notifier(struct notifier_block *nb, unsigned long action, > return NOTIFY_OK; > } > > +static int gic_clk_notifier(struct notifier_block *nb, unsigned long action, > + void *data) > +{ > + struct clk_notifier_data *cnd = data; > + > + if (action == POST_RATE_CHANGE) > + on_each_cpu(gic_update_frequency, (void *)cnd->new_rate, 1); > + > + return NOTIFY_OK; > +} > + > + > static struct notifier_block gic_cpu_nb = { > .notifier_call = gic_cpu_notifier, > }; > > +static struct notifier_block gic_clk_nb = { > + .notifier_call = gic_clk_notifier, > +}; > + > static int gic_clockevent_init(void) > { > int ret; > @@ -160,6 +183,7 @@ void __init gic_clocksource_init(unsigned int frequency) > static void __init gic_clocksource_of_init(struct device_node *node) > { > struct clk *clk; > + int ret; > > if (WARN_ON(!gic_present || !node->parent || > !of_device_is_compatible(node->parent, "mti,gic"))) > @@ -186,7 +210,12 @@ static void __init gic_clocksource_of_init(struct device_node *node) > } > > __gic_clocksource_init(); > - gic_clockevent_init(); > + > + ret = gic_clockevent_init(); > + if (ret < 0 && !IS_ERR(clk)) { I think you mean ret == 0 here? > + if (clk_notifier_register(clk, &gic_clk_nb) < 0) > + pr_warn("GIC: Unable to register clock notifier\n"); > + } -- 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/