libpayload: configs: Add new config.featuretest to broaden CI
[coreboot.git] / src / soc / intel / jasperlake / acpi / scs.asl
blob491df5163c18ec29644ef779a75ecf0eb6626073
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <soc/pcr_ids.h>
5 Scope (\_SB.PCI0) {
7         /*
8          * Clear register 0x1C20/0x4820
9          * Arg0 - PCR Port ID
10          */
11         Method(SCSC, 1, Serialized)
12         {
13                 PCRA (Arg0, 0x1C20, 0x0)
14                 PCRA (Arg0, 0x4820, 0x0)
15         }
17         /* EMMC */
18         Device(EMMC) {
19                 Name(_ADR, 0x001A0000)
20                 Name (_DDN, "eMMC Controller")
21                 Name (TEMP, 0)
23                 OperationRegion(SCSR, PCI_Config, 0x00, 0x100)
24                 Field(SCSR, WordAcc, NoLock, Preserve) {
25                         Offset (0x84),  /* PMECTRLSTATUS */
26                         PMCR, 16,
27                         Offset (0xA2),  /* PG_CONFIG */
28                         , 2,
29                         PGEN, 1,        /* PG_ENABLE */
30                 }
32                 Method(_INI) {
33                         /* Clear register 0x1C20/0x4820 */
34                         SCSC (PID_EMMC)
35                 }
37                 Method(_PS0, 0, Serialized) {
38                         Stall (50) // Sleep 50 us
40                         PGEN = 0 // Disable PG
42                         /* Clear register 0x1C20/0x4820 */
43                         SCSC (PID_EMMC)
45                         /* Set Power State to D0 */
46                         PMCR = PMCR & 0xFFFC
47                         TEMP = PMCR
48                 }
50                 Method(_PS3, 0, Serialized) {
51                         PGEN = 1 // Enable PG
53                         /* Set Power State to D3 */
54                         PMCR = PMCR | 0x0003
55                         TEMP = PMCR
56                 }
58                 Device (CARD)
59                 {
60                         Name (_ADR, 0x00000008)
61                         Method (_RMV, 0, NotSerialized)
62                         {
63                                 Return (0)
64                         }
65                 }
66         }
68         /* SD CARD */
69         Device (SDXC)
70         {
71                 Name (_ADR, 0x00140005)
72                 Name (_DDN, "SD Controller")
73                 Name (TEMP, 0)
74                 Name (DSUU, ToUUID("f6c13ea5-65cd-461f-ab7a-29f7e8d5bd61"))
76                 OperationRegion (SDPC, PCI_Config, 0x00, 0x100)
77                 Field (SDPC, WordAcc, NoLock, Preserve)
78                 {
79                         Offset (0x84),  /* PMECTRLSTATUS */
80                         PMCR, 16,
81                         Offset (0xA2),  /* PG_CONFIG */
82                         , 2,
83                         PGEN, 1,        /* PG_ENABLE */
84                 }
86                 /*
87                  * _DSM x86 Device Specific Method
88                  * Arg0: UUID Unique function identifier
89                  * Arg1: Integer Revision Level
90                  * Arg2: Integer Function Index (0 = Return Supported Functions)
91                  * Arg3: Package Parameters
92                  */
93                 Method (_DSM, 4)
94                 {
95                         If (Arg0 == DSUU) {
96                                 /* Check the revision */
97                                 If (Arg1 >= 0) {
98                                         /*
99                                          * Function Index 0 the return value is a buffer containing
100                                          * one bit for each function index, starting with zero.
101                                          * Bit 0 - Indicates whether there is support for any
102                                          *         functions other than function 0.
103                                          * Bit 1 - Indicates support to clear power control register
104                                          * Bit 2 - Indicates support to set power control register
105                                          * Bit 3 - Indicates support to set 1.8V signalling
106                                          * Bit 4 - Indicates support to set 3.3V signalling
107                                          * Bit 5 - Indicates support for HS200 mode
108                                          * Bit 6 - Indicates support for HS400 mode
109                                          * Bit 9 - Indicates eMMC I/O Driver Strength
110                                          */
111                                         /*
112                                          * For SD we have to support functions to
113                                          * set 1.8V signalling and 3.3V signalling [BIT4, BIT3]
114                                          */
115                                         If (Arg2 == 0) {
116                                                 Return (Buffer () { 0x19 })
117                                         }
118                                         /*
119                                          * Function Index 3: Set 1.8v signalling.
120                                          * We put a sleep of 100ms in this method to
121                                          * work around a known issue with detecting
122                                          * UHS SD card on PCH. This is to compensate
123                                          * for the SD VR slowness.
124                                          */
125                                         If (Arg2 == 3) {
126                                                 Sleep (100)
127                                                 Return(Buffer () { 0x00 })
128                                         }
129                                         /*
130                                          * Function Index 4: Set 3.3v signalling.
131                                          * We put a sleep of 100ms in this method to
132                                          * work around a known issue with detecting
133                                          * UHS SD card on PCH. This is to compensate
134                                          * for the SD VR slowness.
135                                          */
136                                         If (Arg2 == 4) {
137                                                 Sleep (100)
138                                                 Return(Buffer () { 0x00 })
139                                         }
140                                 }
141                         }
142                         Return(Buffer() { 0x0 })
143                 }
145                 Method(_INI)
146                 {
147                         /* Clear register 0x1C20/0x4820 */
148                         SCSC (PID_SDX)
149                 }
151                 Method (_PS0, 0, Serialized)
152                 {
153                         PGEN = 0 /* Disable PG */
155                         /* Clear register 0x1C20/0x4820 */
156                         SCSC (PID_SDX)
158                         /* Set Power State to D0 */
159                         PMCR = PMCR & 0xFFFC
160                         TEMP = PMCR
162                         /* Change pad mode to Native */
163                         GPMO(SD_PWR_EN_PIN, 0x1)
164                 }
166                 Method (_PS3, 0, Serialized)
167                 {
168                         PGEN = 1 /* Enable PG */
170                         /* Set Power State to D3 */
171                         PMCR = PMCR | 0x0003
172                         TEMP = PMCR
174                         /* Change pad mode to GPIO control */
175                         GPMO(SD_PWR_EN_PIN, 0x0)
177                         /* Enable Tx Buffer */
178                         GTXE(SD_PWR_EN_PIN, 0x1)
180                         /* Drive TX to zero */
181                         CTXS(SD_PWR_EN_PIN)
182                 }
184                 Device (CARD)
185                 {
186                         Name (_ADR, 0x00000008)
187                         Method (_RMV, 0, NotSerialized)
188                         {
189                                 Return (1)
190                         }
191                 }
192         } /* Device (SDXC) */