[coreboot] Lenovo X201i not booting and not resuming from S3 due to SMM finalize

qtux mail at qtux.eu
Thu Apr 19 23:22:17 CEST 2018


Hello,

I found that after updating my Lenovo X201i the commit
d533b16669a3bacb19b2824e6b4bc76a2a18c92a [1] causes a freeze during
boot. Additionally, if INTEL_CHIPSET_LOCKDOWN is disabled (and thus
booting works), resuming from S3 does not work anymore. I found that the
following patch circumvents the S3 resume issue (I did not test with
INTEL_CHIPSET_LOCKDOWN enabled, yet):

diff --git a/src/cpu/intel/model_2065x/finalize.c
b/src/cpu/intel/model_2065x/finalize.c
index 50e00bf74a..693aafe37a 100644
--- a/src/cpu/intel/model_2065x/finalize.c
+++ b/src/cpu/intel/model_2065x/finalize.c
@@ -56,5 +56,5 @@ void intel_model_2065x_finalize_smm(void)
        msr_set_bit(MSR_MISC_PWR_MGMT, 22);

        /* Lock memory configuration to protect SMM */
-       msr_set_bit(MSR_LT_LOCK_MEMORY, 0);
+       //msr_set_bit(MSR_LT_LOCK_MEMORY, 0);
 }
diff --git a/src/northbridge/intel/nehalem/finalize.c
b/src/northbridge/intel/nehalem/finalize.c
index 0b5cb74ce2..c9bce581bf 100644
--- a/src/northbridge/intel/nehalem/finalize.c
+++ b/src/northbridge/intel/nehalem/finalize.c
@@ -26,7 +26,7 @@ void intel_nehalem_finalize_smm(void)
        pci_or_config32(PCI_DEV_SNB, 0x5c, 1 << 0);     /* DPR */
        pci_or_config32(PCI_DEV_SNB, 0x78, 1 << 10);    /* ME */
        pci_or_config32(PCI_DEV_SNB, 0x90, 1 << 0);     /* REMAPBASE */
-       pci_or_config32(PCI_DEV_SNB, 0x98, 1 << 0);     /* REMAPLIMIT */
+       //pci_or_config32(PCI_DEV_SNB, 0x98, 1 << 0);   /* REMAPLIMIT */
        pci_or_config32(PCI_DEV_SNB, 0xa0, 1 << 0);     /* TOM */
        pci_or_config32(PCI_DEV_SNB, 0xa8, 1 << 0);     /* TOUUD */
        pci_or_config32(PCI_DEV_SNB, 0xb0, 1 << 0);     /* BDSM */

I tried to find some clues in the documentation of the first [2] and
second [3] generation mobile Core CPU as the finalize code seems to be
copied from the Sandy Bridge code. I found no reference to a register
locking mechanism in [2] comparable to the one described in [3] and used
inside the SMM finalization code, which seems odd to me. Additionally,
the register sizes and locations appear to be different. I suspect that
the Nehalem finalize function does not work as intended and may probably
be removed altogether.

Do you have any ideas on what is wrong here? I added my shortconfig [4]
in case you need it.

Cheers,
Matthias

[1] https://review.coreboot.org/21129
[2]
https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/2nd-gen-core-family-mobile-vol-2-datasheet.pdf
[3]
https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/core-mobile-datasheet-vol-2.pdf
[4] shortconfig:
# This image was built using coreboot 4.7-784-g08c4ce851e-dirty
CONFIG_VENDOR_LENOVO=y
CONFIG_HAVE_IFD_BIN=y
CONFIG_HAVE_ME_BIN=y
CONFIG_HAVE_GBE_BIN=y
CONFIG_BOARD_LENOVO_X201=y
# CONFIG_INTEL_CHIPSET_LOCKDOWN is not set
CONFIG_MEMTEST_SECONDARY_PAYLOAD=y



More information about the coreboot mailing list