Rizwan Qureshi (rizwan.qureshi(a)intel.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/16903
-gerrit
commit 90a30e528076e873fba1823028d9b5f24fa20dc6
Author: Subrata Banik <subrata.banik(a)intel.com>
Date: Fri Aug 19 13:17:36 2016 +0530
soc/intel/skylake: Handle platform global reset
In FSP1.1 all the platform resets including global was handled
on its own without any intervention from coreboot.
In FSP2.0, any reset required will be notified to coreboot
and it is expected that coreboot will perform platform reset.
Hence, implement platform global reset hooks in coreboot. If Intel
ME is in non ERROR state then MEI message will able to perform
global reset else force global reset by writing 0x6 or 0xE to
0xCF9 port with PCH ETR3 register bit [20] set.
BUG=none
BRANCH=none
TEST=Verified platform global reset is working with MEI
message or writing to PCH ETR3.
Change-Id: I57e55caa6d20b15644bac686be8734d9652f21e5
Signed-off-by: Subrata Banik <subrata.banik(a)intel.com>
Signed-off-by: Rizwan Qureshi <rizwan.qureshi(a)intel.com>
---
src/soc/intel/skylake/reset.c | 35 ++++++++++++++++++++++++++++++++++-
1 file changed, 34 insertions(+), 1 deletion(-)
diff --git a/src/soc/intel/skylake/reset.c b/src/soc/intel/skylake/reset.c
index 638a151..0994762 100644
--- a/src/soc/intel/skylake/reset.c
+++ b/src/soc/intel/skylake/reset.c
@@ -16,13 +16,46 @@
#include <console/console.h>
#include <fsp/util.h>
#include <reset.h>
+#include <soc/me.h>
+#include <soc/pm.h>
+#include <timer.h>
+
+static void do_force_global_reset(void)
+{
+ u32 reg32;
+ /*PMC Controller Device 0x1F, Func 02*/
+ uint8_t *pmc_regs;
+
+ /*
+ * BIOS should ensure it does a global reset
+ * to reset both host and Intel ME by setting
+ * PCH PMC [B0:D31:F2 register offset 0x1048 bit 20]
+ */
+ pmc_regs = pmc_mmio_regs();
+ reg32 = read32(pmc_regs + ETR3);
+ reg32 |= ETR3_CF9GR;
+ write32(pmc_regs + ETR3, reg32);
+
+ /* Now BIOS can write 0x06 or 0x0E to 0xCF9 port
+ * to global reset platform */
+ hard_reset();
+}
+
+void global_reset(void)
+{
+ if (send_global_reset() != 0) {
+ /* If ME unable to reset platform then
+ * force global reset using PMC CF9GR register*/
+ do_force_global_reset();
+ }
+}
void chipset_handle_reset(uint32_t status)
{
switch(status) {
case FSP_STATUS_RESET_REQUIRED_3: /* Global Reset */
printk(BIOS_DEBUG, "GLOBAL RESET!!\n");
- hard_reset();
+ global_reset();
break;
default:
printk(BIOS_ERR, "unhandled reset type %x\n", status);
Arthur Heymans (arthur(a)aheymans.xyz) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/16901
-gerrit
commit c368ca6e7d4a1f01307ba5b040ebb9a36478c7bd
Author: Arthur Heymans <arthur(a)aheymans.xyz>
Date: Thu Oct 6 12:14:14 2016 +0200
cpu/intel/model_6ex: Set msr bits for dynamic L2, C2E, C4E
The datasheets "Intel® Core™ Duo Processor and Intel® Core™ Solo
Processor on 65 nm Process" mentions cpu C-states substates which can
either be atteined by adding a substate hint to the MWAIT/P_LVLx request
or automatically by setting some msr bits correctly.
This just sets the same msr bits as model_6fx to enable
dynamic L2 cache, C2E and C4E acpi cpu states.
The results is that when limiting a thinkpad x60 with a yonah T2400
cpu to the acpi cpu C2 state, the idle power usage drops from 18W to
14W. When the lowest C-state is set to C4 the idle power usage seems
to remain similar.
Change-Id: I6c422656ace04659f32082a5944617eda6c79ec3
Signed-off-by: Arthur Heymans <arthur(a)aheymans.xyz>
---
src/cpu/intel/model_6ex/model_6ex_init.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/cpu/intel/model_6ex/model_6ex_init.c b/src/cpu/intel/model_6ex/model_6ex_init.c
index 91633ec..d42ff69 100644
--- a/src/cpu/intel/model_6ex/model_6ex_init.c
+++ b/src/cpu/intel/model_6ex/model_6ex_init.c
@@ -69,7 +69,7 @@ static void configure_c_states(void)
msr.lo |= (1 << 15); // config lock until next reset.
msr.lo |= (1 << 10); // Enable I/O MWAIT redirection for C-States
msr.lo &= ~(1 << 9); // Issue a single stop grant cycle upon stpclk
- // TODO Do we want Deep C4 and Dynamic L2 shrinking?
+ msr.lo |= (1 << 3); //dynamic L2
/* Number of supported C-States */
msr.lo &= ~7;
@@ -103,7 +103,13 @@ static void configure_misc(void)
// TODO: Only if IA32_PLATFORM_ID[17] = 0 and IA32_PLATFORM_ID[50] = 1
msr.lo |= (1 << 16); /* Enhanced SpeedStep Enable */
- // TODO Do we want Deep C4 and Dynamic L2 shrinking?
+ /* Enable C2E */
+ msr.lo |= (1 << 26);
+
+ /* Enable C4E */
+ msr.hi |= (1 << (32 - 32)); // C4E
+ msr.hi |= (1 << (33 - 32)); // Hard C4E
+
wrmsr(IA32_MISC_ENABLE, msr);
msr.lo |= (1 << 20); /* Lock Enhanced SpeedStep Enable */
Arthur Heymans (arthur(a)aheymans.xyz) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/16901
-gerrit
commit 61a007ec0defdf9e954e1ddb67b97bf4945526b9
Author: Arthur Heymans <arthur(a)aheymans.xyz>
Date: Thu Oct 6 12:14:14 2016 +0200
cpu/intel/model_6ex: Set msr bits for dynamic L2, C2E, C4E
The datasheets "Intel® Core™ Duo Processor and Intel® Core™ Solo
Processor on 65 nm Process" mentions cpu C-states substates which can
either be atteined by adding a substate hint to the MWAIT/P_LVLx request
or automatically by setting some msr bits correctly.
This just sets the same msr bits as model_6fx to enable dynamic L2 cache,
C2E and C4E acpi cpu states.
The results is that when limiting a thinkpad x60 with a yonah T2400
cpu to the acpi cpu C2 state, the idle power usage drops from 18W to 14W. When
the lowest C-state is set to C4 the idle power usage seems to remain similar.
Change-Id: I6c422656ace04659f32082a5944617eda6c79ec3
Signed-off-by: Arthur Heymans <arthur(a)aheymans.xyz>
---
src/cpu/intel/model_6ex/model_6ex_init.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/cpu/intel/model_6ex/model_6ex_init.c b/src/cpu/intel/model_6ex/model_6ex_init.c
index 91633ec..d42ff69 100644
--- a/src/cpu/intel/model_6ex/model_6ex_init.c
+++ b/src/cpu/intel/model_6ex/model_6ex_init.c
@@ -69,7 +69,7 @@ static void configure_c_states(void)
msr.lo |= (1 << 15); // config lock until next reset.
msr.lo |= (1 << 10); // Enable I/O MWAIT redirection for C-States
msr.lo &= ~(1 << 9); // Issue a single stop grant cycle upon stpclk
- // TODO Do we want Deep C4 and Dynamic L2 shrinking?
+ msr.lo |= (1 << 3); //dynamic L2
/* Number of supported C-States */
msr.lo &= ~7;
@@ -103,7 +103,13 @@ static void configure_misc(void)
// TODO: Only if IA32_PLATFORM_ID[17] = 0 and IA32_PLATFORM_ID[50] = 1
msr.lo |= (1 << 16); /* Enhanced SpeedStep Enable */
- // TODO Do we want Deep C4 and Dynamic L2 shrinking?
+ /* Enable C2E */
+ msr.lo |= (1 << 26);
+
+ /* Enable C4E */
+ msr.hi |= (1 << (32 - 32)); // C4E
+ msr.hi |= (1 << (33 - 32)); // Hard C4E
+
wrmsr(IA32_MISC_ENABLE, msr);
msr.lo |= (1 << 20); /* Lock Enhanced SpeedStep Enable */