diff options
author | Shaunak Saha <shaunak.saha@intel.com> | 2020-01-15 11:43:19 -0800 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2020-01-25 09:58:38 +0000 |
commit | e8338da597f892d333af9bb77ab89289b8140633 (patch) | |
tree | 810b72f65b26795cc9eee307d592fc5620836b4a /src/soc/intel/tigerlake/acpi | |
parent | b38586f77f97d2a294bea14be26daa29068c6e40 (diff) |
soc/intel/tigerlake: Fix GPIO communities
GPIOs are divided into different communities. Each community
consists of one or more GPIO groups. We need to configure the
groups in coreboot so that they are mapped properly.
GPIO comuinities in coreboot should match with the kernel gpio
communities also. Kernel reads the ASL file from coreboot. This
patch adds the proper community mapping in ASL code to match with
kernel code. In gpio_soc_defs.c file we are indexing the groups
correctly. In gpio.h file we define all the gpio devices as kernel
populates sysfs with separate gpio device for each community. This
patch is created based on Intel Tiger Lake Processor PCH Datasheet
with Document number:575857 and Chapter number:27.
BUG=b:144680462
BRANCH=none
TEST=Build and boot tigerlake rvp board. In /sys/kernel/debug/pinctrl
verify INTC34C5:0<1-3> listing all the pins for each community.
e.g., #cat /sys/kernel/debug/pinctrl/INT34C5:00/pins should list
all the community 0 pins.
Change-Id: I40c386db060d84c1b7fba9c587f960d6a92f84ba
Signed-off-by: Shaunak Saha <shaunak.saha@intel.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/38440
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nick Vaccaro <nvaccaro@google.com>
Reviewed-by: Wonkyu Kim <wonkyu.kim@intel.com>
Diffstat (limited to 'src/soc/intel/tigerlake/acpi')
-rw-r--r-- | src/soc/intel/tigerlake/acpi/gpio.asl | 150 |
1 files changed, 93 insertions, 57 deletions
diff --git a/src/soc/intel/tigerlake/acpi/gpio.asl b/src/soc/intel/tigerlake/acpi/gpio.asl index 98863e2486..dc76a387b7 100644 --- a/src/soc/intel/tigerlake/acpi/gpio.asl +++ b/src/soc/intel/tigerlake/acpi/gpio.asl @@ -1,7 +1,7 @@ /* * This file is part of the coreboot project. * - * Copyright (C) 2019 Intel Corp. + * 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 @@ -16,60 +16,97 @@ #include <soc/irq.h> #include <soc/pcr_ids.h> - -Device (GPIO) +Device (GCM0) { - Name (_HID, "INT3455") + Name (_HID, "INT34C5") Name (_UID, 0) - Name (_DDN, "GPIO Controller") + 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) { - Name (RBUF, ResourceTemplate() - { - Memory32Fixed (ReadWrite, 0, 0, COM0) - Memory32Fixed (ReadWrite, 0, 0, COM1) - Memory32Fixed (ReadWrite, 0, 0, COM2) - Memory32Fixed (ReadWrite, 0, 0, COM4) - Memory32Fixed (ReadWrite, 0, 0, COM5) - Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ) - { GPIO_IRQ14 } - }) + CreateDWordField (^RBUF, ^COM0._BAS, BAS0) + BAS0 = ^^PCRB (PID_GPIOCOM0) + Return (^RBUF) + } + Method (_STA) + { + Return (0xF) + } +} - /* GPIO Community 0 */ - CreateDWordField (RBUF, COM0._BAS, BAS0) - CreateDWordField (RBUF, COM0._LEN, LEN0) - Store (PCRB (PID_GPIOCOM0), BAS0) - Store (GPIO_BASE_SIZE, LEN0) +Device (GCM1) +{ + Name (_HID, "INT34C5") + Name (_UID, 1) + Name (_DDN, "GPIO Controller Community 1") - /* GPIO Community 1 */ - CreateDWordField (RBUF, COM1._BAS, BAS1) - CreateDWordField ( RBUF, COM1._LEN, LEN1) - Store (PCRB (PID_GPIOCOM1), BAS1) - Store (GPIO_BASE_SIZE, LEN1) + 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) + } +} - /* GPIO Community 2 */ - CreateDWordField (RBUF, COM2._BAS, BAS2) - CreateDWordField (RBUF, COM2._LEN, LEN2) - Store (PCRB (PID_GPIOCOM2), BAS2) - Store (GPIO_BASE_SIZE, LEN2) +Device (GCM4) +{ + Name (_HID, "INT34C5") + Name (_UID, 4) + Name (_DDN, "GPIO Controller Community 4") - /* GPIO Community 4 */ - CreateDWordField (RBUF, COM4._BAS, BAS4) - CreateDWordField (RBUF, COM4._LEN, LEN4) - Store (PCRB (PID_GPIOCOM4), BAS4) - Store (GPIO_BASE_SIZE, LEN4) + 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) + } +} - /* GPIO Community 5 */ - CreateDWordField (RBUF, COM5._BAS, BAS5) - CreateDWordField (RBUF, COM5._LEN, LEN5) - Store (PCRB (PID_GPIOCOM5), BAS5) - Store (GPIO_BASE_SIZE, LEN5) +Device (GCM5) +{ + Name (_HID, "INT34C5") + Name (_UID, 5) + Name (_DDN, "GPIO Controller Community 5") - Return (RBUF) + 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, 0, NotSerialized) + Method (_STA) { Return (0xF) } @@ -82,38 +119,37 @@ Device (GPIO) Method (GADD, 1, NotSerialized) { /* GPIO Community 0 */ - If (Arg0 >= GPP_G0 && Arg0 <= GPP_A23) + If (Arg0 >= GPP_B0 && Arg0 <= GPP_A24) { Local0 = PID_GPIOCOM0 - Subtract (Arg0, GPP_A0, Local1) + Local1 = Arg0 - GPP_B0 } /* GPIO Community 1 */ - If (Arg0 >= GPP_H0 && Arg0 <= GPP_F19) + If (Arg0 >= GPP_S0 && Arg0 <= vI2S2_RXD) { Local0 = PID_GPIOCOM1 - Subtract (Arg0, GPP_D0, Local1) + Local1 = Arg0 - GPP_S0 } /* GPIO Community 2 */ - If (Arg0 >= GPD0 && Arg0 <= GPD11) + If (Arg0 >= GPD0 && Arg0 <= GPD_DRAM_RESETB) { Local0 = PID_GPIOCOM2 - Subtract (Arg0, GPD0, Local1) + Local1 = Arg0 - GPD0 } /* GPIO Community 4 */ - If (Arg0 >= GPP_C0 && Arg0 <= GPP_E23) + If (Arg0 >= GPP_C0 && Arg0 <= GPP_DBG_PMODE) { Local0 = PID_GPIOCOM4 - Subtract (Arg0, GPP_C0, Local1) + Local1 = Arg0 - GPP_C0 } - /* GPIO Community 05*/ - If (Arg0 >= GPP_R0 && Arg0 <= GPP_S7) + /* GPIO Community 5 */ + If (Arg0 >= GPP_R0 && Arg0 <= GPP_CLK_LOOPBK) { Local0 = PID_GPIOCOM5 - Subtract (Arg0, GPP_R0, Local1) + Local1 = Arg0 - GPP_R0 } - Store (PCRB (Local0), Local2) - Add (Local2, PAD_CFG_BASE, Local2) - Return (Add (Local2, Multiply (Local1, 16))) + Local2 = PCRB(Local0) + PAD_CFG_BASE + (Local1 * 16) + Return (Local2) } /* |