SoC common : arch/riscv: porting debug tools for WCN. [1/3]

PD#SWPL-156997

Problem:
porting debug tools for WCN.

Solution:
porting debug tools for WCN.

Verify:
N/A

Change-Id: Ic9c68cd2dc49fb93adf8131352ea895d69ec2bb0
Signed-off-by: shijie.xiong <shijie.xiong@amlogic.com>
diff --git a/entry_wcn.S b/entry_wcn.S
index 3e82883..bb115bc 100644
--- a/entry_wcn.S
+++ b/entry_wcn.S
@@ -8,6 +8,7 @@
 #define ENTRY_S
 
 #include "riscv_encoding.h"
+#include "portContext.h"
 
 #if __riscv_xlen == 64
 #define SLL32 sllw
@@ -46,99 +47,6 @@
 
 ###############################################
 ###############################################
-#only save caller registers
-.macro SAVE_CONTEXT
-  STORE x1,  0*REGBYTES(sp)
-  STORE x5,  1*REGBYTES(sp)
-  STORE x6,  2*REGBYTES(sp)
-  STORE x7,  3*REGBYTES(sp)
-  STORE x10, 4*REGBYTES(sp)
-  STORE x11, 5*REGBYTES(sp)
-  STORE x12, 6*REGBYTES(sp)
-  STORE x13, 7*REGBYTES(sp)
-  STORE x14, 8*REGBYTES(sp)
-  STORE x15, 9*REGBYTES(sp)
-  STORE x16, 10*REGBYTES(sp)
-  STORE x17, 11*REGBYTES(sp)
-  STORE x28, 12*REGBYTES(sp)
-  STORE x29, 13*REGBYTES(sp)
-  STORE x30, 14*REGBYTES(sp)
-  STORE x31, 15*REGBYTES(sp)
-.endm
-###############################################
-###############################################
-#restore caller registers
-.macro RESTORE_CONTEXT
-  LOAD x1,  0*REGBYTES(sp)
-  LOAD x5,  1*REGBYTES(sp)
-  LOAD x6,  2*REGBYTES(sp)
-  LOAD x7,  3*REGBYTES(sp)
-  LOAD x10, 4*REGBYTES(sp)
-  LOAD x11, 5*REGBYTES(sp)
-  LOAD x12, 6*REGBYTES(sp)
-  LOAD x13, 7*REGBYTES(sp)
-  LOAD x14, 8*REGBYTES(sp)
-  LOAD x15, 9*REGBYTES(sp)
-  LOAD x16, 10*REGBYTES(sp)
-  LOAD x17, 11*REGBYTES(sp)
-  LOAD x28, 12*REGBYTES(sp)
-  LOAD x29, 13*REGBYTES(sp)
-  LOAD x30, 14*REGBYTES(sp)
-  LOAD x31, 15*REGBYTES(sp)
-.endm
-###############################################
-###############################################
-#restore caller registers
-.macro RESTORE_CONTEXT_EXCEPT_X5
-  LOAD x1,  0*REGBYTES(sp)
-  LOAD x6,  2*REGBYTES(sp)
-  LOAD x7,  3*REGBYTES(sp)
-  LOAD x10, 4*REGBYTES(sp)
-  LOAD x11, 5*REGBYTES(sp)
-  LOAD x12, 6*REGBYTES(sp)
-  LOAD x13, 7*REGBYTES(sp)
-  LOAD x14, 8*REGBYTES(sp)
-  LOAD x15, 9*REGBYTES(sp)
-  LOAD x16, 10*REGBYTES(sp)
-  LOAD x17, 11*REGBYTES(sp)
-  LOAD x28, 12*REGBYTES(sp)
-  LOAD x29, 13*REGBYTES(sp)
-  LOAD x30, 14*REGBYTES(sp)
-  LOAD x31, 15*REGBYTES(sp)
-.endm
-###############################################
-###############################################
-#restore caller registers
-.macro RESTORE_CONTEXT_ONLY_X5
-  LOAD x5,  1*REGBYTES(sp)
-.endm
-###############################################
-###############################################
-# Save the mepc and mstatus
-#
-.macro SAVE_MEPC_MSTATUS
-  csrr x5, CSR_MEPC  
-  STORE x5,  16*REGBYTES(sp)
-  csrr x5, CSR_MSTATUS  
-  STORE x5,  17*REGBYTES(sp)
-  csrr x5, CSR_MSUBM
-  STORE x5,  18*REGBYTES(sp)
-.endm
-
-###############################################
-###############################################
-# Restore the mepc and mstatus
-#
-.macro RESTORE_MEPC_MSTATUS
-  LOAD x5,  16*REGBYTES(sp)
-  csrw CSR_MEPC, x5  
-  LOAD x5,  17*REGBYTES(sp)
-  csrw CSR_MSTATUS, x5  
-  LOAD x5,  18*REGBYTES(sp)
-  csrw CSR_MSUBM, x5
-.endm
-###############################################
-###############################################
 # Disable Interrupt
 #
 .macro DISABLE_MIE
