summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx/ddr3_freq_imx6sx.S
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2017-11-02 09:47:42 +0800
committerJason Liu <jason.hui.liu@nxp.com>2019-02-12 10:29:25 +0800
commit5850ea2f527f34161382a20d3594b36b250afc7e (patch)
tree21293e9a0bd398e9d7115348fe2c4e13528e4ca8 /arch/arm/mach-imx/ddr3_freq_imx6sx.S
parent25374fbd6264e3477b3e648f8cc917fe64060f30 (diff)
MLK-16750-3 arm: imx6sx: busfreq: lock L2 cache instead of disabling it
In non-secure mode, L2 cache can NOT be disabled, lock L2 cache instead of disabling it to avoid L2 cache access DDR. Signed-off-by: Peng Fan <peng.fan@nxp.com> Reviewed-by: Anson Huang <Anson.Huang@nxp.com>
Diffstat (limited to 'arch/arm/mach-imx/ddr3_freq_imx6sx.S')
-rw-r--r--arch/arm/mach-imx/ddr3_freq_imx6sx.S39
1 files changed, 33 insertions, 6 deletions
diff --git a/arch/arm/mach-imx/ddr3_freq_imx6sx.S b/arch/arm/mach-imx/ddr3_freq_imx6sx.S
index 9846c05f4541..1ac0d017bdf9 100644
--- a/arch/arm/mach-imx/ddr3_freq_imx6sx.S
+++ b/arch/arm/mach-imx/ddr3_freq_imx6sx.S
@@ -36,6 +36,13 @@
#define CCM_CDHIPR 0x48
#define L2_CACHE_SYNC 0x730
+#define PL310_AUX_CTRL 0x104
+#define PL310_DCACHE_LOCKDOWN_BASE 0x900
+#define PL310_AUX_16WAY_BIT 0x10000
+#define PL310_LOCKDOWN_NBREGS 8
+#define PL310_LOCKDOWN_SZREG 4
+#define PL310_8WAYS_MASK 0x00FF
+#define PL310_16WAYS_UPPERMASK 0xFF00
#define BUSFREQ_INFO_FREQ_OFFSET 0x0
#define BUSFREQ_INFO_DDR_SETTINGS_OFFSET 0x4
@@ -262,9 +269,19 @@ wait_for_l2_to_idle:
mov r7, #0x0
str r7, [r8, #L2_CACHE_SYNC]
- /* Disable L2. */
- mov r7, #0x0
- str r7, [r8, #0x100]
+ /* Lock L2. */
+
+ ldr r9, [r8, #PL310_AUX_CTRL]
+ tst r9, #PL310_AUX_16WAY_BIT
+ mov r9, #PL310_8WAYS_MASK
+ orrne r9, #PL310_16WAYS_UPPERMASK
+ mov r10, #PL310_LOCKDOWN_NBREGS
+ add r11, r8, #PL310_DCACHE_LOCKDOWN_BASE
+1: /* lock Dcache and Icache */
+ str r9, [r11], #PL310_LOCKDOWN_SZREG
+ str r9, [r11], #PL310_LOCKDOWN_SZREG
+ subs r10, r10, #1
+ bne 1b
/*
* The second dsb might be needed to keep cache sync (device write)
@@ -683,10 +700,20 @@ done:
beq skip_enable_l2
#ifdef CONFIG_CACHE_L2X0
- /* Enable L2. */
+ /* Unlock L2. */
ldr r8, =IMX_IO_P2V(MX6Q_L2_BASE_ADDR)
- ldr r7, =0x1
- str r7, [r8, #0x100]
+ ldr r9, [r8, #PL310_AUX_CTRL]
+ tst r9, #PL310_AUX_16WAY_BIT
+ mov r10, #PL310_LOCKDOWN_NBREGS
+ mov r9, #0x00 /* 8 ways mask */
+ orrne r9, #0x0000 /* 16 ways mask */
+ add r11, r8, #PL310_DCACHE_LOCKDOWN_BASE
+1: /* lock Dcache and Icache */
+ str r9, [r11], #PL310_LOCKDOWN_SZREG
+ str r9, [r11], #PL310_LOCKDOWN_SZREG
+ subs r10, r10, #1
+ bne 1b
+
#endif
skip_enable_l2: