diff options
author | Alex Frid <afrid@nvidia.com> | 2012-07-10 22:59:48 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 12:13:56 -0700 |
commit | b4e2dabb08156b2e333dbe94c9bc58cf162c4878 (patch) | |
tree | c323638c45289ae9aa6d14642ac0c7c6888320ad | |
parent | 0304d7d76c975a5bb49299d92e379557cacb7187 (diff) |
ARM: tegra: clock: Add cross-clock locking option
Added an option to serialize clock operations for several clocks
(in addition to individual clock locking). This option may be used,
for example, when moving clocks between virtual buses or to support
clocks with different dvfs tables, but common enable control.
Change-Id: I88b366d4109bdb6ae952385dd84fab392715ac10
Signed-off-by: Alex Frid <afrid@nvidia.com>
Reviewed-on: http://git-master/r/117247
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
Rebase-Id: Rb5183f53b71e240234cda950cb6bddf07437c4db
-rw-r--r-- | arch/arm/mach-tegra/clock.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/clock.h b/arch/arm/mach-tegra/clock.h index 9ea637630d19..38ab923ef257 100644 --- a/arch/arm/mach-tegra/clock.h +++ b/arch/arm/mach-tegra/clock.h @@ -241,6 +241,7 @@ struct clk { struct raw_notifier_head *rate_change_nh; + struct mutex *cross_clk_mutex; struct mutex mutex; spinlock_t spinlock; }; @@ -380,6 +381,8 @@ static inline void clk_lock_save(struct clk *c, unsigned long *flags) if (clk_cansleep(c)) { *flags = 0; mutex_lock(&c->mutex); + if (c->cross_clk_mutex) + mutex_lock(c->cross_clk_mutex); } else { spin_lock_irqsave(&c->spinlock, *flags); } @@ -387,10 +390,13 @@ static inline void clk_lock_save(struct clk *c, unsigned long *flags) static inline void clk_unlock_restore(struct clk *c, unsigned long *flags) { - if (clk_cansleep(c)) + if (clk_cansleep(c)) { + if (c->cross_clk_mutex) + mutex_unlock(c->cross_clk_mutex); mutex_unlock(&c->mutex); - else + } else { spin_unlock_irqrestore(&c->spinlock, *flags); + } } static inline void clk_lock_init(struct clk *c) |