1
2
3
4
5
6
7
8#include <linux/err.h>
9#include <linux/init.h>
10#include <linux/io.h>
11#include <linux/mfd/syscon.h>
12#include <linux/of.h>
13#include <linux/pinctrl/machine.h>
14#include <linux/pinctrl/pinctrl.h>
15#include <linux/pinctrl/pinmux.h>
16#include <linux/pinctrl/pinconf.h>
17#include <linux/pinctrl/pinconf-generic.h>
18#include <linux/platform_device.h>
19#include <linux/slab.h>
20#include <linux/regmap.h>
21
22#include "pinctrl-utils.h"
23
24#define DRIVER_NAME "pinctrl-gemini"
25
26
27
28
29
30
31
32struct gemini_pin_conf {
33 unsigned int pin;
34 u32 reg;
35 u32 mask;
36};
37
38
39
40
41
42
43
44
45
46
47
48
49
50struct gemini_pmx {
51 struct device *dev;
52 struct pinctrl_dev *pctl;
53 struct regmap *map;
54 bool is_3512;
55 bool is_3516;
56 bool flash_pin;
57 const struct gemini_pin_conf *confs;
58 unsigned int nconfs;
59};
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74struct gemini_pin_group {
75 const char *name;
76 const unsigned int *pins;
77 const unsigned int num_pins;
78 u32 mask;
79 u32 value;
80 u32 driving_mask;
81};
82
83
84#define GLOBAL_WORD_ID 0x00
85#define GLOBAL_STATUS 0x04
86#define GLOBAL_STATUS_FLPIN BIT(20)
87#define GLOBAL_IODRIVE 0x10
88#define GLOBAL_GMAC_CTRL_SKEW 0x1c
89#define GLOBAL_GMAC0_DATA_SKEW 0x20
90#define GLOBAL_GMAC1_DATA_SKEW 0x24
91
92
93
94
95
96
97
98
99
100
101
102
103#define GLOBAL_MISC_CTRL 0x30
104#define GEMINI_GMAC_IOSEL_MASK GENMASK(28, 27)
105
106#define GEMINI_GMAC_IOSEL_GMAC0_GMII BIT(28)
107
108#define GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII BIT(27)
109
110#define GEMINI_GMAC_IOSEL_GMAC0_RGMII_GMAC1_GPIO2 0
111#define TVC_CLK_PAD_ENABLE BIT(20)
112#define PCI_CLK_PAD_ENABLE BIT(17)
113#define LPC_CLK_PAD_ENABLE BIT(16)
114#define TVC_PADS_ENABLE BIT(9)
115#define SSP_PADS_ENABLE BIT(8)
116#define LCD_PADS_ENABLE BIT(7)
117#define LPC_PADS_ENABLE BIT(6)
118#define PCI_PADS_ENABLE BIT(5)
119#define IDE_PADS_ENABLE BIT(4)
120#define DRAM_PADS_POWERDOWN BIT(3)
121#define NAND_PADS_DISABLE BIT(2)
122#define PFLASH_PADS_DISABLE BIT(1)
123#define SFLASH_PADS_DISABLE BIT(0)
124#define PADS_MASK (GENMASK(9, 0) | BIT(16) | BIT(17) | BIT(20) | BIT(27))
125#define PADS_MAXBIT 27
126
127
128static const char * const gemini_padgroups[] = {
129 "serial flash",
130 "parallel flash",
131 "NAND flash",
132 "DRAM",
133 "IDE",
134 "PCI",
135 "LPC",
136 "LCD",
137 "SSP",
138 "TVC",
139 NULL, NULL, NULL, NULL, NULL, NULL,
140 "LPC CLK",
141 "PCI CLK",
142 NULL, NULL,
143 "TVC CLK",
144 NULL, NULL, NULL, NULL, NULL,
145 "GMAC1",
146};
147
148static const struct pinctrl_pin_desc gemini_3512_pins[] = {
149
150 PINCTRL_PIN(0, "A1 VREF CTRL"),
151 PINCTRL_PIN(1, "A2 VCC2IO CTRL"),
152 PINCTRL_PIN(2, "A3 DRAM CK"),
153 PINCTRL_PIN(3, "A4 DRAM CK N"),
154 PINCTRL_PIN(4, "A5 DRAM A5"),
155 PINCTRL_PIN(5, "A6 DRAM CKE"),
156 PINCTRL_PIN(6, "A7 DRAM DQ11"),
157 PINCTRL_PIN(7, "A8 DRAM DQ0"),
158 PINCTRL_PIN(8, "A9 DRAM DQ5"),
159 PINCTRL_PIN(9, "A10 DRAM DQ6"),
160 PINCTRL_PIN(10, "A11 DRAM DRAM VREF"),
161 PINCTRL_PIN(11, "A12 DRAM BA1"),
162 PINCTRL_PIN(12, "A13 DRAM A2"),
163 PINCTRL_PIN(13, "A14 PCI GNT1 N"),
164 PINCTRL_PIN(14, "A15 PCI REQ9 N"),
165 PINCTRL_PIN(15, "A16 PCI REQ2 N"),
166 PINCTRL_PIN(16, "A17 PCI REQ3 N"),
167 PINCTRL_PIN(17, "A18 PCI AD31"),
168
169 PINCTRL_PIN(18, "B1 VCCK CTRL"),
170 PINCTRL_PIN(19, "B2 PWR EN"),
171 PINCTRL_PIN(20, "B3 RTC CLKI"),
172 PINCTRL_PIN(21, "B4 DRAM A4"),
173 PINCTRL_PIN(22, "B5 DRAM A6"),
174 PINCTRL_PIN(23, "B6 DRAM A12"),
175 PINCTRL_PIN(24, "B7 DRAM DQS1"),
176 PINCTRL_PIN(25, "B8 DRAM DQ15"),
177 PINCTRL_PIN(26, "B9 DRAM DQ4"),
178 PINCTRL_PIN(27, "B10 DRAM DQS0"),
179 PINCTRL_PIN(28, "B11 DRAM WE N"),
180 PINCTRL_PIN(29, "B12 DRAM A10"),
181 PINCTRL_PIN(30, "B13 DRAM A3"),
182 PINCTRL_PIN(31, "B14 PCI GNT0 N"),
183 PINCTRL_PIN(32, "B15 PCI GNT3 N"),
184 PINCTRL_PIN(33, "B16 PCI REQ1 N"),
185 PINCTRL_PIN(34, "B17 PCI AD30"),
186 PINCTRL_PIN(35, "B18 PCI AD29"),
187
188 PINCTRL_PIN(36, "C1 CIR RST N"),
189 PINCTRL_PIN(37, "C2 XTALI"),
190 PINCTRL_PIN(38, "C3 PWR BTN"),
191 PINCTRL_PIN(39, "C4 RTC CLKO"),
192 PINCTRL_PIN(40, "C5 DRAM A7"),
193 PINCTRL_PIN(41, "C6 DRAM A11"),
194 PINCTRL_PIN(42, "C7 DRAM DQ10"),
195 PINCTRL_PIN(43, "C8 DRAM DQ14"),
196 PINCTRL_PIN(44, "C9 DRAM DQ3"),
197 PINCTRL_PIN(45, "C10 DRAM DQ7"),
198 PINCTRL_PIN(46, "C11 DRAM CAS N"),
199 PINCTRL_PIN(47, "C12 DRAM A0"),
200 PINCTRL_PIN(48, "C13 PCI INT0 N"),
201 PINCTRL_PIN(49, "C14 EXT RESET N"),
202 PINCTRL_PIN(50, "C15 PCI GNT2 N"),
203 PINCTRL_PIN(51, "C16 PCI AD28"),
204 PINCTRL_PIN(52, "C17 PCI AD27"),
205 PINCTRL_PIN(53, "C18 PCI AD26"),
206
207 PINCTRL_PIN(54, "D1 AVCCKHA"),
208 PINCTRL_PIN(55, "D2 AGNDIOHA"),
209 PINCTRL_PIN(56, "D3 XTALO"),
210 PINCTRL_PIN(57, "D4 AVCC3IOHA"),
211 PINCTRL_PIN(58, "D5 DRAM A8"),
212 PINCTRL_PIN(59, "D6 DRAM A9"),
213 PINCTRL_PIN(60, "D7 DRAM DQ9"),
214 PINCTRL_PIN(61, "D8 DRAM DQ13"),
215 PINCTRL_PIN(62, "D9 DRAM DQ2"),
216 PINCTRL_PIN(63, "D10 DRAM A13"),
217 PINCTRL_PIN(64, "D11 DRAM RAS N"),
218 PINCTRL_PIN(65, "D12 DRAM A1"),
219 PINCTRL_PIN(66, "D13 PCI INTC N"),
220 PINCTRL_PIN(67, "D14 PCI CLK"),
221 PINCTRL_PIN(68, "D15 PCI AD25"),
222 PINCTRL_PIN(69, "D16 PCI AD24"),
223 PINCTRL_PIN(70, "D17 PCI CBE3 N"),
224 PINCTRL_PIN(71, "D18 PCI AD23"),
225
226 PINCTRL_PIN(72, "E1 AVCC3IOHA"),
227 PINCTRL_PIN(73, "E2 EBG"),
228 PINCTRL_PIN(74, "E3 AVCC3IOHB"),
229 PINCTRL_PIN(75, "E4 REXT"),
230 PINCTRL_PIN(76, "E5 GND"),
231 PINCTRL_PIN(77, "E6 DRAM DQM1"),
232 PINCTRL_PIN(78, "E7 DRAM DQ8"),
233 PINCTRL_PIN(79, "E8 DRAM DQ12"),
234 PINCTRL_PIN(80, "E9 DRAM DQ1"),
235 PINCTRL_PIN(81, "E10 DRAM DQM0"),
236 PINCTRL_PIN(82, "E11 DRAM BA0"),
237 PINCTRL_PIN(83, "E12 PCI INTA N"),
238 PINCTRL_PIN(84, "E13 PCI INTB N"),
239 PINCTRL_PIN(85, "E14 GND"),
240 PINCTRL_PIN(86, "E15 PCI AD22"),
241 PINCTRL_PIN(87, "E16 PCI AD21"),
242 PINCTRL_PIN(88, "E17 PCI AD20"),
243 PINCTRL_PIN(89, "E18 PCI AD19"),
244
245 PINCTRL_PIN(90, "F1 SATA0 RXDP"),
246 PINCTRL_PIN(91, "F2 SATA0 RXDN"),
247 PINCTRL_PIN(92, "F3 AGNDK 0"),
248 PINCTRL_PIN(93, "F4 AVCC3 S"),
249 PINCTRL_PIN(94, "F5 AVCCK P"),
250 PINCTRL_PIN(95, "F6 GND"),
251 PINCTRL_PIN(96, "F7 VCC2IOHA 2"),
252 PINCTRL_PIN(97, "F8 VCC2IOHA 2"),
253 PINCTRL_PIN(98, "F9 V1"),
254 PINCTRL_PIN(99, "F10 V1"),
255 PINCTRL_PIN(100, "F11 VCC2IOHA 2"),
256 PINCTRL_PIN(101, "F12 VCC2IOHA 2"),
257 PINCTRL_PIN(102, "F13 GND"),
258 PINCTRL_PIN(103, "F14 PCI AD18"),
259 PINCTRL_PIN(104, "F15 PCI AD17"),
260 PINCTRL_PIN(105, "F16 PCI AD16"),
261 PINCTRL_PIN(106, "F17 PCI CBE2 N"),
262 PINCTRL_PIN(107, "F18 PCI FRAME N"),
263
264 PINCTRL_PIN(108, "G1 SATA0 TXDP"),
265 PINCTRL_PIN(109, "G2 SATA0 TXDN"),
266 PINCTRL_PIN(110, "G3 AGNDK 1"),
267 PINCTRL_PIN(111, "G4 AVCCK 0"),
268 PINCTRL_PIN(112, "G5 TEST CLKOUT"),
269 PINCTRL_PIN(113, "G6 AGND"),
270 PINCTRL_PIN(114, "G7 GND"),
271 PINCTRL_PIN(115, "G8 VCC2IOHA 2"),
272 PINCTRL_PIN(116, "G9 V1"),
273 PINCTRL_PIN(117, "G10 V1"),
274 PINCTRL_PIN(118, "G11 VCC2IOHA 2"),
275 PINCTRL_PIN(119, "G12 GND"),
276 PINCTRL_PIN(120, "G13 VCC3IOHA"),
277 PINCTRL_PIN(121, "G14 PCI IRDY N"),
278 PINCTRL_PIN(122, "G15 PCI TRDY N"),
279 PINCTRL_PIN(123, "G16 PCI DEVSEL N"),
280 PINCTRL_PIN(124, "G17 PCI STOP N"),
281 PINCTRL_PIN(125, "G18 PCI PAR"),
282
283 PINCTRL_PIN(126, "H1 SATA1 TXDP"),
284 PINCTRL_PIN(127, "H2 SATA1 TXDN"),
285 PINCTRL_PIN(128, "H3 AGNDK 2"),
286 PINCTRL_PIN(129, "H4 AVCCK 1"),
287 PINCTRL_PIN(130, "H5 AVCCK S"),
288 PINCTRL_PIN(131, "H6 AVCCKHB"),
289 PINCTRL_PIN(132, "H7 AGND"),
290 PINCTRL_PIN(133, "H8 GND"),
291 PINCTRL_PIN(134, "H9 GND"),
292 PINCTRL_PIN(135, "H10 GND"),
293 PINCTRL_PIN(136, "H11 GND"),
294 PINCTRL_PIN(137, "H12 VCC3IOHA"),
295 PINCTRL_PIN(138, "H13 VCC3IOHA"),
296 PINCTRL_PIN(139, "H14 PCI CBE1 N"),
297 PINCTRL_PIN(140, "H15 PCI AD15"),
298 PINCTRL_PIN(141, "H16 PCI AD14"),
299 PINCTRL_PIN(142, "H17 PCI AD13"),
300 PINCTRL_PIN(143, "H18 PCI AD12"),
301
302 PINCTRL_PIN(144, "J1 SATA1 RXDP"),
303 PINCTRL_PIN(145, "J2 SATA1 RXDN"),
304 PINCTRL_PIN(146, "J3 AGNDK 3"),
305 PINCTRL_PIN(147, "J4 AVCCK 2"),
306 PINCTRL_PIN(148, "J5 IDE DA1"),
307 PINCTRL_PIN(149, "J6 V1"),
308 PINCTRL_PIN(150, "J7 V1"),
309 PINCTRL_PIN(151, "J8 GND"),
310 PINCTRL_PIN(152, "J9 GND"),
311 PINCTRL_PIN(153, "J10 GND"),
312 PINCTRL_PIN(154, "J11 GND"),
313 PINCTRL_PIN(155, "J12 V1"),
314 PINCTRL_PIN(156, "J13 V1"),
315 PINCTRL_PIN(157, "J14 PCI AD11"),
316 PINCTRL_PIN(158, "J15 PCI AD10"),
317 PINCTRL_PIN(159, "J16 PCI AD9"),
318 PINCTRL_PIN(160, "J17 PCI AD8"),
319 PINCTRL_PIN(161, "J18 PCI CBE0 N"),
320
321 PINCTRL_PIN(162, "K1 IDE CS1 N"),
322 PINCTRL_PIN(163, "K2 IDE CS0 N"),
323 PINCTRL_PIN(164, "K3 AVCCK 3"),
324 PINCTRL_PIN(165, "K4 IDE DA2"),
325 PINCTRL_PIN(166, "K5 IDE DA0"),
326 PINCTRL_PIN(167, "K6 V1"),
327 PINCTRL_PIN(168, "K7 V1"),
328 PINCTRL_PIN(169, "K8 GND"),
329 PINCTRL_PIN(170, "K9 GND"),
330 PINCTRL_PIN(171, "K10 GND"),
331 PINCTRL_PIN(172, "K11 GND"),
332 PINCTRL_PIN(173, "K12 V1"),
333 PINCTRL_PIN(174, "K13 V1"),
334 PINCTRL_PIN(175, "K14 PCI AD3"),
335 PINCTRL_PIN(176, "K15 PCI AD4"),
336 PINCTRL_PIN(177, "K16 PCI AD5"),
337 PINCTRL_PIN(178, "K17 PCI AD6"),
338 PINCTRL_PIN(179, "K18 PCI AD7"),
339
340 PINCTRL_PIN(180, "L1 IDE INTRQ"),
341 PINCTRL_PIN(181, "L2 IDE DMACK N"),
342 PINCTRL_PIN(182, "L3 IDE IORDY"),
343 PINCTRL_PIN(183, "L4 IDE DIOR N"),
344 PINCTRL_PIN(184, "L5 IDE DIOW N"),
345 PINCTRL_PIN(185, "L6 VCC3IOHA"),
346 PINCTRL_PIN(186, "L7 VCC3IOHA"),
347 PINCTRL_PIN(187, "L8 GND"),
348 PINCTRL_PIN(188, "L9 GND"),
349 PINCTRL_PIN(189, "L10 GND"),
350 PINCTRL_PIN(190, "L11 GND"),
351 PINCTRL_PIN(191, "L12 VCC3IOHA"),
352 PINCTRL_PIN(192, "L13 VCC3IOHA"),
353 PINCTRL_PIN(193, "L14 GPIO0 30"),
354 PINCTRL_PIN(194, "L15 GPIO0 31"),
355 PINCTRL_PIN(195, "L16 PCI AD0"),
356 PINCTRL_PIN(196, "L17 PCI AD1"),
357 PINCTRL_PIN(197, "L18 PCI AD2"),
358
359 PINCTRL_PIN(198, "M1 IDE DMARQ"),
360 PINCTRL_PIN(199, "M2 IDE DD15"),
361 PINCTRL_PIN(200, "M3 IDE DD0"),
362 PINCTRL_PIN(201, "M4 IDE DD14"),
363 PINCTRL_PIN(202, "M5 IDE DD1"),
364 PINCTRL_PIN(203, "M6 VCC3IOHA"),
365 PINCTRL_PIN(204, "M7 GND"),
366 PINCTRL_PIN(205, "M8 VCC2IOHA 1"),
367 PINCTRL_PIN(206, "M9 V1"),
368 PINCTRL_PIN(207, "M10 V1"),
369 PINCTRL_PIN(208, "M11 VCC3IOHA"),
370 PINCTRL_PIN(209, "M12 GND"),
371 PINCTRL_PIN(210, "M13 VCC3IOHA"),
372 PINCTRL_PIN(211, "M14 GPIO0 25"),
373 PINCTRL_PIN(212, "M15 GPIO0 26"),
374 PINCTRL_PIN(213, "M16 GPIO0 27"),
375 PINCTRL_PIN(214, "M17 GPIO0 28"),
376 PINCTRL_PIN(215, "M18 GPIO0 29"),
377
378 PINCTRL_PIN(216, "N1 IDE DD13"),
379 PINCTRL_PIN(217, "N2 IDE DD2"),
380 PINCTRL_PIN(218, "N3 IDE DD12"),
381 PINCTRL_PIN(219, "N4 IDE DD3"),
382 PINCTRL_PIN(220, "N5 IDE DD11"),
383 PINCTRL_PIN(221, "N6 GND"),
384 PINCTRL_PIN(222, "N7 VCC2IOHA 1"),
385 PINCTRL_PIN(223, "N8 VCC2IOHA 1"),
386 PINCTRL_PIN(224, "N9 V1"),
387 PINCTRL_PIN(225, "N10 V1"),
388 PINCTRL_PIN(226, "N11 VCC3IOHA"),
389 PINCTRL_PIN(227, "N12 VCC3IOHA"),
390 PINCTRL_PIN(228, "N13 GND"),
391 PINCTRL_PIN(229, "N14 GPIO0 20"),
392 PINCTRL_PIN(230, "N15 GPIO0 21"),
393 PINCTRL_PIN(231, "N16 GPIO0 22"),
394 PINCTRL_PIN(232, "N17 GPIO0 23"),
395 PINCTRL_PIN(233, "N18 GPIO0 24"),
396
397 PINCTRL_PIN(234, "P1 IDE DD4"),
398 PINCTRL_PIN(235, "P2 IDE DD10"),
399 PINCTRL_PIN(236, "P3 IDE DD5"),
400 PINCTRL_PIN(237, "P4 IDE DD9"),
401 PINCTRL_PIN(238, "P5 GND"),
402 PINCTRL_PIN(239, "P6 USB XSCO"),
403 PINCTRL_PIN(240, "P7 GMAC0 TXD3"),
404 PINCTRL_PIN(241, "P8 GMAC0 TXEN"),
405 PINCTRL_PIN(242, "P9 GMAC0 RXD2"),
406 PINCTRL_PIN(243, "P10 GMAC1 TXC"),
407 PINCTRL_PIN(244, "P11 GMAC1 RXD1"),
408 PINCTRL_PIN(245, "P12 MODE SEL 1"),
409 PINCTRL_PIN(246, "P13 GPIO1 28"),
410 PINCTRL_PIN(247, "P14 GND"),
411 PINCTRL_PIN(248, "P15 GPIO0 5"),
412 PINCTRL_PIN(249, "P16 GPIO0 17"),
413 PINCTRL_PIN(250, "P17 GPIO0 18"),
414 PINCTRL_PIN(251, "P18 GPIO0 19"),
415
416 PINCTRL_PIN(252, "R1 IDE DD6"),
417 PINCTRL_PIN(253, "R2 IDE DD8"),
418 PINCTRL_PIN(254, "R3 IDE DD7"),
419 PINCTRL_PIN(255, "R4 IDE RESET N"),
420 PINCTRL_PIN(256, "R5 ICE0 DBGACK"),
421 PINCTRL_PIN(257, "R6 USB XSCI"),
422 PINCTRL_PIN(258, "R7 GMAC0 TXD2"),
423 PINCTRL_PIN(259, "R8 GMAC0 RXDV"),
424 PINCTRL_PIN(260, "R9 GMAC0 RXD3"),
425 PINCTRL_PIN(261, "R10 GMAC1 TXD0"),
426 PINCTRL_PIN(262, "R11 GMAC1 RXD0"),
427 PINCTRL_PIN(263, "R12 MODE SEL 0"),
428 PINCTRL_PIN(264, "R13 MODE SEL 3"),
429 PINCTRL_PIN(265, "R14 GPIO0 0"),
430 PINCTRL_PIN(266, "R15 GPIO0 4"),
431 PINCTRL_PIN(267, "R16 GPIO0 9"),
432 PINCTRL_PIN(268, "R17 GPIO0 15"),
433 PINCTRL_PIN(269, "R18 GPIO0 16"),
434
435 PINCTRL_PIN(270, "T1 ICE0 DBGRQ"),
436 PINCTRL_PIN(271, "T2 ICE0 IDO"),
437 PINCTRL_PIN(272, "T3 ICE0 ICK"),
438 PINCTRL_PIN(273, "T4 ICE0 IMS"),
439 PINCTRL_PIN(274, "T5 ICE0 IDI"),
440 PINCTRL_PIN(275, "T6 USB RREF"),
441 PINCTRL_PIN(276, "T7 GMAC0 TXD1"),
442 PINCTRL_PIN(277, "T8 GMAC0 RXC"),
443 PINCTRL_PIN(278, "T9 GMAC0 CRS"),
444 PINCTRL_PIN(279, "T10 GMAC1 TXD1"),
445 PINCTRL_PIN(280, "T11 GMAC1 RXC"),
446 PINCTRL_PIN(281, "T12 GMAC1 CRS"),
447 PINCTRL_PIN(282, "T13 EXT CLK"),
448 PINCTRL_PIN(283, "T14 GPIO1 31"),
449 PINCTRL_PIN(284, "T15 GPIO0 3"),
450 PINCTRL_PIN(285, "T16 GPIO0 8"),
451 PINCTRL_PIN(286, "T17 GPIO0 12"),
452 PINCTRL_PIN(287, "T18 GPIO0 14"),
453
454 PINCTRL_PIN(288, "U1 ICE0 IRST N"),
455 PINCTRL_PIN(289, "U2 USB0 VCCHSRT"),
456 PINCTRL_PIN(290, "U3 USB0 DP"),
457 PINCTRL_PIN(291, "U4 USB VCCA U20"),
458 PINCTRL_PIN(292, "U5 USB1 DP"),
459 PINCTRL_PIN(293, "U6 USB1 GNDHSRT 1"),
460 PINCTRL_PIN(294, "U7 GMAC0 TXD0"),
461 PINCTRL_PIN(295, "U8 GMAC0 RXD0"),
462 PINCTRL_PIN(296, "U9 GMAC1 COL"),
463 PINCTRL_PIN(297, "U10 GMAC1 TXD2"),
464 PINCTRL_PIN(298, "U11 GMAC1 RXDV"),
465 PINCTRL_PIN(299, "U12 GMAC1 RXD3"),
466 PINCTRL_PIN(300, "U13 MODE SEL 2"),
467 PINCTRL_PIN(301, "U14 GPIO1 30"),
468 PINCTRL_PIN(302, "U15 GPIO0 2"),
469 PINCTRL_PIN(303, "U16 GPIO0 7"),
470 PINCTRL_PIN(304, "U17 GPIO0 11"),
471 PINCTRL_PIN(305, "U18 GPIO0 13"),
472
473 PINCTRL_PIN(306, "V1 USB0 GNDHSRT"),
474 PINCTRL_PIN(307, "V2 USB0 DM"),
475 PINCTRL_PIN(308, "V3 USB GNDA U20"),
476 PINCTRL_PIN(309, "V4 USB1 DM"),
477 PINCTRL_PIN(310, "V5 USB1 VCCHSRT1"),
478 PINCTRL_PIN(311, "V6 GMAC0 COL"),
479 PINCTRL_PIN(312, "V7 GMAC0 TXC"),
480 PINCTRL_PIN(313, "V8 GMAC0 RXD1"),
481 PINCTRL_PIN(314, "V9 REF CLK"),
482 PINCTRL_PIN(315, "V10 GMAC1 TXD3"),
483 PINCTRL_PIN(316, "V11 GMAC1 TXEN"),
484 PINCTRL_PIN(317, "V12 GMAC1 RXD2"),
485 PINCTRL_PIN(318, "V13 M30 CLK"),
486 PINCTRL_PIN(319, "V14 GPIO1 29"),
487 PINCTRL_PIN(320, "V15 GPIO0 1"),
488 PINCTRL_PIN(321, "V16 GPIO0 6"),
489 PINCTRL_PIN(322, "V17 GPIO0 10"),
490 PINCTRL_PIN(323, "V18 SYS RESET N"),
491};
492
493
494
495static const unsigned int gnd_3512_pins[] = {
496 76, 85, 95, 102, 114, 119, 133, 134, 135, 136, 151, 152, 153, 154, 169,
497 170, 171, 172, 187, 188, 189, 190, 204, 209, 221, 228, 238, 247
498};
499
500static const unsigned int dram_3512_pins[] = {
501 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 21, 22, 23, 24, 25, 26, 27, 28, 29,
502 30, 40, 41, 42, 43, 44, 45, 46, 47, 58, 59, 60, 61, 62, 63, 64, 65, 77,
503 78, 79, 80, 81, 82
504};
505
506static const unsigned int rtc_3512_pins[] = { 57, 20, 39 };
507
508static const unsigned int power_3512_pins[] = { 19, 38, 36, 55, 37, 56, 54, 72 };
509
510static const unsigned int system_3512_pins[] = {
511 318, 264, 300, 245, 263, 282, 314, 323, 49,
512};
513
514static const unsigned int vcontrol_3512_pins[] = { 18, 0, 1 };
515
516static const unsigned int ice_3512_pins[] = { 256, 270, 271, 272, 273, 274, 288 };
517
518static const unsigned int ide_3512_pins[] = {
519 162, 163, 165, 166, 148, 180, 181, 182, 183, 184, 198, 199, 200, 201, 202,
520 216, 217, 218, 219, 220, 234, 235, 236, 237, 252, 253, 254, 255
521};
522
523static const unsigned int sata_3512_pins[] = {
524 75, 74, 73, 93, 94, 131, 112, 130, 92, 91, 90, 111, 110, 109, 108, 129,
525 128, 127, 126, 147, 146, 145, 144, 164
526};
527
528static const unsigned int usb_3512_pins[] = {
529 306, 289, 307, 290, 239, 257, 275, 308, 291, 309, 292, 310, 293
530};
531
532
533static const unsigned int gmii_gmac0_3512_pins[] = {
534 240, 241, 242, 258, 259, 260, 276, 277, 278, 294, 295, 311, 312, 313
535};
536
537static const unsigned int gmii_gmac1_3512_pins[] = {
538 243, 244, 261, 262, 279, 280, 281, 296, 297, 298, 299, 315, 316, 317
539};
540
541static const unsigned int pci_3512_pins[] = {
542 13, 14, 15, 16, 17, 31, 32, 33, 34, 35, 48, 50, 51, 52, 53, 66, 67, 68, 69,
543 70, 71, 83, 84, 86, 87, 88, 89, 103, 104, 105, 106, 107, 121, 122, 123,
544 124, 125, 139, 140, 141, 142, 143, 157, 158, 159, 160, 161, 175, 176, 177,
545 178, 179, 195, 196, 197
546};
547
548
549
550
551
552static const unsigned int lpc_3512_pins[] = {
553 285,
554 304,
555 286,
556 305,
557 287,
558 268,
559};
560
561
562static const unsigned int lcd_3512_pins[] = {
563 262, 244, 317, 299, 246, 319, 301, 283, 269, 233, 211
564};
565
566static const unsigned int ssp_3512_pins[] = {
567 285,
568 304,
569 286,
570 305,
571 287,
572 268,
573};
574
575static const unsigned int uart_rxtx_3512_pins[] = {
576 267,
577 322,
578};
579
580static const unsigned int uart_modem_3512_pins[] = {
581 285,
582 304,
583 286,
584 305,
585 287,
586 268,
587};
588
589static const unsigned int tvc_3512_pins[] = {
590 246,
591 319,
592 301,
593 283,
594 320,
595 302,
596 284,
597 266,
598};
599
600static const unsigned int tvc_clk_3512_pins[] = {
601 265,
602};
603
604
605static const unsigned int nflash_3512_pins[] = {
606 199, 200, 201, 202, 216, 217, 218, 219, 220, 234, 235, 236, 237, 252,
607 253, 254, 249, 250, 232, 233, 211, 193, 194
608};
609
610
611static const unsigned int pflash_3512_pins[] = {
612 162, 163, 165, 166, 148, 199, 200, 201, 202, 216, 217, 218, 219, 220,
613 234, 235, 236, 237, 252, 253, 254, 251, 229, 232, 233, 211, 212, 213,
614 214, 215, 193, 194
615};
616
617
618
619
620
621
622
623static const unsigned int pflash_3512_pins_extended[] = {
624 162, 163, 165, 166, 148, 199, 200, 201, 202, 216, 217, 218, 219, 220,
625 234, 235, 236, 237, 252, 253, 254, 251, 229, 232, 233, 211, 212, 213,
626 214, 215, 193, 194,
627
628 296, 315, 297, 279, 261, 243, 316, 298, 280, 262, 244, 317, 299, 281,
629 265,
630};
631
632
633static const unsigned int sflash_3512_pins[] = { 230, 231, 232, 233, 211 };
634
635
636static const unsigned int gpio0a_3512_pins[] = { 265 };
637
638
639static const unsigned int gpio0b_3512_pins[] = { 320, 302, 284, 266 };
640
641
642static const unsigned int gpio0c_3512_pins[] = { 248, 321, 303 };
643
644
645static const unsigned int gpio0d_3512_pins[] = { 267, 322 };
646
647
648static const unsigned int gpio0e_3512_pins[] = { 285, 304, 286, 305, 287, 268 };
649
650
651static const unsigned int gpio0f_3512_pins[] = { 269 };
652
653
654static const unsigned int gpio0g_3512_pins[] = { 249, 250 };
655
656
657static const unsigned int gpio0h_3512_pins[] = { 251, 229 };
658
659
660static const unsigned int gpio0i_3512_pins[] = { 230, 231 };
661
662
663static const unsigned int gpio0j_3512_pins[] = { 232 };
664
665
666static const unsigned int gpio0k_3512_pins[] = { 233, 211 };
667
668
669static const unsigned int gpio0l_3512_pins[] = { 212, 213, 214, 215 };
670
671
672static const unsigned int gpio0m_3512_pins[] = { 193, 194 };
673
674
675static const unsigned int gpio1a_3512_pins[] = { 162, 163, 165, 166, 148 };
676
677
678static const unsigned int gpio1b_3512_pins[] = {
679 180, 181, 182, 183, 184, 198, 255
680};
681
682
683static const unsigned int gpio1c_3512_pins[] = {
684 199, 200, 201, 202, 216, 217, 218, 219, 220, 234, 235, 236, 237,
685 252, 253, 254
686};
687
688
689static const unsigned int gpio1d_3512_pins[] = { 246, 319, 301, 283 };
690
691
692static const unsigned int gpio2a_3512_pins[] = { 315, 297, 279, 261 };
693
694
695static const unsigned int gpio2b_3512_pins[] = { 262, 244, 317, 299 };
696
697
698static const unsigned int gpio2c_3512_pins[] = {
699 17, 34, 35, 51, 52, 53, 68, 69, 71, 86, 87, 88, 89, 103, 104, 105,
700 140, 141, 142, 143, 157, 158, 159, 160
701};
702
703
704static const struct gemini_pin_group gemini_3512_pin_groups[] = {
705 {
706 .name = "gndgrp",
707 .pins = gnd_3512_pins,
708 .num_pins = ARRAY_SIZE(gnd_3512_pins),
709 },
710 {
711 .name = "dramgrp",
712 .pins = dram_3512_pins,
713 .num_pins = ARRAY_SIZE(dram_3512_pins),
714 .mask = DRAM_PADS_POWERDOWN,
715 },
716 {
717 .name = "rtcgrp",
718 .pins = rtc_3512_pins,
719 .num_pins = ARRAY_SIZE(rtc_3512_pins),
720 },
721 {
722 .name = "powergrp",
723 .pins = power_3512_pins,
724 .num_pins = ARRAY_SIZE(power_3512_pins),
725 },
726 {
727 .name = "systemgrp",
728 .pins = system_3512_pins,
729 .num_pins = ARRAY_SIZE(system_3512_pins),
730 },
731 {
732 .name = "vcontrolgrp",
733 .pins = vcontrol_3512_pins,
734 .num_pins = ARRAY_SIZE(vcontrol_3512_pins),
735 },
736 {
737 .name = "icegrp",
738 .pins = ice_3512_pins,
739 .num_pins = ARRAY_SIZE(ice_3512_pins),
740
741 },
742 {
743 .name = "idegrp",
744 .pins = ide_3512_pins,
745 .num_pins = ARRAY_SIZE(ide_3512_pins),
746
747 .value = IDE_PADS_ENABLE | NAND_PADS_DISABLE |
748 PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
749 .driving_mask = GENMASK(21, 20),
750 },
751 {
752 .name = "satagrp",
753 .pins = sata_3512_pins,
754 .num_pins = ARRAY_SIZE(sata_3512_pins),
755 },
756 {
757 .name = "usbgrp",
758 .pins = usb_3512_pins,
759 .num_pins = ARRAY_SIZE(usb_3512_pins),
760 },
761 {
762 .name = "gmii_gmac0_grp",
763 .pins = gmii_gmac0_3512_pins,
764 .num_pins = ARRAY_SIZE(gmii_gmac0_3512_pins),
765 .driving_mask = GENMASK(17, 16),
766 },
767 {
768 .name = "gmii_gmac1_grp",
769 .pins = gmii_gmac1_3512_pins,
770 .num_pins = ARRAY_SIZE(gmii_gmac1_3512_pins),
771
772 .value = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
773 .driving_mask = GENMASK(19, 18),
774 },
775 {
776 .name = "pcigrp",
777 .pins = pci_3512_pins,
778 .num_pins = ARRAY_SIZE(pci_3512_pins),
779
780 .value = PCI_PADS_ENABLE | PCI_CLK_PAD_ENABLE,
781 .driving_mask = GENMASK(23, 22),
782 },
783 {
784 .name = "lpcgrp",
785 .pins = lpc_3512_pins,
786 .num_pins = ARRAY_SIZE(lpc_3512_pins),
787
788 .mask = SSP_PADS_ENABLE,
789 .value = LPC_PADS_ENABLE | LPC_CLK_PAD_ENABLE,
790 },
791 {
792 .name = "lcdgrp",
793 .pins = lcd_3512_pins,
794 .num_pins = ARRAY_SIZE(lcd_3512_pins),
795
796 .mask = TVC_PADS_ENABLE,
797 .value = LCD_PADS_ENABLE,
798 },
799 {
800 .name = "sspgrp",
801 .pins = ssp_3512_pins,
802 .num_pins = ARRAY_SIZE(ssp_3512_pins),
803
804 .mask = LPC_PADS_ENABLE,
805 .value = SSP_PADS_ENABLE,
806 },
807 {
808 .name = "uartrxtxgrp",
809 .pins = uart_rxtx_3512_pins,
810 .num_pins = ARRAY_SIZE(uart_rxtx_3512_pins),
811
812 },
813 {
814 .name = "uartmodemgrp",
815 .pins = uart_modem_3512_pins,
816 .num_pins = ARRAY_SIZE(uart_modem_3512_pins),
817
818
819
820
821 .mask = LPC_PADS_ENABLE | SSP_PADS_ENABLE,
822 },
823 {
824 .name = "tvcgrp",
825 .pins = tvc_3512_pins,
826 .num_pins = ARRAY_SIZE(tvc_3512_pins),
827
828 .mask = LCD_PADS_ENABLE,
829 .value = TVC_PADS_ENABLE,
830 },
831 {
832 .name = "tvcclkgrp",
833 .pins = tvc_clk_3512_pins,
834 .num_pins = ARRAY_SIZE(tvc_clk_3512_pins),
835 .value = TVC_CLK_PAD_ENABLE,
836 },
837
838
839
840
841
842
843
844 {
845 .name = "nflashgrp",
846 .pins = nflash_3512_pins,
847 .num_pins = ARRAY_SIZE(nflash_3512_pins),
848
849 .mask = NAND_PADS_DISABLE | IDE_PADS_ENABLE,
850 .value = PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
851 },
852 {
853 .name = "pflashgrp",
854 .pins = pflash_3512_pins,
855 .num_pins = ARRAY_SIZE(pflash_3512_pins),
856
857 .mask = PFLASH_PADS_DISABLE | IDE_PADS_ENABLE,
858 .value = NAND_PADS_DISABLE | SFLASH_PADS_DISABLE,
859 },
860 {
861 .name = "sflashgrp",
862 .pins = sflash_3512_pins,
863 .num_pins = ARRAY_SIZE(sflash_3512_pins),
864
865 .mask = SFLASH_PADS_DISABLE | IDE_PADS_ENABLE,
866 .value = NAND_PADS_DISABLE | PFLASH_PADS_DISABLE,
867 },
868 {
869 .name = "gpio0agrp",
870 .pins = gpio0a_3512_pins,
871 .num_pins = ARRAY_SIZE(gpio0a_3512_pins),
872
873 .mask = TVC_CLK_PAD_ENABLE,
874 },
875 {
876 .name = "gpio0bgrp",
877 .pins = gpio0b_3512_pins,
878 .num_pins = ARRAY_SIZE(gpio0b_3512_pins),
879
880 .mask = TVC_PADS_ENABLE,
881 },
882 {
883 .name = "gpio0cgrp",
884 .pins = gpio0c_3512_pins,
885 .num_pins = ARRAY_SIZE(gpio0c_3512_pins),
886
887 },
888 {
889 .name = "gpio0dgrp",
890 .pins = gpio0d_3512_pins,
891 .num_pins = ARRAY_SIZE(gpio0d_3512_pins),
892
893 },
894 {
895 .name = "gpio0egrp",
896 .pins = gpio0e_3512_pins,
897 .num_pins = ARRAY_SIZE(gpio0e_3512_pins),
898
899 .mask = LPC_PADS_ENABLE | SSP_PADS_ENABLE,
900 },
901 {
902 .name = "gpio0fgrp",
903 .pins = gpio0f_3512_pins,
904 .num_pins = ARRAY_SIZE(gpio0f_3512_pins),
905
906 .mask = LCD_PADS_ENABLE,
907 },
908 {
909 .name = "gpio0ggrp",
910 .pins = gpio0g_3512_pins,
911 .num_pins = ARRAY_SIZE(gpio0g_3512_pins),
912
913 .value = NAND_PADS_DISABLE,
914 },
915 {
916 .name = "gpio0hgrp",
917 .pins = gpio0h_3512_pins,
918 .num_pins = ARRAY_SIZE(gpio0h_3512_pins),
919
920 .value = PFLASH_PADS_DISABLE,
921 },
922 {
923 .name = "gpio0igrp",
924 .pins = gpio0i_3512_pins,
925 .num_pins = ARRAY_SIZE(gpio0i_3512_pins),
926
927 .value = SFLASH_PADS_DISABLE,
928 },
929 {
930 .name = "gpio0jgrp",
931 .pins = gpio0j_3512_pins,
932 .num_pins = ARRAY_SIZE(gpio0j_3512_pins),
933
934 .value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE |
935 SFLASH_PADS_DISABLE,
936 },
937 {
938 .name = "gpio0kgrp",
939 .pins = gpio0k_3512_pins,
940 .num_pins = ARRAY_SIZE(gpio0k_3512_pins),
941
942 .mask = LCD_PADS_ENABLE,
943 .value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE |
944 SFLASH_PADS_DISABLE,
945 },
946 {
947 .name = "gpio0lgrp",
948 .pins = gpio0l_3512_pins,
949 .num_pins = ARRAY_SIZE(gpio0l_3512_pins),
950
951 .value = PFLASH_PADS_DISABLE,
952 },
953 {
954 .name = "gpio0mgrp",
955 .pins = gpio0m_3512_pins,
956 .num_pins = ARRAY_SIZE(gpio0m_3512_pins),
957
958 .value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE,
959 },
960 {
961 .name = "gpio1agrp",
962 .pins = gpio1a_3512_pins,
963 .num_pins = ARRAY_SIZE(gpio1a_3512_pins),
964
965 .mask = IDE_PADS_ENABLE,
966 .value = PFLASH_PADS_DISABLE,
967 },
968 {
969 .name = "gpio1bgrp",
970 .pins = gpio1b_3512_pins,
971 .num_pins = ARRAY_SIZE(gpio1b_3512_pins),
972
973 .mask = IDE_PADS_ENABLE,
974 },
975 {
976 .name = "gpio1cgrp",
977 .pins = gpio1c_3512_pins,
978 .num_pins = ARRAY_SIZE(gpio1c_3512_pins),
979
980 .mask = IDE_PADS_ENABLE,
981 .value = NAND_PADS_DISABLE | PFLASH_PADS_DISABLE,
982 },
983 {
984 .name = "gpio1dgrp",
985 .pins = gpio1d_3512_pins,
986 .num_pins = ARRAY_SIZE(gpio1d_3512_pins),
987
988 .mask = LCD_PADS_ENABLE | TVC_PADS_ENABLE,
989 },
990 {
991 .name = "gpio2agrp",
992 .pins = gpio2a_3512_pins,
993 .num_pins = ARRAY_SIZE(gpio2a_3512_pins),
994 .mask = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
995
996 },
997 {
998 .name = "gpio2bgrp",
999 .pins = gpio2b_3512_pins,
1000 .num_pins = ARRAY_SIZE(gpio2b_3512_pins),
1001
1002 .mask = LCD_PADS_ENABLE | GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
1003 },
1004 {
1005 .name = "gpio2cgrp",
1006 .pins = gpio2c_3512_pins,
1007 .num_pins = ARRAY_SIZE(gpio2c_3512_pins),
1008
1009 .mask = PCI_PADS_ENABLE,
1010 },
1011};
1012
1013
1014static const struct pinctrl_pin_desc gemini_3516_pins[] = {
1015
1016 PINCTRL_PIN(0, "A1 AVCC3IOHA"),
1017 PINCTRL_PIN(1, "A2 DRAM CK N"),
1018 PINCTRL_PIN(2, "A3 DRAM CK"),
1019 PINCTRL_PIN(3, "A4 DRAM DQM1"),
1020 PINCTRL_PIN(4, "A5 DRAM DQ9"),
1021 PINCTRL_PIN(5, "A6 DRAM DQ13"),
1022 PINCTRL_PIN(6, "A7 DRAM DQ1"),
1023 PINCTRL_PIN(7, "A8 DRAM DQ2"),
1024 PINCTRL_PIN(8, "A9 DRAM DQ4"),
1025 PINCTRL_PIN(9, "A10 DRAM VREF"),
1026 PINCTRL_PIN(10, "A11 DRAM DQ24"),
1027 PINCTRL_PIN(11, "A12 DRAM DQ28"),
1028 PINCTRL_PIN(12, "A13 DRAM DQ30"),
1029 PINCTRL_PIN(13, "A14 DRAM DQ18"),
1030 PINCTRL_PIN(14, "A15 DRAM DQ21"),
1031 PINCTRL_PIN(15, "A16 DRAM CAS_N"),
1032 PINCTRL_PIN(16, "A17 DRAM BA1"),
1033 PINCTRL_PIN(17, "A18 PCI INTA N"),
1034 PINCTRL_PIN(18, "A19 PCI INTB N"),
1035 PINCTRL_PIN(19, "A20 PCI INTC N"),
1036
1037 PINCTRL_PIN(20, "B1 PWR EN"),
1038 PINCTRL_PIN(21, "B2 GND"),
1039 PINCTRL_PIN(22, "B3 RTC CLKO"),
1040 PINCTRL_PIN(23, "B4 DRAM A5"),
1041 PINCTRL_PIN(24, "B5 DRAM A6"),
1042 PINCTRL_PIN(25, "B6 DRAM DQS1"),
1043 PINCTRL_PIN(26, "B7 DRAM DQ11"),
1044 PINCTRL_PIN(27, "B8 DRAM DQ0"),
1045 PINCTRL_PIN(28, "B9 DRAM DQS0"),
1046 PINCTRL_PIN(29, "B10 DRAM DQ7"),
1047 PINCTRL_PIN(30, "B11 DRAM DQS3"),
1048 PINCTRL_PIN(31, "B12 DRAM DQ27"),
1049 PINCTRL_PIN(32, "B13 DRAM DQ31"),
1050 PINCTRL_PIN(33, "B14 DRAM DQ20"),
1051 PINCTRL_PIN(34, "B15 DRAM DQS2"),
1052 PINCTRL_PIN(35, "B16 DRAM WE N"),
1053 PINCTRL_PIN(36, "B17 DRAM A10"),
1054 PINCTRL_PIN(37, "B18 DRAM A2"),
1055 PINCTRL_PIN(38, "B19 GND"),
1056 PINCTRL_PIN(39, "B20 PCI GNT0 N"),
1057
1058 PINCTRL_PIN(40, "C1 AGNDIOHA"),
1059 PINCTRL_PIN(41, "C2 XTALI"),
1060 PINCTRL_PIN(42, "C3 GND"),
1061 PINCTRL_PIN(43, "C4 RTC CLKI"),
1062 PINCTRL_PIN(44, "C5 DRAM A12"),
1063 PINCTRL_PIN(45, "C6 DRAM A11"),
1064 PINCTRL_PIN(46, "C7 DRAM DQ8"),
1065 PINCTRL_PIN(47, "C8 DRAM DQ10"),
1066 PINCTRL_PIN(48, "C9 DRAM DQ3"),
1067 PINCTRL_PIN(49, "C10 DRAM DQ6"),
1068 PINCTRL_PIN(50, "C11 DRAM DQM0"),
1069 PINCTRL_PIN(51, "C12 DRAM DQ26"),
1070 PINCTRL_PIN(52, "C13 DRAM DQ16"),
1071 PINCTRL_PIN(53, "C14 DRAM DQ22"),
1072 PINCTRL_PIN(54, "C15 DRAM DQM2"),
1073 PINCTRL_PIN(55, "C16 DRAM BA0"),
1074 PINCTRL_PIN(56, "C17 DRAM A3"),
1075 PINCTRL_PIN(57, "C18 GND"),
1076 PINCTRL_PIN(58, "C19 PCI GNT1 N"),
1077 PINCTRL_PIN(59, "C20 PCI REQ2 N"),
1078
1079 PINCTRL_PIN(60, "D1 AVCC3IOAHA"),
1080 PINCTRL_PIN(61, "D2 AVCCKHA"),
1081 PINCTRL_PIN(62, "D3 XTALO"),
1082 PINCTRL_PIN(63, "D4 GND"),
1083 PINCTRL_PIN(64, "D5 CIR RXD"),
1084 PINCTRL_PIN(65, "D6 DRAM A7"),
1085 PINCTRL_PIN(66, "D7 DRAM A4"),
1086 PINCTRL_PIN(67, "D8 DRAM A8"),
1087 PINCTRL_PIN(68, "D9 DRAM CKE"),
1088 PINCTRL_PIN(69, "D10 DRAM DQ14"),
1089 PINCTRL_PIN(70, "D11 DRAM DQ5"),
1090 PINCTRL_PIN(71, "D12 DRAM DQ25"),
1091 PINCTRL_PIN(72, "D13 DRAM DQ17"),
1092 PINCTRL_PIN(73, "D14 DRAM DQ23"),
1093 PINCTRL_PIN(74, "D15 DRAM RAS N"),
1094 PINCTRL_PIN(75, "D16 DRAM A1"),
1095 PINCTRL_PIN(76, "D17 GND"),
1096 PINCTRL_PIN(77, "D18 EXT RESET N"),
1097 PINCTRL_PIN(78, "D19 PCI REQ1 N"),
1098 PINCTRL_PIN(79, "D20 PCI REQ3 N"),
1099
1100 PINCTRL_PIN(80, "E1 VCC2IO CTRL"),
1101 PINCTRL_PIN(81, "E2 VREF CTRL"),
1102 PINCTRL_PIN(82, "E3 CIR RST N"),
1103 PINCTRL_PIN(83, "E4 PWR BTN"),
1104 PINCTRL_PIN(84, "E5 GND"),
1105 PINCTRL_PIN(85, "E6 CIR TXD"),
1106 PINCTRL_PIN(86, "E7 VCCK CTRL"),
1107 PINCTRL_PIN(87, "E8 DRAM A9"),
1108 PINCTRL_PIN(88, "E9 DRAM DQ12"),
1109 PINCTRL_PIN(89, "E10 DRAM DQ15"),
1110 PINCTRL_PIN(90, "E11 DRAM DQM3"),
1111 PINCTRL_PIN(91, "E12 DRAM DQ29"),
1112 PINCTRL_PIN(92, "E13 DRAM DQ19"),
1113 PINCTRL_PIN(93, "E14 DRAM A13"),
1114 PINCTRL_PIN(94, "E15 DRAM A0"),
1115 PINCTRL_PIN(95, "E16 GND"),
1116 PINCTRL_PIN(96, "E17 PCI INTD N"),
1117 PINCTRL_PIN(97, "E18 PCI GNT3 N"),
1118 PINCTRL_PIN(98, "E19 PCI AD29"),
1119 PINCTRL_PIN(99, "E20 PCI AD28"),
1120
1121 PINCTRL_PIN(100, "F1 AVCCKHB"),
1122 PINCTRL_PIN(101, "F2 AVCCK P"),
1123 PINCTRL_PIN(102, "F3 EBG"),
1124 PINCTRL_PIN(103, "F4 REXT"),
1125 PINCTRL_PIN(104, "F5 AVCC3IOHB"),
1126 PINCTRL_PIN(105, "F6 GND"),
1127 PINCTRL_PIN(106, "F7 VCC2IOHA 2"),
1128 PINCTRL_PIN(107, "F8 VCC2IOHA 2"),
1129 PINCTRL_PIN(108, "F9 VCC2IOHA 2"),
1130 PINCTRL_PIN(109, "F10 V1"),
1131 PINCTRL_PIN(110, "F11 V1"),
1132 PINCTRL_PIN(111, "F12 VCC2IOHA 2"),
1133 PINCTRL_PIN(112, "F13 VCC2IOHA 2"),
1134 PINCTRL_PIN(113, "F14 VCC2IOHA 2"),
1135 PINCTRL_PIN(114, "F15 GND"),
1136 PINCTRL_PIN(115, "F16 PCI CLK"),
1137 PINCTRL_PIN(116, "F17 PCI GNT2 N"),
1138 PINCTRL_PIN(117, "F18 PCI AD31"),
1139 PINCTRL_PIN(118, "F19 PCI AD26"),
1140 PINCTRL_PIN(119, "F20 PCI CBE3 N"),
1141
1142 PINCTRL_PIN(120, "G1 SATA0 RXDP"),
1143 PINCTRL_PIN(121, "G2 SATA0 RXDN"),
1144 PINCTRL_PIN(122, "G3 AGNDK 0"),
1145 PINCTRL_PIN(123, "G4 AVCCK S"),
1146 PINCTRL_PIN(124, "G5 AVCC3 S"),
1147 PINCTRL_PIN(125, "G6 VCC2IOHA 2"),
1148 PINCTRL_PIN(126, "G7 GND"),
1149 PINCTRL_PIN(127, "G8 VCC2IOHA 2"),
1150 PINCTRL_PIN(128, "G9 V1"),
1151 PINCTRL_PIN(129, "G10 V1"),
1152 PINCTRL_PIN(130, "G11 V1"),
1153 PINCTRL_PIN(131, "G12 V1"),
1154 PINCTRL_PIN(132, "G13 VCC2IOHA 2"),
1155 PINCTRL_PIN(133, "G14 GND"),
1156 PINCTRL_PIN(134, "G15 VCC3IOHA"),
1157 PINCTRL_PIN(135, "G16 PCI REQ0 N"),
1158 PINCTRL_PIN(136, "G17 PCI AD30"),
1159 PINCTRL_PIN(137, "G18 PCI AD24"),
1160 PINCTRL_PIN(138, "G19 PCI AD23"),
1161 PINCTRL_PIN(139, "G20 PCI AD21"),
1162
1163 PINCTRL_PIN(140, "H1 SATA0 TXDP"),
1164 PINCTRL_PIN(141, "H2 SATA0 TXDN"),
1165 PINCTRL_PIN(142, "H3 AGNDK 1"),
1166 PINCTRL_PIN(143, "H4 AVCCK 0"),
1167 PINCTRL_PIN(144, "H5 TEST CLKOUT"),
1168 PINCTRL_PIN(145, "H6 AGND"),
1169 PINCTRL_PIN(146, "H7 VCC2IOHA 2"),
1170 PINCTRL_PIN(147, "H8 GND"),
1171 PINCTRL_PIN(148, "H9 GND"),
1172 PINCTRL_PIN(149, "H10 GDN"),
1173 PINCTRL_PIN(150, "H11 GND"),
1174 PINCTRL_PIN(151, "H12 GND"),
1175 PINCTRL_PIN(152, "H13 GND"),
1176 PINCTRL_PIN(153, "H14 VCC3IOHA"),
1177 PINCTRL_PIN(154, "H15 VCC3IOHA"),
1178 PINCTRL_PIN(155, "H16 PCI AD27"),
1179 PINCTRL_PIN(156, "H17 PCI AD25"),
1180 PINCTRL_PIN(157, "H18 PCI AD22"),
1181 PINCTRL_PIN(158, "H19 PCI AD18"),
1182 PINCTRL_PIN(159, "H20 PCI AD17"),
1183
1184 PINCTRL_PIN(160, "J1 SATA1 TXDP"),
1185 PINCTRL_PIN(161, "J2 SATA1 TXDN"),
1186 PINCTRL_PIN(162, "J3 AGNDK 2"),
1187 PINCTRL_PIN(163, "J4 AVCCK 1"),
1188 PINCTRL_PIN(164, "J5 AGND"),
1189 PINCTRL_PIN(165, "J6 AGND"),
1190 PINCTRL_PIN(166, "J7 V1"),
1191 PINCTRL_PIN(167, "J8 GND"),
1192 PINCTRL_PIN(168, "J9 GND"),
1193 PINCTRL_PIN(169, "J10 GND"),
1194 PINCTRL_PIN(170, "J11 GND"),
1195 PINCTRL_PIN(171, "J12 GND"),
1196 PINCTRL_PIN(172, "J13 GND"),
1197 PINCTRL_PIN(173, "J14 V1"),
1198 PINCTRL_PIN(174, "J15 VCC3IOHA"),
1199 PINCTRL_PIN(175, "J16 PCI AD19"),
1200 PINCTRL_PIN(176, "J17 PCI AD20"),
1201 PINCTRL_PIN(177, "J18 PCI AD16"),
1202 PINCTRL_PIN(178, "J19 PCI CBE2 N"),
1203 PINCTRL_PIN(179, "J20 PCI FRAME N"),
1204
1205 PINCTRL_PIN(180, "K1 SATA1 RXDP"),
1206 PINCTRL_PIN(181, "K2 SATA1 RXDN"),
1207 PINCTRL_PIN(182, "K3 AGNDK 3"),
1208 PINCTRL_PIN(183, "K4 AVCCK 2"),
1209 PINCTRL_PIN(184, "K5 AGND"),
1210 PINCTRL_PIN(185, "K6 V1"),
1211 PINCTRL_PIN(186, "K7 V1"),
1212 PINCTRL_PIN(187, "K8 GND"),
1213 PINCTRL_PIN(188, "K9 GND"),
1214 PINCTRL_PIN(189, "K10 GND"),
1215 PINCTRL_PIN(190, "K11 GND"),
1216 PINCTRL_PIN(191, "K12 GND"),
1217 PINCTRL_PIN(192, "K13 GND"),
1218 PINCTRL_PIN(193, "K14 V1"),
1219 PINCTRL_PIN(194, "K15 V1"),
1220 PINCTRL_PIN(195, "K16 PCI TRDY N"),
1221 PINCTRL_PIN(196, "K17 PCI IRDY N"),
1222 PINCTRL_PIN(197, "K18 PCI DEVSEL N"),
1223 PINCTRL_PIN(198, "K19 PCI STOP N"),
1224 PINCTRL_PIN(199, "K20 PCI PAR"),
1225
1226 PINCTRL_PIN(200, "L1 IDE CS0 N"),
1227 PINCTRL_PIN(201, "L2 IDE DA0"),
1228 PINCTRL_PIN(202, "L3 AVCCK 3"),
1229 PINCTRL_PIN(203, "L4 AGND"),
1230 PINCTRL_PIN(204, "L5 IDE DIOR N"),
1231 PINCTRL_PIN(205, "L6 V1"),
1232 PINCTRL_PIN(206, "L7 V1"),
1233 PINCTRL_PIN(207, "L8 GND"),
1234 PINCTRL_PIN(208, "L9 GND"),
1235 PINCTRL_PIN(209, "L10 GND"),
1236 PINCTRL_PIN(210, "L11 GND"),
1237 PINCTRL_PIN(211, "L12 GND"),
1238 PINCTRL_PIN(212, "L13 GND"),
1239 PINCTRL_PIN(213, "L14 V1"),
1240 PINCTRL_PIN(214, "L15 V1"),
1241 PINCTRL_PIN(215, "L16 PCI AD12"),
1242 PINCTRL_PIN(216, "L17 PCI AD13"),
1243 PINCTRL_PIN(217, "L18 PCI AD14"),
1244 PINCTRL_PIN(218, "L19 PCI AD15"),
1245 PINCTRL_PIN(219, "L20 PCI CBE1 N"),
1246
1247 PINCTRL_PIN(220, "M1 IDE DA1"),
1248 PINCTRL_PIN(221, "M2 IDE CS1 N"),
1249 PINCTRL_PIN(222, "M3 IDE DA2"),
1250 PINCTRL_PIN(223, "M4 IDE DMACK N"),
1251 PINCTRL_PIN(224, "M5 IDE DD1"),
1252 PINCTRL_PIN(225, "M6 VCC3IOHA"),
1253 PINCTRL_PIN(226, "M7 V1"),
1254 PINCTRL_PIN(227, "M8 GND"),
1255 PINCTRL_PIN(228, "M9 GND"),
1256 PINCTRL_PIN(229, "M10 GND"),
1257 PINCTRL_PIN(230, "M11 GND"),
1258 PINCTRL_PIN(231, "M12 GND"),
1259 PINCTRL_PIN(232, "M13 GND"),
1260 PINCTRL_PIN(233, "M14 V1"),
1261 PINCTRL_PIN(234, "M15 VCC3IOHA"),
1262 PINCTRL_PIN(235, "M16 PCI AD7"),
1263 PINCTRL_PIN(236, "M17 PCI AD6"),
1264 PINCTRL_PIN(237, "M18 PCI AD9"),
1265 PINCTRL_PIN(238, "M19 PCI AD10"),
1266 PINCTRL_PIN(239, "M20 PCI AD11"),
1267
1268 PINCTRL_PIN(240, "N1 IDE IORDY"),
1269 PINCTRL_PIN(241, "N2 IDE INTRQ"),
1270 PINCTRL_PIN(242, "N3 IDE DIOW N"),
1271 PINCTRL_PIN(243, "N4 IDE DD15"),
1272 PINCTRL_PIN(244, "N5 IDE DMARQ"),
1273 PINCTRL_PIN(245, "N6 VCC3IOHA"),
1274 PINCTRL_PIN(246, "N7 VCC3IOHA"),
1275 PINCTRL_PIN(247, "N8 GND"),
1276 PINCTRL_PIN(248, "N9 GND"),
1277 PINCTRL_PIN(249, "N10 GND"),
1278 PINCTRL_PIN(250, "N11 GND"),
1279 PINCTRL_PIN(251, "N12 GND"),
1280 PINCTRL_PIN(252, "N13 GND"),
1281 PINCTRL_PIN(253, "N14 VCC3IOHA"),
1282 PINCTRL_PIN(254, "N15 VCC3IOHA"),
1283 PINCTRL_PIN(255, "N16 PCI CLKRUN N"),
1284 PINCTRL_PIN(256, "N17 PCI AD0"),
1285 PINCTRL_PIN(257, "N18 PCI AD4"),
1286 PINCTRL_PIN(258, "N19 PCI CBE0 N"),
1287 PINCTRL_PIN(259, "N20 PCI AD8"),
1288
1289 PINCTRL_PIN(260, "P1 IDE DD0"),
1290 PINCTRL_PIN(261, "P2 IDE DD14"),
1291 PINCTRL_PIN(262, "P3 IDE DD2"),
1292 PINCTRL_PIN(263, "P4 IDE DD4"),
1293 PINCTRL_PIN(264, "P5 IDE DD3"),
1294 PINCTRL_PIN(265, "P6 VCC3IOHA"),
1295 PINCTRL_PIN(266, "P7 GND"),
1296 PINCTRL_PIN(267, "P8 VCC2IOHA 1"),
1297 PINCTRL_PIN(268, "P9 V1"),
1298 PINCTRL_PIN(269, "P10 V1"),
1299 PINCTRL_PIN(270, "P11 V1"),
1300 PINCTRL_PIN(271, "P12 V1"),
1301 PINCTRL_PIN(272, "P13 VCC3IOHA"),
1302 PINCTRL_PIN(273, "P14 GND"),
1303 PINCTRL_PIN(274, "P15 VCC3IOHA"),
1304 PINCTRL_PIN(275, "P16 GPIO0 30"),
1305 PINCTRL_PIN(276, "P17 GPIO0 28"),
1306 PINCTRL_PIN(277, "P18 PCI AD1"),
1307 PINCTRL_PIN(278, "P19 PCI AD3"),
1308 PINCTRL_PIN(279, "P20 PCI AD5"),
1309
1310 PINCTRL_PIN(280, "R1 IDE DD13"),
1311 PINCTRL_PIN(281, "R2 IDE DD12"),
1312 PINCTRL_PIN(282, "R3 IDE DD10"),
1313 PINCTRL_PIN(283, "R4 IDE DD6"),
1314 PINCTRL_PIN(284, "R5 ICE0 IDI"),
1315 PINCTRL_PIN(285, "R6 GND"),
1316 PINCTRL_PIN(286, "R7 VCC2IOHA 1"),
1317 PINCTRL_PIN(287, "R8 VCC2IOHA 1"),
1318 PINCTRL_PIN(288, "R9 VCC2IOHA 1"),
1319 PINCTRL_PIN(289, "R10 V1"),
1320 PINCTRL_PIN(290, "R11 V1"),
1321 PINCTRL_PIN(291, "R12 VCC3IOHA"),
1322 PINCTRL_PIN(292, "R13 VCC3IOHA"),
1323 PINCTRL_PIN(293, "R14 VCC3IOHA"),
1324 PINCTRL_PIN(294, "R15 GND"),
1325 PINCTRL_PIN(295, "R16 GPIO0 23"),
1326 PINCTRL_PIN(296, "R17 GPIO0 21"),
1327 PINCTRL_PIN(297, "R18 GPIO0 26"),
1328 PINCTRL_PIN(298, "R19 GPIO0 31"),
1329 PINCTRL_PIN(299, "R20 PCI AD2"),
1330
1331 PINCTRL_PIN(300, "T1 IDE DD11"),
1332 PINCTRL_PIN(301, "T2 IDE DD5"),
1333 PINCTRL_PIN(302, "T3 IDE DD8"),
1334 PINCTRL_PIN(303, "T4 ICE0 IDO"),
1335 PINCTRL_PIN(304, "T5 GND"),
1336 PINCTRL_PIN(305, "T6 USB GNDA U20"),
1337 PINCTRL_PIN(306, "T7 GMAC0 TXD0"),
1338 PINCTRL_PIN(307, "T8 GMAC0 TXEN"),
1339 PINCTRL_PIN(308, "T9 GMAC1 TXD3"),
1340 PINCTRL_PIN(309, "T10 GMAC1 RXDV"),
1341 PINCTRL_PIN(310, "T11 GMAC1 RXD2"),
1342 PINCTRL_PIN(311, "T12 GPIO1 29"),
1343 PINCTRL_PIN(312, "T13 GPIO0 3"),
1344 PINCTRL_PIN(313, "T14 GPIO0 9"),
1345 PINCTRL_PIN(314, "T15 GPIO0 16"),
1346 PINCTRL_PIN(315, "T16 GND"),
1347 PINCTRL_PIN(316, "T17 GPIO0 14"),
1348 PINCTRL_PIN(317, "T18 GPIO0 19"),
1349 PINCTRL_PIN(318, "T19 GPIO0 27"),
1350 PINCTRL_PIN(319, "T20 GPIO0 29"),
1351
1352 PINCTRL_PIN(320, "U1 IDE DD9"),
1353 PINCTRL_PIN(321, "U2 IDE DD7"),
1354 PINCTRL_PIN(322, "U3 ICE0 ICK"),
1355 PINCTRL_PIN(323, "U4 GND"),
1356 PINCTRL_PIN(324, "U5 USB XSCO"),
1357 PINCTRL_PIN(325, "U6 GMAC0 TXD1"),
1358 PINCTRL_PIN(326, "U7 GMAC0 TXD3"),
1359 PINCTRL_PIN(327, "U8 GMAC0 TXC"),
1360 PINCTRL_PIN(328, "U9 GMAC0 RXD3"),
1361 PINCTRL_PIN(329, "U10 GMAC1 TXD0"),
1362 PINCTRL_PIN(330, "U11 GMAC1 CRS"),
1363 PINCTRL_PIN(331, "U12 EXT CLK"),
1364 PINCTRL_PIN(332, "U13 DEV DEF"),
1365 PINCTRL_PIN(333, "U14 GPIO0 0"),
1366 PINCTRL_PIN(334, "U15 GPIO0 4"),
1367 PINCTRL_PIN(335, "U16 GPIO0 10"),
1368 PINCTRL_PIN(336, "U17 GND"),
1369 PINCTRL_PIN(337, "U18 GPIO0 17"),
1370 PINCTRL_PIN(338, "U19 GPIO0 22"),
1371 PINCTRL_PIN(339, "U20 GPIO0 25"),
1372
1373 PINCTRL_PIN(340, "V1 ICE0 DBGACK"),
1374 PINCTRL_PIN(341, "V2 ICE0 DBGRQ"),
1375 PINCTRL_PIN(342, "V3 GND"),
1376 PINCTRL_PIN(343, "V4 ICE0 IRST N"),
1377 PINCTRL_PIN(344, "V5 USB XSCI"),
1378 PINCTRL_PIN(345, "V6 GMAC0 COL"),
1379 PINCTRL_PIN(346, "V7 GMAC0 TXD2"),
1380 PINCTRL_PIN(347, "V8 GMAC0 RXDV"),
1381 PINCTRL_PIN(348, "V9 GMAC0 RXD1"),
1382 PINCTRL_PIN(349, "V10 GMAC1 COL"),
1383 PINCTRL_PIN(350, "V11 GMAC1 TXC"),
1384 PINCTRL_PIN(351, "V12 GMAC1 RXD1"),
1385 PINCTRL_PIN(352, "V13 MODE SEL1"),
1386 PINCTRL_PIN(353, "V14 GPIO1 28"),
1387 PINCTRL_PIN(354, "V15 GPIO0 1"),
1388 PINCTRL_PIN(355, "V16 GPIO0 8"),
1389 PINCTRL_PIN(356, "V17 GPIO0 11"),
1390 PINCTRL_PIN(357, "V18 GND"),
1391 PINCTRL_PIN(358, "V19 GPIO0 18"),
1392 PINCTRL_PIN(359, "V20 GPIO0 24"),
1393
1394 PINCTRL_PIN(360, "W1 IDE RESET N"),
1395 PINCTRL_PIN(361, "W2 GND"),
1396 PINCTRL_PIN(362, "W3 USB0 VCCHSRT"),
1397 PINCTRL_PIN(363, "W4 USB0 DP"),
1398 PINCTRL_PIN(364, "W5 USB VCCA U20"),
1399 PINCTRL_PIN(365, "W6 USB1 DP"),
1400 PINCTRL_PIN(366, "W7 USB1 GNDHSRT"),
1401 PINCTRL_PIN(367, "W8 GMAC0 RXD0"),
1402 PINCTRL_PIN(368, "W9 GMAC0 CRS"),
1403 PINCTRL_PIN(369, "W10 GMAC1 TXD2"),
1404 PINCTRL_PIN(370, "W11 GMAC1 TXEN"),
1405 PINCTRL_PIN(371, "W12 GMAC1 RXD3"),
1406 PINCTRL_PIN(372, "W13 MODE SEL0"),
1407 PINCTRL_PIN(373, "W14 MODE SEL3"),
1408 PINCTRL_PIN(374, "W15 GPIO1 31"),
1409 PINCTRL_PIN(375, "W16 GPIO0 5"),
1410 PINCTRL_PIN(376, "W17 GPIO0 7"),
1411 PINCTRL_PIN(377, "W18 GPIO0 12"),
1412 PINCTRL_PIN(378, "W19 GND"),
1413 PINCTRL_PIN(379, "W20 GPIO0 20"),
1414
1415 PINCTRL_PIN(380, "Y1 ICE0 IMS"),
1416 PINCTRL_PIN(381, "Y2 USB0 GNDHSRT"),
1417 PINCTRL_PIN(382, "Y3 USB0 DM"),
1418 PINCTRL_PIN(383, "Y4 USB RREF"),
1419 PINCTRL_PIN(384, "Y5 USB1 DM"),
1420 PINCTRL_PIN(385, "Y6 USB1 VCCHSRT"),
1421 PINCTRL_PIN(386, "Y7 GMAC0 RXC"),
1422 PINCTRL_PIN(387, "Y8 GMAC0 RXD2"),
1423 PINCTRL_PIN(388, "Y9 REF CLK"),
1424 PINCTRL_PIN(389, "Y10 GMAC1 TXD1"),
1425 PINCTRL_PIN(390, "Y11 GMAC1 RXC"),
1426 PINCTRL_PIN(391, "Y12 GMAC1 RXD0"),
1427 PINCTRL_PIN(392, "Y13 M30 CLK"),
1428 PINCTRL_PIN(393, "Y14 MODE SEL2"),
1429 PINCTRL_PIN(394, "Y15 GPIO1 30"),
1430 PINCTRL_PIN(395, "Y16 GPIO0 2"),
1431 PINCTRL_PIN(396, "Y17 GPIO0 6"),
1432 PINCTRL_PIN(397, "Y18 SYS RESET N"),
1433 PINCTRL_PIN(398, "Y19 GPIO0 13"),
1434 PINCTRL_PIN(399, "Y20 GPIO0 15"),
1435};
1436
1437
1438static const unsigned int gnd_3516_pins[] = {
1439 21, 38, 42, 57, 63, 76, 84, 95, 105, 114, 126, 133, 147, 148, 149, 150,
1440 151, 152, 167, 168, 169, 170, 171, 172, 187, 188, 189, 190, 191, 192,
1441 207, 208, 209, 210, 211, 212, 227, 228, 229, 230, 231, 232, 247, 248,
1442 249, 250, 251, 252, 266, 273, 285, 294, 304, 315, 323, 336, 342, 357,
1443 361, 378
1444};
1445
1446static const unsigned int dram_3516_pins[] = {
1447 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 23, 24, 25, 26,
1448 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 44, 45, 46, 47, 48, 49, 50,
1449 51, 52, 53, 54, 55, 56, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
1450 87, 88, 89, 90, 91, 92, 93, 94
1451};
1452
1453static const unsigned int rtc_3516_pins[] = { 0, 43, 22 };
1454
1455static const unsigned int power_3516_pins[] = { 20, 83, 40, 41, 60, 61, 62 };
1456
1457static const unsigned int cir_3516_pins[] = { 85, 64, 82 };
1458
1459static const unsigned int system_3516_pins[] = {
1460 332, 392, 372, 373, 393, 352, 331, 388, 397, 77
1461};
1462
1463static const unsigned int vcontrol_3516_pins[] = { 86, 81, 80 };
1464
1465static const unsigned int ice_3516_pins[] = { 340, 341, 303, 322, 380, 284, 343 };
1466
1467static const unsigned int ide_3516_pins[] = {
1468 200, 201, 204, 220, 221, 222, 223, 224, 240, 241, 242, 243, 244, 260,
1469 261, 262, 263, 264, 280, 281, 282, 283, 300, 301, 302, 320, 321, 360
1470};
1471
1472static const unsigned int sata_3516_pins[] = {
1473 100, 101, 102, 103, 104, 120, 121, 122, 123, 124, 140, 141, 142, 143,
1474 144, 160, 161, 162, 163, 180, 181, 182, 183, 202
1475};
1476
1477static const unsigned int usb_3516_pins[] = {
1478 305, 324, 344, 362, 363, 364, 365, 366, 381, 382, 383, 384, 385
1479};
1480
1481
1482static const unsigned int gmii_gmac0_3516_pins[] = {
1483 306, 307, 325, 326, 327, 328, 345, 346, 347, 348, 367, 368, 386, 387
1484};
1485
1486static const unsigned int gmii_gmac1_3516_pins[] = {
1487 308, 309, 310, 329, 330, 349, 350, 351, 369, 370, 371, 389, 390, 391
1488};
1489
1490static const unsigned int pci_3516_pins[] = {
1491 17, 18, 19, 39, 58, 59, 78, 79, 96, 97, 98, 99, 115, 116, 117, 118,
1492 119, 135, 136, 137, 138, 139, 155, 156, 157, 158, 159, 175, 176, 177,
1493 178, 179, 195, 196, 197, 198, 199, 215, 216, 217, 218, 219, 235, 236,
1494 237, 238, 239, 255, 256, 257, 258, 259, 277, 278, 279, 299
1495};
1496
1497
1498
1499
1500
1501static const unsigned int lpc_3516_pins[] = {
1502 355,
1503 356,
1504 377,
1505 398,
1506 316,
1507 399,
1508};
1509
1510
1511static const unsigned int lcd_3516_pins[] = {
1512 391, 351, 310, 371, 353, 311, 394, 374, 314, 359, 339
1513};
1514
1515static const unsigned int ssp_3516_pins[] = {
1516 355,
1517 356,
1518 377,
1519 398,
1520 316,
1521 399,
1522};
1523
1524static const unsigned int uart_rxtx_3516_pins[] = {
1525 313,
1526 335,
1527};
1528
1529static const unsigned int uart_modem_3516_pins[] = {
1530 355,
1531 356,
1532 377,
1533 398,
1534 316,
1535 399,
1536};
1537
1538static const unsigned int tvc_3516_pins[] = {
1539 353,
1540 311,
1541 394,
1542 374,
1543 354,
1544 395,
1545 312,
1546 334,
1547};
1548
1549static const unsigned int tvc_clk_3516_pins[] = {
1550 333,
1551};
1552
1553
1554static const unsigned int nflash_3516_pins[] = {
1555 243, 260, 261, 224, 280, 262, 281, 264, 300, 263, 282, 301, 320, 283,
1556 302, 321, 337, 358, 295, 359, 339, 275, 298
1557};
1558
1559
1560static const unsigned int pflash_3516_pins[] = {
1561 221, 200, 222, 201, 220, 243, 260, 261, 224, 280, 262, 281, 264, 300,
1562 263, 282, 301, 320, 283, 302, 321, 317, 379, 295, 359, 339, 297, 318,
1563 276, 319, 275, 298
1564};
1565
1566
1567
1568
1569
1570
1571
1572static const unsigned int pflash_3516_pins_extended[] = {
1573 221, 200, 222, 201, 220, 243, 260, 261, 224, 280, 262, 281, 264, 300,
1574 263, 282, 301, 320, 283, 302, 321, 317, 379, 295, 359, 339, 297, 318,
1575 276, 319, 275, 298,
1576
1577 349, 308, 369, 389, 329, 350, 370, 309, 390, 391, 351, 310, 371, 330,
1578 333
1579};
1580
1581
1582static const unsigned int sflash_3516_pins[] = { 296, 338, 295, 359, 339 };
1583
1584
1585static const unsigned int gpio0a_3516_pins[] = { 354, 395, 312, 334 };
1586
1587
1588static const unsigned int gpio0b_3516_pins[] = { 375, 396, 376 };
1589
1590
1591static const unsigned int gpio0c_3516_pins[] = { 355, 356, 377, 398, 316, 399 };
1592
1593
1594static const unsigned int gpio0d_3516_pins[] = { 313, 335 };
1595
1596
1597static const unsigned int gpio0e_3516_pins[] = { 314 };
1598
1599
1600static const unsigned int gpio0f_3516_pins[] = { 337, 358 };
1601
1602
1603static const unsigned int gpio0g_3516_pins[] = { 317, 379, 297, 318, 276, 319 };
1604
1605
1606static const unsigned int gpio0h_3516_pins[] = { 296, 338 };
1607
1608
1609static const unsigned int gpio0i_3516_pins[] = { 295 };
1610
1611
1612static const unsigned int gpio0j_3516_pins[] = { 359, 339 };
1613
1614
1615static const unsigned int gpio0k_3516_pins[] = { 275, 298 };
1616
1617
1618static const unsigned int gpio0l_3516_pins[] = { 333 };
1619
1620
1621static const unsigned int gpio1a_3516_pins[] = { 221, 200, 222, 201, 220 };
1622
1623
1624static const unsigned int gpio1b_3516_pins[] = { 241, 223, 240, 204, 242, 244, 360 };
1625
1626
1627static const unsigned int gpio1c_3516_pins[] = {
1628 243, 260, 261, 224, 280, 262, 281, 264, 300, 263, 282, 301, 320, 283,
1629 302, 321
1630};
1631
1632
1633static const unsigned int gpio1d_3516_pins[] = { 353, 311, 394, 374 };
1634
1635
1636static const unsigned int gpio2a_3516_pins[] = { 308, 369, 389, 329 };
1637
1638
1639static const unsigned int gpio2b_3516_pins[] = { 391, 351, 310, 371 };
1640
1641
1642static const unsigned int gpio2c_3516_pins[] = {
1643 259, 237, 238, 239, 215, 216, 217, 218, 177, 159, 158, 175, 176, 139,
1644 157, 138, 137, 156, 118, 155, 99, 98, 136, 117
1645};
1646
1647
1648static const struct gemini_pin_group gemini_3516_pin_groups[] = {
1649 {
1650 .name = "gndgrp",
1651 .pins = gnd_3516_pins,
1652 .num_pins = ARRAY_SIZE(gnd_3516_pins),
1653 },
1654 {
1655 .name = "dramgrp",
1656 .pins = dram_3516_pins,
1657 .num_pins = ARRAY_SIZE(dram_3516_pins),
1658 .mask = DRAM_PADS_POWERDOWN,
1659 },
1660 {
1661 .name = "rtcgrp",
1662 .pins = rtc_3516_pins,
1663 .num_pins = ARRAY_SIZE(rtc_3516_pins),
1664 },
1665 {
1666 .name = "powergrp",
1667 .pins = power_3516_pins,
1668 .num_pins = ARRAY_SIZE(power_3516_pins),
1669 },
1670 {
1671 .name = "cirgrp",
1672 .pins = cir_3516_pins,
1673 .num_pins = ARRAY_SIZE(cir_3516_pins),
1674 },
1675 {
1676 .name = "systemgrp",
1677 .pins = system_3516_pins,
1678 .num_pins = ARRAY_SIZE(system_3516_pins),
1679 },
1680 {
1681 .name = "vcontrolgrp",
1682 .pins = vcontrol_3516_pins,
1683 .num_pins = ARRAY_SIZE(vcontrol_3516_pins),
1684 },
1685 {
1686 .name = "icegrp",
1687 .pins = ice_3516_pins,
1688 .num_pins = ARRAY_SIZE(ice_3516_pins),
1689
1690 },
1691 {
1692 .name = "idegrp",
1693 .pins = ide_3516_pins,
1694 .num_pins = ARRAY_SIZE(ide_3516_pins),
1695
1696 .value = IDE_PADS_ENABLE | NAND_PADS_DISABLE |
1697 PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
1698 .driving_mask = GENMASK(21, 20),
1699 },
1700 {
1701 .name = "satagrp",
1702 .pins = sata_3516_pins,
1703 .num_pins = ARRAY_SIZE(sata_3516_pins),
1704 },
1705 {
1706 .name = "usbgrp",
1707 .pins = usb_3516_pins,
1708 .num_pins = ARRAY_SIZE(usb_3516_pins),
1709 },
1710 {
1711 .name = "gmii_gmac0_grp",
1712 .pins = gmii_gmac0_3516_pins,
1713 .num_pins = ARRAY_SIZE(gmii_gmac0_3516_pins),
1714 .mask = GEMINI_GMAC_IOSEL_MASK,
1715 .driving_mask = GENMASK(17, 16),
1716 },
1717 {
1718 .name = "gmii_gmac1_grp",
1719 .pins = gmii_gmac1_3516_pins,
1720 .num_pins = ARRAY_SIZE(gmii_gmac1_3516_pins),
1721
1722 .mask = GEMINI_GMAC_IOSEL_MASK,
1723 .value = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
1724 .driving_mask = GENMASK(19, 18),
1725 },
1726 {
1727 .name = "pcigrp",
1728 .pins = pci_3516_pins,
1729 .num_pins = ARRAY_SIZE(pci_3516_pins),
1730
1731 .value = PCI_PADS_ENABLE | PCI_CLK_PAD_ENABLE,
1732 .driving_mask = GENMASK(23, 22),
1733 },
1734 {
1735 .name = "lpcgrp",
1736 .pins = lpc_3516_pins,
1737 .num_pins = ARRAY_SIZE(lpc_3516_pins),
1738
1739 .mask = SSP_PADS_ENABLE,
1740 .value = LPC_PADS_ENABLE | LPC_CLK_PAD_ENABLE,
1741 },
1742 {
1743 .name = "lcdgrp",
1744 .pins = lcd_3516_pins,
1745 .num_pins = ARRAY_SIZE(lcd_3516_pins),
1746 .mask = TVC_PADS_ENABLE,
1747 .value = LCD_PADS_ENABLE,
1748 },
1749 {
1750 .name = "sspgrp",
1751 .pins = ssp_3516_pins,
1752 .num_pins = ARRAY_SIZE(ssp_3516_pins),
1753
1754 .mask = LPC_PADS_ENABLE,
1755 .value = SSP_PADS_ENABLE,
1756 },
1757 {
1758 .name = "uartrxtxgrp",
1759 .pins = uart_rxtx_3516_pins,
1760 .num_pins = ARRAY_SIZE(uart_rxtx_3516_pins),
1761
1762 },
1763 {
1764 .name = "uartmodemgrp",
1765 .pins = uart_modem_3516_pins,
1766 .num_pins = ARRAY_SIZE(uart_modem_3516_pins),
1767
1768
1769
1770
1771 .mask = LPC_PADS_ENABLE | SSP_PADS_ENABLE,
1772 },
1773 {
1774 .name = "tvcgrp",
1775 .pins = tvc_3516_pins,
1776 .num_pins = ARRAY_SIZE(tvc_3516_pins),
1777
1778 .mask = LCD_PADS_ENABLE,
1779 .value = TVC_PADS_ENABLE,
1780 },
1781 {
1782 .name = "tvcclkgrp",
1783 .pins = tvc_clk_3516_pins,
1784 .num_pins = ARRAY_SIZE(tvc_clk_3516_pins),
1785 .value = TVC_CLK_PAD_ENABLE,
1786 },
1787
1788
1789
1790
1791
1792
1793
1794 {
1795 .name = "nflashgrp",
1796 .pins = nflash_3516_pins,
1797 .num_pins = ARRAY_SIZE(nflash_3516_pins),
1798
1799 .mask = NAND_PADS_DISABLE | IDE_PADS_ENABLE,
1800 .value = PFLASH_PADS_DISABLE | SFLASH_PADS_DISABLE,
1801 },
1802 {
1803 .name = "pflashgrp",
1804 .pins = pflash_3516_pins,
1805 .num_pins = ARRAY_SIZE(pflash_3516_pins),
1806
1807 .mask = PFLASH_PADS_DISABLE | IDE_PADS_ENABLE,
1808 .value = NAND_PADS_DISABLE | SFLASH_PADS_DISABLE,
1809 },
1810 {
1811 .name = "sflashgrp",
1812 .pins = sflash_3516_pins,
1813 .num_pins = ARRAY_SIZE(sflash_3516_pins),
1814
1815 .mask = SFLASH_PADS_DISABLE | IDE_PADS_ENABLE,
1816 .value = NAND_PADS_DISABLE | PFLASH_PADS_DISABLE,
1817 },
1818 {
1819 .name = "gpio0agrp",
1820 .pins = gpio0a_3516_pins,
1821 .num_pins = ARRAY_SIZE(gpio0a_3516_pins),
1822
1823 .mask = TVC_PADS_ENABLE,
1824 },
1825 {
1826 .name = "gpio0bgrp",
1827 .pins = gpio0b_3516_pins,
1828 .num_pins = ARRAY_SIZE(gpio0b_3516_pins),
1829
1830 },
1831 {
1832 .name = "gpio0cgrp",
1833 .pins = gpio0c_3516_pins,
1834 .num_pins = ARRAY_SIZE(gpio0c_3516_pins),
1835
1836 .mask = LPC_PADS_ENABLE | SSP_PADS_ENABLE,
1837 },
1838 {
1839 .name = "gpio0dgrp",
1840 .pins = gpio0d_3516_pins,
1841 .num_pins = ARRAY_SIZE(gpio0d_3516_pins),
1842
1843 },
1844 {
1845 .name = "gpio0egrp",
1846 .pins = gpio0e_3516_pins,
1847 .num_pins = ARRAY_SIZE(gpio0e_3516_pins),
1848
1849 .mask = LCD_PADS_ENABLE,
1850 },
1851 {
1852 .name = "gpio0fgrp",
1853 .pins = gpio0f_3516_pins,
1854 .num_pins = ARRAY_SIZE(gpio0f_3516_pins),
1855
1856 .value = NAND_PADS_DISABLE,
1857 },
1858 {
1859 .name = "gpio0ggrp",
1860 .pins = gpio0g_3516_pins,
1861 .num_pins = ARRAY_SIZE(gpio0g_3516_pins),
1862
1863 .value = PFLASH_PADS_DISABLE,
1864 },
1865 {
1866 .name = "gpio0hgrp",
1867 .pins = gpio0h_3516_pins,
1868 .num_pins = ARRAY_SIZE(gpio0h_3516_pins),
1869
1870 .value = SFLASH_PADS_DISABLE,
1871 },
1872 {
1873 .name = "gpio0igrp",
1874 .pins = gpio0i_3516_pins,
1875 .num_pins = ARRAY_SIZE(gpio0i_3516_pins),
1876
1877 .value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE |
1878 SFLASH_PADS_DISABLE,
1879 },
1880 {
1881 .name = "gpio0jgrp",
1882 .pins = gpio0j_3516_pins,
1883 .num_pins = ARRAY_SIZE(gpio0j_3516_pins),
1884
1885 .mask = LCD_PADS_ENABLE,
1886 .value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE |
1887 SFLASH_PADS_DISABLE,
1888 },
1889 {
1890 .name = "gpio0kgrp",
1891 .pins = gpio0k_3516_pins,
1892 .num_pins = ARRAY_SIZE(gpio0k_3516_pins),
1893
1894 .value = PFLASH_PADS_DISABLE | NAND_PADS_DISABLE,
1895 },
1896 {
1897 .name = "gpio0lgrp",
1898 .pins = gpio0l_3516_pins,
1899 .num_pins = ARRAY_SIZE(gpio0l_3516_pins),
1900
1901 .mask = TVC_CLK_PAD_ENABLE,
1902 },
1903 {
1904 .name = "gpio1agrp",
1905 .pins = gpio1a_3516_pins,
1906 .num_pins = ARRAY_SIZE(gpio1a_3516_pins),
1907
1908 .mask = IDE_PADS_ENABLE,
1909 .value = PFLASH_PADS_DISABLE,
1910 },
1911 {
1912 .name = "gpio1bgrp",
1913 .pins = gpio1b_3516_pins,
1914 .num_pins = ARRAY_SIZE(gpio1b_3516_pins),
1915
1916 .mask = IDE_PADS_ENABLE,
1917 },
1918 {
1919 .name = "gpio1cgrp",
1920 .pins = gpio1c_3516_pins,
1921 .num_pins = ARRAY_SIZE(gpio1c_3516_pins),
1922
1923 .mask = IDE_PADS_ENABLE,
1924 .value = NAND_PADS_DISABLE | PFLASH_PADS_DISABLE,
1925 },
1926 {
1927 .name = "gpio1dgrp",
1928 .pins = gpio1d_3516_pins,
1929 .num_pins = ARRAY_SIZE(gpio1d_3516_pins),
1930
1931 .mask = TVC_PADS_ENABLE,
1932 },
1933 {
1934 .name = "gpio2agrp",
1935 .pins = gpio2a_3516_pins,
1936 .num_pins = ARRAY_SIZE(gpio2a_3516_pins),
1937 .mask = GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
1938
1939 },
1940 {
1941 .name = "gpio2bgrp",
1942 .pins = gpio2b_3516_pins,
1943 .num_pins = ARRAY_SIZE(gpio2b_3516_pins),
1944
1945 .mask = LCD_PADS_ENABLE | GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII,
1946 },
1947 {
1948 .name = "gpio2cgrp",
1949 .pins = gpio2c_3516_pins,
1950 .num_pins = ARRAY_SIZE(gpio2c_3516_pins),
1951
1952 .mask = PCI_PADS_ENABLE,
1953 },
1954};
1955
1956static int gemini_get_groups_count(struct pinctrl_dev *pctldev)
1957{
1958 struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1959
1960 if (pmx->is_3512)
1961 return ARRAY_SIZE(gemini_3512_pin_groups);
1962 if (pmx->is_3516)
1963 return ARRAY_SIZE(gemini_3516_pin_groups);
1964 return 0;
1965}
1966
1967static const char *gemini_get_group_name(struct pinctrl_dev *pctldev,
1968 unsigned int selector)
1969{
1970 struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1971
1972 if (pmx->is_3512)
1973 return gemini_3512_pin_groups[selector].name;
1974 if (pmx->is_3516)
1975 return gemini_3516_pin_groups[selector].name;
1976 return NULL;
1977}
1978
1979static int gemini_get_group_pins(struct pinctrl_dev *pctldev,
1980 unsigned int selector,
1981 const unsigned int **pins,
1982 unsigned int *num_pins)
1983{
1984 struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1985
1986
1987 if (pmx->flash_pin &&
1988 pmx->is_3512 &&
1989 !strcmp(gemini_3512_pin_groups[selector].name, "pflashgrp")) {
1990 *pins = pflash_3512_pins_extended;
1991 *num_pins = ARRAY_SIZE(pflash_3512_pins_extended);
1992 return 0;
1993 }
1994 if (pmx->flash_pin &&
1995 pmx->is_3516 &&
1996 !strcmp(gemini_3516_pin_groups[selector].name, "pflashgrp")) {
1997 *pins = pflash_3516_pins_extended;
1998 *num_pins = ARRAY_SIZE(pflash_3516_pins_extended);
1999 return 0;
2000 }
2001 if (pmx->is_3512) {
2002 *pins = gemini_3512_pin_groups[selector].pins;
2003 *num_pins = gemini_3512_pin_groups[selector].num_pins;
2004 }
2005 if (pmx->is_3516) {
2006 *pins = gemini_3516_pin_groups[selector].pins;
2007 *num_pins = gemini_3516_pin_groups[selector].num_pins;
2008 }
2009 return 0;
2010}
2011
2012static void gemini_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
2013 unsigned int offset)
2014{
2015 seq_printf(s, " " DRIVER_NAME);
2016}
2017
2018static const struct pinctrl_ops gemini_pctrl_ops = {
2019 .get_groups_count = gemini_get_groups_count,
2020 .get_group_name = gemini_get_group_name,
2021 .get_group_pins = gemini_get_group_pins,
2022 .pin_dbg_show = gemini_pin_dbg_show,
2023 .dt_node_to_map = pinconf_generic_dt_node_to_map_all,
2024 .dt_free_map = pinconf_generic_dt_free_map,
2025};
2026
2027
2028
2029
2030
2031
2032struct gemini_pmx_func {
2033 const char *name;
2034 const char * const *groups;
2035 const unsigned int num_groups;
2036};
2037
2038static const char * const dramgrps[] = { "dramgrp" };
2039static const char * const rtcgrps[] = { "rtcgrp" };
2040static const char * const powergrps[] = { "powergrp" };
2041static const char * const cirgrps[] = { "cirgrp" };
2042static const char * const systemgrps[] = { "systemgrp" };
2043static const char * const vcontrolgrps[] = { "vcontrolgrp" };
2044static const char * const icegrps[] = { "icegrp" };
2045static const char * const idegrps[] = { "idegrp" };
2046static const char * const satagrps[] = { "satagrp" };
2047static const char * const usbgrps[] = { "usbgrp" };
2048static const char * const gmiigrps[] = { "gmii_gmac0_grp", "gmii_gmac1_grp" };
2049static const char * const pcigrps[] = { "pcigrp" };
2050static const char * const lpcgrps[] = { "lpcgrp" };
2051static const char * const lcdgrps[] = { "lcdgrp" };
2052static const char * const sspgrps[] = { "sspgrp" };
2053static const char * const uartgrps[] = { "uartrxtxgrp", "uartmodemgrp" };
2054static const char * const tvcgrps[] = { "tvcgrp" };
2055static const char * const nflashgrps[] = { "nflashgrp" };
2056static const char * const pflashgrps[] = { "pflashgrp", "pflashextgrp" };
2057static const char * const sflashgrps[] = { "sflashgrp" };
2058static const char * const gpio0grps[] = { "gpio0agrp", "gpio0bgrp", "gpio0cgrp",
2059 "gpio0dgrp", "gpio0egrp", "gpio0fgrp",
2060 "gpio0ggrp", "gpio0hgrp", "gpio0igrp",
2061 "gpio0jgrp", "gpio0kgrp", "gpio0lgrp",
2062 "gpio0mgrp" };
2063static const char * const gpio1grps[] = { "gpio1agrp", "gpio1bgrp", "gpio1cgrp",
2064 "gpio1dgrp" };
2065static const char * const gpio2grps[] = { "gpio2agrp", "gpio2bgrp", "gpio2cgrp" };
2066
2067static const struct gemini_pmx_func gemini_pmx_functions[] = {
2068 {
2069 .name = "dram",
2070 .groups = dramgrps,
2071 .num_groups = ARRAY_SIZE(idegrps),
2072 },
2073 {
2074 .name = "rtc",
2075 .groups = rtcgrps,
2076 .num_groups = ARRAY_SIZE(rtcgrps),
2077 },
2078 {
2079 .name = "power",
2080 .groups = powergrps,
2081 .num_groups = ARRAY_SIZE(powergrps),
2082 },
2083 {
2084
2085 .name = "cir",
2086 .groups = cirgrps,
2087 .num_groups = ARRAY_SIZE(cirgrps),
2088 },
2089 {
2090 .name = "system",
2091 .groups = systemgrps,
2092 .num_groups = ARRAY_SIZE(systemgrps),
2093 },
2094 {
2095 .name = "vcontrol",
2096 .groups = vcontrolgrps,
2097 .num_groups = ARRAY_SIZE(vcontrolgrps),
2098 },
2099 {
2100 .name = "ice",
2101 .groups = icegrps,
2102 .num_groups = ARRAY_SIZE(icegrps),
2103 },
2104 {
2105 .name = "ide",
2106 .groups = idegrps,
2107 .num_groups = ARRAY_SIZE(idegrps),
2108 },
2109 {
2110 .name = "sata",
2111 .groups = satagrps,
2112 .num_groups = ARRAY_SIZE(satagrps),
2113 },
2114 {
2115 .name = "usb",
2116 .groups = usbgrps,
2117 .num_groups = ARRAY_SIZE(usbgrps),
2118 },
2119 {
2120 .name = "gmii",
2121 .groups = gmiigrps,
2122 .num_groups = ARRAY_SIZE(gmiigrps),
2123 },
2124 {
2125 .name = "pci",
2126 .groups = pcigrps,
2127 .num_groups = ARRAY_SIZE(pcigrps),
2128 },
2129 {
2130 .name = "lpc",
2131 .groups = lpcgrps,
2132 .num_groups = ARRAY_SIZE(lpcgrps),
2133 },
2134 {
2135 .name = "lcd",
2136 .groups = lcdgrps,
2137 .num_groups = ARRAY_SIZE(lcdgrps),
2138 },
2139 {
2140 .name = "ssp",
2141 .groups = sspgrps,
2142 .num_groups = ARRAY_SIZE(sspgrps),
2143 },
2144 {
2145 .name = "uart",
2146 .groups = uartgrps,
2147 .num_groups = ARRAY_SIZE(uartgrps),
2148 },
2149 {
2150 .name = "tvc",
2151 .groups = tvcgrps,
2152 .num_groups = ARRAY_SIZE(tvcgrps),
2153 },
2154 {
2155 .name = "nflash",
2156 .groups = nflashgrps,
2157 .num_groups = ARRAY_SIZE(nflashgrps),
2158 },
2159 {
2160 .name = "pflash",
2161 .groups = pflashgrps,
2162 .num_groups = ARRAY_SIZE(pflashgrps),
2163 },
2164 {
2165 .name = "sflash",
2166 .groups = sflashgrps,
2167 .num_groups = ARRAY_SIZE(sflashgrps),
2168 },
2169 {
2170 .name = "gpio0",
2171 .groups = gpio0grps,
2172 .num_groups = ARRAY_SIZE(gpio0grps),
2173 },
2174 {
2175 .name = "gpio1",
2176 .groups = gpio1grps,
2177 .num_groups = ARRAY_SIZE(gpio1grps),
2178 },
2179 {
2180 .name = "gpio2",
2181 .groups = gpio2grps,
2182 .num_groups = ARRAY_SIZE(gpio2grps),
2183 },
2184};
2185
2186
2187static int gemini_pmx_set_mux(struct pinctrl_dev *pctldev,
2188 unsigned int selector,
2189 unsigned int group)
2190{
2191 struct gemini_pmx *pmx;
2192 const struct gemini_pmx_func *func;
2193 const struct gemini_pin_group *grp;
2194 u32 before, after, expected;
2195 unsigned long tmp;
2196 int i;
2197
2198 pmx = pinctrl_dev_get_drvdata(pctldev);
2199
2200 func = &gemini_pmx_functions[selector];
2201 if (pmx->is_3512)
2202 grp = &gemini_3512_pin_groups[group];
2203 else if (pmx->is_3516)
2204 grp = &gemini_3516_pin_groups[group];
2205 else {
2206 dev_err(pmx->dev, "invalid SoC type\n");
2207 return -ENODEV;
2208 }
2209
2210 dev_dbg(pmx->dev,
2211 "ACTIVATE function \"%s\" with group \"%s\"\n",
2212 func->name, grp->name);
2213
2214 regmap_read(pmx->map, GLOBAL_MISC_CTRL, &before);
2215 regmap_update_bits(pmx->map, GLOBAL_MISC_CTRL,
2216 grp->mask | grp->value,
2217 grp->value);
2218 regmap_read(pmx->map, GLOBAL_MISC_CTRL, &after);
2219
2220
2221 before &= PADS_MASK;
2222 after &= PADS_MASK;
2223 expected = before &= ~grp->mask;
2224 expected |= grp->value;
2225 expected &= PADS_MASK;
2226
2227
2228 tmp = grp->mask;
2229 for_each_set_bit(i, &tmp, PADS_MAXBIT) {
2230 bool enabled = !(i > 3);
2231
2232
2233 if (after & BIT(i)) {
2234 dev_err(pmx->dev,
2235 "pin group %s could not be %s: "
2236 "probably a hardware limitation\n",
2237 gemini_padgroups[i],
2238 enabled ? "enabled" : "disabled");
2239 dev_err(pmx->dev,
2240 "GLOBAL MISC CTRL before: %08x, after %08x, expected %08x\n",
2241 before, after, expected);
2242 } else {
2243 dev_dbg(pmx->dev,
2244 "padgroup %s %s\n",
2245 gemini_padgroups[i],
2246 enabled ? "enabled" : "disabled");
2247 }
2248 }
2249
2250 tmp = grp->value;
2251 for_each_set_bit(i, &tmp, PADS_MAXBIT) {
2252 bool enabled = (i > 3);
2253
2254
2255 if (!(after & BIT(i))) {
2256 dev_err(pmx->dev,
2257 "pin group %s could not be %s: "
2258 "probably a hardware limitation\n",
2259 gemini_padgroups[i],
2260 enabled ? "enabled" : "disabled");
2261 dev_err(pmx->dev,
2262 "GLOBAL MISC CTRL before: %08x, after %08x, expected %08x\n",
2263 before, after, expected);
2264 } else {
2265 dev_dbg(pmx->dev,
2266 "padgroup %s %s\n",
2267 gemini_padgroups[i],
2268 enabled ? "enabled" : "disabled");
2269 }
2270 }
2271
2272 return 0;
2273}
2274
2275static int gemini_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
2276{
2277 return ARRAY_SIZE(gemini_pmx_functions);
2278}
2279
2280static const char *gemini_pmx_get_func_name(struct pinctrl_dev *pctldev,
2281 unsigned int selector)
2282{
2283 return gemini_pmx_functions[selector].name;
2284}
2285
2286static int gemini_pmx_get_groups(struct pinctrl_dev *pctldev,
2287 unsigned int selector,
2288 const char * const **groups,
2289 unsigned int * const num_groups)
2290{
2291 *groups = gemini_pmx_functions[selector].groups;
2292 *num_groups = gemini_pmx_functions[selector].num_groups;
2293 return 0;
2294}
2295
2296static const struct pinmux_ops gemini_pmx_ops = {
2297 .get_functions_count = gemini_pmx_get_funcs_count,
2298 .get_function_name = gemini_pmx_get_func_name,
2299 .get_function_groups = gemini_pmx_get_groups,
2300 .set_mux = gemini_pmx_set_mux,
2301};
2302
2303#define GEMINI_CFGPIN(_n, _r, _lb, _hb) { \
2304 .pin = _n, \
2305 .reg = _r, \
2306 .mask = GENMASK(_hb, _lb) \
2307}
2308
2309static const struct gemini_pin_conf gemini_confs_3512[] = {
2310 GEMINI_CFGPIN(259, GLOBAL_GMAC_CTRL_SKEW, 0, 3),
2311 GEMINI_CFGPIN(277, GLOBAL_GMAC_CTRL_SKEW, 4, 7),
2312 GEMINI_CFGPIN(241, GLOBAL_GMAC_CTRL_SKEW, 8, 11),
2313 GEMINI_CFGPIN(312, GLOBAL_GMAC_CTRL_SKEW, 12, 15),
2314 GEMINI_CFGPIN(298, GLOBAL_GMAC_CTRL_SKEW, 16, 19),
2315 GEMINI_CFGPIN(280, GLOBAL_GMAC_CTRL_SKEW, 20, 23),
2316 GEMINI_CFGPIN(316, GLOBAL_GMAC_CTRL_SKEW, 24, 27),
2317 GEMINI_CFGPIN(243, GLOBAL_GMAC_CTRL_SKEW, 28, 31),
2318 GEMINI_CFGPIN(295, GLOBAL_GMAC0_DATA_SKEW, 0, 3),
2319 GEMINI_CFGPIN(313, GLOBAL_GMAC0_DATA_SKEW, 4, 7),
2320 GEMINI_CFGPIN(242, GLOBAL_GMAC0_DATA_SKEW, 8, 11),
2321 GEMINI_CFGPIN(260, GLOBAL_GMAC0_DATA_SKEW, 12, 15),
2322 GEMINI_CFGPIN(294, GLOBAL_GMAC0_DATA_SKEW, 16, 19),
2323 GEMINI_CFGPIN(276, GLOBAL_GMAC0_DATA_SKEW, 20, 23),
2324 GEMINI_CFGPIN(258, GLOBAL_GMAC0_DATA_SKEW, 24, 27),
2325 GEMINI_CFGPIN(240, GLOBAL_GMAC0_DATA_SKEW, 28, 31),
2326 GEMINI_CFGPIN(262, GLOBAL_GMAC1_DATA_SKEW, 0, 3),
2327 GEMINI_CFGPIN(244, GLOBAL_GMAC1_DATA_SKEW, 4, 7),
2328 GEMINI_CFGPIN(317, GLOBAL_GMAC1_DATA_SKEW, 8, 11),
2329 GEMINI_CFGPIN(299, GLOBAL_GMAC1_DATA_SKEW, 12, 15),
2330 GEMINI_CFGPIN(261, GLOBAL_GMAC1_DATA_SKEW, 16, 19),
2331 GEMINI_CFGPIN(279, GLOBAL_GMAC1_DATA_SKEW, 20, 23),
2332 GEMINI_CFGPIN(297, GLOBAL_GMAC1_DATA_SKEW, 24, 27),
2333 GEMINI_CFGPIN(315, GLOBAL_GMAC1_DATA_SKEW, 28, 31),
2334};
2335
2336static const struct gemini_pin_conf gemini_confs_3516[] = {
2337 GEMINI_CFGPIN(347, GLOBAL_GMAC_CTRL_SKEW, 0, 3),
2338 GEMINI_CFGPIN(386, GLOBAL_GMAC_CTRL_SKEW, 4, 7),
2339 GEMINI_CFGPIN(307, GLOBAL_GMAC_CTRL_SKEW, 8, 11),
2340 GEMINI_CFGPIN(327, GLOBAL_GMAC_CTRL_SKEW, 12, 15),
2341 GEMINI_CFGPIN(309, GLOBAL_GMAC_CTRL_SKEW, 16, 19),
2342 GEMINI_CFGPIN(390, GLOBAL_GMAC_CTRL_SKEW, 20, 23),
2343 GEMINI_CFGPIN(370, GLOBAL_GMAC_CTRL_SKEW, 24, 27),
2344 GEMINI_CFGPIN(350, GLOBAL_GMAC_CTRL_SKEW, 28, 31),
2345 GEMINI_CFGPIN(367, GLOBAL_GMAC0_DATA_SKEW, 0, 3),
2346 GEMINI_CFGPIN(348, GLOBAL_GMAC0_DATA_SKEW, 4, 7),
2347 GEMINI_CFGPIN(387, GLOBAL_GMAC0_DATA_SKEW, 8, 11),
2348 GEMINI_CFGPIN(328, GLOBAL_GMAC0_DATA_SKEW, 12, 15),
2349 GEMINI_CFGPIN(306, GLOBAL_GMAC0_DATA_SKEW, 16, 19),
2350 GEMINI_CFGPIN(325, GLOBAL_GMAC0_DATA_SKEW, 20, 23),
2351 GEMINI_CFGPIN(346, GLOBAL_GMAC0_DATA_SKEW, 24, 27),
2352 GEMINI_CFGPIN(326, GLOBAL_GMAC0_DATA_SKEW, 28, 31),
2353 GEMINI_CFGPIN(391, GLOBAL_GMAC1_DATA_SKEW, 0, 3),
2354 GEMINI_CFGPIN(351, GLOBAL_GMAC1_DATA_SKEW, 4, 7),
2355 GEMINI_CFGPIN(310, GLOBAL_GMAC1_DATA_SKEW, 8, 11),
2356 GEMINI_CFGPIN(371, GLOBAL_GMAC1_DATA_SKEW, 12, 15),
2357 GEMINI_CFGPIN(329, GLOBAL_GMAC1_DATA_SKEW, 16, 19),
2358 GEMINI_CFGPIN(389, GLOBAL_GMAC1_DATA_SKEW, 20, 23),
2359 GEMINI_CFGPIN(369, GLOBAL_GMAC1_DATA_SKEW, 24, 27),
2360 GEMINI_CFGPIN(308, GLOBAL_GMAC1_DATA_SKEW, 28, 31),
2361};
2362
2363static const struct gemini_pin_conf *gemini_get_pin_conf(struct gemini_pmx *pmx,
2364 unsigned int pin)
2365{
2366 const struct gemini_pin_conf *retconf;
2367 int i;
2368
2369 for (i = 0; i < pmx->nconfs; i++) {
2370 retconf = &pmx->confs[i];
2371 if (retconf->pin == pin)
2372 return retconf;
2373 }
2374 return NULL;
2375}
2376
2377static int gemini_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
2378 unsigned long *config)
2379{
2380 struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
2381 enum pin_config_param param = pinconf_to_config_param(*config);
2382 const struct gemini_pin_conf *conf;
2383 u32 val;
2384
2385 switch (param) {
2386 case PIN_CONFIG_SKEW_DELAY:
2387 conf = gemini_get_pin_conf(pmx, pin);
2388 if (!conf)
2389 return -ENOTSUPP;
2390 regmap_read(pmx->map, conf->reg, &val);
2391 val &= conf->mask;
2392 val >>= (ffs(conf->mask) - 1);
2393 *config = pinconf_to_config_packed(PIN_CONFIG_SKEW_DELAY, val);
2394 break;
2395 default:
2396 return -ENOTSUPP;
2397 }
2398
2399 return 0;
2400}
2401
2402static int gemini_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
2403 unsigned long *configs, unsigned int num_configs)
2404{
2405 struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
2406 const struct gemini_pin_conf *conf;
2407 enum pin_config_param param;
2408 u32 arg;
2409 int ret = 0;
2410 int i;
2411
2412 for (i = 0; i < num_configs; i++) {
2413 param = pinconf_to_config_param(configs[i]);
2414 arg = pinconf_to_config_argument(configs[i]);
2415
2416 switch (param) {
2417 case PIN_CONFIG_SKEW_DELAY:
2418 if (arg > 0xf)
2419 return -EINVAL;
2420 conf = gemini_get_pin_conf(pmx, pin);
2421 if (!conf) {
2422 dev_err(pmx->dev,
2423 "invalid pin for skew delay %d\n", pin);
2424 return -ENOTSUPP;
2425 }
2426 arg <<= (ffs(conf->mask) - 1);
2427 dev_dbg(pmx->dev,
2428 "set pin %d to skew delay mask %08x, val %08x\n",
2429 pin, conf->mask, arg);
2430 regmap_update_bits(pmx->map, conf->reg, conf->mask, arg);
2431 break;
2432 default:
2433 dev_err(pmx->dev, "Invalid config param %04x\n", param);
2434 return -ENOTSUPP;
2435 }
2436 }
2437
2438 return ret;
2439}
2440
2441static int gemini_pinconf_group_set(struct pinctrl_dev *pctldev,
2442 unsigned selector,
2443 unsigned long *configs,
2444 unsigned num_configs)
2445{
2446 struct gemini_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
2447 const struct gemini_pin_group *grp = NULL;
2448 enum pin_config_param param;
2449 u32 arg;
2450 u32 val;
2451 int i;
2452
2453 if (pmx->is_3512)
2454 grp = &gemini_3512_pin_groups[selector];
2455 if (pmx->is_3516)
2456 grp = &gemini_3516_pin_groups[selector];
2457
2458
2459 if (!grp->driving_mask) {
2460 dev_err(pmx->dev, "pin config group \"%s\" does "
2461 "not support drive strength setting\n",
2462 grp->name);
2463 return -EINVAL;
2464 }
2465
2466 for (i = 0; i < num_configs; i++) {
2467 param = pinconf_to_config_param(configs[i]);
2468 arg = pinconf_to_config_argument(configs[i]);
2469
2470 switch (param) {
2471 case PIN_CONFIG_DRIVE_STRENGTH:
2472 switch (arg) {
2473 case 4:
2474 val = 0;
2475 break;
2476 case 8:
2477 val = 1;
2478 break;
2479 case 12:
2480 val = 2;
2481 break;
2482 case 16:
2483 val = 3;
2484 break;
2485 default:
2486 dev_err(pmx->dev,
2487 "invalid drive strength %d mA\n",
2488 arg);
2489 return -ENOTSUPP;
2490 }
2491 val <<= (ffs(grp->driving_mask) - 1);
2492 regmap_update_bits(pmx->map, GLOBAL_IODRIVE,
2493 grp->driving_mask,
2494 val);
2495 dev_dbg(pmx->dev,
2496 "set group %s to %d mA drive strength mask %08x val %08x\n",
2497 grp->name, arg, grp->driving_mask, val);
2498 break;
2499 default:
2500 dev_err(pmx->dev, "invalid config param %04x\n", param);
2501 return -ENOTSUPP;
2502 }
2503 }
2504
2505 return 0;
2506}
2507
2508static const struct pinconf_ops gemini_pinconf_ops = {
2509 .pin_config_get = gemini_pinconf_get,
2510 .pin_config_set = gemini_pinconf_set,
2511 .pin_config_group_set = gemini_pinconf_group_set,
2512 .is_generic = true,
2513};
2514
2515static struct pinctrl_desc gemini_pmx_desc = {
2516 .name = DRIVER_NAME,
2517 .pctlops = &gemini_pctrl_ops,
2518 .pmxops = &gemini_pmx_ops,
2519 .confops = &gemini_pinconf_ops,
2520 .owner = THIS_MODULE,
2521};
2522
2523static int gemini_pmx_probe(struct platform_device *pdev)
2524{
2525 struct gemini_pmx *pmx;
2526 struct regmap *map;
2527 struct device *dev = &pdev->dev;
2528 struct device *parent;
2529 unsigned long tmp;
2530 u32 val;
2531 int ret;
2532 int i;
2533
2534
2535 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
2536 if (!pmx)
2537 return -ENOMEM;
2538
2539 pmx->dev = &pdev->dev;
2540 parent = dev->parent;
2541 if (!parent) {
2542 dev_err(dev, "no parent to pin controller\n");
2543 return -ENODEV;
2544 }
2545 map = syscon_node_to_regmap(parent->of_node);
2546 if (IS_ERR(map)) {
2547 dev_err(dev, "no syscon regmap\n");
2548 return PTR_ERR(map);
2549 }
2550 pmx->map = map;
2551
2552
2553 ret = regmap_read(map, GLOBAL_WORD_ID, &val);
2554 if (ret) {
2555 dev_err(dev, "cannot access regmap\n");
2556 return ret;
2557 }
2558 val >>= 8;
2559 val &= 0xffff;
2560 if (val == 0x3512) {
2561 pmx->is_3512 = true;
2562 pmx->confs = gemini_confs_3512;
2563 pmx->nconfs = ARRAY_SIZE(gemini_confs_3512);
2564 gemini_pmx_desc.pins = gemini_3512_pins;
2565 gemini_pmx_desc.npins = ARRAY_SIZE(gemini_3512_pins);
2566 dev_info(dev, "detected 3512 chip variant\n");
2567 } else if (val == 0x3516) {
2568 pmx->is_3516 = true;
2569 pmx->confs = gemini_confs_3516;
2570 pmx->nconfs = ARRAY_SIZE(gemini_confs_3516);
2571 gemini_pmx_desc.pins = gemini_3516_pins;
2572 gemini_pmx_desc.npins = ARRAY_SIZE(gemini_3516_pins);
2573 dev_info(dev, "detected 3516 chip variant\n");
2574 } else {
2575 dev_err(dev, "unknown chip ID: %04x\n", val);
2576 return -ENODEV;
2577 }
2578
2579 ret = regmap_read(map, GLOBAL_MISC_CTRL, &val);
2580 dev_info(dev, "GLOBAL MISC CTRL at boot: 0x%08x\n", val);
2581
2582 val &= PADS_MASK;
2583
2584 val ^= 0x0f;
2585
2586 tmp = val;
2587 for_each_set_bit(i, &tmp, PADS_MAXBIT) {
2588 dev_dbg(dev, "pad group %s %s\n", gemini_padgroups[i],
2589 (val & BIT(i)) ? "enabled" : "disabled");
2590 }
2591
2592
2593 regmap_read(map, GLOBAL_STATUS, &val);
2594 pmx->flash_pin = !!(val & GLOBAL_STATUS_FLPIN);
2595 dev_info(dev, "flash pin is %s\n", pmx->flash_pin ? "set" : "not set");
2596
2597 pmx->pctl = devm_pinctrl_register(dev, &gemini_pmx_desc, pmx);
2598 if (IS_ERR(pmx->pctl)) {
2599 dev_err(dev, "could not register pinmux driver\n");
2600 return PTR_ERR(pmx->pctl);
2601 }
2602
2603 dev_info(dev, "initialized Gemini pin control driver\n");
2604
2605 return 0;
2606}
2607
2608static const struct of_device_id gemini_pinctrl_match[] = {
2609 { .compatible = "cortina,gemini-pinctrl" },
2610 {},
2611};
2612
2613static struct platform_driver gemini_pmx_driver = {
2614 .driver = {
2615 .name = DRIVER_NAME,
2616 .of_match_table = gemini_pinctrl_match,
2617 },
2618 .probe = gemini_pmx_probe,
2619};
2620
2621static int __init gemini_pmx_init(void)
2622{
2623 return platform_driver_register(&gemini_pmx_driver);
2624}
2625arch_initcall(gemini_pmx_init);
2626