Message ID | 20240118195325.2964918-2-lma@chromium.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Introduce EC-based watchdog | expand |
On Thu, Jan 18, 2024 at 07:53:22PM +0000, Lukasz Majczak wrote: > Update structures and defines related to EC_CMD_HANG_DETECT > to allow usage of new EC-based watchdog. > > Signed-off-by: Lukasz Majczak <lma@chromium.org> Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > .../linux/platform_data/cros_ec_commands.h | 78 +++++++++---------- > 1 file changed, 35 insertions(+), 43 deletions(-) > > diff --git a/include/linux/platform_data/cros_ec_commands.h b/include/linux/platform_data/cros_ec_commands.h > index 7dae17b62a4d..ecc47d5fe239 100644 > --- a/include/linux/platform_data/cros_ec_commands.h > +++ b/include/linux/platform_data/cros_ec_commands.h > @@ -3961,60 +3961,52 @@ struct ec_response_i2c_passthru { > } __ec_align1; > > /*****************************************************************************/ > -/* Power button hang detect */ > - > +/* AP hang detect */ > #define EC_CMD_HANG_DETECT 0x009F > > -/* Reasons to start hang detection timer */ > -/* Power button pressed */ > -#define EC_HANG_START_ON_POWER_PRESS BIT(0) > - > -/* Lid closed */ > -#define EC_HANG_START_ON_LID_CLOSE BIT(1) > - > - /* Lid opened */ > -#define EC_HANG_START_ON_LID_OPEN BIT(2) > - > -/* Start of AP S3->S0 transition (booting or resuming from suspend) */ > -#define EC_HANG_START_ON_RESUME BIT(3) > - > -/* Reasons to cancel hang detection */ > +#define EC_HANG_DETECT_MIN_TIMEOUT 5 > +#define EC_HANG_DETECT_MAX_TIMEOUT 65535 > > -/* Power button released */ > -#define EC_HANG_STOP_ON_POWER_RELEASE BIT(8) > +/* EC hang detect commands */ > +enum ec_hang_detect_cmds { > + /* Reload AP hang detect timer. */ > + EC_HANG_DETECT_CMD_RELOAD = 0x0, > > -/* Any host command from AP received */ > -#define EC_HANG_STOP_ON_HOST_COMMAND BIT(9) > + /* Stop AP hang detect timer. */ > + EC_HANG_DETECT_CMD_CANCEL = 0x1, > > -/* Stop on end of AP S0->S3 transition (suspending or shutting down) */ > -#define EC_HANG_STOP_ON_SUSPEND BIT(10) > + /* Configure watchdog with given reboot timeout and > + * cancel currently running AP hang detect timer. > + */ > + EC_HANG_DETECT_CMD_SET_TIMEOUT = 0x2, > > -/* > - * If this flag is set, all the other fields are ignored, and the hang detect > - * timer is started. This provides the AP a way to start the hang timer > - * without reconfiguring any of the other hang detect settings. Note that > - * you must previously have configured the timeouts. > - */ > -#define EC_HANG_START_NOW BIT(30) > + /* Get last hang status - whether the AP boot was clear or not */ > + EC_HANG_DETECT_CMD_GET_STATUS = 0x3, > > -/* > - * If this flag is set, all the other fields are ignored (including > - * EC_HANG_START_NOW). This provides the AP a way to stop the hang timer > - * without reconfiguring any of the other hang detect settings. > - */ > -#define EC_HANG_STOP_NOW BIT(31) > + /* Clear last hang status. Called when AP is rebooting/shutting down > + * gracefully. > + */ > + EC_HANG_DETECT_CMD_CLEAR_STATUS = 0x4 > +}; > > struct ec_params_hang_detect { > - /* Flags; see EC_HANG_* */ > - uint32_t flags; > - > - /* Timeout in msec before generating host event, if enabled */ > - uint16_t host_event_timeout_msec; > + uint16_t command; /* enum ec_hang_detect_cmds */ > + /* Timeout in seconds before generating reboot */ > + uint16_t reboot_timeout_sec; > +} __ec_align2; > > - /* Timeout in msec before generating warm reboot, if enabled */ > - uint16_t warm_reboot_timeout_msec; > -} __ec_align4; > +/* Status codes that describe whether AP has boot normally or the hang has been > + * detected and EC has reset AP > + */ > +enum ec_hang_detect_status { > + EC_HANG_DETECT_AP_BOOT_NORMAL = 0x0, > + EC_HANG_DETECT_AP_BOOT_EC_WDT = 0x1, > + EC_HANG_DETECT_AP_BOOT_COUNT, > +}; > > +struct ec_response_hang_detect { > + uint8_t status; /* enum ec_hang_detect_status */ > +} __ec_align1; > /*****************************************************************************/ > /* Commands for battery charging */ > > -- > 2.43.0.429.g432eaa2c6b-goog > >
On Thu, Jan 18, 2024 at 07:53:22PM +0000, Lukasz Majczak wrote: > +#define EC_HANG_DETECT_MIN_TIMEOUT 5 > +#define EC_HANG_DETECT_MAX_TIMEOUT 65535 EC_HANG_DETECT_MAX_TIMEOUT isn't in the latest ec_commands.h [1]. Could you either add EC_HANG_DETECT_MAX_TIMEOUT to ec_commands.h or drop the macro here? [1] https://crrev.com/5a76e67210b15fcf67d8a6f90439993598949ae4/include/ec_commands.h#4749
On Fri, Jan 19, 2024 at 4:41 AM Tzung-Bi Shih <tzungbi@kernel.org> wrote: > > On Thu, Jan 18, 2024 at 07:53:22PM +0000, Lukasz Majczak wrote: > > +#define EC_HANG_DETECT_MIN_TIMEOUT 5 > > +#define EC_HANG_DETECT_MAX_TIMEOUT 65535 > > EC_HANG_DETECT_MAX_TIMEOUT isn't in the latest ec_commands.h [1]. Could you > either add EC_HANG_DETECT_MAX_TIMEOUT to ec_commands.h or drop the macro here? > > [1] https://crrev.com/5a76e67210b15fcf67d8a6f90439993598949ae4/include/ec_commands.h#4749 Yes, I will update ec_commands.h on the EC-side to match above definitions although it doesn't influence any logic on the EC side. Best regards Lukasz
diff --git a/include/linux/platform_data/cros_ec_commands.h b/include/linux/platform_data/cros_ec_commands.h index 7dae17b62a4d..ecc47d5fe239 100644 --- a/include/linux/platform_data/cros_ec_commands.h +++ b/include/linux/platform_data/cros_ec_commands.h @@ -3961,60 +3961,52 @@ struct ec_response_i2c_passthru { } __ec_align1; /*****************************************************************************/ -/* Power button hang detect */ - +/* AP hang detect */ #define EC_CMD_HANG_DETECT 0x009F -/* Reasons to start hang detection timer */ -/* Power button pressed */ -#define EC_HANG_START_ON_POWER_PRESS BIT(0) - -/* Lid closed */ -#define EC_HANG_START_ON_LID_CLOSE BIT(1) - - /* Lid opened */ -#define EC_HANG_START_ON_LID_OPEN BIT(2) - -/* Start of AP S3->S0 transition (booting or resuming from suspend) */ -#define EC_HANG_START_ON_RESUME BIT(3) - -/* Reasons to cancel hang detection */ +#define EC_HANG_DETECT_MIN_TIMEOUT 5 +#define EC_HANG_DETECT_MAX_TIMEOUT 65535 -/* Power button released */ -#define EC_HANG_STOP_ON_POWER_RELEASE BIT(8) +/* EC hang detect commands */ +enum ec_hang_detect_cmds { + /* Reload AP hang detect timer. */ + EC_HANG_DETECT_CMD_RELOAD = 0x0, -/* Any host command from AP received */ -#define EC_HANG_STOP_ON_HOST_COMMAND BIT(9) + /* Stop AP hang detect timer. */ + EC_HANG_DETECT_CMD_CANCEL = 0x1, -/* Stop on end of AP S0->S3 transition (suspending or shutting down) */ -#define EC_HANG_STOP_ON_SUSPEND BIT(10) + /* Configure watchdog with given reboot timeout and + * cancel currently running AP hang detect timer. + */ + EC_HANG_DETECT_CMD_SET_TIMEOUT = 0x2, -/* - * If this flag is set, all the other fields are ignored, and the hang detect - * timer is started. This provides the AP a way to start the hang timer - * without reconfiguring any of the other hang detect settings. Note that - * you must previously have configured the timeouts. - */ -#define EC_HANG_START_NOW BIT(30) + /* Get last hang status - whether the AP boot was clear or not */ + EC_HANG_DETECT_CMD_GET_STATUS = 0x3, -/* - * If this flag is set, all the other fields are ignored (including - * EC_HANG_START_NOW). This provides the AP a way to stop the hang timer - * without reconfiguring any of the other hang detect settings. - */ -#define EC_HANG_STOP_NOW BIT(31) + /* Clear last hang status. Called when AP is rebooting/shutting down + * gracefully. + */ + EC_HANG_DETECT_CMD_CLEAR_STATUS = 0x4 +}; struct ec_params_hang_detect { - /* Flags; see EC_HANG_* */ - uint32_t flags; - - /* Timeout in msec before generating host event, if enabled */ - uint16_t host_event_timeout_msec; + uint16_t command; /* enum ec_hang_detect_cmds */ + /* Timeout in seconds before generating reboot */ + uint16_t reboot_timeout_sec; +} __ec_align2; - /* Timeout in msec before generating warm reboot, if enabled */ - uint16_t warm_reboot_timeout_msec; -} __ec_align4; +/* Status codes that describe whether AP has boot normally or the hang has been + * detected and EC has reset AP + */ +enum ec_hang_detect_status { + EC_HANG_DETECT_AP_BOOT_NORMAL = 0x0, + EC_HANG_DETECT_AP_BOOT_EC_WDT = 0x1, + EC_HANG_DETECT_AP_BOOT_COUNT, +}; +struct ec_response_hang_detect { + uint8_t status; /* enum ec_hang_detect_status */ +} __ec_align1; /*****************************************************************************/ /* Commands for battery charging */
Update structures and defines related to EC_CMD_HANG_DETECT to allow usage of new EC-based watchdog. Signed-off-by: Lukasz Majczak <lma@chromium.org> --- .../linux/platform_data/cros_ec_commands.h | 78 +++++++++---------- 1 file changed, 35 insertions(+), 43 deletions(-)