History

mfd / platform: cros_ec_debugfs: Expose resume result via debugfs

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.

Evan Green committed 7 years ago

Commit 8c3166e1 parent c18e6ea4 files · +31 −1Browse files

Unified · Split

4 files
  1. Documentation/ABI/testing/debugfs-cros-ec +22 −0
  2. drivers/mfd/cros_ec.c +5 −1
  3. drivers/platform/chrome/cros_ec_debugfs.c +3 −0
  4. include/linux/mfd/cros_ec.h +1 −0
Documentation/ABI/testing/debugfs-cros-ec+22−0
@@ -32,3 +32,25 @@ Description: · 31 unmodified lines
3232 is used for synchronizing the AP host time with the EC
3333 log. An error is returned if the command is not supported
3434 by the EC or there is a communication problem.
35+
36+What: /sys/kernel/debug/<cros-ec-device>/last_resume_result
37+Date: June 2019
38+KernelVersion: 5.3
39+Description:
40+ Some ECs have a feature where they will track transitions to
41+ the (Intel) processor's SLP_S0 line, in order to detect cases
42+ where a system failed to go into S0ix. When the system resumes,
43+ an EC with this feature will return a summary of SLP_S0
44+ transitions that occurred. The last_resume_result file returns
45+ the most recent response from the AP's resume message to the EC.
46+
47+ The bottom 31 bits contain a count of the number of SLP_S0
48+ transitions that occurred since the suspend message was
49+ received. Bit 31 is set if the EC attempted to wake the
50+ system due to a timeout when watching for SLP_S0 transitions.
51+ Callers can use this to detect a wake from the EC due to
52+ S0ix timeouts. The result will be zero if no suspend
53+ transitions have been attempted, or the EC does not support
54+ this feature.
55+
56+ Output will be in the format: "0x%08x\n".
drivers/mfd/cros_ec.c+5−1
@@ -110,12 +110,16 @@ static int cros_ec_sleep_event(struct cros_ec_device *ec_dev, u8 sleep_event) · 109 unmodified lines
110110
111111 /* For now, report failure to transition to S0ix with a warning. */
112112 if (ret >= 0 && ec_dev->host_sleep_v1 &&
113− (sleep_event == HOST_SLEEP_EVENT_S0IX_RESUME))
113+ (sleep_event == HOST_SLEEP_EVENT_S0IX_RESUME)) {
114+ ec_dev->last_resume_result =
115+ buf.u.resp1.resume_response.sleep_transitions;
116+
114117 WARN_ONCE(buf.u.resp1.resume_response.sleep_transitions &
115118 EC_HOST_RESUME_SLEEP_TIMEOUT,
116119 "EC detected sleep transition timeout. Total slp_s0 transitions: %d",
117120 buf.u.resp1.resume_response.sleep_transitions &
118121 EC_HOST_RESUME_SLEEP_TRANSITIONS_MASK);
122+ }
119123
120124 return ret;
121125 }
drivers/platform/chrome/cros_ec_debugfs.c+3−0
@@ -447,6 +447,9 @@ static int cros_ec_debugfs_probe(struct platform_device *pd) · 446 unmodified lines
447447 debugfs_create_file("uptime", 0444, debug_info->dir, debug_info,
448448 &cros_ec_uptime_fops);
449449
450+ debugfs_create_x32("last_resume_result", 0444, debug_info->dir,
451+ &ec->ec_dev->last_resume_result);
452+
450453 ec->debug_info = debug_info;
451454
452455 dev_set_drvdata(&pd->dev, ec);
include/linux/mfd/cros_ec.h+1−0
@@ -163,6 +163,7 @@ struct cros_ec_device { · 162 unmodified lines
163163 struct ec_response_get_next_event_v1 event_data;
164164 int event_size;
165165 u32 host_event_wake_mask;
166+ u32 last_resume_result;
166167 };
167168
168169 /**

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t