1 /* SPDX-License-Identifier: GPL-2.0-only */
4 * This file is created based on MT8196_EINT_Datasheet
8 #include <console/console.h>
9 #include <soc/addressmap.h>
26 static struct eint_info eint_data
[] = {
49 [21] = { EINT_E
, 10 },
50 [22] = { EINT_E
, 11 },
51 [23] = { EINT_E
, 12 },
52 [24] = { EINT_E
, 13 },
53 [25] = { EINT_E
, 14 },
54 [26] = { EINT_E
, 15 },
56 [28] = { EINT_E
, 16 },
57 [29] = { EINT_E
, 17 },
58 [30] = { EINT_E
, 18 },
60 [32] = { EINT_E
, 19 },
61 [33] = { EINT_E
, 20 },
62 [34] = { EINT_E
, 21 },
63 [35] = { EINT_E
, 22 },
64 [36] = { EINT_E
, 23 },
65 [37] = { EINT_E
, 24 },
66 [38] = { EINT_E
, 25 },
67 [39] = { EINT_W
, 10 },
68 [40] = { EINT_W
, 11 },
69 [41] = { EINT_W
, 12 },
70 [42] = { EINT_W
, 13 },
71 [43] = { EINT_W
, 14 },
72 [44] = { EINT_W
, 19 },
73 [45] = { EINT_W
, 20 },
74 [46] = { EINT_W
, 21 },
75 [47] = { EINT_W
, 22 },
76 [48] = { EINT_W
, 23 },
77 [49] = { EINT_W
, 24 },
78 [50] = { EINT_W
, 25 },
79 [51] = { EINT_W
, 26 },
80 [60] = { EINT_W
, 27 },
81 [61] = { EINT_W
, 28 },
82 [62] = { EINT_W
, 29 },
83 [63] = { EINT_W
, 30 },
84 [64] = { EINT_W
, 31 },
85 [65] = { EINT_W
, 32 },
86 [70] = { EINT_W
, 33 },
87 [71] = { EINT_W
, 34 },
88 [72] = { EINT_W
, 35 },
89 [73] = { EINT_W
, 36 },
90 [74] = { EINT_W
, 37 },
91 [79] = { EINT_W
, 38 },
92 [80] = { EINT_W
, 39 },
93 [81] = { EINT_W
, 40 },
94 [82] = { EINT_W
, 41 },
95 [83] = { EINT_W
, 42 },
96 [84] = { EINT_W
, 43 },
97 [85] = { EINT_W
, 44 },
98 [86] = { EINT_W
, 45 },
99 [87] = { EINT_W
, 46 },
100 [88] = { EINT_W
, 47 },
101 [89] = { EINT_W
, 48 },
102 [90] = { EINT_W
, 49 },
103 [91] = { EINT_W
, 50 },
104 [92] = { EINT_W
, 15 },
105 [93] = { EINT_W
, 51 },
106 [94] = { EINT_W
, 52 },
107 [95] = { EINT_W
, 53 },
108 [96] = { EINT_W
, 54 },
109 [97] = { EINT_W
, 55 },
110 [98] = { EINT_W
, 56 },
111 [103] = { EINT_W
, 57 },
112 [106] = { EINT_S
, 10 },
113 [107] = { EINT_S
, 11 },
114 [108] = { EINT_S
, 12 },
115 [109] = { EINT_S
, 13 },
116 [110] = { EINT_S
, 0 },
117 [111] = { EINT_S
, 1 },
118 [112] = { EINT_S
, 2 },
119 [113] = { EINT_S
, 3 },
120 [114] = { EINT_S
, 14 },
121 [115] = { EINT_S
, 15 },
122 [116] = { EINT_S
, 16 },
123 [117] = { EINT_S
, 17 },
124 [118] = { EINT_S
, 18 },
125 [119] = { EINT_S
, 19 },
126 [120] = { EINT_S
, 20 },
127 [121] = { EINT_S
, 21 },
128 [122] = { EINT_S
, 22 },
129 [125] = { EINT_S
, 23 },
130 [126] = { EINT_S
, 24 },
131 [127] = { EINT_S
, 25 },
132 [128] = { EINT_S
, 26 },
133 [129] = { EINT_S
, 27 },
134 [130] = { EINT_S
, 28 },
135 [137] = { EINT_E
, 26 },
136 [138] = { EINT_E
, 27 },
137 [139] = { EINT_E
, 28 },
138 [140] = { EINT_E
, 29 },
139 [141] = { EINT_E
, 30 },
140 [142] = { EINT_E
, 31 },
141 [143] = { EINT_E
, 32 },
142 [144] = { EINT_E
, 33 },
143 [145] = { EINT_E
, 34 },
144 [146] = { EINT_E
, 35 },
145 [147] = { EINT_E
, 36 },
146 [148] = { EINT_E
, 4 },
147 [149] = { EINT_E
, 37 },
148 [150] = { EINT_E
, 5 },
149 [151] = { EINT_E
, 38 },
150 [152] = { EINT_E
, 39 },
151 [153] = { EINT_E
, 40 },
152 [154] = { EINT_E
, 41 },
153 [155] = { EINT_E
, 42 },
154 [156] = { EINT_E
, 43 },
155 [157] = { EINT_E
, 44 },
156 [158] = { EINT_E
, 45 },
157 [159] = { EINT_E
, 46 },
158 [160] = { EINT_E
, 47 },
159 [161] = { EINT_E
, 48 },
160 [162] = { EINT_E
, 49 },
161 [163] = { EINT_E
, 50 },
162 [164] = { EINT_E
, 51 },
163 [165] = { EINT_E
, 52 },
164 [166] = { EINT_E
, 53 },
165 [167] = { EINT_E
, 54 },
166 [168] = { EINT_E
, 55 },
167 [169] = { EINT_E
, 56 },
168 [170] = { EINT_E
, 57 },
169 [171] = { EINT_E
, 58 },
170 [172] = { EINT_E
, 6 },
171 [173] = { EINT_E
, 7 },
172 [174] = { EINT_E
, 8 },
173 [175] = { EINT_E
, 9 },
174 [178] = { EINT_E
, 59 },
175 [179] = { EINT_E
, 60 },
176 [180] = { EINT_E
, 61 },
177 [181] = { EINT_E
, 62 },
178 [182] = { EINT_E
, 63 },
179 [183] = { EINT_E
, 64 },
180 [184] = { EINT_E
, 65 },
181 [185] = { EINT_E
, 66 },
182 [186] = { EINT_N
, 6 },
183 [187] = { EINT_N
, 7 },
184 [192] = { EINT_N
, 8 },
185 [193] = { EINT_N
, 9 },
186 [196] = { EINT_N
, 10 },
187 [197] = { EINT_N
, 11 },
188 [204] = { EINT_N
, 12 },
189 [205] = { EINT_N
, 13 },
190 [206] = { EINT_N
, 14 },
191 [207] = { EINT_N
, 0 },
192 [208] = { EINT_N
, 1 },
193 [209] = { EINT_N
, 2 },
194 [210] = { EINT_N
, 15 },
195 [211] = { EINT_N
, 3 },
196 [212] = { EINT_N
, 4 },
197 [213] = { EINT_N
, 5 },
198 [216] = { EINT_N
, 16 },
199 [217] = { EINT_N
, 17 },
200 [218] = { EINT_N
, 18 },
201 [219] = { EINT_N
, 19 },
202 [220] = { EINT_N
, 20 },
203 [221] = { EINT_N
, 21 },
204 [222] = { EINT_N
, 22 },
205 [223] = { EINT_N
, 23 },
206 [224] = { EINT_N
, 24 },
207 [225] = { EINT_N
, 25 },
208 [226] = { EINT_N
, 26 },
209 [227] = { EINT_N
, 27 },
210 [228] = { EINT_N
, 28 },
211 [229] = { EINT_N
, 29 },
212 [241] = { EINT_N
, 30 },
213 [242] = { EINT_N
, 31 },
214 [243] = { EINT_N
, 32 },
215 [245] = { EINT_N
, 45 },
216 [251] = { EINT_E
, 67 },
217 [252] = { EINT_E
, 68 },
218 [253] = { EINT_E
, 69 },
219 [254] = { EINT_E
, 70 },
220 [255] = { EINT_E
, 71 },
221 [256] = { EINT_E
, 72 },
222 [257] = { EINT_E
, 73 },
223 [258] = { EINT_E
, 74 },
224 [259] = { EINT_N
, 33 },
225 [260] = { EINT_N
, 34 },
226 [261] = { EINT_N
, 35 },
227 [262] = { EINT_N
, 36 },
228 [263] = { EINT_N
, 37 },
229 [264] = { EINT_N
, 38 },
230 [265] = { EINT_N
, 39 },
231 [266] = { EINT_N
, 40 },
232 [267] = { EINT_N
, 41 },
233 [268] = { EINT_N
, 42 },
234 [269] = { EINT_N
, 43 },
235 [270] = { EINT_N
, 44 },
236 [271] = { EINT_C
, 0 },
237 [272] = { EINT_C
, 1 },
238 [273] = { EINT_C
, 2 },
239 [274] = { EINT_C
, 3 },
240 [275] = { EINT_C
, 4 },
241 [276] = { EINT_C
, 5 },
242 [277] = { EINT_C
, 6 },
243 [278] = { EINT_C
, 7 },
244 [279] = { EINT_C
, 8 },
245 [280] = { EINT_C
, 9 },
246 [281] = { EINT_C
, 10 },
247 [282] = { EINT_C
, 11 },
248 [283] = { EINT_C
, 12 },
249 [284] = { EINT_C
, 13 },
250 [285] = { EINT_C
, 14 },
251 [286] = { EINT_C
, 15 },
252 [287] = { EINT_C
, 16 },
253 [288] = { EINT_C
, 17 },
254 [289] = { EINT_C
, 18 },
255 [290] = { EINT_C
, 19 },
256 [291] = { EINT_C
, 20 },
257 [292] = { EINT_C
, 21 },
259 _Static_assert(ARRAY_SIZE(eint_data
) == 293, "Incorrect eint_data size");
261 void gpio_calc_eint_pos_bit(gpio_t gpio
, u32
*pos
, u32
*bit
)
263 uint32_t idx
= gpio
.id
;
268 if (idx
>= ARRAY_SIZE(eint_data
))
271 uint8_t index
= eint_data
[idx
].index
;
273 *pos
= index
/ MAX_EINT_REG_BITS
;
274 *bit
= index
% MAX_EINT_REG_BITS
;
277 struct eint_regs
*gpio_get_eint_reg(gpio_t gpio
)
279 uint32_t idx
= gpio
.id
;
282 if (idx
>= ARRAY_SIZE(eint_data
))
285 switch (eint_data
[idx
].instance
) {
302 printk(BIOS_ERR
, "%s: Failed to look up a valid EINT base for %d\n",