lynxpoint: Add ACPI Method to enable GPIO as wake source
This is an LPT-LP specific method that will enable a specific GPIO as an ACPI SCI wake source. It can be used by a device _DSW method to enable a pin that is otherwise not configured to generate SCI at runtime. It will set: - GPIO owner to ACPI - GPIO route to SCI - GPIO config to GPIO, Input, Inverted Also clean up and remove ACPI field definitions that are unused and/or incorrect. Change-Id: I14acc2de50e6200f61c2898a7bd1252400e0f0be Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/56621 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/4189 Reviewed-by: Ronald G. Minnich <rminnich@gmail.com> Tested-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
parent
96f77bd0d9
commit
14031db21f
|
@ -32,6 +32,8 @@ Device (LPCB)
|
||||||
DIDH, 8, // Device ID High Byte
|
DIDH, 8, // Device ID High Byte
|
||||||
Offset (0x40),
|
Offset (0x40),
|
||||||
PMBS, 16, // PMBASE
|
PMBS, 16, // PMBASE
|
||||||
|
Offset (0x48),
|
||||||
|
GPBS, 16, // GPIOBASE
|
||||||
Offset (0x60), // Interrupt Routing Registers
|
Offset (0x60), // Interrupt Routing Registers
|
||||||
PRTA, 8,
|
PRTA, 8,
|
||||||
PRTB, 8,
|
PRTB, 8,
|
||||||
|
@ -47,24 +49,6 @@ Device (LPCB)
|
||||||
IOD0, 8,
|
IOD0, 8,
|
||||||
IOD1, 8,
|
IOD1, 8,
|
||||||
|
|
||||||
Offset (0xb8), // GPIO Routing Control
|
|
||||||
GR00, 2,
|
|
||||||
GR01, 2,
|
|
||||||
GR02, 2,
|
|
||||||
GR03, 2,
|
|
||||||
GR04, 2,
|
|
||||||
GR05, 2,
|
|
||||||
GR06, 2,
|
|
||||||
GR07, 2,
|
|
||||||
GR08, 2,
|
|
||||||
GR09, 2,
|
|
||||||
GR10, 2,
|
|
||||||
GR11, 2,
|
|
||||||
GR12, 2,
|
|
||||||
GR13, 2,
|
|
||||||
GR14, 2,
|
|
||||||
GR15, 2,
|
|
||||||
|
|
||||||
Offset (0xf0), // RCBA
|
Offset (0xf0), // RCBA
|
||||||
RCEN, 1,
|
RCEN, 1,
|
||||||
, 13,
|
, 13,
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the coreboot project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 Google Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; version 2 of
|
||||||
|
* the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* LynxPoint-H */
|
||||||
|
|
||||||
|
Scope (\_SB.PCI0.LPCB)
|
||||||
|
{
|
||||||
|
// GWAK: Setup GPIO as ACPI GPE for Wake
|
||||||
|
// Arg0: GPIO Number
|
||||||
|
Method (GWAK, 1, NotSerialized)
|
||||||
|
{
|
||||||
|
// Local0 = GPIO Base Address
|
||||||
|
Store (And (GPBS, Not(0x1)), Local0)
|
||||||
|
|
||||||
|
// Local1 = BANK, Local2 = OFFSET
|
||||||
|
Divide (Arg0, 32, Local2, Local1)
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set OWNER to ACPI
|
||||||
|
//
|
||||||
|
|
||||||
|
// Local3 = GPIOBASE + GPIO_OWN(BANK)
|
||||||
|
Store (Add (Local0, Multiply (Local1, 0x4)), Local3)
|
||||||
|
|
||||||
|
// GPIO_OWN(BANK)
|
||||||
|
OperationRegion (IOWN, SystemIO, Local3, 4)
|
||||||
|
Field (IOWN, AnyAcc, NoLock, Preserve) {
|
||||||
|
GOWN, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
// GPIO_OWN[GPIO] = 0 (ACPI)
|
||||||
|
Store (And (GOWN, Not (ShiftLeft (0x1, Local2))), GOWN)
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set ROUTE to SCI
|
||||||
|
//
|
||||||
|
|
||||||
|
// Local3 = GPIOBASE + GPIO_ROUTE(BANK)
|
||||||
|
Store (Add (Add (Local0, 0x30), Multiply (Local1, 0x4)), Local3)
|
||||||
|
|
||||||
|
// GPIO_ROUTE(BANK)
|
||||||
|
OperationRegion (IROU, SystemIO, Local3, 4)
|
||||||
|
Field (IROU, AnyAcc, NoLock, Preserve) {
|
||||||
|
GROU, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
// GPIO_ROUTE[GPIO] = 0 (SCI)
|
||||||
|
Store (And (GROU, Not (ShiftLeft (0x1, Local2))), GROU)
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set GPnCONFIG to GPIO|INPUT|INVERT
|
||||||
|
//
|
||||||
|
|
||||||
|
// Local3 = GPIOBASE + GPnCONFIG0(GPIO)
|
||||||
|
Store (Add (Add (Local0, 0x100), Multiply (Arg0, 0x8)), Local3)
|
||||||
|
|
||||||
|
// GPnCONFIG(GPIO)
|
||||||
|
OperationRegion (GPNC, SystemIO, Local3, 8)
|
||||||
|
Field (GPNC, AnyAcc, NoLock, Preserve) {
|
||||||
|
GMOD, 1, // MODE: 0=NATIVE 1=GPIO
|
||||||
|
, 1,
|
||||||
|
GIOS, 1, // IO_SEL: 0=OUTPUT 1=INPUT
|
||||||
|
GINV, 1, // INVERT: 0=NORMAL 1=INVERT
|
||||||
|
GLES, 1, // LxEB: 0=EDGE 1=LEVEL
|
||||||
|
, 24,
|
||||||
|
ILVL, 1, // INPUT: 0=LOW 1=HIGH
|
||||||
|
OLVL, 1, // OUTPUT: 0=LOW 1=HIGH
|
||||||
|
GPWP, 2, // PULLUP: 00=NONE 01=DOWN 10=UP 11=INVALID
|
||||||
|
ISEN, 1, // SENSE: 0=ENABLE 1=DISABLE
|
||||||
|
}
|
||||||
|
|
||||||
|
Store (0x1, GMOD) // GPIO
|
||||||
|
Store (0x1, GIOS) // INPUT
|
||||||
|
Store (0x1, GINV) // INVERT
|
||||||
|
}
|
||||||
|
}
|
|
@ -42,173 +42,6 @@ Scope(\)
|
||||||
TRP0, 8 // IO-Trap at 0x808
|
TRP0, 8 // IO-Trap at 0x808
|
||||||
}
|
}
|
||||||
|
|
||||||
// PCH Power Management Registers, located at PMBASE (0x1f.0 0x40.l)
|
|
||||||
OperationRegion(PMIO, SystemIO, DEFAULT_PMBASE, 0xff)
|
|
||||||
Field(PMIO, ByteAcc, NoLock, Preserve)
|
|
||||||
{
|
|
||||||
Offset(0x20), // GPE0_STS
|
|
||||||
, 16,
|
|
||||||
GS00, 1, // GPIO00 SCI/Wake Status
|
|
||||||
GS01, 1, // GPIO01 SCI/Wake Status
|
|
||||||
GS02, 1, // GPIO02 SCI/Wake Status
|
|
||||||
GS03, 1, // GPIO03 SCI/Wake Status
|
|
||||||
GS04, 1, // GPIO04 SCI/Wake Status
|
|
||||||
GS05, 1, // GPIO05 SCI/Wake Status
|
|
||||||
GS06, 1, // GPIO06 SCI/Wake Status
|
|
||||||
GS07, 1, // GPIO07 SCI/Wake Status
|
|
||||||
GS08, 1, // GPIO08 SCI/Wake Status
|
|
||||||
GS09, 1, // GPIO09 SCI/Wake Status
|
|
||||||
GS10, 1, // GPIO10 SCI/Wake Status
|
|
||||||
GS11, 1, // GPIO11 SCI/Wake Status
|
|
||||||
GS12, 1, // GPIO12 SCI/Wake Status
|
|
||||||
GS13, 1, // GPIO13 SCI/Wake Status
|
|
||||||
GS14, 1, // GPIO14 SCI/Wake Status
|
|
||||||
GS15, 1, // GPIO15 SCI/Wake Status
|
|
||||||
Offset(0x28), // GPE0_EN
|
|
||||||
, 16,
|
|
||||||
GE00, 1, // GPIO00 SCI/Wake Enable
|
|
||||||
GE01, 1, // GPIO01 SCI/Wake Enable
|
|
||||||
GE02, 1, // GPIO02 SCI/Wake Enable
|
|
||||||
GE03, 1, // GPIO03 SCI/Wake Enable
|
|
||||||
GE04, 1, // GPIO04 SCI/Wake Enable
|
|
||||||
GE05, 1, // GPIO05 SCI/Wake Enable
|
|
||||||
GE06, 1, // GPIO06 SCI/Wake Enable
|
|
||||||
GE07, 1, // GPIO07 SCI/Wake Enable
|
|
||||||
GE08, 1, // GPIO08 SCI/Wake Enable
|
|
||||||
GE09, 1, // GPIO09 SCI/Wake Enable
|
|
||||||
GE10, 1, // GPIO10 SCI/Wake Enable
|
|
||||||
GE11, 1, // GPIO11 SCI/Wake Enable
|
|
||||||
GE12, 1, // GPIO12 SCI/Wake Enable
|
|
||||||
GE13, 1, // GPIO13 SCI/Wake Enable
|
|
||||||
GE14, 1, // GPIO14 SCI/Wake Enable
|
|
||||||
GE15, 1, // GPIO15 SCI/Wake Enable
|
|
||||||
Offset(0x42), // General Purpose Control
|
|
||||||
, 1, // skip 1 bit
|
|
||||||
GPEC, 1, // SWGPE_CTRL
|
|
||||||
}
|
|
||||||
|
|
||||||
// GPIO IO mapped registers (0x1f.0 reg 0x48.l)
|
|
||||||
OperationRegion(GPIO, SystemIO, DEFAULT_GPIOBASE, 0x6c)
|
|
||||||
Field(GPIO, ByteAcc, NoLock, Preserve)
|
|
||||||
{
|
|
||||||
Offset(0x00), // GPIO Use Select
|
|
||||||
GU00, 8,
|
|
||||||
GU01, 8,
|
|
||||||
GU02, 8,
|
|
||||||
GU03, 8,
|
|
||||||
Offset(0x04), // GPIO IO Select
|
|
||||||
GIO0, 8,
|
|
||||||
GIO1, 8,
|
|
||||||
GIO2, 8,
|
|
||||||
GIO3, 8,
|
|
||||||
Offset(0x0c), // GPIO Level
|
|
||||||
GL00, 1,
|
|
||||||
GP01, 1,
|
|
||||||
GP02, 1,
|
|
||||||
GP0e, 1,
|
|
||||||
GP04, 1,
|
|
||||||
GP05, 1,
|
|
||||||
GP06, 1,
|
|
||||||
GP07, 1,
|
|
||||||
GP08, 1,
|
|
||||||
GP09, 1,
|
|
||||||
GP10, 1,
|
|
||||||
GP11, 1,
|
|
||||||
GP12, 1,
|
|
||||||
GP13, 1,
|
|
||||||
GP14, 1,
|
|
||||||
GP15, 1,
|
|
||||||
GP16, 1,
|
|
||||||
GP17, 1,
|
|
||||||
GP18, 1,
|
|
||||||
GP19, 1,
|
|
||||||
GP20, 1,
|
|
||||||
GP21, 1,
|
|
||||||
GP22, 1,
|
|
||||||
GP23, 1,
|
|
||||||
GP24, 1,
|
|
||||||
GP25, 1,
|
|
||||||
GP26, 1,
|
|
||||||
GP27, 1,
|
|
||||||
GP28, 1,
|
|
||||||
GP29, 1,
|
|
||||||
GP30, 1,
|
|
||||||
GP31, 1,
|
|
||||||
Offset(0x18), // GPIO Blink
|
|
||||||
GB00, 8,
|
|
||||||
GB01, 8,
|
|
||||||
GB02, 8,
|
|
||||||
GB03, 8,
|
|
||||||
Offset(0x2c), // GPIO Invert
|
|
||||||
GIV0, 8,
|
|
||||||
GIV1, 8,
|
|
||||||
GIV2, 8,
|
|
||||||
GIV3, 8,
|
|
||||||
Offset(0x30), // GPIO Use Select 2
|
|
||||||
GU04, 8,
|
|
||||||
GU05, 8,
|
|
||||||
GU06, 8,
|
|
||||||
GU07, 8,
|
|
||||||
Offset(0x34), // GPIO IO Select 2
|
|
||||||
GIO4, 8,
|
|
||||||
GIO5, 8,
|
|
||||||
GIO6, 8,
|
|
||||||
GIO7, 8,
|
|
||||||
Offset(0x38), // GPIO Level 2
|
|
||||||
GP32, 1,
|
|
||||||
GP33, 1,
|
|
||||||
GP34, 1,
|
|
||||||
GP35, 1,
|
|
||||||
GP36, 1,
|
|
||||||
GP37, 1,
|
|
||||||
GP38, 1,
|
|
||||||
GP39, 1,
|
|
||||||
GP40, 1,
|
|
||||||
GP41, 1,
|
|
||||||
GP42, 1,
|
|
||||||
GP43, 1,
|
|
||||||
GP44, 1,
|
|
||||||
GP45, 1,
|
|
||||||
GP46, 1,
|
|
||||||
GP47, 1,
|
|
||||||
GP48, 1,
|
|
||||||
GP49, 1,
|
|
||||||
GP50, 1,
|
|
||||||
GP51, 1,
|
|
||||||
GP52, 1,
|
|
||||||
GP53, 1,
|
|
||||||
GP54, 1,
|
|
||||||
GP55, 1,
|
|
||||||
GP56, 1,
|
|
||||||
GP57, 1,
|
|
||||||
GP58, 1,
|
|
||||||
GP59, 1,
|
|
||||||
GP60, 1,
|
|
||||||
GP61, 1,
|
|
||||||
GP62, 1,
|
|
||||||
GP63, 1,
|
|
||||||
Offset(0x40), // GPIO Use Select 3
|
|
||||||
GU08, 8,
|
|
||||||
GU09, 4,
|
|
||||||
Offset(0x44), // GPIO IO Select 3
|
|
||||||
GIO8, 8,
|
|
||||||
GIO9, 4,
|
|
||||||
Offset(0x48), // GPIO Level 3
|
|
||||||
GP64, 1,
|
|
||||||
GP65, 1,
|
|
||||||
GP66, 1,
|
|
||||||
GP67, 1,
|
|
||||||
GP68, 1,
|
|
||||||
GP69, 1,
|
|
||||||
GP70, 1,
|
|
||||||
GP71, 1,
|
|
||||||
GP72, 1,
|
|
||||||
GP73, 1,
|
|
||||||
GP74, 1,
|
|
||||||
GP75, 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ICH7 Root Complex Register Block. Memory Mapped through RCBA)
|
// ICH7 Root Complex Register Block. Memory Mapped through RCBA)
|
||||||
OperationRegion(RCRB, SystemMemory, DEFAULT_RCBA, 0x4000)
|
OperationRegion(RCRB, SystemMemory, DEFAULT_RCBA, 0x4000)
|
||||||
Field(RCRB, DWordAcc, Lock, Preserve)
|
Field(RCRB, DWordAcc, Lock, Preserve)
|
||||||
|
@ -270,6 +103,7 @@ Scope(\)
|
||||||
// Serial IO
|
// Serial IO
|
||||||
#if CONFIG_INTEL_LYNXPOINT_LP
|
#if CONFIG_INTEL_LYNXPOINT_LP
|
||||||
#include "serialio.asl"
|
#include "serialio.asl"
|
||||||
|
#include "lpt_lp.asl"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Method (_OSC, 4)
|
Method (_OSC, 4)
|
||||||
|
|
Loading…
Reference in New Issue