1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Definitions for the GPIO subsystem on Apollolake
4  *
5  * Copyright (C) 2015 - 2017 Intel Corp.
6  * (Written by Alexandru Gagniuc <alexandrux.gagniuc@intel.com> for Intel Corp.)
7  *
8  * Placed in a separate file since some of these definitions can be used from
9  * assembly code
10  *
11  * Taken from gpio_apl.h in coreboot
12  */
13 
14 #ifndef _ASM_ARCH_GPIO_H_
15 #define _ASM_ARCH_GPIO_H_
16 
17 /* Port ids */
18 #define PID_GPIO_SW	0xC0
19 #define PID_GPIO_S	0xC2
20 #define PID_GPIO_W	0xC7
21 #define PID_GPIO_NW	0xC4
22 #define PID_GPIO_N	0xC5
23 #define PID_ITSS	0xD0
24 #define PID_RTC		0xD1
25 
26 /*
27  * Miscellaneous Configuration register(MISCCFG). These are community-specific
28  * registers and are meant to house miscellaneous configuration fields per
29  * community. There are 8 GPIO groups: GPP_0 -> GPP_8 (Group 3 is absent)
30  */
31 #define GPIO_MISCCFG		0x10 /* Miscellaneous Configuration offset */
32 #define  GPIO_GPE_SW_31_0	0 /* SOUTHWEST GPIO#  0 ~ 31 belong to GROUP0 */
33 #define  GPIO_GPE_SW_63_32	1 /* SOUTHWEST GPIO# 32 ~ 42 belong to GROUP1 */
34 #define  GPIO_GPE_W_31_0	2 /* WEST      GPIO#  0 ~ 25 belong to GROUP2 */
35 #define  GPIO_GPE_NW_31_0	4 /* NORTHWEST GPIO#  0 ~ 17 belong to GROUP4 */
36 #define  GPIO_GPE_NW_63_32	5 /* NORTHWEST GPIO# 32 ~ 63 belong to GROUP5 */
37 #define  GPIO_GPE_NW_95_64	6 /* NORTHWEST GPIO# 64 ~ 76 belong to GROUP6 */
38 #define  GPIO_GPE_N_31_0	7 /* NORTH     GPIO#  0 ~ 31 belong to GROUP7 */
39 #define  GPIO_GPE_N_63_32	8 /* NORTH     GPIO# 32 ~ 61 belong to GROUP8 */
40 
41 #define GPIO_MAX_NUM_PER_GROUP	32
42 
43 /*
44  * Host Software Pad Ownership Register.
45  * The pins in the community are divided into 3 groups:
46  * GPIO 0 ~ 31, GPIO 32 ~ 63, GPIO 64 ~ 95
47  */
48 #define HOSTSW_OWN_REG_0		0x80
49 
50 #define PAD_CFG_BASE			0x500
51 
52 #define GPI_INT_STS_0			0x100
53 #define GPI_INT_EN_0			0x110
54 
55 #define GPI_SMI_STS_0			0x140
56 #define GPI_SMI_EN_0			0x150
57 
58 #define NUM_N_PADS			(PAD_N(SVID0_CLK) + 1)
59 #define NUM_NW_PADS			(PAD_NW(GPIO_123) + 1)
60 #define NUM_W_PADS			(PAD_W(SUSPWRDNACK) + 1)
61 #define NUM_SW_PADS			(PAD_SW(LPC_FRAMEB) + 1)
62 
63 #define NUM_N_GPI_REGS	\
64 	(ALIGN(NUM_N_PADS, GPIO_MAX_NUM_PER_GROUP) / GPIO_MAX_NUM_PER_GROUP)
65 
66 #define NUM_NW_GPI_REGS	\
67 	(ALIGN(NUM_NW_PADS, GPIO_MAX_NUM_PER_GROUP) / GPIO_MAX_NUM_PER_GROUP)
68 
69 #define NUM_W_GPI_REGS	\
70 	(ALIGN(NUM_W_PADS, GPIO_MAX_NUM_PER_GROUP) / GPIO_MAX_NUM_PER_GROUP)
71 
72 #define NUM_SW_GPI_REGS	\
73 	(ALIGN(NUM_SW_PADS, GPIO_MAX_NUM_PER_GROUP) / GPIO_MAX_NUM_PER_GROUP)
74 
75 /*
76  * Total number of GPI status registers across all GPIO communities in the SOC
77  */
78 #define NUM_GPI_STATUS_REGS		(NUM_N_GPI_REGS + NUM_NW_GPI_REGS \
79 					+ NUM_W_GPI_REGS + NUM_SW_GPI_REGS)
80 
81 /* North community pads */
82 #define GPIO_0				0
83 #define GPIO_1				1
84 #define GPIO_2				2
85 #define GPIO_3				3
86 #define GPIO_4				4
87 #define GPIO_5				5
88 #define GPIO_6				6
89 #define GPIO_7				7
90 #define GPIO_8				8
91 #define GPIO_9				9
92 #define GPIO_10				10
93 #define GPIO_11				11
94 #define GPIO_12				12
95 #define GPIO_13				13
96 #define GPIO_14				14
97 #define GPIO_15				15
98 #define GPIO_16				16
99 #define GPIO_17				17
100 #define GPIO_18				18
101 #define GPIO_19				19
102 #define GPIO_20				20
103 #define GPIO_21				21
104 #define GPIO_22				22
105 #define GPIO_23				23
106 #define GPIO_24				24
107 #define GPIO_25				25
108 #define GPIO_26				26
109 #define GPIO_27				27
110 #define GPIO_28				28
111 #define GPIO_29				29
112 #define GPIO_30				30
113 #define GPIO_31				31
114 #define GPIO_32				32
115 #define GPIO_33				33
116 #define GPIO_34				34
117 #define GPIO_35				35
118 #define GPIO_36				36
119 #define GPIO_37				37
120 #define GPIO_38				38
121 #define GPIO_39				39
122 #define GPIO_40				40
123 #define GPIO_41				41
124 #define GPIO_42				42
125 #define GPIO_43				43
126 #define GPIO_44				44
127 #define GPIO_45				45
128 #define GPIO_46				46
129 #define GPIO_47				47
130 #define GPIO_48				48
131 #define GPIO_49				49
132 #define GPIO_62				50
133 #define GPIO_63				51
134 #define GPIO_64				52
135 #define GPIO_65				53
136 #define GPIO_66				54
137 #define GPIO_67				55
138 #define GPIO_68				56
139 #define GPIO_69				57
140 #define GPIO_70				58
141 #define GPIO_71				59
142 #define GPIO_72				60
143 #define GPIO_73				61
144 #define JTAG_TCK			62
145 #define JTAG_TRST_B			63
146 #define JTAG_TMS			64
147 #define JTAG_TDI			65
148 #define JTAG_CX_PMODE			66
149 #define JTAG_CX_PREQ_B			67
150 #define JTAGX				68
151 #define JTAG_CX_PRDY_B			69
152 #define JTAG_TDO			70
153 #define CNV_BRI_DT			71
154 #define CNV_BRI_RSP			72
155 #define CNV_RGI_DT			73
156 #define CNV_RGI_RSP			74
157 #define SVID0_ALERT_B			75
158 #define SVID0_DATA			76
159 #define SVID0_CLK			77
160 
161 /* Northwest community pads */
162 #define GPIO_187			78
163 #define GPIO_188			79
164 #define GPIO_189			80
165 #define GPIO_190			81
166 #define GPIO_191			82
167 #define GPIO_192			83
168 #define GPIO_193			84
169 #define GPIO_194			85
170 #define GPIO_195			86
171 #define GPIO_196			87
172 #define GPIO_197			88
173 #define GPIO_198			89
174 #define GPIO_199			90
175 #define GPIO_200			91
176 #define GPIO_201			92
177 #define GPIO_202			93
178 #define GPIO_203			94
179 #define GPIO_204			95
180 #define PMC_SPI_FS0			96
181 #define PMC_SPI_FS1			97
182 #define PMC_SPI_FS2			98
183 #define PMC_SPI_RXD			99
184 #define PMC_SPI_TXD			100
185 #define PMC_SPI_CLK			101
186 #define PMIC_PWRGOOD			102
187 #define PMIC_RESET_B			103
188 #define GPIO_213			104
189 #define GPIO_214			105
190 #define GPIO_215			106
191 #define PMIC_THERMTRIP_B		107
192 #define PMIC_STDBY			108
193 #define PROCHOT_B			109
194 #define PMIC_I2C_SCL			110
195 #define PMIC_I2C_SDA			111
196 #define GPIO_74				112
197 #define GPIO_75				113
198 #define GPIO_76				114
199 #define GPIO_77				115
200 #define GPIO_78				116
201 #define GPIO_79				117
202 #define GPIO_80				118
203 #define GPIO_81				119
204 #define GPIO_82				120
205 #define GPIO_83				121
206 #define GPIO_84				122
207 #define GPIO_85				123
208 #define GPIO_86				124
209 #define GPIO_87				125
210 #define GPIO_88				126
211 #define GPIO_89				127
212 #define GPIO_90				128
213 #define GPIO_91				129
214 #define GPIO_92				130
215 #define GPIO_97				131
216 #define GPIO_98				132
217 #define GPIO_99				133
218 #define GPIO_100			134
219 #define GPIO_101			135
220 #define GPIO_102			136
221 #define GPIO_103			137
222 #define FST_SPI_CLK_FB			138
223 #define GPIO_104			139
224 #define GPIO_105			140
225 #define GPIO_106			141
226 #define GPIO_109			142
227 #define GPIO_110			143
228 #define GPIO_111			144
229 #define GPIO_112			145
230 #define GPIO_113			146
231 #define GPIO_116			147
232 #define GPIO_117			148
233 #define GPIO_118			149
234 #define GPIO_119			150
235 #define GPIO_120			151
236 #define GPIO_121			152
237 #define GPIO_122			153
238 #define GPIO_123			154
239 
240 /* West community pads */
241 #define GPIO_124			155
242 #define GPIO_125			156
243 #define GPIO_126			157
244 #define GPIO_127			158
245 #define GPIO_128			159
246 #define GPIO_129			160
247 #define GPIO_130			161
248 #define GPIO_131			162
249 #define GPIO_132			163
250 #define GPIO_133			164
251 #define GPIO_134			165
252 #define GPIO_135			166
253 #define GPIO_136			167
254 #define GPIO_137			168
255 #define GPIO_138			169
256 #define GPIO_139			170
257 #define GPIO_146			171
258 #define GPIO_147			172
259 #define GPIO_148			173
260 #define GPIO_149			174
261 #define GPIO_150			175
262 #define GPIO_151			176
263 #define GPIO_152			177
264 #define GPIO_153			178
265 #define GPIO_154			179
266 #define GPIO_155			180
267 #define GPIO_209			181
268 #define GPIO_210			182
269 #define GPIO_211			183
270 #define GPIO_212			184
271 #define OSC_CLK_OUT_0			185
272 #define OSC_CLK_OUT_1			186
273 #define OSC_CLK_OUT_2			187
274 #define OSC_CLK_OUT_3			188
275 #define OSC_CLK_OUT_4			189
276 #define PMU_AC_PRESENT			190
277 #define PMU_BATLOW_B			191
278 #define PMU_PLTRST_B			192
279 #define PMU_PWRBTN_B			193
280 #define PMU_RESETBUTTON_B		194
281 #define PMU_SLP_S0_B			195
282 #define PMU_SLP_S3_B			196
283 #define PMU_SLP_S4_B			197
284 #define PMU_SUSCLK			198
285 #define PMU_WAKE_B			199
286 #define SUS_STAT_B			200
287 #define SUSPWRDNACK			201
288 
289 /* Southwest community pads */
290 #define GPIO_205			202
291 #define GPIO_206			203
292 #define GPIO_207			204
293 #define GPIO_208			205
294 #define GPIO_156			206
295 #define GPIO_157			207
296 #define GPIO_158			208
297 #define GPIO_159			209
298 #define GPIO_160			210
299 #define GPIO_161			211
300 #define GPIO_162			212
301 #define GPIO_163			213
302 #define GPIO_164			214
303 #define GPIO_165			215
304 #define GPIO_166			216
305 #define GPIO_167			217
306 #define GPIO_168			218
307 #define GPIO_169			219
308 #define GPIO_170			220
309 #define GPIO_171			221
310 #define GPIO_172			222
311 #define GPIO_179			223
312 #define GPIO_173			224
313 #define GPIO_174			225
314 #define GPIO_175			226
315 #define GPIO_176			227
316 #define GPIO_177			228
317 #define GPIO_178			229
318 #define GPIO_186			230
319 #define GPIO_182			231
320 #define GPIO_183			232
321 #define SMB_ALERTB			233
322 #define SMB_CLK				234
323 #define SMB_DATA			235
324 #define LPC_ILB_SERIRQ			236
325 #define LPC_CLKOUT0			237
326 #define LPC_CLKOUT1			238
327 #define LPC_AD0				239
328 #define LPC_AD1				240
329 #define LPC_AD2				241
330 #define LPC_AD3				242
331 #define LPC_CLKRUNB			243
332 #define LPC_FRAMEB			244
333 
334 /* PERST_0 not defined */
335 #define GPIO_PRT0_UDEF			0xFF
336 
337 #define TOTAL_PADS			245
338 #define N_OFFSET			GPIO_0
339 #define NW_OFFSET			GPIO_187
340 #define W_OFFSET			GPIO_124
341 #define SW_OFFSET			GPIO_205
342 
343 /* Macros for translating a global pad offset to a local offset */
344 #define PAD_N(pad)			(pad - N_OFFSET)
345 #define PAD_NW(pad)			(pad - NW_OFFSET)
346 #define PAD_W(pad)			(pad - W_OFFSET)
347 #define PAD_SW(pad)			(pad - SW_OFFSET)
348 
349 /* Linux names of the GPIO devices */
350 #define GPIO_COMM_N_NAME		"INT3452:00"
351 #define GPIO_COMM_NW_NAME		"INT3452:01"
352 #define GPIO_COMM_W_NAME		"INT3452:02"
353 #define GPIO_COMM_SW_NAME		"INT3452:03"
354 
355 /* Following is used in gpio asl */
356 #define GPIO_COMM_NAME			"INT3452"
357 #define GPIO_COMM_0_DESC	\
358 	"General Purpose Input/Output (GPIO) Controller - North"
359 #define GPIO_COMM_1_DESC	\
360 	"General Purpose Input/Output (GPIO) Controller - Northwest"
361 #define GPIO_COMM_2_DESC	\
362 	"General Purpose Input/Output (GPIO) Controller - West"
363 #define GPIO_COMM_3_DESC	\
364 	"General Purpose Input/Output (GPIO) Controller - Southwest"
365 
366 #define GPIO_COMM0_PID			PID_GPIO_N
367 #define GPIO_COMM1_PID			PID_GPIO_NW
368 #define GPIO_COMM2_PID			PID_GPIO_W
369 #define GPIO_COMM3_PID			PID_GPIO_SW
370 
371 /*
372  * IOxAPIC IRQs for the GPIOs, overlap is expected as we encourage to use
373  * shared IRQ instead of direct IRQ, in case of overlapping, we can easily
374  * program one of the overlap to shared IRQ to avoid the conflict.
375  */
376 
377 /* NorthWest community pads */
378 #define PMIC_I2C_SDA_IRQ		0x32
379 #define GPIO_74_IRQ			0x33
380 #define GPIO_75_IRQ			0x34
381 #define GPIO_76_IRQ			0x35
382 #define GPIO_77_IRQ			0x36
383 #define GPIO_78_IRQ			0x37
384 #define GPIO_79_IRQ			0x38
385 #define GPIO_80_IRQ			0x39
386 #define GPIO_81_IRQ			0x3A
387 #define GPIO_82_IRQ			0x3B
388 #define GPIO_83_IRQ			0x3C
389 #define GPIO_84_IRQ			0x3D
390 #define GPIO_85_IRQ			0x3E
391 #define GPIO_86_IRQ			0x3F
392 #define GPIO_87_IRQ			0x40
393 #define GPIO_88_IRQ			0x41
394 #define GPIO_89_IRQ			0x42
395 #define GPIO_90_IRQ			0x43
396 #define GPIO_91_IRQ			0x44
397 #define GPIO_97_IRQ			0x49
398 #define GPIO_98_IRQ			0x4A
399 #define GPIO_99_IRQ			0x4B
400 #define GPIO_100_IRQ			0x4C
401 #define GPIO_101_IRQ			0x4D
402 #define GPIO_102_IRQ			0x4E
403 #define GPIO_103_IRQ			0x4F
404 #define GPIO_104_IRQ			0x50
405 #define GPIO_105_IRQ			0x51
406 #define GPIO_106_IRQ			0x52
407 #define GPIO_109_IRQ			0x54
408 #define GPIO_110_IRQ			0x55
409 #define GPIO_111_IRQ			0x56
410 #define GPIO_112_IRQ			0x57
411 #define GPIO_113_IRQ			0x58
412 #define GPIO_116_IRQ			0x5B
413 #define GPIO_117_IRQ			0x5C
414 #define GPIO_118_IRQ			0x5D
415 #define GPIO_119_IRQ			0x5E
416 #define GPIO_120_IRQ			0x5F
417 #define GPIO_121_IRQ			0x60
418 #define GPIO_122_IRQ			0x61
419 #define GPIO_123_IRQ			0x62
420 
421 /* North community pads */
422 #define GPIO_0_IRQ			0x63
423 #define GPIO_1_IRQ			0x64
424 #define GPIO_2_IRQ			0x65
425 #define GPIO_3_IRQ			0x66
426 #define GPIO_4_IRQ			0x67
427 #define GPIO_5_IRQ			0x68
428 #define GPIO_6_IRQ			0x69
429 #define GPIO_7_IRQ			0x6A
430 #define GPIO_8_IRQ			0x6B
431 #define GPIO_9_IRQ			0x6C
432 #define GPIO_10_IRQ			0x6D
433 #define GPIO_11_IRQ			0x6E
434 #define GPIO_12_IRQ			0x6F
435 #define GPIO_13_IRQ			0x70
436 #define GPIO_14_IRQ			0x71
437 #define GPIO_15_IRQ			0x72
438 #define GPIO_16_IRQ			0x73
439 #define GPIO_17_IRQ			0x74
440 #define GPIO_18_IRQ			0x75
441 #define GPIO_19_IRQ			0x76
442 #define GPIO_20_IRQ			0x77
443 #define GPIO_21_IRQ			0x32
444 #define GPIO_22_IRQ			0x33
445 #define GPIO_23_IRQ			0x34
446 #define GPIO_24_IRQ			0x35
447 #define GPIO_25_IRQ			0x36
448 #define GPIO_26_IRQ			0x37
449 #define GPIO_27_IRQ			0x38
450 #define GPIO_28_IRQ			0x39
451 #define GPIO_29_IRQ			0x3A
452 #define GPIO_30_IRQ			0x3B
453 #define GPIO_31_IRQ			0x3C
454 #define GPIO_32_IRQ			0x3D
455 #define GPIO_33_IRQ			0x3E
456 #define GPIO_34_IRQ			0x3F
457 #define GPIO_35_IRQ			0x40
458 #define GPIO_36_IRQ			0x41
459 #define GPIO_37_IRQ			0x42
460 #define GPIO_38_IRQ			0x43
461 #define GPIO_39_IRQ			0x44
462 #define GPIO_40_IRQ			0x45
463 #define GPIO_41_IRQ			0x46
464 #define GPIO_42_IRQ			0x47
465 #define GPIO_43_IRQ			0x48
466 #define GPIO_44_IRQ			0x49
467 #define GPIO_45_IRQ			0x4A
468 #define GPIO_46_IRQ			0x4B
469 #define GPIO_47_IRQ			0x4C
470 #define GPIO_48_IRQ			0x4D
471 #define GPIO_49_IRQ			0x4E
472 #define GPIO_62_IRQ			0x5B
473 #define GPIO_63_IRQ			0x5C
474 #define GPIO_64_IRQ			0x5D
475 #define GPIO_65_IRQ			0x5E
476 #define GPIO_66_IRQ			0x5F
477 #define GPIO_67_IRQ			0x60
478 #define GPIO_68_IRQ			0x61
479 #define GPIO_69_IRQ			0x62
480 #define GPIO_70_IRQ			0x63
481 #define GPIO_71_IRQ			0x64
482 #define GPIO_72_IRQ			0x65
483 #define GPIO_73_IRQ			0x66
484 
485 /* This is needed by ACPI */
486 #define GPIO_NUM_PAD_CFG_REGS   2 /* DW0, DW1 */
487 
488 #ifndef __ASSEMBLY__
489 
490 #include <dt-structs.h>
491 
492 /**
493  * struct apl_gpio_plat - platform data for each device
494  *
495  * @dtplat: of-platdata data from C struct
496  */
497 struct apl_gpio_plat {
498 #if CONFIG_IS_ENABLED(OF_PLATDATA)
499 	/* Put this first since driver model will copy the data here */
500 	struct dtd_intel_apl_pinctrl dtplat;
501 #endif
502 };
503 
504 #endif /* __ASSEMBLY__ */
505 
506 #endif /* _ASM_ARCH_GPIO_H_ */
507