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