forked from luck/tmp_suning_uos_patched
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. 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>
This commit is contained in:
parent
c18e6ea101
commit
8c3166e17c
|
@ -32,3 +32,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".
|
||||
|
|
|
@ -110,12 +110,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;
|
||||
}
|
||||
|
|
|
@ -447,6 +447,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);
|
||||
|
|
|
@ -163,6 +163,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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue
Block a user