watchdog: pnx4008: restart: support "cmd" from userspace
Added support to verify if a "cmd" is passed from the userspace program rebooting the system; - if a valid "cmd" is available, handle it; - If the received "cmd" is not supported, use the default reboot mode. Signed-off-by: Sylvain Lemieux <slemieux@tycoint.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
This commit is contained in:
parent
25b286c02d
commit
247dcad5c0
@ -129,6 +129,21 @@ static int pnx4008_wdt_set_timeout(struct watchdog_device *wdd,
|
|||||||
static int pnx4008_restart_handler(struct watchdog_device *wdd,
|
static int pnx4008_restart_handler(struct watchdog_device *wdd,
|
||||||
unsigned long mode, void *cmd)
|
unsigned long mode, void *cmd)
|
||||||
{
|
{
|
||||||
|
const char *boot_cmd = cmd;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify if a "cmd" passed from the userspace program rebooting
|
||||||
|
* the system; if available, handle it.
|
||||||
|
* - For details, see the 'reboot' syscall in kernel/reboot.c
|
||||||
|
* - If the received "cmd" is not supported, use the default mode.
|
||||||
|
*/
|
||||||
|
if (boot_cmd) {
|
||||||
|
if (boot_cmd[0] == 'h')
|
||||||
|
mode = REBOOT_HARD;
|
||||||
|
else if (boot_cmd[0] == 's')
|
||||||
|
mode = REBOOT_SOFT;
|
||||||
|
}
|
||||||
|
|
||||||
if (mode == REBOOT_SOFT) {
|
if (mode == REBOOT_SOFT) {
|
||||||
/* Force match output active */
|
/* Force match output active */
|
||||||
writel(EXT_MATCH0, WDTIM_EMR(wdt_base));
|
writel(EXT_MATCH0, WDTIM_EMR(wdt_base));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user