Skip to content

Commit

Permalink
BACKPORT: mfd / platform: cros_ec_debugfs: Expose resume result via d…
Browse files Browse the repository at this point in the history
…ebugfs

For ECs that support it, the EC returns the number of slp_s0
transitions and whether or not there was a timeout in the resume
response. Expose the last resume result to usermode via debugfs so
that usermode can detect and report S0ix timeouts.

Signed-off-by: Evan Green <evgreen@chromium.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>

Conflicts occurred because a downstream patch added last_event_time
right next to my new last_resume_result member.
Conflicts:
	include/linux/mfd/cros_ec.h

(cherry picked from commit 8c3166e)

Conflicts:
   include/linux/mfd/cros_ec.h

BUG=b:132824159
TEST=Suspend/resume hatch, print new file

Change-Id: I4ef7aeb7a79c378659ab2b47a371766bca06113a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/1700142
Tested-by: Evan Green <evgreen@chromium.org>
Reviewed-by: Ravi Chandra Sadineni <ravisadineni@chromium.org>
Commit-Queue: Evan Green <evgreen@chromium.org>
  • Loading branch information
Evan Green authored and Commit Bot committed Jul 12, 2019
1 parent 65cde87 commit 45e5f47
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 1 deletion.
22 changes: 22 additions & 0 deletions Documentation/ABI/testing/debugfs-cros-ec
Expand Up @@ -6,3 +6,25 @@ Description:
is used for synchronizing the AP host time with the EC
log. An error is returned if the command is not supported
by the EC or there is a communication problem.

What: /sys/kernel/debug/<cros-ec-device>/last_resume_result
Date: June 2019
KernelVersion: 5.3
Description:
Some ECs have a feature where they will track transitions to
the (Intel) processor's SLP_S0 line, in order to detect cases
where a system failed to go into S0ix. When the system resumes,
an EC with this feature will return a summary of SLP_S0
transitions that occurred. The last_resume_result file returns
the most recent response from the AP's resume message to the EC.

The bottom 31 bits contain a count of the number of SLP_S0
transitions that occurred since the suspend message was
received. Bit 31 is set if the EC attempted to wake the
system due to a timeout when watching for SLP_S0 transitions.
Callers can use this to detect a wake from the EC due to
S0ix timeouts. The result will be zero if no suspend
transitions have been attempted, or the EC does not support
this feature.

Output will be in the format: "0x%08x\n".
6 changes: 5 additions & 1 deletion drivers/mfd/cros_ec.c
Expand Up @@ -138,12 +138,16 @@ static int cros_ec_sleep_event(struct cros_ec_device *ec_dev, u8 sleep_event)

/* For now, report failure to transition to S0ix with a warning. */
if (ret >= 0 && ec_dev->host_sleep_v1 &&
(sleep_event == HOST_SLEEP_EVENT_S0IX_RESUME))
(sleep_event == HOST_SLEEP_EVENT_S0IX_RESUME)) {
ec_dev->last_resume_result =
buf.u.resp1.resume_response.sleep_transitions;

WARN_ONCE(buf.u.resp1.resume_response.sleep_transitions &
EC_HOST_RESUME_SLEEP_TIMEOUT,
"EC detected sleep transition timeout. Total slp_s0 transitions: %d",
buf.u.resp1.resume_response.sleep_transitions &
EC_HOST_RESUME_SLEEP_TRANSITIONS_MASK);
}

return ret;
}
Expand Down
3 changes: 3 additions & 0 deletions drivers/platform/chrome/cros_ec_debugfs.c
Expand Up @@ -494,6 +494,9 @@ static int cros_ec_debugfs_probe(struct platform_device *pd)
debugfs_create_file("uptime", 0444, debug_info->dir, debug_info,
&cros_ec_uptime_fops);

debugfs_create_x32("last_resume_result", 0444, debug_info->dir,
&ec->ec_dev->last_resume_result);

ec->debug_info = debug_info;

dev_set_drvdata(&pd->dev, ec);
Expand Down
1 change: 1 addition & 0 deletions include/linux/mfd/cros_ec.h
Expand Up @@ -171,6 +171,7 @@ struct cros_ec_device {
struct ec_response_get_next_event_v1 event_data;
int event_size;
u32 host_event_wake_mask;
u32 last_resume_result;
s64 last_event_time;
};

Expand Down

0 comments on commit 45e5f47

Please sign in to comment.