xref: /freebsd/sys/dev/gpio/chvgpio_reg.h (revision faf25f48d601ae39f5752602f3020e2e92605625)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2017 Tom Jones <tj@enoti.me>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  *
28  * $FreeBSD$
29  */
30 
31 /*
32  * Copyright (c) 2016 Mark Kettenis
33  *
34  * Permission to use, copy, modify, and distribute this software for any
35  * purpose with or without fee is hereby granted, provided that the above
36  * copyright notice and this permission notice appear in all copies.
37  *
38  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
39  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
40  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
41  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
42  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
43  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
44  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
45  *
46  */
47 
48 
49 #define CHVGPIO_INTERRUPT_STATUS		0x0300
50 #define CHVGPIO_INTERRUPT_MASK			0x0380
51 #define CHVGPIO_PAD_CFG0			0x4400
52 #define CHVGPIO_PAD_CFG1			0x4404
53 
54 #define CHVGPIO_PAD_CFG0_GPIORXSTATE		0x00000001
55 #define CHVGPIO_PAD_CFG0_GPIOTXSTATE		0x00000002
56 #define CHVGPIO_PAD_CFG0_INTSEL_MASK		0xf0000000
57 #define CHVGPIO_PAD_CFG0_INTSEL_SHIFT		28
58 
59 #define CHVGPIO_PAD_CFG0_GPIOCFG_SHIFT		8
60 #define CHVGPIO_PAD_CFG0_GPIOCFG_MASK		(7 << CHVGPIO_PAD_CFG0_GPIOCFG_SHIFT)
61 #define CHVGPIO_PAD_CFG0_GPIOCFG_GPIO		0
62 #define CHVGPIO_PAD_CFG0_GPIOCFG_GPO		1
63 #define CHVGPIO_PAD_CFG0_GPIOCFG_GPI		2
64 #define CHVGPIO_PAD_CFG0_GPIOCFG_HIZ		3
65 
66 #define CHVGPIO_PAD_CFG1_INTWAKECFG_MASK	0x00000007
67 #define CHVGPIO_PAD_CFG1_INTWAKECFG_FALLING	0x00000001
68 #define CHVGPIO_PAD_CFG1_INTWAKECFG_RISING	0x00000002
69 #define CHVGPIO_PAD_CFG1_INTWAKECFG_BOTH	0x00000003
70 #define CHVGPIO_PAD_CFG1_INTWAKECFG_LEVEL	0x00000004
71 #define CHVGPIO_PAD_CFG1_INVRXTX_MASK		0x000000f0
72 #define CHVGPIO_PAD_CFG1_INVRXTX_RXDATA		0x00000040
73 
74 /*
75  * The pads for the pins are arranged in groups of maximal 15 pins.
76  * The arrays below give the number of pins per group, such that we
77  * can validate the (untrusted) pin numbers from ACPI.
78  */
79 #define	E_UID		3
80 #define	E_BANK_PREFIX	"eastbank"
81 
82 const int chv_east_pins[] = {
83 	12, 12, -1
84 };
85 
86 const char *chv_east_pin_names[] = {
87 		"PMU_SLP_S3_B",
88 		"PMU_BATLOW_B",
89 		"SUS_STAT_B",
90 		"PMU_SLP_S0IX_B",
91 		"PMU_AC_PRESENT",
92 		"PMU_PLTRST_B",
93 		"PMU_SUSCLK",
94 		"PMU_SLP_LAN_B",
95 		"PMU_PWRBTN_B",
96 		"PMU_SLP_S4_B",
97 		"PMU_WAKE_B",
98 		"PMU_WAKE_LAN_B"
99 
100 		"MF_ISH_GPIO_3",
101 		"MF_ISH_GPIO_7",
102 		"MF_ISH_I2C1_SCL",
103 		"MF_ISH_GPIO_1",
104 		"MF_ISH_GPIO_5",
105 		"MF_ISH_GPIO_9",
106 		"MF_ISH_GPIO_0",
107 		"MF_ISH_GPIO_4",
108 		"MF_ISH_GPIO_8",
109 		"MF_ISH_GPIO_2",
110 		"MF_ISH_GPIO_6",
111 		"MF_ISH_I2C1_SDA"
112 };
113 
114 #define	N_UID		2
115 #define	N_BANK_PREFIX	"northbank"
116 
117 const int chv_north_pins[] = {
118 	9, 13, 12, 12, 13, -1
119 };
120 
121 const char *chv_north_pin_names[] = {
122 	"GPIO_DFX0_PAD",
123 	"GPIO_DFX3_PAD",
124 	"GPIO_DFX7_PAD",
125 	"GPIO_DFX1_PAD",
126 	"GPIO_DFX5_PAD",
127 	"GPIO_DFX4_PAD",
128 	"GPIO_DFX8_PAD",
129 	"GPIO_DFX2_PAD",
130 	"GPIO_DFX6_PAD",
131 
132 	"GPIO_SUS0_PAD",
133 	"SEC_GPIO_SUS10_PAD",
134 	"GPIO_SUS3_PAD",
135 	"GPIO_SUS7_PAD",
136 	"GPIO_SUS1_PAD",
137 	"GPIO_SUS5_PAD",
138 	"SEC_GPIO_SUS11_PAD",
139 	"GPIO_SUS4_PAD",
140 	"SEC_GPIO_SUS8_PAD",
141 	"GPIO_SUS2_PAD",
142 	"GPIO_SUS6_PAD",
143 	"CX_PREQ_B_PAD",
144 	"SEC_GPIO_SUS9_PAD",
145 
146 	"TRST_B_PAD",
147 	"TCK_PAD",
148 	"PROCHOT_B_PAD",
149 	"SVID0_DATA_PAD",
150 	"TMS_PAD",
151 	"CX_PRDY_B_2_PAD",
152 	"TDO_2_PAD",
153 	"CX_PRDY_B_PAD",
154 	"SVID0_ALERT_B_PAD",
155 	"TDO_PAD",
156 	"SVID0_CLK_PAD",
157 	"TDI_PAD",
158 
159 	"GP_CAMERASB05_PAD",
160 	"GP_CAMERASB02_PAD",
161 	"GP_CAMERASB08_PAD",
162 	"GP_CAMERASB00_PAD",
163 	"GP_CAMERASB06_PAD",
164 	"GP_CAMERASB10_PAD",
165 	"GP_CAMERASB03_PAD",
166 	"GP_CAMERASB09_PAD",
167 	"GP_CAMERASB01_PAD",
168 	"GP_CAMERASB07_PAD",
169 	"GP_CAMERASB11_PAD",
170 	"GP_CAMERASB04_PAD",
171 
172 	"PANEL0_BKLTEN_PAD",
173 	"HV_DDI0_HPD_PAD",
174 	"HV_DDI2_DDC_SDA_PAD",
175 	"PANEL1_BKLTCTL_PAD",
176 	"HV_DDI1_HPD_PAD",
177 	"PANEL0_BKLTCTL_PAD",
178 	"HV_DDI0_DDC_SDA_PAD",
179 	"HV_DDI2_DDC_SCL_PAD",
180 	"HV_DDI2_HPD_PAD",
181 	"PANEL1_VDDEN_PAD",
182 	"PANEL1_BKLTEN_PAD",
183 	"HV_DDI0_DDC_SCL_PAD",
184 	"PANEL0_VDDEN_PAD",
185 };
186 
187 
188 #define	SE_UID		4
189 #define	SE_BANK_PREFIX	"southeastbank"
190 
191 const int chv_southeast_pins[] = {
192 	8, 12, 6, 8, 10, 11, -1
193 };
194 
195 const char *chv_southeast_pin_names[] = {
196 	"MF_PLT_CLK0_PAD",
197 	"PWM1_PAD",
198 	"MF_PLT_CLK1_PAD",
199 	"MF_PLT_CLK4_PAD",
200 	"MF_PLT_CLK3_PAD",
201 	"PWM0_PAD",
202 	"MF_PLT_CLK5_PAD",
203 	"MF_PLT_CLK2_PAD",
204 
205 	"SDMMC2_D3_CD_B_PAD",
206 	"SDMMC1_CLK_PAD",
207 	"SDMMC1_D0_PAD",
208 	"SDMMC2_D1_PAD",
209 	"SDMMC2_CLK_PAD",
210 	"SDMMC1_D2_PAD",
211 	"SDMMC2_D2_PAD",
212 	"SDMMC2_CMD_PAD",
213 	"SDMMC1_CMD_PAD",
214 	"SDMMC1_D1_PAD",
215 	"SDMMC2_D0_PAD",
216 	"SDMMC1_D3_CD_B_PAD",
217 
218 	"SDMMC3_D1_PAD",
219 	"SDMMC3_CLK_PAD",
220 	"SDMMC3_D3_PAD",
221 	"SDMMC3_D2_PAD",
222 	"SDMMC3_CMD_PAD",
223 	"SDMMC3_D0_PAD",
224 
225 	"MF_LPC_AD2_PAD",
226 	"LPC_CLKRUNB_PAD",
227 	"MF_LPC_AD0_PAD",
228 	"LPC_FRAMEB_PAD",
229 	"MF_LPC_CLKOUT1_PAD",
230 	"MF_LPC_AD3_PAD",
231 	"MF_LPC_CLKOUT0_PAD",
232 	"MF_LPC_AD1_PAD",
233 
234 	"SPI1_MISO_PAD",
235 	"SPI1_CS0_B_PAD",
236 	"SPI1_CLK_PAD",
237 	"MMC1_D6_PAD",
238 	"SPI1_MOSI_PAD",
239 	"MMC1_D5_PAD",
240 	"SPI1_CS1_B_PAD",
241 	"MMC1_D4_SD_WE_PAD",
242 	"MMC1_D7_PAD",
243 	"MMC1_RCLK_PAD",
244 
245 	"USB_OC1_B_PAD",
246 	"PMU_RESETBUTTON_B_PAD",
247 	"GPIO_ALERT_PAD",
248 	"SDMMC3_PWR_EN_B_PAD",
249 	"ILB_SERIRQ_PAD",
250 	"USB_OC0_B_PAD",
251 	"SDMMC3_CD_B_PAD",
252 	"SPKR_PAD",
253 	"SUSPWRDNACK_PAD",
254 	"SPARE_PIN_PAD",
255 	"SDMMC3_1P8_EN_PAD",
256 };
257 
258 #define	SW_UID		1
259 #define	SW_BANK_PREFIX	"southwestbank"
260 
261 const int chv_southwest_pins[] = {
262 	8, 8, 8, 8, 8, 8, 8, -1
263 };
264 
265 const char *chv_southwest_pin_names[] = {
266 	"FST_SPI_D2_PAD",
267 	"FST_SPI_D0_PAD",
268 	"FST_SPI_CLK_PAD",
269 	"FST_SPI_D3_PAD",
270 	"FST_SPI_CS1_B_PAD",
271 	"FST_SPI_D1_PAD",
272 	"FST_SPI_CS0_B_PAD",
273 	"FST_SPI_CS2_B_PAD",
274 
275 	"UART1_RTS_B_PAD",
276 	"UART1_RXD_PAD",
277 	"UART2_RXD_PAD",
278 	"UART1_CTS_B_PAD",
279 	"UART2_RTS_B_PAD",
280 	"UART1_TXD_PAD",
281 	"UART2_TXD_PAD",
282 	"UART2_CTS_B_PAD",
283 
284 	"MF_HDA_CLK"
285 	"MF_HDA_RSTB",
286 	"MF_HDA_SDIO",
287 	"MF_HDA_SDO",
288 	"MF_HDA_DOCKRSTB",
289 	"MF_HDA_SYNC",
290 	"MF_HDA_SDI1",
291 	"MF_HDA_DOCKENB",
292 
293 	"I2C5_SDA_PAD",
294 	"I2C4_SDA_PAD",
295 	"I2C6_SDA_PAD",
296 	"I2C5_SCL_PAD",
297 	"I2C_NFC_SDA_PAD",
298 	"I2C4_SCL_PAD",
299 	"I2C6_SCL_PAD",
300 	"I2C_NFC_SCL_PAD",
301 
302 	"I2C1_SDA_PAD",
303 	"I2C0_SDA_PAD",
304 	"I2C2_SDA_PAD",
305 	"I2C1_SCL_PAD",
306 	"I2C3_SDA_PAD",
307 	"I2C0_SCL_PAD",
308 	"I2C2_SCL_PAD",
309 	"I2C3_SCL_PAD",
310 
311 	"SATA_GP0",
312 	"SATA_GP1",
313 	"SATA_LEDN",
314 	"SATA_GP2",
315 	"MF_SMB_ALERTB",
316 	"SATA_GP3",
317 	"MF_SMB_CLK",
318 	"MF_SMB_DATA",
319 
320 	"PCIE_CLKREQ0B_PAD",
321 	"PCIE_CLKREQ1B_PAD",
322 	"GP_SSP_2_CLK_PAD",
323 	"PCIE_CLKREQ2B_PAD",
324 	"GP_SSP_2_RXD_PAD",
325 	"PCIE_CLKREQ3B_PAD",
326 	"GP_SSP_2_FS_PAD",
327 	"GP_SSP_2_TXD_PAD",
328 };
329 
330 const char *virtualgpio[] = {
331 	"VIRTUAL0_PAD",
332 	"VIRTUAL1_PAD",
333 	"VIRTUAL2_PAD",
334 	"VIRTUAL3_PAD",
335 	"VIRTUAL4_PAD",
336 	"VIRTUAL5_PAD",
337 	"VIRTUAL6_PAD",
338 	"VIRTUAL7_PAD",
339 };
340