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