diff --git a/arch/Kconfig b/arch/Kconfig index b34385c708..9286e2ebc7 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -159,6 +159,10 @@ config ARCH_HAVE_POWEROFF bool default n +config ARCH_HAVE_RESET + bool + default n + config ARCH_USE_MMU bool "Enable MMU" default n diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 1cb1da3ce3..f341f3bf2b 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -233,6 +233,7 @@ config ARCH_CORTEXM0 bool default n select ARCH_HAVE_IRQPRIO + select ARCH_HAVE_RESET config ARCH_CORTEXM3 bool @@ -240,6 +241,7 @@ config ARCH_CORTEXM3 select ARCH_HAVE_IRQPRIO select ARCH_HAVE_RAMVECTORS select ARCH_HAVE_HIPRI_INTERRUPT + select ARCH_HAVE_RESET config ARCH_CORTEXM4 bool @@ -247,6 +249,7 @@ config ARCH_CORTEXM4 select ARCH_HAVE_IRQPRIO select ARCH_HAVE_RAMVECTORS select ARCH_HAVE_HIPRI_INTERRUPT + select ARCH_HAVE_RESET config ARCH_CORTEXM7 bool diff --git a/arch/arm/src/armv6-m/up_systemreset.c b/arch/arm/src/armv6-m/up_systemreset.c index b1c70b3e55..6106028615 100644 --- a/arch/arm/src/armv6-m/up_systemreset.c +++ b/arch/arm/src/armv6-m/up_systemreset.c @@ -42,19 +42,21 @@ #include +#include + #include "up_arch.h" #include "nvic.h" /**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - - /**************************************************************************** - * Public Types + * Public functions ****************************************************************************/ /**************************************************************************** - * Public functions + * Name: up_systemreset + * + * Description: + * Internal, Cortex-M0 reset logic. + * ****************************************************************************/ void up_systemreset(void) @@ -76,3 +78,32 @@ void up_systemreset(void) for (;;); } + + +/**************************************************************************** + * Name: board_reset + * + * Description: + * Reset board. This function may or may not be supported by a + * particular board architecture. + * + * Input Parameters: + * status - Status information provided with the reset event. This + * meaning of this status information is board-specific. If not used by + * a board, the value zero may be provided in calls to board_reset. + * + * Returned Value: + * If this function returns, then it was not possible to power-off the + * board due to some constraints. The return value int this case is a + * board-specific reason for the failure to shutdown. + * + ****************************************************************************/ + +#ifdef CONFIG_BOARDCTL_RESET +int board_reset(int status) +{ + up_systemreset(); + return 0; +} +#endif + diff --git a/arch/arm/src/armv7-m/up_systemreset.c b/arch/arm/src/armv7-m/up_systemreset.c index ef6da0b9f7..96f1b92089 100644 --- a/arch/arm/src/armv7-m/up_systemreset.c +++ b/arch/arm/src/armv7-m/up_systemreset.c @@ -42,19 +42,21 @@ #include +#include + #include "up_arch.h" #include "nvic.h" /**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - - /**************************************************************************** - * Public Types + * Public functions ****************************************************************************/ /**************************************************************************** - * Public functions + * Name: up_systemreset + * + * Description: + * Internal, Cortex-M0 reset logic. + * ****************************************************************************/ void up_systemreset(void) @@ -77,3 +79,31 @@ void up_systemreset(void) for (;;); } + + +/**************************************************************************** + * Name: board_reset + * + * Description: + * Reset board. This function may or may not be supported by a + * particular board architecture. + * + * Input Parameters: + * status - Status information provided with the reset event. This + * meaning of this status information is board-specific. If not used by + * a board, the value zero may be provided in calls to board_reset. + * + * Returned Value: + * If this function returns, then it was not possible to power-off the + * board due to some constraints. The return value int this case is a + * board-specific reason for the failure to shutdown. + * + ****************************************************************************/ + +#ifdef CONFIG_BOARDCTL_RESET +int board_reset(int status) +{ + up_systemreset(); + return 0; +} +#endif diff --git a/arch/sim/src/up_head.c b/arch/sim/src/up_head.c index 43bc256b1a..ddc0270974 100644 --- a/arch/sim/src/up_head.c +++ b/arch/sim/src/up_head.c @@ -56,8 +56,8 @@ * Private Data ****************************************************************************/ -static jmp_buf sim_abort; -static int retcode = EXIT_SUCCESS; +static jmp_buf g_simabort; +static int g_exitcode = EXIT_SUCCESS; /**************************************************************************** * Global Functions @@ -83,7 +83,7 @@ int main(int argc, char **argv, char **envp) /* Then start NuttX */ - if (setjmp(sim_abort) == 0) + if (setjmp(g_simabort) == 0) { os_start(); } @@ -91,7 +91,7 @@ int main(int argc, char **argv, char **envp) /* Restore the original terminal mode and return the exit code */ simuart_teriminate(); - return retcode; + return g_exitcode; } /**************************************************************************** @@ -117,8 +117,8 @@ void up_assert(const uint8_t *filename, int line) /* Exit the simulation */ - retcode = EXIT_FAILURE; - longjmp(sim_abort, 1); + g_exitcode = EXIT_FAILURE; + longjmp(g_simabort, 1); } /**************************************************************************** @@ -143,8 +143,8 @@ int board_power_off(int status) { /* Save the return code and exit the simulation */ - retcode = status; - longjmp(sim_abort, 1); + g_exitcode = status; + longjmp(g_simabort, 1); } #endif diff --git a/configs b/configs index 3da43c3250..5711543356 160000 --- a/configs +++ b/configs @@ -1 +1 @@ -Subproject commit 3da43c32500b42b048ee03022b5edb0409cf625b +Subproject commit 57115433562b9187be38ba2fbfac1d81add14da1 diff --git a/include/nuttx/board.h b/include/nuttx/board.h index a807bbbfe9..9b45de37ad 100644 --- a/include/nuttx/board.h +++ b/include/nuttx/board.h @@ -156,7 +156,9 @@ int board_app_initialize(void); * particular board architecture. * * Input Parameters: - * status - Status information provided with the power off event. + * status - Status information provided with the reset event. This + * meaning of this status information is board-specific. If not used by + * a board, the value zero may be provided in calls to board_power_off. * * Returned Value: * If this function returns, then it was not possible to power-off the @@ -169,6 +171,29 @@ int board_app_initialize(void); int board_power_off(int status); #endif +/**************************************************************************** + * Name: board_reset + * + * Description: + * Reset board. This function may or may not be supported by a + * particular board architecture. + * + * Input Parameters: + * status - Status information provided with the reset event. This + * meaning of this status information is board-specific. If not used by + * a board, the value zero may be provided in calls to board_reset. + * + * Returned Value: + * If this function returns, then it was not possible to power-off the + * board due to some constraints. The return value int this case is a + * board-specific reason for the failure to shutdown. + * + ****************************************************************************/ + +#ifdef CONFIG_BOARDCTL_RESET +int board_reset(int status); +#endif + /**************************************************************************** * Name: board_tsc_setup * diff --git a/include/sys/boardctl.h b/include/sys/boardctl.h index 0e174c4d26..5e8adaf6d8 100644 --- a/include/sys/boardctl.h +++ b/include/sys/boardctl.h @@ -64,6 +64,12 @@ * CONFIGURATION: CONFIG_BOARDCTL_POWEROFF * DEPENDENCIES: Board logic must provide board_power_off * + * CMD: BOARDIOC_RESET + * DESCRIPTION: Reset the board + * ARG: Integer value providing power off status information + * CONFIGURATION: CONFIG_BOARDCTL_RESET + * DEPENDENCIES: Board logic must provide board_reset + * * CMD: BOARDIOC_TSCTEST_SETUP * DESCRIPTION: Touchscreen controller test configuration * ARG: Touch controller device minor number @@ -98,11 +104,12 @@ #define BOARDIOC_INIT _BOARDIOC(0x0001) #define BOARDIOC_POWEROFF _BOARDIOC(0x0002) -#define BOARDIOC_TSCTEST_SETUP _BOARDIOC(0x0003) -#define BOARDIOC_TSCTEST_TEARDOWN _BOARDIOC(0x0004) -#define BOARDIOC_ADCTEST_SETUP _BOARDIOC(0x0005) -#define BOARDIOC_PWMTEST_SETUP _BOARDIOC(0x0006) -#define BOARDIOC_GRAPHICS_SETUP _BOARDIOC(0x0007) +#define BOARDIOC_RESET _BOARDIOC(0x0003) +#define BOARDIOC_TSCTEST_SETUP _BOARDIOC(0x0004) +#define BOARDIOC_TSCTEST_TEARDOWN _BOARDIOC(0x0005) +#define BOARDIOC_ADCTEST_SETUP _BOARDIOC(0x0006) +#define BOARDIOC_PWMTEST_SETUP _BOARDIOC(0x0007) +#define BOARDIOC_GRAPHICS_SETUP _BOARDIOC(0x0008) /* If CONFIG_BOARDCTL_IOCTL=y, then boad-specific commands will be support. * In this case, all commands not recognized by boardctl() will be forwarded @@ -111,7 +118,7 @@ * User defined board commands may begin with this value: */ -#define BOARDIOC_USER _BOARDIOC(0x0008) +#define BOARDIOC_USER _BOARDIOC(0x0009) /**************************************************************************** * Public Type Definitions