summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Heymans <arthur@aheymans.xyz>2016-06-17 19:06:25 +0200
committerNico Huber <nico.h@gmx.de>2016-08-27 00:15:41 +0200
commit2a1847ea125b4b867f435635173acb39c9d75292 (patch)
treefce2140ebebc0a5e9857ff8c3e6474cfe16073cb
parent6e5421d2a887737fc7c8a916d54151f9b1706f6d (diff)
lenovo/x200,t400: enable C4 cpu low power state
This enables the C4 low power state on the lenovo x200 and t400. It's inspired by the thread on the mailinglist: "[coreboot] Lenovo X200 running Coreboot drains 3-4W more power than with Vendor BIOS". What this does, is to enable a C3 state using MWAIT(C3) request and set the southbridge config c4onc3_enable to automatically upgrade C3 to the lower power C4 state. The latency (0x37) is the same value used by the vendor bios. With C4 enabled the idle power consumption is about ~2-3W lower. TEST= build and install on target. Use powertop top to measure power usage. To manually disable c-state to compare them, do (tested on linux 4.4): echo 1 > /sys/devices/system/cpu/cpu*/cpuidle/stateX/disable Change-Id: I1a1663a7662ebc7157a965667680688ad6a33545 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/15251 Tested-by: build bot (Jenkins) Reviewed-by: Swift Geek Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Nico Huber <nico.h@gmx.de>
-rw-r--r--src/mainboard/lenovo/t400/cstates.c5
-rw-r--r--src/mainboard/lenovo/t400/devicetree.cb2
-rw-r--r--src/mainboard/lenovo/x200/cstates.c5
-rw-r--r--src/mainboard/lenovo/x200/devicetree.cb2
4 files changed, 12 insertions, 2 deletions
diff --git a/src/mainboard/lenovo/t400/cstates.c b/src/mainboard/lenovo/t400/cstates.c
index 3ce2ed1a81..175153ebd4 100644
--- a/src/mainboard/lenovo/t400/cstates.c
+++ b/src/mainboard/lenovo/t400/cstates.c
@@ -28,6 +28,11 @@ static acpi_cstate_t cst_entries[] = {
2, 0x01, 500,
{ ACPI_ADDRESS_SPACE_FIXED, 1, 2, { 1 }, 0x10, 0 }
},
+ {
+ /* acpi C3 / cpu C3 */
+ 3, 0x37, 250,
+ { ACPI_ADDRESS_SPACE_FIXED, 1, 2, { 1 }, 0x20, 0 }
+ },
};
int get_cst_entries(acpi_cstate_t **entries)
diff --git a/src/mainboard/lenovo/t400/devicetree.cb b/src/mainboard/lenovo/t400/devicetree.cb
index 43a610ab5f..6bf25fab38 100644
--- a/src/mainboard/lenovo/t400/devicetree.cb
+++ b/src/mainboard/lenovo/t400/devicetree.cb
@@ -63,7 +63,7 @@ chip northbridge/intel/gm45
register "sata_traffic_monitor" = "0"
# Set c-state support
- register "c4onc3_enable" = "0"
+ register "c4onc3_enable" = "1"
register "c5_enable" = "1"
register "c6_enable" = "1"
diff --git a/src/mainboard/lenovo/x200/cstates.c b/src/mainboard/lenovo/x200/cstates.c
index 3ce2ed1a81..175153ebd4 100644
--- a/src/mainboard/lenovo/x200/cstates.c
+++ b/src/mainboard/lenovo/x200/cstates.c
@@ -28,6 +28,11 @@ static acpi_cstate_t cst_entries[] = {
2, 0x01, 500,
{ ACPI_ADDRESS_SPACE_FIXED, 1, 2, { 1 }, 0x10, 0 }
},
+ {
+ /* acpi C3 / cpu C3 */
+ 3, 0x37, 250,
+ { ACPI_ADDRESS_SPACE_FIXED, 1, 2, { 1 }, 0x20, 0 }
+ },
};
int get_cst_entries(acpi_cstate_t **entries)
diff --git a/src/mainboard/lenovo/x200/devicetree.cb b/src/mainboard/lenovo/x200/devicetree.cb
index 9f5bb41577..200b4bca0f 100644
--- a/src/mainboard/lenovo/x200/devicetree.cb
+++ b/src/mainboard/lenovo/x200/devicetree.cb
@@ -67,7 +67,7 @@ chip northbridge/intel/gm45
register "sata_traffic_monitor" = "0"
# Set c-state support
- register "c4onc3_enable" = "0"
+ register "c4onc3_enable" = "1"
register "c5_enable" = "1"
register "c6_enable" = "1"