aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/ABI/testing/debugfs-cros-ec22
-rw-r--r--drivers/mfd/cros_ec.c6
-rw-r--r--drivers/platform/chrome/cros_ec_debugfs.c3
-rw-r--r--include/linux/mfd/cros_ec.h1
4 files changed, 31 insertions, 1 deletions
diff --git a/Documentation/ABI/testing/debugfs-cros-ec b/Documentation/ABI/testing/debugfs-cros-ec
index 573a82d23c89..1fe0add99a2a 100644
--- a/Documentation/ABI/testing/debugfs-cros-ec
+++ b/Documentation/ABI/testing/debugfs-cros-ec
@@ -32,3 +32,25 @@ Description:
32 is used for synchronizing the AP host time with the EC 32 is used for synchronizing the AP host time with the EC
33 log. An error is returned if the command is not supported 33 log. An error is returned if the command is not supported
34 by the EC or there is a communication problem. 34 by the EC or there is a communication problem.
35
36What: /sys/kernel/debug/<cros-ec-device>/last_resume_result
37Date: June 2019
38KernelVersion: 5.3
39Description:
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".
diff --git a/drivers/mfd/cros_ec.c b/drivers/mfd/cros_ec.c
index bd2bcdd4718b..64a2d3adc729 100644
--- a/drivers/mfd/cros_ec.c
+++ b/drivers/mfd/cros_ec.c
@@ -110,12 +110,16 @@ static int cros_ec_sleep_event(struct cros_ec_device *ec_dev, u8 sleep_event)
110 110
111 /* For now, report failure to transition to S0ix with a warning. */ 111 /* For now, report failure to transition to S0ix with a warning. */
112 if (ret >= 0 && ec_dev->host_sleep_v1 && 112 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
114 WARN_ONCE(buf.u.resp1.resume_response.sleep_transitions & 117 WARN_ONCE(buf.u.resp1.resume_response.sleep_transitions &
115 EC_HOST_RESUME_SLEEP_TIMEOUT, 118 EC_HOST_RESUME_SLEEP_TIMEOUT,
116 "EC detected sleep transition timeout. Total slp_s0 transitions: %d", 119 "EC detected sleep transition timeout. Total slp_s0 transitions: %d",
117 buf.u.resp1.resume_response.sleep_transitions & 120 buf.u.resp1.resume_response.sleep_transitions &
118 EC_HOST_RESUME_SLEEP_TRANSITIONS_MASK); 121 EC_HOST_RESUME_SLEEP_TRANSITIONS_MASK);
122 }
119 123
120 return ret; 124 return ret;
121} 125}
diff --git a/drivers/platform/chrome/cros_ec_debugfs.c b/drivers/platform/chrome/cros_ec_debugfs.c
index 7ee060743844..8ec1cc2889f2 100644
--- a/drivers/platform/chrome/cros_ec_debugfs.c
+++ b/drivers/platform/chrome/cros_ec_debugfs.c
@@ -447,6 +447,9 @@ static int cros_ec_debugfs_probe(struct platform_device *pd)
447 debugfs_create_file("uptime", 0444, debug_info->dir, debug_info, 447 debugfs_create_file("uptime", 0444, debug_info->dir, debug_info,
448 &cros_ec_uptime_fops); 448 &cros_ec_uptime_fops);
449 449
450 debugfs_create_x32("last_resume_result", 0444, debug_info->dir,
451 &ec->ec_dev->last_resume_result);
452
450 ec->debug_info = debug_info; 453 ec->debug_info = debug_info;
451 454
452 dev_set_drvdata(&pd->dev, ec); 455 dev_set_drvdata(&pd->dev, ec);
diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h
index cfa78bb4990f..d50ade418a83 100644
--- a/include/linux/mfd/cros_ec.h
+++ b/include/linux/mfd/cros_ec.h
@@ -163,6 +163,7 @@ struct cros_ec_device {
163 struct ec_response_get_next_event_v1 event_data; 163 struct ec_response_get_next_event_v1 event_data;
164 int event_size; 164 int event_size;
165 u32 host_event_wake_mask; 165 u32 host_event_wake_mask;
166 u32 last_resume_result;
166}; 167};
167 168
168/** 169/**