2015-05-13 03:19:47 +02:00
|
|
|
/*
|
|
|
|
* This file is part of the coreboot project.
|
|
|
|
*
|
|
|
|
* Copyright (C) 2014 Google Inc.
|
2015-05-13 03:23:27 +02:00
|
|
|
* Copyright (C) 2015 Intel Corporation.
|
2015-05-13 03:19:47 +02:00
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*/
|
2017-04-07 05:54:11 +02:00
|
|
|
#include <soc/gpio.h>
|
|
|
|
|
|
|
|
#define GPIOTXSTATE_MASK 0x1
|
|
|
|
#define GPIORXSTATE_MASK 0x1
|
2015-05-13 03:19:47 +02:00
|
|
|
|
2015-07-03 21:26:32 +02:00
|
|
|
Device (GPIO)
|
|
|
|
{
|
|
|
|
Name (_HID, "INT344B")
|
2015-05-13 03:19:47 +02:00
|
|
|
Name (_UID, 1)
|
2015-08-28 02:15:00 +02:00
|
|
|
Name (_DDN, "GPIO Controller")
|
2015-05-13 03:19:47 +02:00
|
|
|
|
|
|
|
Name (RBUF, ResourceTemplate()
|
|
|
|
{
|
2015-08-28 02:15:00 +02:00
|
|
|
Memory32Fixed (ReadWrite, 0, 0, COM0)
|
|
|
|
Memory32Fixed (ReadWrite, 0, 0, COM1)
|
|
|
|
Memory32Fixed (ReadWrite, 0, 0, COM3)
|
|
|
|
Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ)
|
|
|
|
{ 0 }
|
2015-05-13 03:19:47 +02:00
|
|
|
})
|
|
|
|
|
2015-08-28 02:15:00 +02:00
|
|
|
Method (_CRS, 0, NotSerialized)
|
2015-05-13 03:19:47 +02:00
|
|
|
{
|
2015-08-28 02:15:00 +02:00
|
|
|
/* GPIO Community 0 */
|
|
|
|
CreateDWordField (^RBUF, ^COM0._BAS, BAS0)
|
|
|
|
CreateDWordField (^RBUF, ^COM0._LEN, LEN0)
|
|
|
|
Store (^^PCRB (PID_GPIOCOM0), BAS0)
|
|
|
|
Store (GPIO_BASE_SIZE, LEN0)
|
|
|
|
|
|
|
|
/* GPIO Community 1 */
|
|
|
|
CreateDWordField (^RBUF, ^COM1._BAS, BAS1)
|
|
|
|
CreateDWordField (^RBUF, ^COM1._LEN, LEN1)
|
|
|
|
Store (^^PCRB (PID_GPIOCOM1), BAS1)
|
|
|
|
Store (GPIO_BASE_SIZE, LEN1)
|
|
|
|
|
|
|
|
/* GPIO Community 3 */
|
|
|
|
CreateDWordField (^RBUF, ^COM3._BAS, BAS3)
|
|
|
|
CreateDWordField (^RBUF, ^COM3._LEN, LEN3)
|
|
|
|
Store (^^PCRB (PID_GPIOCOM3), BAS3)
|
|
|
|
Store (GPIO_BASE_SIZE, LEN3)
|
2015-07-03 21:26:32 +02:00
|
|
|
|
2015-08-28 02:15:00 +02:00
|
|
|
CreateDWordField (^RBUF, ^GIRQ._INT, IRQN)
|
2017-04-07 05:54:11 +02:00
|
|
|
And (^^PCRR (PID_GPIOCOM0, GPIO_MISCCFG),
|
2015-08-28 02:15:00 +02:00
|
|
|
GPIO_DRIVER_IRQ_ROUTE_MASK, Local0)
|
2015-07-03 21:26:32 +02:00
|
|
|
|
|
|
|
If (LEqual (Local0, GPIO_DRIVER_IRQ_ROUTE_IRQ14)) {
|
|
|
|
Store (GPIO_IRQ14, IRQN)
|
|
|
|
} Else {
|
|
|
|
Store (GPIO_IRQ15, IRQN)
|
|
|
|
}
|
2015-05-13 03:19:47 +02:00
|
|
|
|
|
|
|
Return (RBUF)
|
|
|
|
}
|
|
|
|
|
|
|
|
Method (_STA, 0, NotSerialized)
|
|
|
|
{
|
|
|
|
Return (0xF)
|
|
|
|
}
|
|
|
|
}
|
2015-12-07 15:19:01 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Get GPIO DW0 Address
|
|
|
|
* Arg0 - GPIO Number
|
|
|
|
*/
|
|
|
|
Method (GADD, 1, NotSerialized)
|
|
|
|
{
|
2019-03-06 01:53:33 +01:00
|
|
|
#if CONFIG(SKYLAKE_SOC_PCH_H)
|
2017-01-04 02:48:39 +01:00
|
|
|
/* GPIO Community 0 */
|
|
|
|
If (LAnd (LGreaterEqual (Arg0, GPP_A0), LLessEqual (Arg0, GPP_B23)))
|
|
|
|
{
|
|
|
|
Store (PID_GPIOCOM0, Local0)
|
|
|
|
Subtract (Arg0, GPP_A0, Local1)
|
|
|
|
}
|
|
|
|
/* GPIO Community 1 */
|
|
|
|
If (LAnd (LGreaterEqual (Arg0, GPP_C0), LLessEqual (Arg0, GPP_H23)))
|
|
|
|
{
|
|
|
|
Store (PID_GPIOCOM1, Local0)
|
|
|
|
Subtract (Arg0, GPP_C0, Local1)
|
|
|
|
}
|
|
|
|
/* GPIO Community 03 */
|
|
|
|
If (LAnd (LGreaterEqual (Arg0, GPP_I0), LLessEqual (Arg0, GPP_I10)))
|
|
|
|
{
|
|
|
|
Store (PID_GPIOCOM3, Local0)
|
|
|
|
Subtract (Arg0, GPP_I0, Local1)
|
|
|
|
}
|
|
|
|
#else
|
2015-12-07 15:19:01 +01:00
|
|
|
/* GPIO Community 0 */
|
|
|
|
If (LAnd (LGreaterEqual (Arg0, GPP_A0), LLessEqual (Arg0, GPP_B23)))
|
|
|
|
{
|
|
|
|
Store (PID_GPIOCOM0, Local0)
|
|
|
|
Subtract (Arg0, GPP_A0, Local1)
|
|
|
|
}
|
|
|
|
/* GPIO Community 1 */
|
|
|
|
If (LAnd (LGreaterEqual (Arg0, GPP_C0), LLessEqual (Arg0, GPP_E23)))
|
|
|
|
{
|
|
|
|
Store (PID_GPIOCOM1, Local0)
|
|
|
|
Subtract (Arg0, GPP_C0, Local1)
|
|
|
|
}
|
|
|
|
/* GPIO Community 03*/
|
|
|
|
If (LAnd (LGreaterEqual (Arg0, GPP_F0), LLessEqual (Arg0, GPP_G7)))
|
|
|
|
{
|
|
|
|
Store (PID_GPIOCOM3, Local0)
|
|
|
|
Subtract (Arg0, GPP_F0, Local1)
|
|
|
|
}
|
2017-01-04 02:48:39 +01:00
|
|
|
#endif /* CONFIG_SKYLAKE_SOC_PCH_H */
|
2015-12-07 15:19:01 +01:00
|
|
|
Store (PCRB (Local0), Local2)
|
2017-04-07 05:54:11 +02:00
|
|
|
Add (Local2, PAD_CFG_BASE, Local2)
|
2015-12-07 15:19:01 +01:00
|
|
|
Return (Add (Local2, Multiply (Local1, 8)))
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2017-05-23 20:53:47 +02:00
|
|
|
* Get GPIO Rx Value
|
2015-12-07 15:19:01 +01:00
|
|
|
* Arg0 - GPIO Number
|
|
|
|
*/
|
2016-02-09 01:08:15 +01:00
|
|
|
Method (GRXS, 1, Serialized)
|
2015-12-07 15:19:01 +01:00
|
|
|
{
|
|
|
|
OperationRegion (PREG, SystemMemory, GADD (Arg0), 4)
|
|
|
|
Field (PREG, AnyAcc, NoLock, Preserve)
|
|
|
|
{
|
|
|
|
VAL0, 32
|
|
|
|
}
|
2017-04-07 05:54:11 +02:00
|
|
|
And (GPIORXSTATE_MASK, ShiftRight (VAL0, PAD_CFG0_RX_STATE_BIT), Local0)
|
2015-12-07 15:19:01 +01:00
|
|
|
|
|
|
|
Return (Local0)
|
|
|
|
}
|
2017-05-23 20:53:47 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Get GPIO Tx Value
|
|
|
|
* Arg0 - GPIO Number
|
|
|
|
*/
|
|
|
|
Method (GTXS, 1, Serialized)
|
|
|
|
{
|
|
|
|
OperationRegion (PREG, SystemMemory, GADD (Arg0), 4)
|
|
|
|
Field (PREG, AnyAcc, NoLock, Preserve)
|
|
|
|
{
|
|
|
|
VAL0, 32
|
|
|
|
}
|
2017-04-07 05:54:11 +02:00
|
|
|
And (GPIOTXSTATE_MASK, ShiftRight (VAL0, PAD_CFG0_TX_STATE_BIT), Local0)
|
2017-05-23 20:53:47 +02:00
|
|
|
|
|
|
|
Return (Local0)
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Set GPIO Tx Value
|
|
|
|
* Arg0 - GPIO Number
|
|
|
|
*/
|
|
|
|
Method (STXS, 1, Serialized)
|
|
|
|
{
|
|
|
|
OperationRegion (PREG, SystemMemory, GADD (Arg0), 4)
|
|
|
|
Field (PREG, AnyAcc, NoLock, Preserve)
|
|
|
|
{
|
|
|
|
VAL0, 32
|
|
|
|
}
|
|
|
|
Or (GPIOTXSTATE_MASK, VAL0, VAL0)
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Clear GPIO Tx Value
|
|
|
|
* Arg0 - GPIO Number
|
|
|
|
*/
|
|
|
|
Method (CTXS, 1, Serialized)
|
|
|
|
{
|
|
|
|
OperationRegion (PREG, SystemMemory, GADD (Arg0), 4)
|
|
|
|
Field (PREG, AnyAcc, NoLock, Preserve)
|
|
|
|
{
|
|
|
|
VAL0, 32
|
|
|
|
}
|
|
|
|
And (Not (GPIOTXSTATE_MASK), VAL0, VAL0)
|
|
|
|
}
|