From patchwork Thu May 19 12:30:04 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Gleixner X-Patchwork-Id: 797392 Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p4JCW5UM013905 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Thu, 19 May 2011 12:32:26 GMT Received: from canuck.infradead.org ([2001:4978:20e::1]) by bombadil.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1QN2My-0005ga-3u; Thu, 19 May 2011 12:30:24 +0000 Received: from localhost ([127.0.0.1] helo=canuck.infradead.org) by canuck.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1QN2Mw-0003rr-Dj; Thu, 19 May 2011 12:30:22 +0000 Received: from hera.kernel.org ([140.211.167.34]) by canuck.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1QN2Mt-0003rm-7Y for linux-arm-kernel@lists.infradead.org; Thu, 19 May 2011 12:30:19 +0000 Received: from hera.kernel.org (localhost [127.0.0.1]) by hera.kernel.org (8.14.4/8.14.3) with ESMTP id p4JCU4eY004650 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 19 May 2011 12:30:04 GMT X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.97 at hera.kernel.org Received: (from hpa@localhost) by hera.kernel.org (8.14.4/8.14.4/Submit) id p4JCU4cI004647; Thu, 19 May 2011 12:30:04 GMT Date: Thu, 19 May 2011 12:30:04 GMT X-Authentication-Warning: hera.kernel.org: hpa set sender to bounces.tip@hpa.at.zytor.com using -f From: tip-bot for Thomas Gleixner Message-ID: To: linux-tip-commits@vger.kernel.org Subject: [tip:timers/clockevents] clockevents: Provide interface to reconfigure an active clock event device Git-Commit-ID: 80b816b736cfa5b9582279127099b20a479ab7d9 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Disposition: inline Precedence: bulk X-Spam-Status: No, score=-1.8 required=5.0 tests=ALL_TRUSTED,BAYES_00, DATE_IN_FUTURE_96_Q autolearn=no version=3.3.2-r929478 X-Spam-Checker-Version: SpamAssassin 3.3.2-r929478 (2010-03-31) on hera.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Thu, 19 May 2011 12:32:26 +0000 (UTC) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.2.3 (hera.kernel.org [127.0.0.1]); Thu, 19 May 2011 12:30:05 +0000 (UTC) Cc: linus.walleij@linaro.org, mingo@redhat.com, john.stultz@linaro.org, hpa@zytor.com, tglx@linutronix.de, mingo@elte.hu, linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.12 Reply-To: linux-kernel@vger.kernel.org, mingo@redhat.com, hpa@zytor.com, linux-arm-kernel@lists.infradead.org, john.stultz@linaro.org, tglx@linutronix.de, linus.walleij@linaro.org, mingo@elte.hu List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Commit-ID: 80b816b736cfa5b9582279127099b20a479ab7d9 Gitweb: http://git.kernel.org/tip/80b816b736cfa5b9582279127099b20a479ab7d9 Author: Thomas Gleixner AuthorDate: Wed, 18 May 2011 21:33:42 +0000 Committer: Thomas Gleixner CommitDate: Thu, 19 May 2011 14:24:16 +0200 clockevents: Provide interface to reconfigure an active clock event device Some ARM SoCs have clock event devices which have their frequency modified due to frequency scaling. Provide an interface which allows to reconfigure an active device. After reconfiguration reprogram the current pending event. Signed-off-by: Thomas Gleixner Cc: LAK Cc: John Stultz Acked-by: Linus Walleij Reviewed-by: Ingo Molnar Link: http://lkml.kernel.org/r/%3C20110518210136.437459958%40linutronix.de%3E --- include/linux/clockchips.h | 2 ++ kernel/time/clockevents.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 0 deletions(-) diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 80acc79e..d6733e2 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h @@ -132,6 +132,8 @@ extern void clockevents_config_and_register(struct clock_event_device *dev, u32 freq, unsigned long min_delta, unsigned long max_delta); +extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq); + extern void clockevents_exchange_device(struct clock_event_device *old, struct clock_event_device *new); extern void clockevents_set_mode(struct clock_event_device *dev, diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index c69e88c..22a9da9 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c @@ -238,6 +238,26 @@ void clockevents_config_and_register(struct clock_event_device *dev, clockevents_register_device(dev); } +/** + * clockevents_update_freq - Update frequency and reprogram a clock event device. + * @dev: device to modify + * @freq: new device frequency + * + * Reconfigure and reprogram a clock event device in oneshot + * mode. Must be called on the cpu for which the device delivers per + * cpu timer events with interrupts disabled! Returns 0 on success, + * -ETIME when the event is in the past. + */ +int clockevents_update_freq(struct clock_event_device *dev, u32 freq) +{ + clockevents_config(dev, freq); + + if (dev->mode != CLOCK_EVT_MODE_ONESHOT) + return 0; + + return clockevents_program_event(dev, dev->next_event, ktime_get()); +} + /* * Noop handler when we shut down an event device */