//\r
// Copyright (c) 2011 - 2013 ARM LTD. All rights reserved.<BR>\r
+// Portion of Copyright (c) 2014 NVIDIA Corporation. All rights reserved.<BR>\r
//\r
// This program and the accompanying materials\r
// are licensed and made available under the terms and conditions of the BSD License\r
\r
#define REG_ONE(REG1, OFFSET, CONTEXT_SIZE) ldr REG1, [sp, #(OFFSET-CONTEXT_SIZE)]\r
\r
+ // Adjust SP to pop system registers\r
+ add sp, sp, GP_CONTEXT_SIZE + FP_CONTEXT_SIZE + SYS_CONTEXT_SIZE\r
+ ALL_SYS_REGS\r
\r
- // pop all regs and return from exception.\r
- add sp, sp, GP_CONTEXT_SIZE\r
+ EL1_OR_EL2(x6)\r
+1:msr elr_el1, x1 // Exception Link Register\r
+ msr spsr_el1,x2 // Saved Processor Status Register 32bit\r
+ msr fpsr, x3 // Floating point Status Register 32bit\r
+ msr esr_el1, x4 // EL1 Exception syndrome register 32bit\r
+ msr far_el1, x5 // EL1 Fault Address Register\r
+ b 3f\r
+2:msr elr_el2, x1 // Exception Link Register\r
+ msr spsr_el2,x2 // Saved Processor Status Register 32bit\r
+ msr fpsr, x3 // Floating point Status Register 32bit\r
+ msr esr_el2, x4 // EL1 Exception syndrome register 32bit\r
+ msr far_el2, x5 // EL1 Fault Address Register\r
+\r
+3:// pop all regs and return from exception.\r
+ sub sp, sp, FP_CONTEXT_SIZE + SYS_CONTEXT_SIZE\r
ALL_GP_REGS\r
\r
// Adjust SP to pop next set\r