From dc246237c696e4dc68eb175d61f6288592021faa Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Mon, 6 Apr 2020 14:11:57 -0600 Subject: [PATCH] Add a watchdog timer of 10 seconds when using scratch ROM --- src/board/system76/darp5/include/board/smfi.h | 1 + src/board/system76/darp5/scratch.c | 3 +++ src/board/system76/darp5/smfi.c | 18 +++++++++++++++--- .../system76/galp3-c/include/board/smfi.h | 1 + src/board/system76/galp3-c/scratch.c | 3 +++ src/board/system76/galp3-c/smfi.c | 18 +++++++++++++++--- src/board/system76/lemp9/include/board/smfi.h | 1 + src/board/system76/lemp9/scratch.c | 3 +++ src/board/system76/lemp9/smfi.c | 18 +++++++++++++++--- src/ec/it5570e/include/ec/etwd.h | 13 +++++++++++++ src/ec/it8587e/include/ec/etwd.h | 13 +++++++++++++ 11 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 src/ec/it5570e/include/ec/etwd.h create mode 100644 src/ec/it8587e/include/ec/etwd.h diff --git a/src/board/system76/darp5/include/board/smfi.h b/src/board/system76/darp5/include/board/smfi.h index 4ee0398..2b27cfa 100644 --- a/src/board/system76/darp5/include/board/smfi.h +++ b/src/board/system76/darp5/include/board/smfi.h @@ -2,6 +2,7 @@ #define _BOARD_SMFI_H void smfi_init(void); +void smfi_watchdog(void); void smfi_event(void); void smfi_debug(unsigned char byte); diff --git a/src/board/system76/darp5/scratch.c b/src/board/system76/darp5/scratch.c index b35585b..aff51d0 100644 --- a/src/board/system76/darp5/scratch.c +++ b/src/board/system76/darp5/scratch.c @@ -1,6 +1,7 @@ #include <8051.h> #include +#include #include // Include scratch ROM @@ -15,6 +16,8 @@ volatile uint8_t __xdata __at(0x1045) SCAR1H; // Enter or exit scratch ROM void scratch_trampoline(void) { + smfi_watchdog(); + // Disable interrupts EA = 0; diff --git a/src/board/system76/darp5/smfi.c b/src/board/system76/darp5/smfi.c index ae2bc03..44da738 100644 --- a/src/board/system76/darp5/smfi.c +++ b/src/board/system76/darp5/smfi.c @@ -9,6 +9,7 @@ #include #include #include +#include #include // Shared memory host semaphore @@ -33,9 +34,6 @@ volatile uint8_t __xdata __at(0x103D) ECINDAR2; volatile uint8_t __xdata __at(0x103E) ECINDAR3; volatile uint8_t __xdata __at(0x103F) ECINDDR; -volatile uint8_t __xdata __at(0x1F01) ETWCFG; -volatile uint8_t __xdata __at(0x1F07) EWDKEYR; - static volatile uint8_t __xdata __at(0xE00) smfi_cmd[256]; static volatile uint8_t __xdata __at(0xF00) smfi_dbg[256]; @@ -144,6 +142,7 @@ static enum Result cmd_reset(void) { return RES_ERR; } +#ifndef __SCRATCH__ static enum Result cmd_fan_get(void) { // If setting fan 0 if (smfi_cmd[2] == 0) { @@ -167,9 +166,22 @@ static enum Result cmd_fan_set(void) { // Failed if fan not found return RES_ERR; } +#endif + +// Set a watchdog timer of 10 seconds +void smfi_watchdog(void) { + ET1CNTLLR = 0xFF; + EWDCNTLLR = 0xFF; + EWDCNTLHR = 0x04; +} void smfi_event(void) { if (smfi_cmd[0]) { +#ifdef __SCRATCH__ + // If in scratch ROM, restart watchdog timer when command received + smfi_watchdog(); +#endif + switch (smfi_cmd[0]) { case CMD_PROBE: // Signature diff --git a/src/board/system76/galp3-c/include/board/smfi.h b/src/board/system76/galp3-c/include/board/smfi.h index 4ee0398..2b27cfa 100644 --- a/src/board/system76/galp3-c/include/board/smfi.h +++ b/src/board/system76/galp3-c/include/board/smfi.h @@ -2,6 +2,7 @@ #define _BOARD_SMFI_H void smfi_init(void); +void smfi_watchdog(void); void smfi_event(void); void smfi_debug(unsigned char byte); diff --git a/src/board/system76/galp3-c/scratch.c b/src/board/system76/galp3-c/scratch.c index b35585b..aff51d0 100644 --- a/src/board/system76/galp3-c/scratch.c +++ b/src/board/system76/galp3-c/scratch.c @@ -1,6 +1,7 @@ #include <8051.h> #include +#include #include // Include scratch ROM @@ -15,6 +16,8 @@ volatile uint8_t __xdata __at(0x1045) SCAR1H; // Enter or exit scratch ROM void scratch_trampoline(void) { + smfi_watchdog(); + // Disable interrupts EA = 0; diff --git a/src/board/system76/galp3-c/smfi.c b/src/board/system76/galp3-c/smfi.c index ae2bc03..44da738 100644 --- a/src/board/system76/galp3-c/smfi.c +++ b/src/board/system76/galp3-c/smfi.c @@ -9,6 +9,7 @@ #include #include #include +#include #include // Shared memory host semaphore @@ -33,9 +34,6 @@ volatile uint8_t __xdata __at(0x103D) ECINDAR2; volatile uint8_t __xdata __at(0x103E) ECINDAR3; volatile uint8_t __xdata __at(0x103F) ECINDDR; -volatile uint8_t __xdata __at(0x1F01) ETWCFG; -volatile uint8_t __xdata __at(0x1F07) EWDKEYR; - static volatile uint8_t __xdata __at(0xE00) smfi_cmd[256]; static volatile uint8_t __xdata __at(0xF00) smfi_dbg[256]; @@ -144,6 +142,7 @@ static enum Result cmd_reset(void) { return RES_ERR; } +#ifndef __SCRATCH__ static enum Result cmd_fan_get(void) { // If setting fan 0 if (smfi_cmd[2] == 0) { @@ -167,9 +166,22 @@ static enum Result cmd_fan_set(void) { // Failed if fan not found return RES_ERR; } +#endif + +// Set a watchdog timer of 10 seconds +void smfi_watchdog(void) { + ET1CNTLLR = 0xFF; + EWDCNTLLR = 0xFF; + EWDCNTLHR = 0x04; +} void smfi_event(void) { if (smfi_cmd[0]) { +#ifdef __SCRATCH__ + // If in scratch ROM, restart watchdog timer when command received + smfi_watchdog(); +#endif + switch (smfi_cmd[0]) { case CMD_PROBE: // Signature diff --git a/src/board/system76/lemp9/include/board/smfi.h b/src/board/system76/lemp9/include/board/smfi.h index 4ee0398..2b27cfa 100644 --- a/src/board/system76/lemp9/include/board/smfi.h +++ b/src/board/system76/lemp9/include/board/smfi.h @@ -2,6 +2,7 @@ #define _BOARD_SMFI_H void smfi_init(void); +void smfi_watchdog(void); void smfi_event(void); void smfi_debug(unsigned char byte); diff --git a/src/board/system76/lemp9/scratch.c b/src/board/system76/lemp9/scratch.c index a8301e0..844310e 100644 --- a/src/board/system76/lemp9/scratch.c +++ b/src/board/system76/lemp9/scratch.c @@ -1,6 +1,7 @@ #include <8051.h> #include +#include #include // Include scratch ROM @@ -15,6 +16,8 @@ volatile uint8_t __xdata __at(0x1042) SCAR0H; // Enter or exit scratch ROM void scratch_trampoline(void) { + smfi_watchdog(); + // Disable interrupts EA = 0; diff --git a/src/board/system76/lemp9/smfi.c b/src/board/system76/lemp9/smfi.c index ae2bc03..44da738 100644 --- a/src/board/system76/lemp9/smfi.c +++ b/src/board/system76/lemp9/smfi.c @@ -9,6 +9,7 @@ #include #include #include +#include #include // Shared memory host semaphore @@ -33,9 +34,6 @@ volatile uint8_t __xdata __at(0x103D) ECINDAR2; volatile uint8_t __xdata __at(0x103E) ECINDAR3; volatile uint8_t __xdata __at(0x103F) ECINDDR; -volatile uint8_t __xdata __at(0x1F01) ETWCFG; -volatile uint8_t __xdata __at(0x1F07) EWDKEYR; - static volatile uint8_t __xdata __at(0xE00) smfi_cmd[256]; static volatile uint8_t __xdata __at(0xF00) smfi_dbg[256]; @@ -144,6 +142,7 @@ static enum Result cmd_reset(void) { return RES_ERR; } +#ifndef __SCRATCH__ static enum Result cmd_fan_get(void) { // If setting fan 0 if (smfi_cmd[2] == 0) { @@ -167,9 +166,22 @@ static enum Result cmd_fan_set(void) { // Failed if fan not found return RES_ERR; } +#endif + +// Set a watchdog timer of 10 seconds +void smfi_watchdog(void) { + ET1CNTLLR = 0xFF; + EWDCNTLLR = 0xFF; + EWDCNTLHR = 0x04; +} void smfi_event(void) { if (smfi_cmd[0]) { +#ifdef __SCRATCH__ + // If in scratch ROM, restart watchdog timer when command received + smfi_watchdog(); +#endif + switch (smfi_cmd[0]) { case CMD_PROBE: // Signature diff --git a/src/ec/it5570e/include/ec/etwd.h b/src/ec/it5570e/include/ec/etwd.h new file mode 100644 index 0000000..ee86635 --- /dev/null +++ b/src/ec/it5570e/include/ec/etwd.h @@ -0,0 +1,13 @@ +#ifndef _EC_ECWD_H +#define _EC_ECWD_H + +#include + +volatile uint8_t __xdata __at(0x1F01) ETWCFG; +volatile uint8_t __xdata __at(0x1F02) ET1PSR; +volatile uint8_t __xdata __at(0x1F04) ET1CNTLLR; +volatile uint8_t __xdata __at(0x1F06) EWDCNTLLR; +volatile uint8_t __xdata __at(0x1F07) EWDKEYR; +volatile uint8_t __xdata __at(0x1F09) EWDCNTLHR; + +#endif // _EC_ECWD_H diff --git a/src/ec/it8587e/include/ec/etwd.h b/src/ec/it8587e/include/ec/etwd.h new file mode 100644 index 0000000..ee86635 --- /dev/null +++ b/src/ec/it8587e/include/ec/etwd.h @@ -0,0 +1,13 @@ +#ifndef _EC_ECWD_H +#define _EC_ECWD_H + +#include + +volatile uint8_t __xdata __at(0x1F01) ETWCFG; +volatile uint8_t __xdata __at(0x1F02) ET1PSR; +volatile uint8_t __xdata __at(0x1F04) ET1CNTLLR; +volatile uint8_t __xdata __at(0x1F06) EWDCNTLLR; +volatile uint8_t __xdata __at(0x1F07) EWDKEYR; +volatile uint8_t __xdata __at(0x1F09) EWDCNTLHR; + +#endif // _EC_ECWD_H