diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-01 22:55:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-01 22:55:06 -0400 |
commit | 68e24ba70465b82ad24e0774ceab5360180d4627 (patch) | |
tree | 5d2b8e22e556360f353b2d1c73a19aaf6c5becd9 /arch/arm/mach-ux500 | |
parent | b4beb4bf9934d151bf4581a54ae028927374cb2a (diff) | |
parent | 5725aeae5ff2e39f3815bbef788ee326c9afea2c (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.c | 25 |
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 | ||
102 | static int ux500_l2x0_init(void) | 102 | static 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 | |||
122 | static 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 | ||