From 1b3207ee617c24fd283e654359c20c88d95a69c8 Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Wed, 18 Jul 2012 15:33:45 -0700 Subject: CTDP: Only do TDP down/nominal change from TNP0 Otherwise there is a flurry of TDP changes with suspend/resume as the kernel powers devices off on suspend and brings them back online in resume. This also adds a mutex around the TDP operations since it is split across two methods and can't just rely on being Serialized. Change-Id: I7757d3ddad34ac985a9c8ce2fc202e2b2dcb2527 Signed-off-by: Duncan Laurie Reviewed-on: http://review.coreboot.org/1348 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer --- .../intel/sandybridge/acpi/hostbridge.asl | 30 +++++++++++++++++----- 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'src/northbridge/intel/sandybridge/acpi/hostbridge.asl') diff --git a/src/northbridge/intel/sandybridge/acpi/hostbridge.asl b/src/northbridge/intel/sandybridge/acpi/hostbridge.asl index 8dd1de6ff6..93db98d1c5 100644 --- a/src/northbridge/intel/sandybridge/acpi/hostbridge.asl +++ b/src/northbridge/intel/sandybridge/acpi/hostbridge.asl @@ -101,6 +101,8 @@ Device (MCHC) TLUD, 32, } + Mutex (CTCM, 1) /* CTDP Switch Mutex (sync level 1) */ + Name (CTCC, 0) /* CTDP Current Selection */ Name (CTCN, 0) /* CTDP Nominal Select */ Name (CTCD, 1) /* CTDP Down Select */ Name (CTCU, 2) /* CTDP Up Select */ @@ -167,12 +169,16 @@ Device (MCHC) /* Set TDP Down */ Method (STND, 0, Serialized) { - Store ("Set TDP Down", Debug) - - If (LEqual (CTCD, CTCS)) { + If (Acquire (CTCM, 100)) { + Return (0) + } + If (LEqual (CTCD, CTCC)) { + Release (CTCM) Return (0) } + Store ("Set TDP Down", Debug) + /* Set CTC */ Store (CTCD, CTCS) @@ -189,18 +195,26 @@ Device (MCHC) /* Set PL1 */ Store (CTDD, PL1V) + /* Store the new TDP Down setting */ + Store (CTCD, CTCC) + + Release (CTCM) Return (1) } /* Set TDP Nominal from Down */ Method (STDN, 0, Serialized) { - Store ("Set TDP Nominal", Debug) - - If (LEqual (CTCN, CTCS)) { + If (Acquire (CTCM, 100)) { + Return (0) + } + If (LEqual (CTCN, CTCC)) { + Release (CTCM) Return (0) } + Store ("Set TDP Nominal", Debug) + /* Set PL1 */ Store (CTDN, PL1V) @@ -217,6 +231,10 @@ Device (MCHC) /* Set CTC */ Store (CTCN, CTCS) + /* Store the new TDP Nominal setting */ + Store (CTCN, CTCC) + + Release (CTCM) Return (1) } } -- cgit v1.2.3