mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-29 18:11:05 +00:00
intel_x86: Enable/disable SLP_S0 signal based on S0ix entry/exit
Runtime S0ix results in SLP_S0 signal being toggled continuously resulting in an interrupt storm on the EC. In order to avoid this, enable SLP_S0 power signal only when host indicates intent to enter S0ix and disable when host exits from S0ix. BUG=b:65421825 BRANCH=None TEST=Verified that runtime S0ix no longer results in interrupt storm on EC. Normal S0ix works fine on soraka. Verified state of SLP_S0 using powerindebug. Change-Id: I9ca62b8122afd8acedc2c353106407fdcc284925 Signed-off-by: Furquan Shaikh <furquan@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/679982 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Shawn N <shawnn@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
81682e06bc
commit
04db902fee
@@ -82,7 +82,9 @@ void usb1_evt(enum gpio_signal signal)
|
||||
/* power signal list. Must match order of enum power_signal. */
|
||||
const struct power_signal_info power_signal_list[] = {
|
||||
#ifdef CONFIG_POWER_S0IX
|
||||
{GPIO_PCH_SLP_S0_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S0_DEASSERTED"},
|
||||
{GPIO_PCH_SLP_S0_L,
|
||||
POWER_SIGNAL_ACTIVE_HIGH | POWER_SIGNAL_DISABLE_AT_BOOT,
|
||||
"SLP_S0_DEASSERTED"},
|
||||
#endif
|
||||
{GPIO_RSMRST_L_PGOOD, POWER_SIGNAL_ACTIVE_HIGH, "RSMRST_N_PWRGD"},
|
||||
{GPIO_PCH_SLP_S3_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S3_DEASSERTED"},
|
||||
|
||||
@@ -127,7 +127,9 @@ void tablet_mode_interrupt(enum gpio_signal signal)
|
||||
/* power signal list. Must match order of enum power_signal. */
|
||||
const struct power_signal_info power_signal_list[] = {
|
||||
#ifdef CONFIG_POWER_S0IX
|
||||
{GPIO_PCH_SLP_S0_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S0_DEASSERTED"},
|
||||
{GPIO_PCH_SLP_S0_L,
|
||||
POWER_SIGNAL_ACTIVE_HIGH | POWER_SIGNAL_DISABLE_AT_BOOT,
|
||||
"SLP_S0_DEASSERTED"},
|
||||
#endif
|
||||
{GPIO_RSMRST_L_PGOOD, POWER_SIGNAL_ACTIVE_HIGH, "RSMRST_L"},
|
||||
{GPIO_PCH_SLP_S3_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S3_DEASSERTED"},
|
||||
|
||||
@@ -46,7 +46,9 @@
|
||||
/* power signal list. Must match order of enum power_signal. */
|
||||
const struct power_signal_info power_signal_list[] = {
|
||||
{GPIO_RSMRST_L_PGOOD, POWER_SIGNAL_ACTIVE_HIGH, "RSMRST_L"},
|
||||
{GPIO_PCH_SLP_S0_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S0_DEASSERTED"},
|
||||
{GPIO_PCH_SLP_S0_L,
|
||||
POWER_SIGNAL_ACTIVE_HIGH | POWER_SIGNAL_DISABLE_AT_BOOT,
|
||||
"SLP_S0_DEASSERTED"},
|
||||
{GPIO_PCH_SLP_S3_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S3_DEASSERTED"},
|
||||
{GPIO_PCH_SLP_S4_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S4_DEASSERTED"},
|
||||
|
||||
|
||||
@@ -330,7 +330,9 @@ static void base_disable(void)
|
||||
/* power signal list. Must match order of enum power_signal. */
|
||||
const struct power_signal_info power_signal_list[] = {
|
||||
#ifdef CONFIG_POWER_S0IX
|
||||
{GPIO_PCH_SLP_S0_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S0_DEASSERTED"},
|
||||
{GPIO_PCH_SLP_S0_L,
|
||||
POWER_SIGNAL_ACTIVE_HIGH | POWER_SIGNAL_DISABLE_AT_BOOT,
|
||||
"SLP_S0_DEASSERTED"},
|
||||
#endif
|
||||
#ifdef CONFIG_ESPI_VW_SIGNALS
|
||||
{VW_SLP_S3_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S3_DEASSERTED"},
|
||||
|
||||
@@ -126,7 +126,9 @@ void tablet_mode_interrupt(enum gpio_signal signal)
|
||||
/* power signal list. Must match order of enum power_signal. */
|
||||
const struct power_signal_info power_signal_list[] = {
|
||||
#ifdef CONFIG_POWER_S0IX
|
||||
{GPIO_PCH_SLP_S0_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S0_DEASSERTED"},
|
||||
{GPIO_PCH_SLP_S0_L,
|
||||
POWER_SIGNAL_ACTIVE_HIGH | POWER_SIGNAL_DISABLE_AT_BOOT,
|
||||
"SLP_S0_DEASSERTED"},
|
||||
#endif
|
||||
{GPIO_RSMRST_L_PGOOD, POWER_SIGNAL_ACTIVE_HIGH, "RSMRST_L"},
|
||||
{GPIO_PCH_SLP_S3_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S3_DEASSERTED"},
|
||||
|
||||
@@ -61,7 +61,9 @@
|
||||
/* power signal list. Must match order of enum power_signal. */
|
||||
const struct power_signal_info power_signal_list[] = {
|
||||
#ifdef CONFIG_POWER_S0IX
|
||||
{GPIO_PCH_SLP_S0_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S0_DEASSERTED"},
|
||||
{GPIO_PCH_SLP_S0_L,
|
||||
POWER_SIGNAL_ACTIVE_HIGH | POWER_SIGNAL_DISABLE_AT_BOOT,
|
||||
"SLP_S0_DEASSERTED"},
|
||||
#endif
|
||||
{GPIO_RSMRST_L_PGOOD, POWER_SIGNAL_ACTIVE_HIGH, "RSMRST_L"},
|
||||
{GPIO_PCH_SLP_S3_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S3_DEASSERTED"},
|
||||
|
||||
@@ -75,7 +75,9 @@ BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT);
|
||||
|
||||
/* Power signal list. Must match order of enum power_signal. */
|
||||
const struct power_signal_info power_signal_list[] = {
|
||||
{GPIO_PCH_SLP_S0_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S0_DEASSERTED"},
|
||||
{GPIO_PCH_SLP_S0_L,
|
||||
POWER_SIGNAL_ACTIVE_HIGH | POWER_SIGNAL_DISABLE_AT_BOOT,
|
||||
"SLP_S0_DEASSERTED"},
|
||||
#ifdef CONFIG_ESPI_VW_SIGNALS
|
||||
{VW_SLP_S3_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S3_DEASSERTED"},
|
||||
{VW_SLP_S4_L, POWER_SIGNAL_ACTIVE_HIGH, "SLP_S4_DEASSERTED"},
|
||||
|
||||
@@ -464,6 +464,13 @@ power_board_handle_host_sleep_event(enum host_sleep_event state)
|
||||
void power_chipset_handle_host_sleep_event(enum host_sleep_event state)
|
||||
{
|
||||
power_board_handle_host_sleep_event(state);
|
||||
|
||||
#ifdef CONFIG_POWER_S0IX
|
||||
if (state == HOST_SLEEP_EVENT_S0IX_SUSPEND)
|
||||
power_signal_enable_interrupt(sleep_sig[SYS_SLEEP_S0IX]);
|
||||
else
|
||||
power_signal_disable_interrupt(sleep_sig[SYS_SLEEP_S0IX]);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user