soc/intel/cannonlake: add initial ASL methods for SCS, GPIO
[coreboot.git] / src / soc / intel / cannonlake / acpi / gpio.asl
blobae3ef5b0b7531093f963b401440d86c0555bea35
1 /*
2  * This file is part of the coreboot project.
3  *
4  * Copyright (C) 2014 Google Inc.
5  * Copyright (C) 2015 Intel Corporation.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; version 2 of the License.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  */
16 #include <soc/gpio_defs.h>
17 #include <soc/irq.h>
18 #include <soc/pcr_ids.h>
21 Device (GPIO)
23         Name (_HID, "INT34BB")
24         Name (_UID, 0)
25         Name (_DDN, "GPIO Controller")
27         Name (RBUF, ResourceTemplate()
28         {
29                 Memory32Fixed (ReadWrite, 0, 0, COM0)
30                 Memory32Fixed (ReadWrite, 0, 0, COM1)
31                 Memory32Fixed (ReadWrite, 0, 0, COM4)
32                 Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ)
33                         { GPIO_IRQ14 }
34         })
36         Method (_CRS, 0, NotSerialized)
37         {
38                 /* GPIO Community 0 */
39                 CreateDWordField (^RBUF, ^COM0._BAS, BAS0)
40                 Store (^^PCRB (PID_GPIOCOM0), BAS0)
42                 /* GPIO Community 1 */
43                 CreateDWordField (^RBUF, ^COM1._BAS, BAS1)
44                 Store (^^PCRB (PID_GPIOCOM1), BAS1)
46                 /* GPIO Community 4 */
47                 CreateDWordField (^RBUF, ^COM4._BAS, BAS4)
48                 Store (^^PCRB (PID_GPIOCOM4), BAS4)
50                 Return (RBUF)
51         }
53         Method (_STA, 0, NotSerialized)
54         {
55                 Return (0xF)
56         }
60  * Get GPIO DW0 Address
61  * Arg0 - GPIO Number
62  */
63 Method (GADD, 1, NotSerialized)
65         /* GPIO Community 0 */
66         If (LAnd (LGreaterEqual (Arg0, GPP_A0), LLessEqual (Arg0, GPP_G7)))
67         {
68                 Store (PID_GPIOCOM0, Local0)
69                 Subtract (Arg0, GPP_A0, Local1)
70         }
71         /* GPIO Community 1 */
72         If (LAnd (LGreaterEqual (Arg0, GPP_D0), LLessEqual (Arg0, GPP_H23)))
73         {
74                 Store (PID_GPIOCOM1, Local0)
75                 Subtract (Arg0, GPP_D0, Local1)
76         }
77         /* GPIO Community 04*/
78         If (LAnd (LGreaterEqual (Arg0, GPP_C0), LLessEqual (Arg0, GPP_E23)))
79         {
80                 Store (PID_GPIOCOM4, Local0)
81                 Subtract (Arg0, GPP_C0, Local1)
82         }
83         Store (PCRB (Local0), Local2)
84         Add (Local2, PAD_CFG_BASE, Local2)
85         Return (Add (Local2, Multiply (Local1, 16)))
89  * Get GPIO Value
90  * Arg0 - GPIO Number
91  */
92 Method (GRXS, 1, Serialized)
94         OperationRegion (PREG, SystemMemory, GADD (Arg0), 4)
95         Field (PREG, AnyAcc, NoLock, Preserve)
96         {
97                 VAL0, 32
98         }
99         And (GPIORXSTATE_MASK, ShiftRight (VAL0, GPIORXSTATE_SHIFT), Local0)
101         Return (Local0)