1 /*
2  * Copyright (c) 2023 Basalte bv
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #define SAM_DT_RSTC_DRIVER DT_INST(0, atmel_sam_rstc)
8 
9 #include <zephyr/kernel.h>
10 #if defined(CONFIG_REBOOT)
11 #include <zephyr/sys/reboot.h>
12 #endif
13 
14 #if defined(CONFIG_REBOOT)
15 #if DT_NODE_HAS_STATUS(SAM_DT_RSTC_DRIVER, okay)
16 
sys_arch_reboot(int type)17 void sys_arch_reboot(int type)
18 {
19 	Rstc *regs = (Rstc *)DT_REG_ADDR(SAM_DT_RSTC_DRIVER);
20 
21 	switch (type) {
22 	case SYS_REBOOT_COLD:
23 		regs->RSTC_CR = RSTC_CR_KEY_PASSWD
24 			      | RSTC_CR_PROCRST
25 #if defined(CONFIG_SOC_SERIES_SAM3X) || defined(CONFIG_SOC_SERIES_SAM4S) || \
26 	defined(CONFIG_SOC_SERIES_SAM4E)
27 			      | RSTC_CR_PERRST
28 #endif /* CONFIG_SOC_SERIES_SAM3X || CONFIG_SOC_SERIES_SAM4S || CONFIG_SOC_SERIES_SAM4E */
29 			      ;
30 		break;
31 	default:
32 		break;
33 	}
34 }
35 
36 #endif /* DT_NODE_HAS_STATUS */
37 #endif /* CONFIG_REBOOT */
38