[coreboot-gerrit] Change in coreboot[master]: cpu/intel/speedstep: Fix the PNOT ACPI method

Arthur Heymans (Code Review) gerrit at coreboot.org
Sat Jan 6 18:45:27 CET 2018


Arthur Heymans has uploaded this change for review. ( https://review.coreboot.org/23144


Change subject: cpu/intel/speedstep: Fix the PNOT ACPI method
......................................................................

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 at aheymans.xyz>
---
M src/arch/x86/include/arch/acpigen.h
M src/cpu/intel/speedstep/acpi.c
R src/cpu/intel/speedstep/acpi/cpu.asl
M src/mainboard/apple/macbook21/dsdt.asl
M src/mainboard/asus/p5gc-mx/dsdt.asl
M src/mainboard/getac/p470/dsdt.asl
M src/mainboard/gigabyte/ga-945gcm-s2l/dsdt.asl
M src/mainboard/ibase/mb899/dsdt.asl
M src/mainboard/intel/d510mo/dsdt.asl
M src/mainboard/intel/d945gclf/dsdt.asl
M src/mainboard/kontron/986lcd-m/dsdt.asl
M src/mainboard/lenovo/t400/dsdt.asl
M src/mainboard/lenovo/t60/dsdt.asl
M src/mainboard/lenovo/x200/dsdt.asl
M src/mainboard/lenovo/x60/dsdt.asl
M src/mainboard/roda/rk886ex/dsdt.asl
M src/mainboard/roda/rk9/dsdt.asl
17 files changed, 32 insertions(+), 39 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/44/23144/1

diff --git a/src/arch/x86/include/arch/acpigen.h b/src/arch/x86/include/arch/acpigen.h
index 9ec6ee1..a50a900 100644
--- a/src/arch/x86/include/arch/acpigen.h
+++ b/src/arch/x86/include/arch/acpigen.h
@@ -82,6 +82,7 @@
 	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 c154da0..73b7431 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 @@
 	/* 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
similarity index 61%
rename from src/cpu/intel/common/acpi/cpu.asl
rename to src/cpu/intel/speedstep/acpi/cpu.asl
index 117ef46..0a6c919 100644
--- a/src/cpu/intel/common/acpi/cpu.asl
+++ b/src/cpu/intel/speedstep/acpi/cpu.asl
@@ -12,36 +12,15 @@
  */
 
 /* 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 a70b01a..2405c3e 100644
--- a/src/mainboard/apple/macbook21/dsdt.asl
+++ b/src/mainboard/apple/macbook21/dsdt.asl
@@ -34,7 +34,7 @@
 	#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 b55aa3f..5eb55ea 100644
--- a/src/mainboard/asus/p5gc-mx/dsdt.asl
+++ b/src/mainboard/asus/p5gc-mx/dsdt.asl
@@ -38,7 +38,7 @@
 	// 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 ada278c..4b3ae14 100644
--- a/src/mainboard/getac/p470/dsdt.asl
+++ b/src/mainboard/getac/p470/dsdt.asl
@@ -43,7 +43,7 @@
 	// 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 187481a..cbc1573 100644
--- a/src/mainboard/gigabyte/ga-945gcm-s2l/dsdt.asl
+++ b/src/mainboard/gigabyte/ga-945gcm-s2l/dsdt.asl
@@ -38,7 +38,7 @@
 	// 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 3d7589a..6844bbd 100644
--- a/src/mainboard/ibase/mb899/dsdt.asl
+++ b/src/mainboard/ibase/mb899/dsdt.asl
@@ -35,7 +35,7 @@
 
 	//#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 a7788bd..621b87d 100644
--- a/src/mainboard/intel/d510mo/dsdt.asl
+++ b/src/mainboard/intel/d510mo/dsdt.asl
@@ -26,7 +26,7 @@
 	#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 187481a..cbc1573 100644
--- a/src/mainboard/intel/d945gclf/dsdt.asl
+++ b/src/mainboard/intel/d945gclf/dsdt.asl
@@ -38,7 +38,7 @@
 	// 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 e39d44d..35264bd 100644
--- a/src/mainboard/kontron/986lcd-m/dsdt.asl
+++ b/src/mainboard/kontron/986lcd-m/dsdt.asl
@@ -34,7 +34,7 @@
 
 	//#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 a0978af..6ba4774 100644
--- a/src/mainboard/lenovo/t400/dsdt.asl
+++ b/src/mainboard/lenovo/t400/dsdt.asl
@@ -39,7 +39,7 @@
 	// 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 684009e..a13ac3c 100644
--- a/src/mainboard/lenovo/t60/dsdt.asl
+++ b/src/mainboard/lenovo/t60/dsdt.asl
@@ -47,7 +47,7 @@
 		#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 0706249..5452fe3 100644
--- a/src/mainboard/lenovo/x200/dsdt.asl
+++ b/src/mainboard/lenovo/x200/dsdt.asl
@@ -39,7 +39,7 @@
 	// 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 e2292ff..3222303 100644
--- a/src/mainboard/lenovo/x60/dsdt.asl
+++ b/src/mainboard/lenovo/x60/dsdt.asl
@@ -43,7 +43,7 @@
 	// 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 c68dc25..efb2f92 100644
--- a/src/mainboard/roda/rk886ex/dsdt.asl
+++ b/src/mainboard/roda/rk886ex/dsdt.asl
@@ -39,7 +39,7 @@
 	// 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 e4a1f7c..5c5ca2f 100644
--- a/src/mainboard/roda/rk9/dsdt.asl
+++ b/src/mainboard/roda/rk9/dsdt.asl
@@ -38,7 +38,7 @@
 	// 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"

-- 
To view, visit https://review.coreboot.org/23144
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie2ba5e07b401d6f7c80c31f2bfcd9ef3ac0c1ad1
Gerrit-Change-Number: 23144
Gerrit-PatchSet: 1
Gerrit-Owner: Arthur Heymans <arthur at aheymans.xyz>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180106/485db0c7/attachment-0001.html>


More information about the coreboot-gerrit mailing list