summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArthur Heymans <arthur@aheymans.xyz>2018-01-06 18:40:23 +0100
committerMartin Roth <martinroth@google.com>2018-01-17 17:09:13 +0000
commit0a4e0fd913006de8f5d0a4ea24e013f30243cf5c (patch)
tree47d8e59bd239a7b6b74d25393f9e3efe6cf1e223 /src
parent30bba281b9b4330f5fadf36d187c2512f94c29e0 (diff)
cpu/intel/speedstep: Fix the PNOT ACPI method
The PNOT method never notifies the CPU to update it's _CST methods due to reliance on inexisting variable (PDCx). Add a method in the speedstep ssdt generator to notify all available CPU nodes and hook this up in this file. The cpu.asl file is moved to cpu/intel/speedstep/acpi since it now relies on code generated in the speedstep ssdt generator. CPUs not using the speedstep code never included this PNOT method so this is a logical place for this code to be. Change-Id: Ie2ba5e07b401d6f7c80c31f2bfcd9ef3ac0c1ad1 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/23144 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86/include/arch/acpigen.h1
-rw-r--r--src/cpu/intel/speedstep/acpi.c13
-rw-r--r--src/cpu/intel/speedstep/acpi/cpu.asl (renamed from src/cpu/intel/common/acpi/cpu.asl)27
-rw-r--r--src/mainboard/apple/macbook21/dsdt.asl2
-rw-r--r--src/mainboard/asus/p5gc-mx/dsdt.asl2
-rw-r--r--src/mainboard/getac/p470/dsdt.asl2
-rw-r--r--src/mainboard/gigabyte/ga-945gcm-s2l/dsdt.asl2
-rw-r--r--src/mainboard/ibase/mb899/dsdt.asl2
-rw-r--r--src/mainboard/intel/d510mo/dsdt.asl2
-rw-r--r--src/mainboard/intel/d945gclf/dsdt.asl2
-rw-r--r--src/mainboard/kontron/986lcd-m/dsdt.asl2
-rw-r--r--src/mainboard/lenovo/t400/dsdt.asl2
-rw-r--r--src/mainboard/lenovo/t60/dsdt.asl2
-rw-r--r--src/mainboard/lenovo/x200/dsdt.asl2
-rw-r--r--src/mainboard/lenovo/x60/dsdt.asl2
-rw-r--r--src/mainboard/roda/rk886ex/dsdt.asl2
-rw-r--r--src/mainboard/roda/rk9/dsdt.asl2
17 files changed, 32 insertions, 37 deletions
diff --git a/src/arch/x86/include/arch/acpigen.h b/src/arch/x86/include/arch/acpigen.h
index 9ec6ee1bf3..a50a9004f6 100644
--- a/src/arch/x86/include/arch/acpigen.h
+++ b/src/arch/x86/include/arch/acpigen.h
@@ -82,6 +82,7 @@ enum {
AND_OP = 0x7B,
OR_OP = 0x7D,
NOT_OP = 0x80,
+ NOTIFY_OP = 0x86,
LEQUAL_OP = 0x93,
LGREATER_OP = 0x94,
LLESS_OP = 0x95,
diff --git a/src/cpu/intel/speedstep/acpi.c b/src/cpu/intel/speedstep/acpi.c
index c154da0c29..73b7431608 100644
--- a/src/cpu/intel/speedstep/acpi.c
+++ b/src/cpu/intel/speedstep/acpi.c
@@ -23,6 +23,7 @@
#include <cpu/x86/msr.h>
#include <cpu/intel/speedstep.h>
#include <device/device.h>
+#include <string.h>
static int determine_total_number_of_cores(void)
{
@@ -164,4 +165,16 @@ void generate_cpu_entries(device_t device)
/* PPKG is usually used for thermal management
of the first and only package. */
acpigen_write_processor_package("PPKG", 0, cores_per_package);
+
+ /* Add a method to notify processor nodes */
+ acpigen_write_method("\\_PR.CNOT", 1);
+ for (coreID = 0; coreID < cores_per_package; coreID++) {
+ char buffer[DEVICE_PATH_MAX];
+ snprintf(buffer, sizeof(buffer), "\\_PR.CP%c%c",
+ '0' + coreID / 10, '0' + coreID % 10);
+ acpigen_emit_byte(NOTIFY_OP);
+ acpigen_emit_namestring(buffer);
+ acpigen_emit_byte(ARG0_OP);
+ }
+ acpigen_pop_len();
}
diff --git a/src/cpu/intel/common/acpi/cpu.asl b/src/cpu/intel/speedstep/acpi/cpu.asl
index 117ef468f9..9ff3f76727 100644
--- a/src/cpu/intel/common/acpi/cpu.asl
+++ b/src/cpu/intel/speedstep/acpi/cpu.asl
@@ -12,36 +12,17 @@
*/
/* These come from the dynamically created CPU SSDT */
-External(PDC0)
-External(PDC1)
-
-// Power notification
-
+External (\_PR.CNOT, MethodObj)
External (\_PR_.CP00, DeviceObj)
-External (\_PR_.CP01, DeviceObj)
External (\_PR_.CP00._PPC)
External (\_PR_.CP01._PPC)
Method (PNOT)
{
If (MPEN) {
- If(And(PDC0, 0x08)) {
- Notify (\_PR_.CP00, 0x80) // _PPC
-
- If (And(PDC0, 0x10)) {
- Sleep(100)
- Notify(\_PR_.CP00, 0x81) // _CST
- }
- }
-
- If(And(PDC1, 0x08)) {
- Notify (\_PR_.CP01, 0x80) // _PPC
- If (And(PDC1, 0x10)) {
- Sleep(100)
- Notify(\_PR_.CP01, 0x81) // _CST
- }
- }
-
+ \_PR.CNOT (0x80) // _PPC
+ Sleep(100)
+ \_PR.CNOT (0x81) // _CST
} Else { // UP
Notify (\_PR_.CP00, 0x80)
Sleep(0x64)
diff --git a/src/mainboard/apple/macbook21/dsdt.asl b/src/mainboard/apple/macbook21/dsdt.asl
index a70b01a486..2405c3e823 100644
--- a/src/mainboard/apple/macbook21/dsdt.asl
+++ b/src/mainboard/apple/macbook21/dsdt.asl
@@ -34,7 +34,7 @@ DefinitionBlock(
#include <southbridge/intel/i82801gx/acpi/globalnvs.asl>
#include <southbridge/intel/common/acpi/platform.asl>
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/asus/p5gc-mx/dsdt.asl b/src/mainboard/asus/p5gc-mx/dsdt.asl
index b55aa3fdfb..5eb55ea651 100644
--- a/src/mainboard/asus/p5gc-mx/dsdt.asl
+++ b/src/mainboard/asus/p5gc-mx/dsdt.asl
@@ -38,7 +38,7 @@ DefinitionBlock(
// Thermal Zone
//#include "acpi/thermal.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/getac/p470/dsdt.asl b/src/mainboard/getac/p470/dsdt.asl
index ada278c4b3..4b3ae14b19 100644
--- a/src/mainboard/getac/p470/dsdt.asl
+++ b/src/mainboard/getac/p470/dsdt.asl
@@ -43,7 +43,7 @@ DefinitionBlock(
// Thermal Zone
#include "acpi/thermal.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/gigabyte/ga-945gcm-s2l/dsdt.asl b/src/mainboard/gigabyte/ga-945gcm-s2l/dsdt.asl
index 187481a1e2..cbc1573a2e 100644
--- a/src/mainboard/gigabyte/ga-945gcm-s2l/dsdt.asl
+++ b/src/mainboard/gigabyte/ga-945gcm-s2l/dsdt.asl
@@ -38,7 +38,7 @@ DefinitionBlock(
// Thermal Zone
//#include "acpi/thermal.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/ibase/mb899/dsdt.asl b/src/mainboard/ibase/mb899/dsdt.asl
index 3d7589a126..6844bbd4bb 100644
--- a/src/mainboard/ibase/mb899/dsdt.asl
+++ b/src/mainboard/ibase/mb899/dsdt.asl
@@ -35,7 +35,7 @@ DefinitionBlock(
//#include "acpi/thermal.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/intel/d510mo/dsdt.asl b/src/mainboard/intel/d510mo/dsdt.asl
index a7788bd483..621b87dc7a 100644
--- a/src/mainboard/intel/d510mo/dsdt.asl
+++ b/src/mainboard/intel/d510mo/dsdt.asl
@@ -26,7 +26,7 @@ DefinitionBlock(
#include "acpi/platform.asl"
#include <southbridge/intel/i82801gx/acpi/globalnvs.asl>
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/intel/d945gclf/dsdt.asl b/src/mainboard/intel/d945gclf/dsdt.asl
index 187481a1e2..cbc1573a2e 100644
--- a/src/mainboard/intel/d945gclf/dsdt.asl
+++ b/src/mainboard/intel/d945gclf/dsdt.asl
@@ -38,7 +38,7 @@ DefinitionBlock(
// Thermal Zone
//#include "acpi/thermal.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/kontron/986lcd-m/dsdt.asl b/src/mainboard/kontron/986lcd-m/dsdt.asl
index e39d44d268..35264bd952 100644
--- a/src/mainboard/kontron/986lcd-m/dsdt.asl
+++ b/src/mainboard/kontron/986lcd-m/dsdt.asl
@@ -34,7 +34,7 @@ DefinitionBlock(
//#include "acpi/thermal.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/lenovo/t400/dsdt.asl b/src/mainboard/lenovo/t400/dsdt.asl
index a0978aff11..6ba4774796 100644
--- a/src/mainboard/lenovo/t400/dsdt.asl
+++ b/src/mainboard/lenovo/t400/dsdt.asl
@@ -39,7 +39,7 @@ DefinitionBlock(
// General Purpose Events
#include "acpi/gpe.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/lenovo/t60/dsdt.asl b/src/mainboard/lenovo/t60/dsdt.asl
index 684009ed2c..a13ac3c8e4 100644
--- a/src/mainboard/lenovo/t60/dsdt.asl
+++ b/src/mainboard/lenovo/t60/dsdt.asl
@@ -47,7 +47,7 @@ DefinitionBlock(
#include "acpi/video.asl"
}
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/lenovo/x200/dsdt.asl b/src/mainboard/lenovo/x200/dsdt.asl
index 0706249afb..5452fe3664 100644
--- a/src/mainboard/lenovo/x200/dsdt.asl
+++ b/src/mainboard/lenovo/x200/dsdt.asl
@@ -39,7 +39,7 @@ DefinitionBlock(
// General Purpose Events
#include "acpi/gpe.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/lenovo/x60/dsdt.asl b/src/mainboard/lenovo/x60/dsdt.asl
index e2292ff011..32223033f6 100644
--- a/src/mainboard/lenovo/x60/dsdt.asl
+++ b/src/mainboard/lenovo/x60/dsdt.asl
@@ -43,7 +43,7 @@ DefinitionBlock(
// mainboard specific devices
#include "acpi/mainboard.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/roda/rk886ex/dsdt.asl b/src/mainboard/roda/rk886ex/dsdt.asl
index c68dc2506e..efb2f92a5e 100644
--- a/src/mainboard/roda/rk886ex/dsdt.asl
+++ b/src/mainboard/roda/rk886ex/dsdt.asl
@@ -39,7 +39,7 @@ DefinitionBlock(
// Thermal Zone
#include "acpi/thermal.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
Scope (\_SB) {
Device (PCI0)
diff --git a/src/mainboard/roda/rk9/dsdt.asl b/src/mainboard/roda/rk9/dsdt.asl
index e4a1f7c8ae..5c5ca2fda4 100644
--- a/src/mainboard/roda/rk9/dsdt.asl
+++ b/src/mainboard/roda/rk9/dsdt.asl
@@ -38,7 +38,7 @@ DefinitionBlock(
// mainboard specific devices
#include "acpi/mainboard.asl"
- #include <cpu/intel/common/acpi/cpu.asl>
+ #include <cpu/intel/speedstep/acpi/cpu.asl>
// Thermal Zone
#include "acpi/thermal.asl"