soc: telink: tlsr951x: use RISC-V custom CSR common code

TLSR951x also supports Andes extended CSR. Reworks the following CSR
handling to use the RISC-V custom CSR common code:

1. Use common macros for HWDSP CSR context save/restore.
2. Use common macros for PFT CSR context save/restore.
3. Use common low-level CSR initialization via __reset hook.

Signed-off-by: Jimmy Zheng <jimmyzhe@andestech.com>
diff --git a/boards/telink/tlsr9518adk80d/tlsr9518adk80d_defconfig b/boards/telink/tlsr9518adk80d/tlsr9518adk80d_defconfig
index 881ec1f..b7d0f97 100644
--- a/boards/telink/tlsr9518adk80d/tlsr9518adk80d_defconfig
+++ b/boards/telink/tlsr9518adk80d/tlsr9518adk80d_defconfig
@@ -8,6 +8,3 @@
 CONFIG_SERIAL=y
 CONFIG_CONSOLE=y
 CONFIG_UART_CONSOLE=y
-
-# HW DSP options
-CONFIG_TELINK_B91_HWDSP=n
diff --git a/dts/riscv/telink/telink_b91.dtsi b/dts/riscv/telink/telink_b91.dtsi
index aa6f166..d572eac 100644
--- a/dts/riscv/telink/telink_b91.dtsi
+++ b/dts/riscv/telink/telink_b91.dtsi
@@ -23,7 +23,7 @@
 		cpu0: cpu@0 {
 			reg = <0>;
 			clock-frequency = <24000000>;
-			compatible = "telink,b91", "riscv";
+			compatible = "telink,b91", "andestech,andescore-v5", "riscv";
 			riscv,isa = "rv32imac_zicsr_zifencei";
 
 			hlic: interrupt-controller {
diff --git a/soc/telink/tlsr/tlsr951x/CMakeLists.txt b/soc/telink/tlsr/tlsr951x/CMakeLists.txt
index 9e1dff4..7bca7f3 100644
--- a/soc/telink/tlsr/tlsr951x/CMakeLists.txt
+++ b/soc/telink/tlsr/tlsr951x/CMakeLists.txt
@@ -13,7 +13,7 @@
 zephyr_ld_options(-fuse-ld=bfd)
 
 # Set compile options
-zephyr_compile_options_ifdef(CONFIG_TELINK_B91_HWDSP -mext-dsp)
+zephyr_compile_options_ifdef(CONFIG_RISCV_CUSTOM_CSR_ANDES_HWDSP -mext-dsp)
 zephyr_compile_options_ifndef(CONFIG_RISCV_GP -mno-relax)
 zephyr_linker_sources(ROM_START SORT_KEY 0x0 init.ld)
 
diff --git a/soc/telink/tlsr/tlsr951x/Kconfig b/soc/telink/tlsr/tlsr951x/Kconfig
index c538ed7..d7e5bc1 100644
--- a/soc/telink/tlsr/tlsr951x/Kconfig
+++ b/soc/telink/tlsr/tlsr951x/Kconfig
@@ -15,19 +15,23 @@
 	select RISCV_SOC_HAS_GP_RELATIVE_ADDRESSING
 	select HAS_TELINK_DRIVERS
 	select CPU_HAS_FPU
-	select INCLUDE_RESET_VECTOR
+	select CPU_HAS_DCACHE
+	select CPU_HAS_ICACHE
+	select CPU_HAS_ANDES_HWDSP
+	select CPU_HAS_ANDES_PFT
+	select RISCV_SOC_CONTEXT_SAVE if RISCV_CUSTOM_CSR_ANDES_HWDSP
+	select RISCV_SOC_CONTEXT_SAVE if RISCV_CUSTOM_CSR_ANDES_PFT
 	imply XIP
 	select SOC_EARLY_INIT_HOOK
 
 if SOC_SERIES_TLSR951X
 
 config TELINK_B91_HWDSP
-	bool "Support Hardware DSP"
-	select RISCV_SOC_CONTEXT_SAVE
+	bool
+	select DEPRECATED
 
 config TELINK_B91_PFT_ARCH
-	bool "Support performance throttling"
-	default y
-	select RISCV_SOC_CONTEXT_SAVE
+	bool
+	select DEPRECATED
 
 endif # SOC_SERIES_TLSR951X
diff --git a/soc/telink/tlsr/tlsr951x/Kconfig.defconfig b/soc/telink/tlsr/tlsr951x/Kconfig.defconfig
index 777a0ac..1cbe882 100644
--- a/soc/telink/tlsr/tlsr951x/Kconfig.defconfig
+++ b/soc/telink/tlsr/tlsr951x/Kconfig.defconfig
@@ -30,4 +30,8 @@
 config HAS_FLASH_LOAD_OFFSET
 	default y if BOOTLOADER_MCUBOOT
 
+choice CACHE_TYPE
+	default EXTERNAL_CACHE
+endchoice
+
 endif # SOC_SERIES_TLSR951X
diff --git a/soc/telink/tlsr/tlsr951x/soc_context.h b/soc/telink/tlsr/tlsr951x/soc_context.h
index 0f06686..8f2b9dd 100644
--- a/soc/telink/tlsr/tlsr951x/soc_context.h
+++ b/soc/telink/tlsr/tlsr951x/soc_context.h
@@ -7,43 +7,16 @@
 #ifndef SOC_RISCV_TELINK_B91_SOC_CONTEXT_H
 #define SOC_RISCV_TELINK_B91_SOC_CONTEXT_H
 
+#include <csr_context.h>
+
 #ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
 
 /* Telink B91 specific registers. */
-#if defined(CONFIG_TELINK_B91_PFT_ARCH) && defined(__riscv_dsp)
-	#define SOC_ESF_MEMBERS	\
-	uint32_t mxstatus;	\
-	uint32_t ucode		\
+#define SOC_ESF_MEMBERS	\
+	CUSTOM_CSR_ESF_MEMBERS
 
-	#define SOC_ESF_INIT \
-	0xdeadbaad,	     \
-	0xdeadbaad
-
-	#define SOC_ESF_THREAD_INIT(soc_context) \
-	(soc_context)->mxstatus = 0;		 \
-	(soc_context)->ucode = 0
-
-#elif defined(CONFIG_TELINK_B91_PFT_ARCH)
-	#define SOC_ESF_MEMBERS	\
-	uint32_t mxstatus
-
-	#define SOC_ESF_INIT \
-	0xdeadbaad
-
-	#define SOC_ESF_THREAD_INIT(soc_context) \
-	(soc_context)->mxstatus = 0
-
-#elif defined(__riscv_dsp)
-
-	#define SOC_ESF_MEMBERS	\
-	uint32_t ucode
-
-	#define SOC_ESF_INIT \
-	0xdeadbaad
-
-	#define SOC_ESF_THREAD_INIT(soc_context) \
-	(soc_context)->ucode = 0
-#endif
+#define SOC_ESF_INIT \
+	CUSTOM_CSR_ESF_INIT
 
 #endif  /* CONFIG_RISCV_SOC_CONTEXT_SAVE */
 
diff --git a/soc/telink/tlsr/tlsr951x/soc_irq.S b/soc/telink/tlsr/tlsr951x/soc_irq.S
index 76b3ac5..4ddc1ea 100644
--- a/soc/telink/tlsr/tlsr951x/soc_irq.S
+++ b/soc/telink/tlsr/tlsr951x/soc_irq.S
@@ -6,51 +6,24 @@
 
 #include <zephyr/offsets.h>
 #include <zephyr/toolchain.h>
+#include <csr_irq.inc>
 
-#include <soc.h>
-
-#define NDS_MXSTATUS                 0x7C4
+#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
 
 /* Exports */
-#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
 GTEXT(__soc_save_context)
 GTEXT(__soc_restore_context)
-#endif
-
-#ifdef CONFIG_RISCV_SOC_CONTEXT_SAVE
 
 SECTION_FUNC(exception.other, __soc_save_context)
 
-#ifdef CONFIG_TELINK_B91_PFT_ARCH
-	csrr t0, NDS_MXSTATUS
-#endif
-#ifdef __riscv_dsp
-	csrr t1, ucode
-#endif
+	__custom_csr_save_context a0, t0
 
-#ifdef CONFIG_TELINK_B91_PFT_ARCH
-	sw t0, __soc_esf_t_mxstatus_OFFSET(a0)
-#endif
-#ifdef __riscv_dsp
-	sw t1, __soc_esf_t_ucode_OFFSET(a0)
-#endif
 	ret
 
 SECTION_FUNC(exception.other, __soc_restore_context)
 
-#ifdef CONFIG_TELINK_B91_PFT_ARCH
-	lw t0, __soc_esf_t_mxstatus_OFFSET(a0)
-#endif
-#ifdef __riscv_dsp
-	lw t1, __soc_esf_t_ucode_OFFSET(a0)
-#endif
+	__custom_csr_restore_context a0, t0
 
-#ifdef CONFIG_TELINK_B91_PFT_ARCH
-	csrw NDS_MXSTATUS, t0
-#endif
-#ifdef __riscv_dsp
-	csrw ucode, t1
-#endif
 	ret
 
 #endif /* CONFIG_RISCV_SOC_CONTEXT_SAVE */
diff --git a/soc/telink/tlsr/tlsr951x/soc_offsets.h b/soc/telink/tlsr/tlsr951x/soc_offsets.h
index 8b48bce..ff6b2e3 100644
--- a/soc/telink/tlsr/tlsr951x/soc_offsets.h
+++ b/soc/telink/tlsr/tlsr951x/soc_offsets.h
@@ -7,23 +7,13 @@
 #ifndef SOC_RISCV_TELINK_B91_SOC_OFFSETS_H
 #define SOC_RISCV_TELINK_B91_SOC_OFFSETS_H
 
+#include <csr_offsets.h>
+
 #ifdef CONFIG_RISCV_SOC_OFFSETS
 
 /* Telink B91 specific registers. */
-#if defined(CONFIG_TELINK_B91_PFT_ARCH) && defined(__riscv_dsp)
-	#define GEN_SOC_OFFSET_SYMS()	     \
-	GEN_OFFSET_SYM(soc_esf_t, mxstatus); \
-	GEN_OFFSET_SYM(soc_esf_t, ucode)
-
-#elif defined(CONFIG_TELINK_B91_PFT_ARCH)
-	#define GEN_SOC_OFFSET_SYMS() \
-	GEN_OFFSET_SYM(soc_esf_t, mxstatus)
-
-#elif defined(__riscv_dsp)
-	#define GEN_SOC_OFFSET_SYMS() \
-	GEN_OFFSET_SYM(soc_esf_t, ucode)
-
-#endif
+#define GEN_SOC_OFFSET_SYMS() \
+	GEN_CUSTOM_CSR_OFFSET_SYMS()
 
 #endif  /* CONFIG_RISCV_SOC_OFFSETS */
 
diff --git a/soc/telink/tlsr/tlsr951x/start.S b/soc/telink/tlsr/tlsr951x/start.S
index 6e09dab..7074860 100644
--- a/soc/telink/tlsr/tlsr951x/start.S
+++ b/soc/telink/tlsr/tlsr951x/start.S
@@ -4,9 +4,6 @@
  * SPDX-License-Identifier: Apache-2.0
  */
 
-#define NDS_MCACHE_CTL               0x7CA
-#define NDS_MMISC_CTL                0x7D0
-
 #include <zephyr/toolchain.h>
 
 	.option push
@@ -31,17 +28,6 @@
 
 start:
 
-	/* Enable I/D-Cache */
-	csrr   t0,  NDS_MCACHE_CTL
-	ori    t0,  t0,  1        #/I-Cache
-	ori    t0,  t0,  2        #/D-Cache
-	csrw   NDS_MCACHE_CTL,  t0
-	fence.i
-
-	/* Enable misaligned access and non-blocking load */
-	li t0, (1 << 8) | (1 << 6)
-	csrs NDS_MMISC_CTL, t0
-
 _ZERO_AES:
 	lui    t0, 0
 	la     t2, _AES_DATA_VMA_START