diff options
author | Furquan Shaikh <furquan@google.com> | 2019-07-06 22:58:31 -0700 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2019-07-07 07:52:30 +0000 |
commit | 0478037e1106240928fa5889ee0e620b859d3cfc (patch) | |
tree | 0d774eda5d894842822837581e887a26ca1e317b /src | |
parent | 9eac4c9ddac863344bbe6eab5323e95a266a21e4 (diff) | |
download | coreboot-0478037e1106240928fa5889ee0e620b859d3cfc.tar.xz |
soc/intel/icelake: Use SA_DEV_ROOT instead of PCH_DEV_PMC
PMC device gets hidden from PCI bus after FSP-S call. Thus, it gets
removed from the root bus as leftover unused device. With change
903b40a8a46 ("soc/intel: Replace uses of dev_find_slot()"), all uses
of dev_find_slot() were replaced by pcidev_path_on_root() which relies
on scanning of root bus to find the requested device. Since PMC device
is removed from the root bus, pcidev_path_on_root() returns NULL for
it thus resulting in configuration being skipped for the PMC
ultimately resulting in S3 failures.
Since the PCH_DEV_PMC was just used to get to chip config, this
change replaces the use of PCH_DEV_PMC with SA_DEV_ROOT.
BUG=b:136861224
Change-Id: Id68db8382b7b98e8e2e4a65ded1a6fb3bd057051
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/34118
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-by: Subrata Banik <subrata.banik@intel.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/soc/intel/icelake/finalize.c | 7 | ||||
-rw-r--r-- | src/soc/intel/icelake/pmc.c | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/soc/intel/icelake/finalize.c b/src/soc/intel/icelake/finalize.c index e061cda2f0..b838c199e7 100644 --- a/src/soc/intel/icelake/finalize.c +++ b/src/soc/intel/icelake/finalize.c @@ -69,8 +69,13 @@ static void pch_finalize(void) * * Disabling ACPI PM timer is necessary for XTAL OSC shutdown. * Disabling ACPI PM timer also switches off TCO + * + * SA_DEV_ROOT device is used here instead of PCH_DEV_PMC since it is + * just required to get to chip config. PCH_DEV_PMC is hidden by this + * point and hence removed from the root bus. pcidev_path_on_root thus + * returns NULL for PCH_DEV_PMC device. */ - dev = PCH_DEV_PMC; + dev = SA_DEV_ROOT; config = dev->chip_info; pmcbase = pmc_mmio_regs(); if (config->PmTimerDisabled) { diff --git a/src/soc/intel/icelake/pmc.c b/src/soc/intel/icelake/pmc.c index 8f61d70955..25913a8904 100644 --- a/src/soc/intel/icelake/pmc.c +++ b/src/soc/intel/icelake/pmc.c @@ -136,7 +136,7 @@ static void pch_power_options(struct device *dev) static void pmc_init(void *unused) { - struct device *dev = PCH_DEV_PMC; + struct device *dev = SA_DEV_ROOT; config_t *config = dev->chip_info; rtc_init(); |