21
21
#include "esp_riscv_apptrace.h"
22
22
#include "esp_riscv.h"
23
23
24
+ /* ESP32-P4 WDT */
25
+ #define ESP32P4_WDT_WKEY_VALUE 0x50d83aa1
26
+ #define ESP32P4_TIMG0_BASE 0x500C2000
27
+ #define ESP32P4_TIMG1_BASE 0x500C3000
28
+ #define ESP32P4_TIMGWDT_CFG_OFF 0x48
29
+ #define ESP32P4_TIMGWDT_PROTECT_OFF 0x64
30
+ #define ESP32P4_TIMG0WDT_CFG0 (ESP32P4_TIMG0_BASE + ESP32P4_TIMGWDT_CFG_OFF)
31
+ #define ESP32P4_TIMG1WDT_CFG0 (ESP32P4_TIMG1_BASE + ESP32P4_TIMGWDT_CFG_OFF)
32
+ #define ESP32P4_TIMG0WDT_PROTECT (ESP32P4_TIMG0_BASE + ESP32P4_TIMGWDT_PROTECT_OFF)
33
+ #define ESP32P4_TIMG1WDT_PROTECT (ESP32P4_TIMG1_BASE + ESP32P4_TIMGWDT_PROTECT_OFF)
34
+
24
35
/* boot mode */
25
36
#define ESP32P4_GPIO_BASE (0x500C0000 + 0x20000)
26
37
#define ESP32P4_GPIO_STRAP_REG_OFF 0x0038
@@ -41,7 +52,6 @@ enum esp32p4_reset_reason {
41
52
ESP32P4_CHIP_POWER_ON_RESET = 0x01 , /* Power on reset */
42
53
ESP32P4_CORE_SW_RESET = 0x03 , /* Software resets the digital core */
43
54
ESP32P4_SYS_PMU_PWR_DOWN_RESET = 0x05 , /* PMU HP power down system reset */
44
- ESP32P4_CPU_PMU_PWR_DOWN_RESET = 0x06 , /* PMU HP power down CPU reset */
45
55
ESP32P4_SYS_HP_WDT_RESET = 0x07 , /* HP WDT resets system */
46
56
ESP32P4_SYS_LP_WDT_RESET = 0x09 , /* LP WDT resets system */
47
57
ESP32P4_CORE_HP_WDT_RESET = 0x0B , /* HP WDT resets digital core */
@@ -55,6 +65,7 @@ enum esp32p4_reset_reason {
55
65
ESP32P4_CORE_USB_JTAG_RESET = 0x16 , /* USB JTAG resets the digital core */
56
66
ESP32P4_CORE_USB_UART_RESET = 0x17 , /* UART resets the digital core */
57
67
ESP32P4_CPU_JTAG_RESET = 0x18 , /* JTAG resets the digital core */
68
+ ESP32P4_CPU_LOCKUP_RESET = 0x1A , /* Cpu lockup resets the chip */
58
69
};
59
70
60
71
static const char * esp32p4_get_reset_reason (int reset_number )
@@ -66,8 +77,6 @@ static const char *esp32p4_get_reset_reason(int reset_number)
66
77
return "Software core reset" ;
67
78
case ESP32P4_SYS_PMU_PWR_DOWN_RESET :
68
79
return "PMU HP power down system reset" ;
69
- case ESP32P4_CPU_PMU_PWR_DOWN_RESET :
70
- return "PMU HP power down CPU reset" ;
71
80
case ESP32P4_SYS_HP_WDT_RESET :
72
81
return "HP WDT resets system" ;
73
82
case ESP32P4_SYS_LP_WDT_RESET :
@@ -94,13 +103,36 @@ static const char *esp32p4_get_reset_reason(int reset_number)
94
103
return "UART resets the digital core" ;
95
104
case ESP32P4_CPU_JTAG_RESET :
96
105
return "JTAG CPU reset" ;
106
+ case ESP32P4_CPU_LOCKUP_RESET :
107
+ return "CPU Lockup reset" ;
97
108
}
98
109
return "Unknown reset cause" ;
99
110
}
100
111
101
112
static int esp32p4_wdt_disable (struct target * target )
102
113
{
103
- /* TODO: not implemented yet */
114
+ /* TIMG0 WDT */
115
+ int res = target_write_u32 (target , ESP32P4_TIMG0WDT_PROTECT , ESP32P4_WDT_WKEY_VALUE );
116
+ if (res != ERROR_OK ) {
117
+ LOG_ERROR ("Failed to write ESP32P4_TIMG0WDT_PROTECT (%d)!" , res );
118
+ return res ;
119
+ }
120
+ res = target_write_u32 (target , ESP32P4_TIMG0WDT_CFG0 , 0 );
121
+ if (res != ERROR_OK ) {
122
+ LOG_ERROR ("Failed to write ESP32P4_TIMG0WDT_CFG0 (%d)!" , res );
123
+ return res ;
124
+ }
125
+ /* TIMG1 WDT */
126
+ res = target_write_u32 (target , ESP32P4_TIMG1WDT_PROTECT , ESP32P4_WDT_WKEY_VALUE );
127
+ if (res != ERROR_OK ) {
128
+ LOG_ERROR ("Failed to write ESP32P4_TIMG1WDT_PROTECT (%d)!" , res );
129
+ return res ;
130
+ }
131
+ res = target_write_u32 (target , ESP32P4_TIMG1WDT_CFG0 , 0 );
132
+ if (res != ERROR_OK ) {
133
+ LOG_ERROR ("Failed to write ESP32P4_TIMG1WDT_CFG0 (%d)!" , res );
134
+ return res ;
135
+ }
104
136
return ERROR_OK ;
105
137
}
106
138
0 commit comments