1 /*
2  * Copyright (c) 2022-2024, Arm Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #include "tfm_hal_device_header.h"
9 
tfm_hal_get_reset_syndrome(void)10 uint32_t tfm_hal_get_reset_syndrome(void)
11 {
12     struct rse_sysctrl_t *sysctrl = (struct rse_sysctrl_t *)RSE_SYSCTRL_BASE_S;
13 
14     return sysctrl->reset_syndrome;
15 }
16 
tfm_hal_clear_reset_syndrome_bit(uint8_t bit_pos)17 void tfm_hal_clear_reset_syndrome_bit(uint8_t bit_pos)
18 {
19     struct rse_sysctrl_t *sysctrl = (struct rse_sysctrl_t *)RSE_SYSCTRL_BASE_S;
20 
21     sysctrl->reset_syndrome &= ~(1 << bit_pos);
22 }
23 
tfm_hal_system_reset(void)24 __NO_RETURN void tfm_hal_system_reset(void)
25 {
26     struct rse_sysctrl_t *rse_sysctrl = (void *)RSE_SYSCTRL_BASE_S;
27 
28     __DSB();
29     rse_sysctrl->swreset = 0x1u << 5;
30     __DSB();
31 
32     while(1) {
33         __NOP();
34     }
35 }
36 
tfm_hal_system_halt(void)37 __NO_RETURN void tfm_hal_system_halt(void)
38 {
39     /*
40      * Disable IRQs to stop all threads, not just the thread that
41      * halted the system.
42      */
43     __disable_irq();
44 
45     /*
46      * Enter sleep to reduce power consumption and do it in a loop in
47      * case a signal wakes up the CPU.
48      */
49     while (1) {
50         __WFE();
51     }
52 }
53