[coreboot-gerrit] New patch to review for coreboot: [WIP]soc/apollolake: Restore MSRs after S3 resume

Ravishankar Sarawadi (ravishankar.sarawadi@intel.com) gerrit at coreboot.org
Mon Sep 12 18:36:00 CEST 2016


Ravishankar Sarawadi (ravishankar.sarawadi at intel.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/16587

-gerrit

commit af331d3a038578f23cd7b77115354dc89cb7c717
Author: Ravi Sarawadi <ravishankar.sarawadi at intel.com>
Date:   Fri Sep 9 14:08:50 2016 -0700

    [WIP]soc/apollolake: Restore MSRs after S3 resume
    
    Restore necessary MSRs after suspend cycle.
    
    BUG=chrome-os-partner:56922
    BRANCH=None
    
    TEST=Use iotools rdmsr and 'powertop' to check
    Signed-off-by: Ravi Sarawadi <ravishankar.sarawadi at intel.com>
    
    Change-Id: I97c3d82f654be30a0d2d88cb68c8212af3d6f767
---
 src/soc/intel/apollolake/cpu.c             | 23 ++++++++++++++++++++++-
 src/soc/intel/apollolake/include/soc/cpu.h |  3 +++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/soc/intel/apollolake/cpu.c b/src/soc/intel/apollolake/cpu.c
index 86fe3e1..36d765c 100644
--- a/src/soc/intel/apollolake/cpu.c
+++ b/src/soc/intel/apollolake/cpu.c
@@ -25,11 +25,32 @@
 #include <cpu/x86/mtrr.h>
 #include <device/device.h>
 #include <device/pci.h>
+#include <reg_script.h>
 #include <soc/cpu.h>
 #include <soc/smm.h>
 
+
+static const struct reg_script core_msr_script[] = {
+
+	REG_MSR_WRITE(MSR_PMG_CST_CONFIG_CONTROL, 0x8472),
+	REG_MSR_WRITE(MSR_PMG_IO_CAPTURE_BASE, 0x50414),
+    /* Disable C1E */
+    REG_MSR_RMW(MSR_POWER_CTL, ~0x2, 0),
+    REG_SCRIPT_END
+};
+
+static void soc_core_init(device_t cpu)
+{
+    printk(BIOS_SPEW, "%s/%s ( %s )\n",
+            __FILE__, __func__, dev_name(cpu));
+    printk(BIOS_DEBUG, "Init Apollolake core.\n");
+
+    /* Set core MSRs */
+    reg_script_run(core_msr_script);
+}
+
 static struct device_operations cpu_dev_ops = {
-	.init = DEVICE_NOOP,
+	.init = soc_core_init,
 };
 
 static struct cpu_device_id cpu_table[] = {
diff --git a/src/soc/intel/apollolake/include/soc/cpu.h b/src/soc/intel/apollolake/include/soc/cpu.h
index 8887c17..ad2eba4 100644
--- a/src/soc/intel/apollolake/include/soc/cpu.h
+++ b/src/soc/intel/apollolake/include/soc/cpu.h
@@ -38,6 +38,9 @@ void apollolake_init_cpus(struct device *dev);
 #define   PREFETCH_L1_DISABLE	(1 << 0)
 #define   PREFETCH_L2_DISABLE	(1 << 2)
 
+#define MSR_PMG_CST_CONFIG_CONTROL	0xe2
+#define MSR_PMG_IO_CAPTURE_BASE     0xe4
+#define MSR_POWER_CTL           	0x1fc
 
 #define MSR_L2_QOS_MASK(reg)		(0xd10 + reg)
 #define MSR_IA32_PQR_ASSOC		0xc8f



More information about the coreboot-gerrit mailing list