blob: 762160da88203907e5cb5837239fb1001178a4c9 [file] [log] [blame]
Simon Glass34f94ec2019-12-08 17:32:08 -07001/* 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
Simon Glassd81ade42020-09-22 12:45:02 -0600485/* This is needed by ACPI */
486#define GPIO_NUM_PAD_CFG_REGS 2 /* DW0, DW1 */
487
Simon Glass28c751f2020-12-19 10:39:57 -0700488#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 */
497struct 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
Simon Glass34f94ec2019-12-08 17:32:08 -0700506#endif /* _ASM_ARCH_GPIO_H_ */