Paul Walmsley <paul@xxxxxxxxx> writes: > Hello, > > This series allows core code and driver code to register for > notification when a clock's rate or parent changes. This is currently > used by driver code that must be notified whenever power management > code (e.g., CPUFreq) causes system rate changes that affect the driver's > clock. I will be re-basing the PM branch onto today's linux-omap HEAD which is v2.6.29 based. As I do this, I'll be dropping all the previous notifier patches and replacing them with this series. Kevin > There are three notifier messages: > > 1. a pre-change notifier, called before the change; > > 2. a post-change notifier, called after the change; and > > 3. an abort notifier, called if the change fails for any reason after > the pre-change notifier callbacks have run. > > Since the implementation uses a blocking notifier, notifier code may > block waiting for devices to quiesce; but long delays here will reduce > the effectiveness of DVFS. Since notifier callbacks are called with > clocks_mutex held, callback code must not re-enter the clock framework. > > Pre-change notifiers are passed the current clock rate and the desired > clock rate, so drivers can adjust any internal dividers appropriately. > (To minimize performance and memory usage impact, post-change > notifiers are passed only the desired clock rate, i.e., the clock rate > after the rate change.) The notifiers are called even if the clock > rate is the same before and after the change. This is because > reprogramming a clock's parent or rate may briefly disrupt the clock. > > The interface to the notifiers is via: > > int clk_notifier_register(struct clk *clk, struct notifier_block *nb); > int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb); > > Until prototypes for these functions are made available in > include/linux/clk.h, drivers should pass function pointers to > clk_notifier_register() and clk_notifier_unregister() via their > platform_data struct. > > This series is a collaboration between Tero Kristo > <tero.kristo@xxxxxxxxx> and Paul Walmsley <paul@xxxxxxxxx> and several > others. Hiroshi Doyu <Hiroshi.DOYU@xxxxxxxxx> tracked down and fixed a > bug where blocking_notifier_chain_*() were called while interrupts > were disabled. Nishanth Menon <nm@xxxxxx> found and fixed a bug in > the clk_notifier_unregister() path, where a list_del() was missing. > And thanks to Jouni Högander <jouni.hogander@xxxxxxxxx> for comments > and review during the evolution of these patches. > > Registration and callbacks on rate change and parent change tested on > BeagleBoard (OMAP3530 ES2.1). > > Comments welcomed. > > --- > > text data bss dec hex filename > 3439981 175136 111800 3726917 38de45 vmlinux.beagle.orig > 3441545 176000 111800 3729345 38e7c1 vmlinux.beagle > > > arch/arm/mach-omap2/clock.c | 30 ++++ > arch/arm/mach-omap2/clock.h | 1 > arch/arm/mach-omap2/clock24xx.c | 1 > arch/arm/mach-omap2/clock34xx.c | 1 > arch/arm/plat-omap/clock.c | 256 +++++++++++++++++++++++++++++++ > arch/arm/plat-omap/include/mach/clock.h | 68 ++++++++ > 6 files changed, 357 insertions(+), 0 deletions(-) > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html