mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-10 17:41:54 +00:00
skylake: do not clear masks in S0ix -> S0 transition
EC clears the SCI/SMI/Wake masks in the resume sequence for S3 and S0ix. This works in the S3 case because Coreboot reprograms the masks after EC. But in S0ix, these masks stay cleared forever. This means that no further events are sent to the host. This patch conditionally clears the masks only in the S3 transition. BRANCH=glados BUG=chrome-os-partner:48834 TEST=hostevent in EC console before and after S0ix to ensure SCI masks are preserved Change-Id: I23751680788ee7a239e321309a1334d37adc4f43 Signed-off-by: Archana Patni <archana.patni@intel.com> Signed-off-by: Subramony Sesha <subramony.sesha@intel.com> Signed-off-by: Jenny TC <jenny.tc@intel.com> Reviewed-on: https://chromium-review.googlesource.com/320191 Commit-Ready: Jenny Tc <jenny.tc@intel.com> Tested-by: Jenny Tc <jenny.tc@intel.com> Reviewed-by: Shawn N <shawnn@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
2435c91b3a
commit
74615c1011
@@ -294,11 +294,15 @@ DECLARE_HOOK(HOOK_CHIPSET_STARTUP, setup_lpc, HOOK_PRIO_FIRST);
|
||||
|
||||
static void lpc_resume(void)
|
||||
{
|
||||
/* Mask all host events until the host unmasks them itself. */
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_SMI, 0);
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_SCI, 0);
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_WAKE, 0);
|
||||
|
||||
#ifdef CONFIG_POWER_S0IX
|
||||
if (chipset_in_state(CHIPSET_STATE_SUSPEND | CHIPSET_STATE_ON))
|
||||
#endif
|
||||
{
|
||||
/* Mask all host events until the host unmasks them itself. */
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_SMI, 0);
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_SCI, 0);
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_WAKE, 0);
|
||||
}
|
||||
/* Store port 80 event so we know where resume happened */
|
||||
port_80_write(PORT_80_EVENT_RESUME);
|
||||
}
|
||||
|
||||
@@ -901,10 +901,15 @@ DECLARE_HOOK(HOOK_INIT, lpc_init, HOOK_PRIO_INIT_LPC);
|
||||
|
||||
static void lpc_resume(void)
|
||||
{
|
||||
/* Mask all host events until the host unmasks them itself. */
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_SMI, 0);
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_SCI, 0);
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_WAKE, 0);
|
||||
#ifdef CONFIG_POWER_S0IX
|
||||
if (chipset_in_state(CHIPSET_STATE_SUSPEND | CHIPSET_STATE_ON))
|
||||
#endif
|
||||
{
|
||||
/* Mask all host events until the host unmasks them itself. */
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_SMI, 0);
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_SCI, 0);
|
||||
lpc_set_host_event_mask(LPC_HOST_EVENT_WAKE, 0);
|
||||
}
|
||||
|
||||
/* Store port 80 event so we know where resume happened */
|
||||
port_80_write(PORT_80_EVENT_RESUME);
|
||||
|
||||
Reference in New Issue
Block a user