aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-ux500
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-11-01 22:55:06 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-11-01 22:55:06 -0400
commit68e24ba70465b82ad24e0774ceab5360180d4627 (patch)
tree5d2b8e22e556360f353b2d1c73a19aaf6c5becd9 /arch/arm/mach-ux500
parentb4beb4bf9934d151bf4581a54ae028927374cb2a (diff)
parent5725aeae5ff2e39f3815bbef788ee326c9afea2c (diff)
Merge branch 'next/fixes' of git://git.linaro.org/people/arnd/arm-soc
* 'next/fixes' of git://git.linaro.org/people/arnd/arm-soc: (28 commits) ARM: pxa/cm-x300: properly set bt_reset pin ARM: mmp: rename SHEEVAD to GPLUGD ARM: imx: Fix typo 'MACH_MX31_3DS_MXC_NAND_USE_BBT' ARM: i.MX28: shift frac value in _CLK_SET_RATE plat-mxc: iomux-v3.h: implicitly enable pull-up/down when that's desired ARM: mx5: fix clock usage for suspend ARM: pxa: use correct __iomem annotations ARM: pxa: sharpsl pm needs SPI ARM: pxa: centro and treo680 need palm27x ARM: pxa: make pxafb_smart_*() empty when not enabled ARM: pxa: select POWER_SUPPLY on raumfeld ARM: pxa: pxa95x is incompatible with earlier pxa ARM: pxa: CPU_FREQ_TABLE is needed for CPU_FREQ ARM: pxa: pxa95x/saarb depends on pxa3xx code ARM: pxa: allow selecting just one of TREO680/CENTRO ARM: pxa: export symbols from pxa3xx-ulpi ARM: pxa: make zylonite_pxa*_init declaration match code ARM: pxa/z2: fix building error of pxa27x_cpu_suspend() no longer available ARM: at91: add defconfig for at91sam9g45 family ARM: at91: remove dependency for Atmel PWM driver selector in Kconfig ...
Diffstat (limited to 'arch/arm/mach-ux500')
-rw-r--r--arch/arm/mach-ux500/cpu.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c
index 1da23bb87c16..8aa104a4711a 100644
--- a/arch/arm/mach-ux500/cpu.c
+++ b/arch/arm/mach-ux500/cpu.c
@@ -99,7 +99,27 @@ static void ux500_l2x0_inv_all(void)
99 ux500_cache_sync(); 99 ux500_cache_sync();
100} 100}
101 101
102static int ux500_l2x0_init(void) 102static int __init ux500_l2x0_unlock(void)
103{
104 int i;
105
106 /*
107 * Unlock Data and Instruction Lock if locked. Ux500 U-Boot versions
108 * apparently locks both caches before jumping to the kernel. The
109 * l2x0 core will not touch the unlock registers if the l2x0 is
110 * already enabled, so we do it right here instead. The PL310 has
111 * 8 sets of registers, one per possible CPU.
112 */
113 for (i = 0; i < 8; i++) {
114 writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_D_BASE +
115 i * L2X0_LOCKDOWN_STRIDE);
116 writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_I_BASE +
117 i * L2X0_LOCKDOWN_STRIDE);
118 }
119 return 0;
120}
121
122static int __init ux500_l2x0_init(void)
103{ 123{
104 if (cpu_is_u5500()) 124 if (cpu_is_u5500())
105 l2x0_base = __io_address(U5500_L2CC_BASE); 125 l2x0_base = __io_address(U5500_L2CC_BASE);
@@ -108,6 +128,9 @@ static int ux500_l2x0_init(void)
108 else 128 else
109 ux500_unknown_soc(); 129 ux500_unknown_soc();
110 130
131 /* Unlock before init */
132 ux500_l2x0_unlock();
133
111 /* 64KB way size, 8 way associativity, force WA */ 134 /* 64KB way size, 8 way associativity, force WA */
112 l2x0_init(l2x0_base, 0x3e060000, 0xc0000fff); 135 l2x0_init(l2x0_base, 0x3e060000, 0xc0000fff);
113 136