diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2011-09-20 22:15:55 +0200 | 
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2011-09-20 22:15:55 +0200 | 
| commit | da1c5afee092a2b51136ac3bf20c68bfff2924be (patch) | |
| tree | fa71b9e3af25c870012a22e4cb72547f9aafcfd0 /arch/arm/mm/cache-l2x0.c | |
| parent | 1fdb4888e45f1413972a8e9da55f3ffc08b9abcb (diff) | |
| parent | 4c59de052e7167a3bcf3f32c5ea4c9a5ef07386a (diff) | |
| download | olio-linux-3.10-da1c5afee092a2b51136ac3bf20c68bfff2924be.tar.xz olio-linux-3.10-da1c5afee092a2b51136ac3bf20c68bfff2924be.zip  | |
Merge branch 'samsung/cleanup' into next/cleanup
Diffstat (limited to 'arch/arm/mm/cache-l2x0.c')
| -rw-r--r-- | arch/arm/mm/cache-l2x0.c | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index 44c086710d2..9ecfdb51195 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c @@ -277,6 +277,25 @@ static void l2x0_disable(void)  	spin_unlock_irqrestore(&l2x0_lock, flags);  } +static void __init l2x0_unlock(__u32 cache_id) +{ +	int lockregs; +	int i; + +	if (cache_id == L2X0_CACHE_ID_PART_L310) +		lockregs = 8; +	else +		/* L210 and unknown types */ +		lockregs = 1; + +	for (i = 0; i < lockregs; i++) { +		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)  {  	__u32 aux; @@ -328,6 +347,8 @@ void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask)  	 * accessing the below registers will fault.  	 */  	if (!(readl_relaxed(l2x0_base + L2X0_CTRL) & 1)) { +		/* Make sure that I&D is not locked down when starting */ +		l2x0_unlock(cache_id);  		/* l2x0 controller is disabled */  		writel_relaxed(aux, l2x0_base + L2X0_AUX_CTRL);  |