Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756153AbbEUWfj (ORCPT ); Thu, 21 May 2015 18:35:39 -0400 Received: from mailapp01.imgtec.com ([195.59.15.196]:44072 "EHLO mailapp01.imgtec.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750964AbbEUWfg (ORCPT ); Thu, 21 May 2015 18:35:36 -0400 Message-ID: <555E5C74.3000800@imgtec.com> Date: Thu, 21 May 2015 19:30:12 -0300 From: Ezequiel Garcia User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Andrew Bresticker CC: "linux-kernel@vger.kernel.org" , Linux-MIPS , Daniel Lezcano , "devicetree@vger.kernel.org" , James Hartley , James Hogan , "Thomas Gleixner" , Damien Horsley , Govindraj Raja Subject: Re: [PATCH 4/7] clocksource: mips-gic: Update clockevent frequency on clock rate changes References: <1432244260-14908-1-git-send-email-ezequiel.garcia@imgtec.com> <1432244260-14908-5-git-send-email-ezequiel.garcia@imgtec.com> In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.100.200.44] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3074 Lines: 90 On 05/21/2015 07:32 PM, Andrew Bresticker wrote: > 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"); >> + } Ouch, certainly. -- Ezequiel -- 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/