Attention is currently required from: Kane Chen. Hello Kane Chen,
I'd like you to do a code review. Please visit
https://review.coreboot.org/c/coreboot/+/52873
to review the following change.
Change subject: soc/intel/{adl, tgl, jsl}: skip bus master disable on PMC device ......................................................................
soc/intel/{adl, tgl, jsl}: skip bus master disable on PMC device
We found system hang if the shutdown is triggered before fsps. This is due to the io decode enable on pmc is disabled by busmaster_disable_on_bus function. Hence, the slp_en on acpi pm1_cnt register doesn't succeed. So this change skip pmc bus disable before shutdown.
The reason issue is not reproduced after fsps is beacause pmc pci device is hidden after fsps. That's why busmaster_disable_on_bus won't clear io deocde on pmc device.
Change-Id: I1cf5cf91ebad4a49df6679e01fc88ff60c81526c --- M src/soc/intel/alderlake/smihandler.c M src/soc/intel/jasperlake/smihandler.c M src/soc/intel/tigerlake/smihandler.c 3 files changed, 21 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/73/52873/1
diff --git a/src/soc/intel/alderlake/smihandler.c b/src/soc/intel/alderlake/smihandler.c index a072138..661a747 100644 --- a/src/soc/intel/alderlake/smihandler.c +++ b/src/soc/intel/alderlake/smihandler.c @@ -24,6 +24,13 @@ heci_disable(); }
+int smihandler_soc_disable_busmaster(pci_devfn_t dev) +{ + if (dev == PCH_DEV_PMC) + return 0; + return 1; +} + const smi_handler_t southbridge_smi[SMI_STS_BITS] = { [SMI_ON_SLP_EN_STS_BIT] = smihandler_southbridge_sleep, [APM_STS_BIT] = smihandler_southbridge_apmc, diff --git a/src/soc/intel/jasperlake/smihandler.c b/src/soc/intel/jasperlake/smihandler.c index 448c053..9867166 100644 --- a/src/soc/intel/jasperlake/smihandler.c +++ b/src/soc/intel/jasperlake/smihandler.c @@ -24,6 +24,13 @@ heci_disable(); }
+int smihandler_soc_disable_busmaster(pci_devfn_t dev) +{ + if (dev == PCH_DEV_PMC) + return 0; + return 1; +} + const smi_handler_t southbridge_smi[SMI_STS_BITS] = { [SMI_ON_SLP_EN_STS_BIT] = smihandler_southbridge_sleep, [APM_STS_BIT] = smihandler_southbridge_apmc, diff --git a/src/soc/intel/tigerlake/smihandler.c b/src/soc/intel/tigerlake/smihandler.c index 67d21f8..1389c5b 100644 --- a/src/soc/intel/tigerlake/smihandler.c +++ b/src/soc/intel/tigerlake/smihandler.c @@ -24,6 +24,13 @@ heci_disable(); }
+int smihandler_soc_disable_busmaster(pci_devfn_t dev) +{ + if (dev == PCH_DEV_PMC) + return 0; + return 1; +} + const smi_handler_t southbridge_smi[SMI_STS_BITS] = { [SMI_ON_SLP_EN_STS_BIT] = smihandler_southbridge_sleep, [APM_STS_BIT] = smihandler_southbridge_apmc,