ARM: tegra: clock: Disable clocks left on by bootloader
Subsystems (3)
PATCH v2 1/1 ARM: tegra: clock: Disable clocks left on by bootloader
Iterates through all clocks, disabling any for which the refcount is 0 but the clock init detected the bootloader left the clock on. Can be disabled with command line tegra_keep_boot_clocks
Signed-off-by Colin Cross <[email protected]>
--- arch/arm/mach-tegra/clock.c | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-)
arch/arm/mach-tegra/clock.c +45 -0
@@ -416,6 +416,51 @@ void tegra_sdmmc_tap_delay(struct clk *c, int delay)spin_unlock_irqrestore (&c->spinlock, flags); } +static bool tegra_keep_boot_clocks = false; +static int __init tegra_keep_boot_clocks_setup (char *__unused) +{ + tegra_keep_boot_clocks = true; +return 1 ; +} +__setup ("tegra_keep_boot_clocks" , tegra_keep_boot_clocks_setup); + +/* +* Iterate through all clocks, disabling any for which the refcount is 0 +* but the clock init detected the bootloader left the clock on. +*/ +static int __init tegra_init_disable_boot_clocks (void ) +{ +struct clk *c; + +mutex_lock (&clock_list_lock); + +list_for_each_entry (c, &clocks, node) { +spin_lock_irq (&c->spinlock); + +if (c->refcnt ==0 && c->state ==ON && + c->ops && c->ops->disable) { +pr_warn_once ("%s clocks left on by bootloader:\n" , + tegra_keep_boot_clocks ? +"Prevented disabling" : +"Disabling" ); + +pr_warn (" %s\n" , c->name); + +if (!tegra_keep_boot_clocks) { + c->ops->disable (c); + c->state =OFF ; + } + } + +spin_unlock_irq (&c->spinlock); + } + +mutex_unlock (&clock_list_lock); + +return 0 ; +} +late_initcall (tegra_init_disable_boot_clocks); +#ifdef CONFIG_DEBUG_FS static int __clk_lock_all_spinlocks (void )
Signature · 6 lines
1.7.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html