From 027dab22573050fb1b33d14bfd48ee79eaafeeb1 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Mon, 5 Mar 2012 15:35:52 -0800 Subject: ARM: mm: Implement complete debug arch v7 save/restore Implement the complete debug arch v7 save/restore sequence as required by the ARM Architectural Reference Manual. Change-Id: Ia346a87b16e759ae5dbbbd02e77eda1e6d6deb82 Signed-off-by: Scott Williams Reviewed-on: http://git-master/r/87865 Reviewed-by: Aleksandr Frid Reviewed-by: Varun Wadekar --- arch/arm/mm/proc-v7.S | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) (limited to 'arch/arm/mm') diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 983d6069812d..38c78253f769 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S @@ -222,11 +222,11 @@ ENDPROC(cpu_v7_set_pte_ext) #ifdef CONFIG_ARM_SAVE_DEBUG_CONTEXT /* * Debug context: - * 4 CP14 registers + * 8 CP14 registers * 16x2 CP14 breakpoint registers (maximum) * 16x2 CP14 watchpoint registers (maximum) */ -.equ cpu_v7_debug_suspend_size, (4 * (4 + (16 * 2) + (16 * 2))) +.equ cpu_v7_debug_suspend_size, (4 * (8 + (16 * 2) + (16 * 2))) .macro save_brkpt cm mrc p14, 0, r4, c0, \cm, 4 @@ -276,12 +276,25 @@ ENTRY(cpu_v7_do_suspend) #ifdef CONFIG_ARM_SAVE_DEBUG_CONTEXT /* Save CP14 debug controller context */ - mrc p14, 0, r4, c0, c1, 0 @ DSCR - mrc p14, 0, r5, c0, c6, 0 @ WFAR - mrc p14, 0, r6, c0, c7, 0 @ VCR - mrc p14, 0, r7, c7, c9, 6 @ CLAIM + + mrc p14, 0, r4, c0, c2, 2 @ DBGDSCRext + mrc p14, 0, r5, c0, c6, 0 @ DBGWFAR + mrc p14, 0, r6, c0, c7, 0 @ DBGVCR + mrc p14, 0, r7, c7, c9, 6 @ DBGCLAIMCLR stmia r0!, {r4-r7} + mrc p14, 0, r4, c0, c10, 0 @ DBGDSCCR + mrc p14, 0, r5, c0, c11, 0 @ DBGDSMCR + stmia r0!, {r4-r5} + + tst r4, #(1 << 29) @ DBGDSCRext.TXfull + mrcne p14, 0, r4, c0, c3, 2 @ DBGDTRTXext + strne r4, [r0], #4 + + tst r4, #(1 << 30) @ DBGDSCRext.RXfull + mrcne p14, 0, r4, c0, c0, 2 @ DBGDTRRXext + strne r4, [r0], #4 + mrc p14, 0, r8, c0, c0, 0 @ read IDR mov r3, r8, lsr #24 and r3, r3, #0xf @ r3 has the number of brkpt @@ -371,9 +384,21 @@ ENTRY(cpu_v7_do_resume) /* Restore CP14 debug controller context */ ldmia r0!, {r2 - r5} - mcr p14, 0, r3, c0, c6, 0 @ WFAR - mcr p14, 0, r4, c0, c7, 0 @ VCR - mcr p14, 0, r5, c7, c8, 6 @ CLAIM + mcr p14, 0, r3, c0, c6, 0 @ DBGWFAR + mcr p14, 0, r4, c0, c7, 0 @ DBGVCR + mcr p14, 0, r5, c7, c8, 6 @ DBGCLAIMSET + + ldmia r0!, {r4-r5} + mcr p14, 0, r4, c0, c10, 0 @ DBGDSCCR + mcr p14, 0, r5, c0, c11, 0 @ DBGDSMCR + + tst r2, #(1 << 29) @ DBGDSCRext.TXfull + ldrne r4, [r0], #4 + mcrne p14, 0, r4, c0, c3, 2 @ DBGDTRTXext + + tst r2, #(1 << 30) @ DBGDSCRext.RXfull + ldrne r4, [r0], #4 + mcrne p14, 0, r4, c0, c0, 2 @ DBGDTRRXext mrc p14, 0, r8, c0, c0, 0 @ read IDR mov r3, r8, lsr #24 -- cgit v1.2.3