boards/boardctl:common boardctl to read reset cause.
Signed-off-by: 田昕 <tianxin7@xiaomi.com>
This commit is contained in:
parent
ca8ce37433
commit
4071f460b2
4 changed files with 89 additions and 1 deletions
|
@ -3499,6 +3499,15 @@ config BOARD_ASSERT_RESET_VALUE
|
||||||
implementations to handle the reset differently for the
|
implementations to handle the reset differently for the
|
||||||
case of a crash.
|
case of a crash.
|
||||||
|
|
||||||
|
config BOARDCTL_RESET_CAUSE
|
||||||
|
bool "Return reset cause"
|
||||||
|
default n
|
||||||
|
depends on ARCH_HAVE_RESET
|
||||||
|
---help---
|
||||||
|
Enables support for the BOARDIOC_RESET_CAUSE boardctl() command.
|
||||||
|
Architecture specific logic must provide the board_reset_cause()
|
||||||
|
interface.
|
||||||
|
|
||||||
config BOARDCTL_UNIQUEID
|
config BOARDCTL_UNIQUEID
|
||||||
bool "Return board unique ID"
|
bool "Return board unique ID"
|
||||||
default n
|
default n
|
||||||
|
|
|
@ -777,6 +777,27 @@ int boardctl(unsigned int cmd, uintptr_t arg)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARDCTL_RESET_CAUSE
|
||||||
|
/* CMD: BOARDIOC_RESET_CAUSE
|
||||||
|
* DESCRIPTION: Get the cause of last-time board reset
|
||||||
|
* ARG: A pointer to an instance of struct
|
||||||
|
* boardioc_reset_cause_s
|
||||||
|
* CONFIGURATION: CONFIG_BOARDCTL_RESET_CAUSE
|
||||||
|
* DEPENDENCIES: Board logic must provide the
|
||||||
|
* board_reset_cause() interface.
|
||||||
|
*/
|
||||||
|
|
||||||
|
case BOARDIOC_RESET_CAUSE:
|
||||||
|
{
|
||||||
|
FAR struct boardioc_reset_cause_s *cause =
|
||||||
|
(FAR struct boardioc_reset_cause_s *)arg;
|
||||||
|
|
||||||
|
DEBUGASSERT(cause != NULL);
|
||||||
|
ret = board_reset_cause(cause);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_BOARDCTL_IOCTL
|
#ifdef CONFIG_BOARDCTL_IOCTL
|
||||||
|
|
|
@ -96,6 +96,10 @@
|
||||||
# include <nuttx/irq.h>
|
# include <nuttx/irq.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARDCTL_RESET_CAUSE
|
||||||
|
# include <sys/boardctl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Function Prototypes
|
* Public Function Prototypes
|
||||||
*
|
*
|
||||||
|
@ -819,6 +823,20 @@ void board_crashdump(uintptr_t currentsp, FAR void *tcb,
|
||||||
void board_init_rngseed(void);
|
void board_init_rngseed(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: board_reset_cause
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* This interface may be used by application specific logic to get the
|
||||||
|
* cause of last reset. Support for this function is required by
|
||||||
|
* board-level logic if CONFIG_BOARDCTL_RESET is selected.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARDCTL_RESET_CAUSE
|
||||||
|
int board_reset_cause(FAR struct boardioc_reset_cause_s *cause);
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef EXTERN
|
#undef EXTERN
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -180,6 +180,12 @@
|
||||||
* 1=locked.
|
* 1=locked.
|
||||||
* CONFIGURATION: CONFIG_BOARDCTL_TESTSET
|
* CONFIGURATION: CONFIG_BOARDCTL_TESTSET
|
||||||
* DEPENDENCIES: Architecture-specific logic provides up_testset()
|
* DEPENDENCIES: Architecture-specific logic provides up_testset()
|
||||||
|
*
|
||||||
|
* CMD: BOARDIOC_RESET_CAUSE
|
||||||
|
* DESCRIPTION: Get the cause of last-time board reset
|
||||||
|
* ARG: A pointer to an instance of struct boardioc_reset_cause_s
|
||||||
|
* CONFIGURATION: CONFIG_BOARDCTL_RESET_CAUSE
|
||||||
|
* DEPENDENCIES: Board logic must provide the board_reset_cause() interface.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define BOARDIOC_INIT _BOARDIOC(0x0001)
|
#define BOARDIOC_INIT _BOARDIOC(0x0001)
|
||||||
|
@ -202,6 +208,7 @@
|
||||||
#define BOARDIOC_UNIQUEKEY _BOARDIOC(0x0012)
|
#define BOARDIOC_UNIQUEKEY _BOARDIOC(0x0012)
|
||||||
#define BOARDIOC_SWITCH_BOOT _BOARDIOC(0x0013)
|
#define BOARDIOC_SWITCH_BOOT _BOARDIOC(0x0013)
|
||||||
#define BOARDIOC_BOOT_IMAGE _BOARDIOC(0x0014)
|
#define BOARDIOC_BOOT_IMAGE _BOARDIOC(0x0014)
|
||||||
|
#define BOARDIOC_RESET_CAUSE _BOARDIOC(0x0015)
|
||||||
|
|
||||||
/* If CONFIG_BOARDCTL_IOCTL=y, then board-specific commands will be support.
|
/* If CONFIG_BOARDCTL_IOCTL=y, then board-specific commands will be support.
|
||||||
* In this case, all commands not recognized by boardctl() will be forwarded
|
* In this case, all commands not recognized by boardctl() will be forwarded
|
||||||
|
@ -210,7 +217,7 @@
|
||||||
* User defined board commands may begin with this value:
|
* User defined board commands may begin with this value:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define BOARDIOC_USER _BOARDIOC(0x0015)
|
#define BOARDIOC_USER _BOARDIOC(0x0016)
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Type Definitions
|
* Public Type Definitions
|
||||||
|
@ -403,6 +410,39 @@ struct boardioc_boot_info_s
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARDCTL_RESET_CAUSE
|
||||||
|
/* Describes the reason of last reset */
|
||||||
|
|
||||||
|
enum boardioc_reset_cause_e
|
||||||
|
{
|
||||||
|
BOARDIOC_RESETCAUSE_NONE = 0,
|
||||||
|
BOARDIOC_RESETCAUSE_SYS_CHIPPOR, /* chip power on */
|
||||||
|
BOARDIOC_RESETCAUSE_SYS_RWDT, /* RTC watchdog system reset */
|
||||||
|
BOARDIOC_RESETCAUSE_SYS_BOR, /* brown-out system reset */
|
||||||
|
BOARDIOC_RESETCAUSE_CORE_SOFT, /* software core reset */
|
||||||
|
BOARDIOC_RESETCAUSE_CORE_DPSP, /* deep-sleep core reset */
|
||||||
|
BOARDIOC_RESETCAUSE_CORE_MWDT, /* main watchdog core reset */
|
||||||
|
BOARDIOC_RESETCAUSE_CORE_RWDT, /* RTC watchdog core reset */
|
||||||
|
BOARDIOC_RESETCAUSE_CPU_MWDT, /* main watchdog cpu reset */
|
||||||
|
BOARDIOC_RESETCAUSE_CPU_SOFT, /* software cpu reset */
|
||||||
|
BOARDIOC_RESETCAUSE_CPU_RWDT /* RTC watchdog cpu reset */
|
||||||
|
};
|
||||||
|
|
||||||
|
enum boardioc_softreset_subreason_e
|
||||||
|
{
|
||||||
|
BOARDIOC_SOFTRESETCAUSE_USER_REBOOT = 0,
|
||||||
|
BOARDIOC_SOFTRESETCAUSE_PANIC,
|
||||||
|
BOARDIOC_SOFTRESETCAUSE_ASSERT
|
||||||
|
};
|
||||||
|
|
||||||
|
struct boardioc_reset_cause_s
|
||||||
|
{
|
||||||
|
enum boardioc_reset_cause_e cause; /* The reason of last reset */
|
||||||
|
uint32_t flag; /* watchdog number when watchdog reset,
|
||||||
|
* or soft-reset subreason */
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Data
|
* Public Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
Loading…
Reference in a new issue