mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-26 12:26:11 +00:00
platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs
In modern Chromebooks, the embedded controller has a mechanism where it will watch a hardware-controlled line that toggles in suspend, and wake the system up if an expected sleep transition didn't occur. This can be very useful for detecting power management issues where the system appears to suspend, but doesn't actually reach its lowest expected power states. Sometimes it's useful in debug and test scenarios to be able to control the duration of that timeout, or even disable the EC timeout mechanism altogether. Add a debugfs control to set the timeout to values other than the EC-defined default, for more convenient debug and development iteration. Signed-off-by: Evan Green <evgreen@chromium.org> Reviewed-by: Prashant Malani <pmalani@chromium.org> Reviewed-by: Stephen Boyd <swboyd@chromium.org> Reviewed-by: Guenter Roeck <groeck@chromium.org> Link: https://lore.kernel.org/r/20220822144026.v3.1.Idd188ff3f9caddebc17ac357a13005f93333c21f@changeid [tzungbi: fix one nit in Documentation/ABI/testing/debugfs-cros-ec.] Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
This commit is contained in:
parent
8a07b45fd3
commit
e8bf17d58a
4 changed files with 28 additions and 1 deletions
|
@ -54,3 +54,25 @@ Description:
|
|||
this feature.
|
||||
|
||||
Output will be in the format: "0x%08x\n".
|
||||
|
||||
What: /sys/kernel/debug/<cros-ec-device>/suspend_timeout_ms
|
||||
Date: August 2022
|
||||
KernelVersion: 6.1
|
||||
Description:
|
||||
Some ECs have a feature where they will track transitions of
|
||||
a hardware-controlled sleep line, such as Intel's SLP_S0 line,
|
||||
in order to detect cases where a system failed to go into deep
|
||||
sleep states. The suspend_timeout_ms file controls the amount of
|
||||
time in milliseconds the EC will wait before declaring a sleep
|
||||
timeout event and attempting to wake the system.
|
||||
|
||||
Supply 0 to use the default value coded into EC firmware. Supply
|
||||
65535 (EC_HOST_SLEEP_TIMEOUT_INFINITE) to disable the EC sleep
|
||||
failure detection mechanism. Values in between 0 and 65535
|
||||
indicate the number of milliseconds the EC should wait after a
|
||||
sleep transition before declaring a timeout. This includes both
|
||||
the duration after a sleep command was received but before the
|
||||
hardware line changed, as well as the duration between when the
|
||||
hardware line changed and the kernel sent an EC resume command.
|
||||
|
||||
Output will be in the format: "%u\n".
|
||||
|
|
|
@ -115,7 +115,7 @@ static int cros_ec_sleep_event(struct cros_ec_device *ec_dev, u8 sleep_event)
|
|||
if (ec_dev->host_sleep_v1) {
|
||||
buf.u.req1.sleep_event = sleep_event;
|
||||
buf.u.req1.suspend_params.sleep_timeout_ms =
|
||||
EC_HOST_SLEEP_TIMEOUT_DEFAULT;
|
||||
ec_dev->suspend_timeout_ms;
|
||||
|
||||
buf.msg.outsize = sizeof(buf.u.req1);
|
||||
if ((sleep_event == HOST_SLEEP_EVENT_S3_RESUME) ||
|
||||
|
@ -188,6 +188,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
|
|||
ec_dev->max_passthru = 0;
|
||||
ec_dev->ec = NULL;
|
||||
ec_dev->pd = NULL;
|
||||
ec_dev->suspend_timeout_ms = EC_HOST_SLEEP_TIMEOUT_DEFAULT;
|
||||
|
||||
ec_dev->din = devm_kzalloc(dev, ec_dev->din_size, GFP_KERNEL);
|
||||
if (!ec_dev->din)
|
||||
|
|
|
@ -470,6 +470,9 @@ static int cros_ec_debugfs_probe(struct platform_device *pd)
|
|||
debugfs_create_x32("last_resume_result", 0444, debug_info->dir,
|
||||
&ec->ec_dev->last_resume_result);
|
||||
|
||||
debugfs_create_u16("suspend_timeout_ms", 0664, debug_info->dir,
|
||||
&ec->ec_dev->suspend_timeout_ms);
|
||||
|
||||
ec->debug_info = debug_info;
|
||||
|
||||
dev_set_drvdata(&pd->dev, ec);
|
||||
|
|
|
@ -169,6 +169,7 @@ struct cros_ec_device {
|
|||
int event_size;
|
||||
u32 host_event_wake_mask;
|
||||
u32 last_resume_result;
|
||||
u16 suspend_timeout_ms;
|
||||
ktime_t last_event_time;
|
||||
struct notifier_block notifier_ready;
|
||||
|
||||
|
|
Loading…
Reference in a new issue