From 15a2c17f791b7d6703863718d92fa35402c41067 Mon Sep 17 00:00:00 2001 From: wangchen <253227059@qq.com> Date: Wed, 28 Jul 2021 17:19:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=20trustzone=20=E4=B8=AD=E6=96=AD?= =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【背景】当前无法使用 trustzone。 【修改方案】 由于tz需要使用svc中断,因此删除之前使用的HalExcSvcCall的地方,改为HalSVCHandler 【影响】 对现有的产品编译不会有影响。 re #I42TFV Signed-off-by: wangchen <253227059@qq.com> --- kernel/BUILD.gn | 2 +- .../arm/cortex-m33/gcc/NTZ/los_arch_interrupt.h | 2 +- kernel/arch/arm/cortex-m33/gcc/NTZ/los_exc.S | 8 ++++---- .../arch/arm/cortex-m33/gcc/NTZ/los_interrupt.c | 2 +- kernel/arch/arm/cortex-m33/gcc/TZ/BUILD.gn | 2 ++ .../gcc/TZ/non_secure/los_arch_interrupt.h | 2 +- .../cortex-m33/gcc/TZ/non_secure/los_dispatch.S | 3 --- .../arm/cortex-m33/gcc/TZ/non_secure/los_exc.S | 16 ---------------- .../cortex-m33/gcc/TZ/non_secure/los_interrupt.c | 2 +- .../gcc/TZ/secure/los_secure_context_asm.S | 2 +- 10 files changed, 12 insertions(+), 29 deletions(-) diff --git a/kernel/BUILD.gn b/kernel/BUILD.gn index ae9c3420..65f03b25 100644 --- a/kernel/BUILD.gn +++ b/kernel/BUILD.gn @@ -61,7 +61,7 @@ static_library("kernel") { } else if ("$board_cpu" == "cortex-m7") { deps = [ "arch/arm/cortex-m7/gcc/:arch" ] } else if ("$board_cpu" == "cortex-m33") { - deps = [ "arch/arm/cortex-m33/gcc/:arch" ] + deps = [ "arch/arm/cortex-m33/gcc/TZ:arch" ] } else if ("$board_cpu" == "") { if ("$board_arch" == "rv32imac" || "$board_arch" == "rv32imafdc") { deps = [ "arch/risc-v/riscv32/gcc:arch" ] diff --git a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_arch_interrupt.h b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_arch_interrupt.h index 3c98b745..dd1b3ed5 100755 --- a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_arch_interrupt.h +++ b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_arch_interrupt.h @@ -545,7 +545,7 @@ VOID HalExcHardFault(VOID); VOID HalExcMemFault(VOID); VOID HalExcBusFault(VOID); VOID HalExcUsageFault(VOID); -VOID HalExcSvcCall(VOID); +VOID HalSVCHandler(VOID); VOID HalHwiInit(); diff --git a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_exc.S b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_exc.S index af0753ab..5660c577 100755 --- a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_exc.S +++ b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_exc.S @@ -41,7 +41,7 @@ .global HalExcMemFault .global HalExcBusFault .global HalExcUsageFault - .global HalExcSvcCall + .global HalSVCHandler .extern HalExcHandleEntry .extern g_uwExcTbl @@ -148,9 +148,9 @@ osHFExcCommonBMU: B osExcDispatch .fnend - .type HalExcSvcCall, %function - .global HalExcSvcCall -HalExcSvcCall: + .type HalSVCHandler, %function + .global HalSVCHandler +HalSVCHandler: .fnstart .cantunwind TST LR, #0x4 diff --git a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_interrupt.c b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_interrupt.c index c5952da6..d1f55b80 100755 --- a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_interrupt.c +++ b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_interrupt.c @@ -497,7 +497,7 @@ LITE_OS_SEC_TEXT_INIT VOID HalHwiInit() g_hwiForm[MemoryManagement_IRQn + OS_SYS_VECTOR_CNT] = HalExcMemFault; g_hwiForm[BusFault_IRQn + OS_SYS_VECTOR_CNT] = HalExcBusFault; g_hwiForm[UsageFault_IRQn + OS_SYS_VECTOR_CNT] = HalExcUsageFault; - g_hwiForm[SVCall_IRQn + OS_SYS_VECTOR_CNT] = HalExcSvcCall; + g_hwiForm[SVCall_IRQn + OS_SYS_VECTOR_CNT] = HalSVCHandler; g_hwiForm[PendSV_IRQn + OS_SYS_VECTOR_CNT] = HalPendSV; g_hwiForm[SysTick_IRQn + OS_SYS_VECTOR_CNT] = OsTickHandler; diff --git a/kernel/arch/arm/cortex-m33/gcc/TZ/BUILD.gn b/kernel/arch/arm/cortex-m33/gcc/TZ/BUILD.gn index 3c92fa3c..49389c88 100644 --- a/kernel/arch/arm/cortex-m33/gcc/TZ/BUILD.gn +++ b/kernel/arch/arm/cortex-m33/gcc/TZ/BUILD.gn @@ -41,6 +41,8 @@ static_library("arch") { ] include_dirs = [ + "./non_secure", + "./secure", "../../../../../../kernel/arch/include", "../../../../../../kernel/arch/include", "../../../../../../kernel/include", diff --git a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_arch_interrupt.h b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_arch_interrupt.h index 3c98b745..dd1b3ed5 100755 --- a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_arch_interrupt.h +++ b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_arch_interrupt.h @@ -545,7 +545,7 @@ VOID HalExcHardFault(VOID); VOID HalExcMemFault(VOID); VOID HalExcBusFault(VOID); VOID HalExcUsageFault(VOID); -VOID HalExcSvcCall(VOID); +VOID HalSVCHandler(VOID); VOID HalHwiInit(); diff --git a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_dispatch.S b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_dispatch.S index 756b4f83..08ac871e 100644 --- a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_dispatch.S +++ b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_dispatch.S @@ -48,8 +48,6 @@ .type HalStartFirstTask, %function .global HalStartFirstTask HalStartFirstTask: - .fnstart - .cantunwind MOV R0, #2 MSR CONTROL, R0 @@ -77,7 +75,6 @@ __DisabledFPU1: MSR PSP, R12 CPSIE I BX R3 - .fnend .type HalIntLock, %function .global HalIntLock diff --git a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_exc.S b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_exc.S index af0753ab..e95b12c5 100755 --- a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_exc.S +++ b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_exc.S @@ -41,7 +41,6 @@ .global HalExcMemFault .global HalExcBusFault .global HalExcUsageFault - .global HalExcSvcCall .extern HalExcHandleEntry .extern g_uwExcTbl @@ -148,21 +147,6 @@ osHFExcCommonBMU: B osExcDispatch .fnend - .type HalExcSvcCall, %function - .global HalExcSvcCall -HalExcSvcCall: - .fnstart - .cantunwind - TST LR, #0x4 - ITE EQ - MRSEQ R0, MSP - MRSNE R0, PSP - LDR R1, [R0,#24] - LDRB R0, [R1,#-2] - MOV R1, #0 - B osExcDispatch - .fnend - .type HalExcBusFault, %function .global HalExcBusFault HalExcBusFault: diff --git a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_interrupt.c b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_interrupt.c index c5952da6..d1f55b80 100755 --- a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_interrupt.c +++ b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_interrupt.c @@ -497,7 +497,7 @@ LITE_OS_SEC_TEXT_INIT VOID HalHwiInit() g_hwiForm[MemoryManagement_IRQn + OS_SYS_VECTOR_CNT] = HalExcMemFault; g_hwiForm[BusFault_IRQn + OS_SYS_VECTOR_CNT] = HalExcBusFault; g_hwiForm[UsageFault_IRQn + OS_SYS_VECTOR_CNT] = HalExcUsageFault; - g_hwiForm[SVCall_IRQn + OS_SYS_VECTOR_CNT] = HalExcSvcCall; + g_hwiForm[SVCall_IRQn + OS_SYS_VECTOR_CNT] = HalSVCHandler; g_hwiForm[PendSV_IRQn + OS_SYS_VECTOR_CNT] = HalPendSV; g_hwiForm[SysTick_IRQn + OS_SYS_VECTOR_CNT] = OsTickHandler; diff --git a/kernel/arch/arm/cortex-m33/gcc/TZ/secure/los_secure_context_asm.S b/kernel/arch/arm/cortex-m33/gcc/TZ/secure/los_secure_context_asm.S index 8743d046..f5f0e8ac 100755 --- a/kernel/arch/arm/cortex-m33/gcc/TZ/secure/los_secure_context_asm.S +++ b/kernel/arch/arm/cortex-m33/gcc/TZ/secure/los_secure_context_asm.S @@ -94,7 +94,7 @@ HalSecureContextSaveAsm: MOV R0, #0 MSR PSPLIM, R0 /* No PSPLIM for the current task. */ MSR PSP, R0 /* No secure stack for the current task. */ + .fnend __ThreadMode: BX LR - .fnend \ No newline at end of file