* [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs
@ 2022-08-22 21:40 Evan Green
2022-08-22 22:58 ` Stephen Boyd
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Evan Green @ 2022-08-22 21:40 UTC (permalink / raw)
To: Enric Balletbo i Serra
Cc: Rajat Jain, Tzung-Bi Shih, Prashant Malani, Evan Green,
Benson Leung, Guenter Roeck, Stephen Boyd, Tinghan Shen,
chrome-platform, linux-kernel
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>
---
Changes in v3:
- s/suspend_timeout/suspend_timeout_ms/ in docs (Prashant)
- Same in code (Tzung-Bi)
- Added Prashant's review tag (thanks Prashant!)
Changes in v2:
- Update release version to 6.1 (Tzung-Bi)
- Reference EC_HOST_SLEEP_TIMEOUT_INFINITE (Tzung-Bi)
- Name the debugfs file suspend_timeout_ms (Prashant)
Documentation/ABI/testing/debugfs-cros-ec | 22 +++++++++++++++++++++
drivers/platform/chrome/cros_ec.c | 3 ++-
drivers/platform/chrome/cros_ec_debugfs.c | 3 +++
include/linux/platform_data/cros_ec_proto.h | 1 +
4 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/Documentation/ABI/testing/debugfs-cros-ec b/Documentation/ABI/testing/debugfs-cros-ec
index 1fe0add99a2a99..66fe915acd739b 100644
--- a/Documentation/ABI/testing/debugfs-cros-ec
+++ b/Documentation/ABI/testing/debugfs-cros-ec
@@ -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 to the
+ 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".
diff --git a/drivers/platform/chrome/cros_ec.c b/drivers/platform/chrome/cros_ec.c
index 8aace50d446d65..32140a7150d013 100644
--- a/drivers/platform/chrome/cros_ec.c
+++ b/drivers/platform/chrome/cros_ec.c
@@ -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)
diff --git a/drivers/platform/chrome/cros_ec_debugfs.c b/drivers/platform/chrome/cros_ec_debugfs.c
index 0dbceee87a4b1a..4e63adf083ea1f 100644
--- a/drivers/platform/chrome/cros_ec_debugfs.c
+++ b/drivers/platform/chrome/cros_ec_debugfs.c
@@ -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);
diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
index 408b29ca4004be..e43107e0bee162 100644
--- a/include/linux/platform_data/cros_ec_proto.h
+++ b/include/linux/platform_data/cros_ec_proto.h
@@ -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;
--
2.31.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs
2022-08-22 21:40 [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs Evan Green
@ 2022-08-22 22:58 ` Stephen Boyd
2022-08-22 23:23 ` Guenter Roeck
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Stephen Boyd @ 2022-08-22 22:58 UTC (permalink / raw)
To: Enric Balletbo i Serra, Evan Green
Cc: Rajat Jain, Tzung-Bi Shih, Prashant Malani, Benson Leung,
Guenter Roeck, Tinghan Shen, chrome-platform, linux-kernel
Quoting Evan Green (2022-08-22 14:40:40)
> 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>
One nit below
> diff --git a/Documentation/ABI/testing/debugfs-cros-ec b/Documentation/ABI/testing/debugfs-cros-ec
> index 1fe0add99a2a99..66fe915acd739b 100644
> --- a/Documentation/ABI/testing/debugfs-cros-ec
> +++ b/Documentation/ABI/testing/debugfs-cros-ec
> @@ -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 to the
s/to the/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
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs
2022-08-22 21:40 [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs Evan Green
2022-08-22 22:58 ` Stephen Boyd
@ 2022-08-22 23:23 ` Guenter Roeck
2022-08-24 2:40 ` patchwork-bot+chrome-platform
2022-09-01 6:10 ` patchwork-bot+chrome-platform
3 siblings, 0 replies; 5+ messages in thread
From: Guenter Roeck @ 2022-08-22 23:23 UTC (permalink / raw)
To: Evan Green
Cc: Enric Balletbo i Serra, Rajat Jain, Tzung-Bi Shih,
Prashant Malani, Benson Leung, Guenter Roeck, Stephen Boyd,
Tinghan Shen, open list:CHROME HARDWARE PLATFORM SUPPORT,
linux-kernel
On Mon, Aug 22, 2022 at 2:40 PM Evan Green <evgreen@chromium.org> wrote:
>
> 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: Guenter Roeck <groeck@chromium.org>
> ---
>
> Changes in v3:
> - s/suspend_timeout/suspend_timeout_ms/ in docs (Prashant)
> - Same in code (Tzung-Bi)
> - Added Prashant's review tag (thanks Prashant!)
>
> Changes in v2:
> - Update release version to 6.1 (Tzung-Bi)
> - Reference EC_HOST_SLEEP_TIMEOUT_INFINITE (Tzung-Bi)
> - Name the debugfs file suspend_timeout_ms (Prashant)
>
> Documentation/ABI/testing/debugfs-cros-ec | 22 +++++++++++++++++++++
> drivers/platform/chrome/cros_ec.c | 3 ++-
> drivers/platform/chrome/cros_ec_debugfs.c | 3 +++
> include/linux/platform_data/cros_ec_proto.h | 1 +
> 4 files changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/ABI/testing/debugfs-cros-ec b/Documentation/ABI/testing/debugfs-cros-ec
> index 1fe0add99a2a99..66fe915acd739b 100644
> --- a/Documentation/ABI/testing/debugfs-cros-ec
> +++ b/Documentation/ABI/testing/debugfs-cros-ec
> @@ -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 to the
> + 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".
> diff --git a/drivers/platform/chrome/cros_ec.c b/drivers/platform/chrome/cros_ec.c
> index 8aace50d446d65..32140a7150d013 100644
> --- a/drivers/platform/chrome/cros_ec.c
> +++ b/drivers/platform/chrome/cros_ec.c
> @@ -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)
> diff --git a/drivers/platform/chrome/cros_ec_debugfs.c b/drivers/platform/chrome/cros_ec_debugfs.c
> index 0dbceee87a4b1a..4e63adf083ea1f 100644
> --- a/drivers/platform/chrome/cros_ec_debugfs.c
> +++ b/drivers/platform/chrome/cros_ec_debugfs.c
> @@ -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);
> diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
> index 408b29ca4004be..e43107e0bee162 100644
> --- a/include/linux/platform_data/cros_ec_proto.h
> +++ b/include/linux/platform_data/cros_ec_proto.h
> @@ -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;
>
> --
> 2.31.0
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs
2022-08-22 21:40 [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs Evan Green
2022-08-22 22:58 ` Stephen Boyd
2022-08-22 23:23 ` Guenter Roeck
@ 2022-08-24 2:40 ` patchwork-bot+chrome-platform
2022-09-01 6:10 ` patchwork-bot+chrome-platform
3 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+chrome-platform @ 2022-08-24 2:40 UTC (permalink / raw)
To: Evan Green
Cc: enric.balletbo, rajatja, tzungbi, pmalani, bleung, groeck, swboyd,
tinghan.shen, chrome-platform, linux-kernel
Hello:
This patch was applied to chrome-platform/linux.git (for-kernelci)
by Tzung-Bi Shih <tzungbi@kernel.org>:
On Mon, 22 Aug 2022 14:40:40 -0700 you wrote:
> 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.
>
> [...]
Here is the summary with links:
- [v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs
https://git.kernel.org/chrome-platform/c/e8bf17d58a4d
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs
2022-08-22 21:40 [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs Evan Green
` (2 preceding siblings ...)
2022-08-24 2:40 ` patchwork-bot+chrome-platform
@ 2022-09-01 6:10 ` patchwork-bot+chrome-platform
3 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+chrome-platform @ 2022-09-01 6:10 UTC (permalink / raw)
To: Evan Green
Cc: enric.balletbo, rajatja, tzungbi, pmalani, bleung, groeck, swboyd,
tinghan.shen, chrome-platform, linux-kernel
Hello:
This patch was applied to chrome-platform/linux.git (for-next)
by Tzung-Bi Shih <tzungbi@kernel.org>:
On Mon, 22 Aug 2022 14:40:40 -0700 you wrote:
> 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.
>
> [...]
Here is the summary with links:
- [v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs
https://git.kernel.org/chrome-platform/c/e8bf17d58a4d
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-09-01 6:10 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-22 21:40 [PATCH v3] platform/chrome: cros_ec: Expose suspend_timeout_ms in debugfs Evan Green
2022-08-22 22:58 ` Stephen Boyd
2022-08-22 23:23 ` Guenter Roeck
2022-08-24 2:40 ` patchwork-bot+chrome-platform
2022-09-01 6:10 ` patchwork-bot+chrome-platform
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox