summaryrefslogtreecommitdiff
path: root/src/soc/intel/skylake/pmc.c
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2017-04-10 21:02:13 -0700
committerDuncan Laurie <dlaurie@chromium.org>2017-04-13 09:09:16 +0200
commit1fe32d6bb2579b8c1d14edc31724b758a071d79a (patch)
treee60a1f4c558f07e5757cf2985c6ba8c48ac2a282 /src/soc/intel/skylake/pmc.c
parentbcbba801b8960a3885752521b112648a23b42cc9 (diff)
downloadcoreboot-1fe32d6bb2579b8c1d14edc31724b758a071d79a.tar.xz
soc/intel/skylake: Split AC/DC settings for Deep Sx config
Currently when enabling Deep S3 or Deep S5 it unconditionally gets enabled in both DC and AC states. However since using Deep S3 disables some expected features like wake-on-USB it is not always desired to enable the same state in both modes. To address this split the setting and add a separate config for Deep Sx in AC and DC states. All motherboards that set this config were updated, but there is no actual change in behavior in this commit. BUG=b:36723679 BRANCH=none TEST=This commit has no runtime visible changes, I verified on Eve that the Deep SX config registers are unchanged, and it compiles for all affected boards. Change-Id: I590f145847785b5a7687f235304e988888fcea8a Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://review.coreboot.org/19239 Tested-by: build bot (Jenkins) Reviewed-by: Furquan Shaikh <furquan@google.com> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Diffstat (limited to 'src/soc/intel/skylake/pmc.c')
-rw-r--r--src/soc/intel/skylake/pmc.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/soc/intel/skylake/pmc.c b/src/soc/intel/skylake/pmc.c
index 64df18650b..f3a2681dd5 100644
--- a/src/soc/intel/skylake/pmc.c
+++ b/src/soc/intel/skylake/pmc.c
@@ -189,16 +189,19 @@ static void config_deep_sX(uint32_t offset, uint32_t mask, int sx, int enable)
write32(pmcbase + offset, reg);
}
-static void config_deep_s5(int on)
+static void config_deep_s5(int on_ac, int on_dc)
{
/* Treat S4 the same as S5. */
- config_deep_sX(S4_PWRGATE_POL, S4DC_GATE_SUS | S4AC_GATE_SUS, 4, on);
- config_deep_sX(S5_PWRGATE_POL, S5DC_GATE_SUS | S5AC_GATE_SUS, 5, on);
+ config_deep_sX(S4_PWRGATE_POL, S4AC_GATE_SUS, 4, on_ac);
+ config_deep_sX(S4_PWRGATE_POL, S4DC_GATE_SUS, 4, on_dc);
+ config_deep_sX(S5_PWRGATE_POL, S5AC_GATE_SUS, 5, on_ac);
+ config_deep_sX(S5_PWRGATE_POL, S5DC_GATE_SUS, 5, on_dc);
}
-static void config_deep_s3(int on)
+static void config_deep_s3(int on_ac, int on_dc)
{
- config_deep_sX(S3_PWRGATE_POL, S3DC_GATE_SUS | S3AC_GATE_SUS, 3, on);
+ config_deep_sX(S3_PWRGATE_POL, S3AC_GATE_SUS, 3, on_ac);
+ config_deep_sX(S3_PWRGATE_POL, S3DC_GATE_SUS, 3, on_dc);
}
static void config_deep_sx(uint32_t deepsx_config)
@@ -226,8 +229,8 @@ static void pmc_init(struct device *dev)
reg_script_run_on_dev(dev, pch_pmc_misc_init_script);
pch_set_acpi_mode();
- config_deep_s3(config->deep_s3_enable);
- config_deep_s5(config->deep_s5_enable);
+ config_deep_s3(config->deep_s3_enable_ac, config->deep_s3_enable_dc);
+ config_deep_s5(config->deep_s5_enable_ac, config->deep_s5_enable_dc);
config_deep_sx(config->deep_sx_config);
/* Clear registers that contain write-1-to-clear bits. */