Commit 37abcdb9 authored by Russell King's avatar Russell King

ARM: l2c: split out cache unlock code

Split the cache unlock code out of l2x0_unlock().  We want to be able
to re-use this functionality later.
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 2b2a87a1
...@@ -50,6 +50,9 @@ struct l2x0_regs l2x0_saved_regs; ...@@ -50,6 +50,9 @@ struct l2x0_regs l2x0_saved_regs;
static bool of_init = false; static bool of_init = false;
/*
* Common code for all cache controllers.
*/
static inline void cache_wait_way(void __iomem *reg, unsigned long mask) static inline void cache_wait_way(void __iomem *reg, unsigned long mask)
{ {
/* wait for cache operation by line or way to complete */ /* wait for cache operation by line or way to complete */
...@@ -67,6 +70,18 @@ static inline void l2c_set_debug(void __iomem *base, unsigned long val) ...@@ -67,6 +70,18 @@ static inline void l2c_set_debug(void __iomem *base, unsigned long val)
outer_cache.set_debug(val); outer_cache.set_debug(val);
} }
static inline void l2c_unlock(void __iomem *base, unsigned num)
{
unsigned i;
for (i = 0; i < num; i++) {
writel_relaxed(0, base + L2X0_LOCKDOWN_WAY_D_BASE +
i * L2X0_LOCKDOWN_STRIDE);
writel_relaxed(0, base + L2X0_LOCKDOWN_WAY_I_BASE +
i * L2X0_LOCKDOWN_STRIDE);
}
}
#ifdef CONFIG_CACHE_PL310 #ifdef CONFIG_CACHE_PL310
static inline void cache_wait(void __iomem *reg, unsigned long mask) static inline void cache_wait(void __iomem *reg, unsigned long mask)
{ {
...@@ -308,7 +323,6 @@ static void l2x0_disable(void) ...@@ -308,7 +323,6 @@ static void l2x0_disable(void)
static void l2x0_unlock(u32 cache_id) static void l2x0_unlock(u32 cache_id)
{ {
int lockregs; int lockregs;
int i;
switch (cache_id & L2X0_CACHE_ID_PART_MASK) { switch (cache_id & L2X0_CACHE_ID_PART_MASK) {
case L2X0_CACHE_ID_PART_L310: case L2X0_CACHE_ID_PART_L310:
...@@ -323,12 +337,7 @@ static void l2x0_unlock(u32 cache_id) ...@@ -323,12 +337,7 @@ static void l2x0_unlock(u32 cache_id)
break; break;
} }
for (i = 0; i < lockregs; i++) { l2c_unlock(l2x0_base, lockregs);
writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_D_BASE +
i * L2X0_LOCKDOWN_STRIDE);
writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_I_BASE +
i * L2X0_LOCKDOWN_STRIDE);
}
} }
void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask) void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)
......
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