ARM: tegra: tlk: Disable redundant l1 d$ inval
Scott Long [Wed, 28 Aug 2013 23:52:43 +0000 (16:52 -0700)]
tlk issues an l1 dcache invalidate that covers both secure and non-secure
worlds.  This makes the l1 dcache invalidate in __invalidate_cpu_state
redundant when tlk is enabled.

Disabling this redundant dcache invalidate shaves ~25usecs off our lp2
wake time (as measured by lp2_latency.sh).

Test coverage included:

 * ran 1000 iterations of targeted_lp_kpi.sh
 * numerous runs of lp2_latency.sh
 * testapp in a loop for 10+ minutes

Bug 1358982

Change-Id: I627c307f4d539a9db29f324760e25abeee2698e3
Signed-off-by: Scott Long <scottl@nvidia.com>
(cherry picked from commit a7de348dc0f2978db79d62e886eb3f63af85aced)
Reviewed-on: http://git-master/r/278100
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: James Zhao <jamesz@nvidia.com>
Tested-by: James Zhao <jamesz@nvidia.com>
Reviewed-by: Chris Johnson <cwj@nvidia.com>
(cherry picked from commit 383ff8faf08a338412ef8a584f194ea092dc0ad2)
Signed-off-by: Ajay Nandakumar <anandakumarm@nvidia.com>

arch/arm/mach-tegra/headsmp.S

index ac3f2ae..6103578 100644 (file)
@@ -306,8 +306,13 @@ cortex_a9:
        mcr     p15, 0, r0, c1, c0, 0   @ enable branch prediction, i-cache
        isb
 
-       /* Invalidates L1 d-cache during initial cpu boot (corrupt r0-r6) */
-
+#if !defined(CONFIG_TRUSTED_LITTLE_KERNEL)
+       /*
+        * Invalidates L1 d-cache during initial cpu boot (corrupt r0-r6).
+        *
+        * Skip this for CONFIG_TRUSTED_LITTLE_KERNEL builds as it has
+        * already been done by the Secure OS.
+        */
        mov     r0, #0
        mcr     p15, 2, r0, c0, c0, 0
        mrc     p15, 1, r0, c0, c0, 0
@@ -337,6 +342,7 @@ cortex_a9:
        bgt     1b
        dsb
        isb
+#endif
        mov     pc, lr
 
 /*