| /* |
| * This file is part of the coreboot project. |
| * |
| * Copyright (C) 2020 Intel Corp. |
| * |
| * 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. |
| */ |
| #include <soc/gpio_defs.h> |
| #include <soc/irq.h> |
| #include <soc/pcr_ids.h> |
| |
| Device (GCM0) |
| { |
| Name (_HID, "INT34C5") |
| Name (_UID, 0) |
| Name (_DDN, "GPIO Controller Community 0") |
| |
| Name (RBUF, ResourceTemplate() |
| { |
| Memory32Fixed (ReadWrite, 0, GPIO_BASE_SIZE, COM0) |
| Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ) |
| { GPIO_IRQ14 } |
| }) |
| Method (_CRS, 0, NotSerialized) |
| { |
| CreateDWordField (^RBUF, ^COM0._BAS, BAS0) |
| BAS0 = ^^PCRB (PID_GPIOCOM0) |
| Return (^RBUF) |
| } |
| Method (_STA) |
| { |
| Return (0xF) |
| } |
| } |
| |
| Device (GCM1) |
| { |
| Name (_HID, "INT34C5") |
| Name (_UID, 1) |
| Name (_DDN, "GPIO Controller Community 1") |
| |
| Name (RBUF, ResourceTemplate() |
| { |
| Memory32Fixed (ReadWrite, 0, GPIO_BASE_SIZE, COM1) |
| Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ) |
| { GPIO_IRQ14 } |
| }) |
| Method (_CRS, 0, NotSerialized) |
| { |
| CreateDWordField (^RBUF, ^COM1._BAS, BAS1) |
| BAS1 = ^^PCRB (PID_GPIOCOM1) |
| Return (^RBUF) |
| } |
| Method (_STA) |
| { |
| Return (0xF) |
| } |
| } |
| |
| Device (GCM4) |
| { |
| Name (_HID, "INT34C5") |
| Name (_UID, 4) |
| Name (_DDN, "GPIO Controller Community 4") |
| |
| Name (RBUF, ResourceTemplate() |
| { |
| Memory32Fixed (ReadWrite, 0, GPIO_BASE_SIZE, COM4) |
| Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ) |
| { GPIO_IRQ14 } |
| }) |
| Method (_CRS, 0, NotSerialized) |
| { |
| CreateDWordField (^RBUF, ^COM4._BAS, BAS4) |
| BAS4 = ^^PCRB (PID_GPIOCOM4) |
| Return (^RBUF) |
| } |
| Method (_STA) |
| { |
| Return (0xF) |
| } |
| } |
| |
| Device (GCM5) |
| { |
| Name (_HID, "INT34C5") |
| Name (_UID, 5) |
| Name (_DDN, "GPIO Controller Community 5") |
| |
| Name (RBUF, ResourceTemplate() |
| { |
| Memory32Fixed (ReadWrite, 0, GPIO_BASE_SIZE, COM5) |
| Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ) |
| { GPIO_IRQ14 } |
| }) |
| Method (_CRS, 0, NotSerialized) |
| { |
| CreateDWordField (^RBUF, ^COM5._BAS, BAS5) |
| BAS5 = ^^PCRB (PID_GPIOCOM5) |
| Return (^RBUF) |
| } |
| Method (_STA) |
| { |
| Return (0xF) |
| } |
| } |
| |
| /* |
| * Get GPIO DW0 Address |
| * Arg0 - GPIO Number |
| */ |
| Method (GADD, 1, NotSerialized) |
| { |
| /* GPIO Community 0 */ |
| If (Arg0 >= GPP_B0 && Arg0 <= GPP_A24) |
| { |
| Local0 = PID_GPIOCOM0 |
| Local1 = Arg0 - GPP_B0 |
| } |
| /* GPIO Community 1 */ |
| If (Arg0 >= GPP_S0 && Arg0 <= vI2S2_RXD) |
| { |
| Local0 = PID_GPIOCOM1 |
| Local1 = Arg0 - GPP_S0 |
| } |
| /* GPIO Community 2 */ |
| If (Arg0 >= GPD0 && Arg0 <= GPD_DRAM_RESETB) |
| { |
| Local0 = PID_GPIOCOM2 |
| Local1 = Arg0 - GPD0 |
| } |
| /* GPIO Community 4 */ |
| If (Arg0 >= GPP_C0 && Arg0 <= GPP_DBG_PMODE) |
| { |
| Local0 = PID_GPIOCOM4 |
| Local1 = Arg0 - GPP_C0 |
| } |
| /* GPIO Community 5 */ |
| If (Arg0 >= GPP_R0 && Arg0 <= GPP_CLK_LOOPBK) |
| { |
| Local0 = PID_GPIOCOM5 |
| Local1 = Arg0 - GPP_R0 |
| } |
| Local2 = PCRB(Local0) + PAD_CFG_BASE + (Local1 * 16) |
| Return (Local2) |
| } |
| |
| /* |
| * Get GPIO Value |
| * Arg0 - GPIO Number |
| */ |
| Method (GRXS, 1, Serialized) |
| { |
| OperationRegion (PREG, SystemMemory, GADD (Arg0), 4) |
| Field (PREG, AnyAcc, NoLock, Preserve) |
| { |
| VAL0, 32 |
| } |
| And (GPIORXSTATE_MASK, ShiftRight (VAL0, GPIORXSTATE_SHIFT), Local0) |
| |
| Return (Local0) |
| } |