diff options
Diffstat (limited to 'arch/arm/mm/cache-l2x0.c')
| -rw-r--r-- | arch/arm/mm/cache-l2x0.c | 19 | 
1 files changed, 13 insertions, 6 deletions
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index ef59099a5463..44c086710d2b 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c @@ -120,17 +120,22 @@ static void l2x0_cache_sync(void)  	spin_unlock_irqrestore(&l2x0_lock, flags);  } -static void l2x0_flush_all(void) +static void __l2x0_flush_all(void)  { -	unsigned long flags; - -	/* clean all ways */ -	spin_lock_irqsave(&l2x0_lock, flags);  	debug_writel(0x03);  	writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_CLEAN_INV_WAY);  	cache_wait_way(l2x0_base + L2X0_CLEAN_INV_WAY, l2x0_way_mask);  	cache_sync();  	debug_writel(0x00); +} + +static void l2x0_flush_all(void) +{ +	unsigned long flags; + +	/* clean all ways */ +	spin_lock_irqsave(&l2x0_lock, flags); +	__l2x0_flush_all();  	spin_unlock_irqrestore(&l2x0_lock, flags);  } @@ -266,7 +271,9 @@ static void l2x0_disable(void)  	unsigned long flags;  	spin_lock_irqsave(&l2x0_lock, flags); -	writel(0, l2x0_base + L2X0_CTRL); +	__l2x0_flush_all(); +	writel_relaxed(0, l2x0_base + L2X0_CTRL); +	dsb();  	spin_unlock_irqrestore(&l2x0_lock, flags);  }  |