ARM: mm: save/restore some PMU registers
Bo Yan [Wed, 7 Nov 2012 23:19:02 +0000 (15:19 -0800)]
Specifically, this change saves and restores registers controlling
user space access of ARM performance monitoring unit registers and
for PMU interrupt enables.

Change-Id: Iac88df17112e2ef2ccf53674c3fa3a74d2d4221f
Signed-off-by: Bo Yan <byan@nvidia.com>
Reviewed-on: http://git-master/r/162149
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
GVS: Gerrit_Virtual_Submit

arch/arm/mm/proc-v7.S

index 1b63a9a..7e320bf 100644 (file)
@@ -129,7 +129,7 @@ ENDPROC(cpu_v7_dcache_clean_area)
 #endif
 
 .globl cpu_v7_suspend_size
-.equ   cpu_v7_suspend_size, (4 * 9) + cpu_v7_debug_suspend_size
+.equ   cpu_v7_suspend_size, (4 * 15) + cpu_v7_debug_suspend_size
 #ifdef CONFIG_ARM_CPU_SUSPEND
 ENTRY(cpu_v7_do_suspend)
        stmfd   sp!, {r3 - r10, lr}
@@ -137,6 +137,15 @@ ENTRY(cpu_v7_do_suspend)
        mrc     p15, 0, r5, c13, c0, 3  @ User r/o thread ID
        mrc     p15, 0, r6, c15, c0, 1  @ diag
        stmia   r0!, {r4 - r6}
+
+       mrc     p15, 0, r4, c9, c14, 2  @ PMINTENCLR
+       mrc     p15, 0, r5, c9, c14, 0  @ PMUSEREN
+       mrc     p15, 0, r6, c9, c12, 5  @ PMSELR, event counter selection
+       mrc     p15, 0, r7, c9, c13, 2  @ PMXEVCNTR, event counter
+       mrc     p15, 0, r8, c9, c13, 1  @ PMXEVTYPER or PMCCFILTR
+       mrc     p15, 0, r9, c9, c13, 0  @ PMCCNTR, cycle counter
+       stmia   r0!, {r4 - r9}
+
        mrc     p15, 0, r6, c3, c0, 0   @ Domain ID
        mrc     p15, 0, r7, c2, c0, 1   @ TTB 1
        mrc     p15, 0, r11, c2, c0, 2  @ TTB control register
@@ -245,6 +254,15 @@ ENTRY(cpu_v7_do_resume)
 #ifndef CONFIG_TRUSTED_FOUNDATIONS
        mcr     p15, 0, r6, c15, c0, 1  @ diag
 #endif
+
+       ldmia   r0!, {r4 - r9}
+       mcr     p15, 0, r4, c9, c14, 2  @ PMINTENCLR
+       mcr     p15, 0, r5, c9, c14, 0  @ PMUSEREN
+       mcr     p15, 0, r6, c9, c12, 5  @ PMSELR, event counter selection
+       mcr     p15, 0, r7, c9, c13, 2  @ PMXEVCNTR, event counter
+       mcr     p15, 0, r8, c9, c13, 1  @ PMXEVTYPER or PMCCFILTR
+       mcr     p15, 0, r9, c9, c13, 0  @ PMCCNTR, cycle counter
+
        ldmia   r0!, {r6 - r11}
        mcr     p15, 0, r6, c3, c0, 0   @ Domain ID
 #ifndef CONFIG_ARM_LPAE