@@ -153,27 +61,32 @@
 .endm
 ###############################################
 ###############################################
+# save exception context
+.macro CONTEXT_SAVE_EXCEPTION_CONTEXT
+    portcontextSAVE_CONTEXT_INTERNAL
+    csrr a0, mcause
+    csrr a1, mepc
+    addi a1, a1, 4                      /* Synchronous so update exception return address to the instruction after the instruction that generated the exception. */
+    store_x a1, 0( sp )                 /* Save updated exception return address. */
+    mv a1, sp
+    load_x sp, xISRStackTop             /* Switch to ISR stack. */
+.endm
+###############################################
+###############################################
+# restore exception context
+.macro CONTEXT_RESTORE_CONTEXT
+  portcontextRESTORE_CONTEXT
+.endm
+###############################################
+###############################################
 
   .align 6
   .global exception_entry
 exception_entry:
-  addi sp, sp, -19*REGBYTES  // allocate stack
-
-  // saving registers
-  SAVE_CONTEXT
-  // saving mepc/mstatus
-  SAVE_MEPC_MSTATUS
-
-  csrr a0, mcause
-  mv a1, sp
+  CONTEXT_SAVE_EXCEPTION_CONTEXT
   call interrupt_register_exception
-  
-  // restore mepc/mstatus registers
-  RESTORE_MEPC_MSTATUS
-  // restore registers
-  RESTORE_CONTEXT
-  
-  addi sp, sp, 19*REGBYTES  // get back stack
+  CONTEXT_RESTORE_CONTEXT
+
   mret
 
 ###############################################
@@ -182,22 +95,10 @@
   .align 2
   .global nmi_entry
 nmi_entry:
-  addi sp, sp, -19*REGBYTES  // allocate stack
-
-  // saving registers
-  SAVE_CONTEXT
-  // saving mepc/mstatus
-  SAVE_MEPC_MSTATUS
-  
-  csrr a0, mcause
+  portcontextSAVE_INTERRUPT_CONTEXT
   call interrupt_register_nmi
-  
-  // restore mepc/mstatus registers
-  RESTORE_MEPC_MSTATUS
-  // restore registers
-  RESTORE_CONTEXT
-  
-  addi sp, sp, 19*REGBYTES  // get back stack
+  portcontextRESTORE_CONTEXT
+
   mret
 
 ###############################################
@@ -206,14 +107,7 @@
   .align 2
   .global int_entry
 int_entry:
-  addi sp, sp, -19*REGBYTES  // allocate stack
-
-  // saving registers
-  SAVE_CONTEXT
-  // store mcause/mepc/msubm to stack
-  csrrwi  x0, CSR_PUSHMCAUSE, 16
-  csrrwi  x0, CSR_PUSHMEPC, 17
-  csrrwi  x0, CSR_PUSHMSUBM, 18
+  portcontextSAVE_INTERRUPT_CONTEXT
 
 service_loop:
   // Claim the CLIC to find its pending highest ID
@@ -221,22 +115,11 @@
   // and update the link register
   csrrw ra, CSR_JALMNXTI, ra
 
-  RESTORE_CONTEXT_EXCEPT_X5
-
   #---- Critical section with interrupts disabled -----------------------
   DISABLE_MIE # Disable interrupts
 
-  LOAD x5,  18*REGBYTES(sp)
-  csrw CSR_MSUBM, x5
-  LOAD x5,  17*REGBYTES(sp)
-  csrw CSR_MEPC, x5
-  LOAD x5,  16*REGBYTES(sp)
-  csrw CSR_MCAUSE, x5
+  portcontextRESTORE_CONTEXT
 
-  RESTORE_CONTEXT_ONLY_X5
-
-  // De-allocate the stack space
-  addi sp, sp, 19*REGBYTES
   // Return to regular code
   mret