Commit 87e39216 authored by Mike Turquette's avatar Mike Turquette

clk: mvebu: share locks between gate clocks

Refactor mvebu_clk_gating_setup() to use a common spinlock instead of a
unique lock for every instance of a struct clk_gating_ctrl object. This
will be used later for a separate mux clock type that shares a register
with gate clock types and needs to use the same lock to protect access
to the register.

Cc: Andrew Lunn <andrew@lunn.ch>
Tested-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
parent 69e273c0
...@@ -89,8 +89,10 @@ void __init mvebu_coreclk_setup(struct device_node *np, ...@@ -89,8 +89,10 @@ void __init mvebu_coreclk_setup(struct device_node *np,
* Clock Gating Control * Clock Gating Control
*/ */
DEFINE_SPINLOCK(ctrl_gating_lock);
struct clk_gating_ctrl { struct clk_gating_ctrl {
spinlock_t lock; spinlock_t *lock;
struct clk **gates; struct clk **gates;
int num_gates; int num_gates;
}; };
...@@ -138,7 +140,8 @@ void __init mvebu_clk_gating_setup(struct device_node *np, ...@@ -138,7 +140,8 @@ void __init mvebu_clk_gating_setup(struct device_node *np,
if (WARN_ON(!ctrl)) if (WARN_ON(!ctrl))
goto ctrl_out; goto ctrl_out;
spin_lock_init(&ctrl->lock); /* lock must already be initialized */
ctrl->lock = &ctrl_gating_lock;
/* Count, allocate, and register clock gates */ /* Count, allocate, and register clock gates */
for (n = 0; desc[n].name;) for (n = 0; desc[n].name;)
...@@ -155,7 +158,7 @@ void __init mvebu_clk_gating_setup(struct device_node *np, ...@@ -155,7 +158,7 @@ void __init mvebu_clk_gating_setup(struct device_node *np,
(desc[n].parent) ? desc[n].parent : default_parent; (desc[n].parent) ? desc[n].parent : default_parent;
ctrl->gates[n] = clk_register_gate(NULL, desc[n].name, parent, ctrl->gates[n] = clk_register_gate(NULL, desc[n].name, parent,
desc[n].flags, base, desc[n].bit_idx, desc[n].flags, base, desc[n].bit_idx,
0, &ctrl->lock); 0, ctrl->lock);
WARN_ON(IS_ERR(ctrl->gates[n])); WARN_ON(IS_ERR(ctrl->gates[n]));
} }
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#include <linux/kernel.h> #include <linux/kernel.h>
extern spinlock_t ctrl_gating_lock;
struct device_node; struct device_node;
struct coreclk_ratio { struct coreclk_ratio {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment