cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pinctrl-gemini.c (78927B)


      1/*
      2 * Driver for the Gemini pin controller
      3 *
      4 * Copyright (C) 2017 Linus Walleij <linus.walleij@linaro.org>
      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/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 * struct gemini_pin_conf - information about configuring a pin
     28 * @pin: the pin number
     29 * @reg: config register
     30 * @mask: the bits affecting the configuration of the pin
     31 */
     32struct gemini_pin_conf {
     33	unsigned int pin;
     34	u32 reg;
     35	u32 mask;
     36};
     37
     38/**
     39 * struct gemini_pmx - state holder for the gemini pin controller
     40 * @dev: a pointer back to containing device
     41 * @virtbase: the offset to the controller in virtual memory
     42 * @map: regmap to access registers
     43 * @is_3512: whether the SoC/package is the 3512 variant
     44 * @is_3516: whether the SoC/package is the 3516 variant
     45 * @flash_pin: whether the flash pin (extended pins for parallel
     46 * flash) is set
     47 * @confs: pin config information
     48 * @nconfs: number of pin config information items
     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 * struct gemini_pin_group - describes a Gemini pin group
     63 * @name: the name of this specific pin group
     64 * @pins: an array of discrete physical pins used in this group, taken
     65 *	from the driver-local pin enumeration space
     66 * @num_pins: the number of pins in this group array, i.e. the number of
     67 *	elements in .pins so we can iterate over that array
     68 * @mask: bits to clear to enable this when doing pin muxing
     69 * @value: bits to set to enable this when doing pin muxing
     70 * @driving_mask: bitmask for the IO Pad driving register for this
     71 *	group, if it supports altering the driving strength of
     72 *	its lines.
     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/* Some straight-forward control registers */
     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 * Global Miscellaneous Control Register
     93 * This register controls all Gemini pad/pin multiplexing
     94 *
     95 * It is a tricky register though:
     96 * - For the bits named *_ENABLE, once you DISABLE something, it simply cannot
     97 *   be brought back online, so it means permanent disablement of the
     98 *   corresponding pads.
     99 * - For the bits named *_DISABLE, once you enable something, it cannot be
    100 *   DISABLED again. So you select a flash configuration once, and then
    101 *   you are stuck with it.
    102 */
    103#define GLOBAL_MISC_CTRL	0x30
    104#define GEMINI_GMAC_IOSEL_MASK	GENMASK(28, 27)
    105/* Not really used */
    106#define GEMINI_GMAC_IOSEL_GMAC0_GMII	BIT(28)
    107/* Activated with GMAC1 */
    108#define GEMINI_GMAC_IOSEL_GMAC0_GMAC1_RGMII BIT(27)
    109/* This will be the default */
    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/* Ordered by bit index */
    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	/* Row A */
    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	/* Row B */
    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	/* Row C */
    188	PINCTRL_PIN(36, "C1 CIR RST N"), /* REALLY? CIR is not in 3512... */
    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	/* Row D */
    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	/* Row E */
    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	/* Row F */
    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	/* Row G */
    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	/* Row H */
    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	/* Row J (for some reason I is skipped) */
    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	/* Row K */
    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	/* Row L */
    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	/* Row M */
    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	/* Row N */
    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	/* Row P (for some reason O is skipped) */
    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	/* Row R (for some reason Q is skipped) */
    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	/* Row T (for some reason S is skipped) */
    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	/* Row U */
    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	/* Row V */
    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/* Digital ground */
    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/* GMII, ethernet pins */
    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 * Apparently the LPC interface is using the PCICLK for the clocking so
    550 * PCI needs to be active at the same time.
    551 */
    552static const unsigned int lpc_3512_pins[] = {
    553	285, /* LPC_LAD[0] */
    554	304, /* LPC_SERIRQ */
    555	286, /* LPC_LAD[2] */
    556	305, /* LPC_LFRAME# */
    557	287, /* LPC_LAD[3] */
    558	268, /* LPC_LAD[1] */
    559};
    560
    561/* Character LCD */
    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, /* SSP_97RST# SSP AC97 Reset, active low */
    568	304, /* SSP_FSC */
    569	286, /* SSP_ECLK */
    570	305, /* SSP_TXD */
    571	287, /* SSP_RXD */
    572	268, /* SSP_SCLK */
    573};
    574
    575static const unsigned int uart_rxtx_3512_pins[] = {
    576	267, /* UART_SIN serial input, RX */
    577	322, /* UART_SOUT serial output, TX */
    578};
    579
    580static const unsigned int uart_modem_3512_pins[] = {
    581	285, /* UART_NDCD DCD carrier detect */
    582	304, /* UART_NDTR DTR data terminal ready */
    583	286, /* UART_NDSR DSR data set ready */
    584	305, /* UART_NRTS RTS request to send */
    585	287, /* UART_NCTS CTS clear to send */
    586	268, /* UART_NRI RI ring indicator */
    587};
    588
    589static const unsigned int tvc_3512_pins[] = {
    590	246, /* TVC_DATA[0] */
    591	319, /* TVC_DATA[1] */
    592	301, /* TVC_DATA[2] */
    593	283, /* TVC_DATA[3] */
    594	320, /* TVC_DATA[4] */
    595	302, /* TVC_DATA[5] */
    596	284, /* TVC_DATA[6] */
    597	266, /* TVC_DATA[7] */
    598};
    599
    600static const unsigned int tvc_clk_3512_pins[] = {
    601	265, /* TVC_CLK */
    602};
    603
    604/* NAND flash pins */
    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/* Parallel (NOR) flash pins, D[0-15], A[16-25], CE0, CE1, RB, WE, OE, ALE */
    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 * The parallel flash can be set up in a 26-bit address bus mode exposing
    619 * A[0-15] (A[15] takes the place of ALE), but it has the
    620 * side effect of stealing pins from GMAC1 and TVC so these blocks cannot be
    621 * used at the same time.
    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	/* The extra pins */
    628	296, 315, 297, 279, 261, 243, 316, 298, 280, 262, 244, 317, 299, 281,
    629	265,
    630};
    631
    632/* Serial flash pins CE0, CE1, DI, DO, CK */
    633static const unsigned int sflash_3512_pins[] = { 230, 231, 232, 233, 211 };
    634
    635/* The GPIO0A (0) pin overlap with TVC CLK and extended parallel flash */
    636static const unsigned int gpio0a_3512_pins[] = { 265 };
    637
    638/* The GPIO0B (1-4) pins overlap with TVC and ICE */
    639static const unsigned int gpio0b_3512_pins[] = { 320, 302, 284, 266 };
    640
    641/* The GPIO0C (5-7) pins overlap with ICE */
    642static const unsigned int gpio0c_3512_pins[] = { 248, 321, 303 };
    643
    644/* The GPIO0D (9,10) pins overlap with UART RX/TX */
    645static const unsigned int gpio0d_3512_pins[] = { 267, 322 };
    646
    647/* The GPIO0E (8,11-15) pins overlap with LPC, UART modem pins, SSP */
    648static const unsigned int gpio0e_3512_pins[] = { 285, 304, 286, 305, 287, 268 };
    649
    650/* The GPIO0F (16) pins overlap with LCD */
    651static const unsigned int gpio0f_3512_pins[] = { 269 };
    652
    653/* The GPIO0G (17,18) pins overlap with NAND flash CE0, CE1 */
    654static const unsigned int gpio0g_3512_pins[] = { 249, 250 };
    655
    656/* The GPIO0H (19,20) pins overlap with parallel flash CE0, CE1 */
    657static const unsigned int gpio0h_3512_pins[] = { 251, 229 };
    658
    659/* The GPIO0I (21,22) pins overlap with serial flash CE0, CE1 */
    660static const unsigned int gpio0i_3512_pins[] = { 230, 231 };
    661
    662/* The GPIO0J (23) pins overlap with all flash */
    663static const unsigned int gpio0j_3512_pins[] = { 232 };
    664
    665/* The GPIO0K (24,25) pins overlap with all flash and LCD */
    666static const unsigned int gpio0k_3512_pins[] = { 233, 211 };
    667
    668/* The GPIO0L (26-29) pins overlap with parallel flash */
    669static const unsigned int gpio0l_3512_pins[] = { 212, 213, 214, 215 };
    670
    671/* The GPIO0M (30,31) pins overlap with parallel flash and NAND flash */
    672static const unsigned int gpio0m_3512_pins[] = { 193, 194 };
    673
    674/* The GPIO1A (0-4) pins that overlap with IDE and parallel flash */
    675static const unsigned int gpio1a_3512_pins[] = { 162, 163, 165, 166, 148 };
    676
    677/* The GPIO1B (5-10, 27) pins overlap with just IDE */
    678static const unsigned int gpio1b_3512_pins[] = {
    679	180, 181, 182, 183, 184, 198, 255
    680};
    681
    682/* The GPIO1C (11-26) pins overlap with IDE, parallel flash and NAND flash */
    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/* The GPIO1D (28-31) pins overlap with LCD and TVC */
    689static const unsigned int gpio1d_3512_pins[] = { 246, 319, 301, 283 };
    690
    691/* The GPIO2A (0-3) pins overlap with GMII GMAC1 and extended parallel flash */
    692static const unsigned int gpio2a_3512_pins[] = { 315, 297, 279, 261 };
    693
    694/* The GPIO2B (4-7) pins overlap with GMII GMAC1, extended parallel flash and LCD */
    695static const unsigned int gpio2b_3512_pins[] = { 262, 244, 317, 299 };
    696
    697/* The GPIO2C (8-31) pins overlap with PCI */
    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/* Groups for the 3512 SoC/package */
    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		/* Conflict with some GPIO groups */
    741	},
    742	{
    743		.name = "idegrp",
    744		.pins = ide_3512_pins,
    745		.num_pins = ARRAY_SIZE(ide_3512_pins),
    746		/* Conflict with all flash usage */
    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		/* Bring out RGMII on the GMAC1 pins */
    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		/* Conflict only with GPIO2 */
    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		/* Conflict with SSP and UART modem pins */
    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		/* Conflict with TVC and ICE */
    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		/* Conflict with LPC and UART modem pins */
    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		/* No conflicts except GPIO */
    812	},
    813	{
    814		.name = "uartmodemgrp",
    815		.pins = uart_modem_3512_pins,
    816		.num_pins = ARRAY_SIZE(uart_modem_3512_pins),
    817		/*
    818		 * Conflict with LPC and SSP,
    819		 * so when those are both disabled, modem UART can thrive.
    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		/* Conflict with character LCD and ICE */
    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	 * The construction is done such that it is possible to use a serial
    839	 * flash together with a NAND or parallel (NOR) flash, but it is not
    840	 * possible to use NAND and parallel flash together. To use serial
    841	 * flash with one of the two others, the muxbits need to be flipped
    842	 * around before any access.
    843	 */
    844	{
    845		.name = "nflashgrp",
    846		.pins = nflash_3512_pins,
    847		.num_pins = ARRAY_SIZE(nflash_3512_pins),
    848		/* Conflict with IDE, parallel and serial flash */
    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		/* Conflict with IDE, NAND and serial flash */
    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		/* Conflict with IDE, NAND and parallel flash */
    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		/* Conflict with TVC CLK */
    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		/* Conflict with TVC and ICE */
    880		.mask = TVC_PADS_ENABLE,
    881	},
    882	{
    883		.name = "gpio0cgrp",
    884		.pins = gpio0c_3512_pins,
    885		.num_pins = ARRAY_SIZE(gpio0c_3512_pins),
    886		/* Conflict with ICE */
    887	},
    888	{
    889		.name = "gpio0dgrp",
    890		.pins = gpio0d_3512_pins,
    891		.num_pins = ARRAY_SIZE(gpio0d_3512_pins),
    892		/* Conflict with UART RX/TX */
    893	},
    894	{
    895		.name = "gpio0egrp",
    896		.pins = gpio0e_3512_pins,
    897		.num_pins = ARRAY_SIZE(gpio0e_3512_pins),
    898		/* Conflict with LPC, UART modem pins, SSP */
    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		/* Conflict with LCD */
    906		.mask = LCD_PADS_ENABLE,
    907	},
    908	{
    909		.name = "gpio0ggrp",
    910		.pins = gpio0g_3512_pins,
    911		.num_pins = ARRAY_SIZE(gpio0g_3512_pins),
    912		/* Conflict with NAND flash */
    913		.value = NAND_PADS_DISABLE,
    914	},
    915	{
    916		.name = "gpio0hgrp",
    917		.pins = gpio0h_3512_pins,
    918		.num_pins = ARRAY_SIZE(gpio0h_3512_pins),
    919		/* Conflict with parallel flash */
    920		.value = PFLASH_PADS_DISABLE,
    921	},
    922	{
    923		.name = "gpio0igrp",
    924		.pins = gpio0i_3512_pins,
    925		.num_pins = ARRAY_SIZE(gpio0i_3512_pins),
    926		/* Conflict with serial flash */
    927		.value = SFLASH_PADS_DISABLE,
    928	},
    929	{
    930		.name = "gpio0jgrp",
    931		.pins = gpio0j_3512_pins,
    932		.num_pins = ARRAY_SIZE(gpio0j_3512_pins),
    933		/* Conflict with all flash */
    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		/* Conflict with all flash and LCD */
    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		/* Conflict with parallel flash */
    951		.value = PFLASH_PADS_DISABLE,
    952	},
    953	{
    954		.name = "gpio0mgrp",
    955		.pins = gpio0m_3512_pins,
    956		.num_pins = ARRAY_SIZE(gpio0m_3512_pins),
    957		/* Conflict with parallel and NAND flash */
    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		/* Conflict with IDE and parallel flash */
    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		/* Conflict with IDE only */
    973		.mask = IDE_PADS_ENABLE,
    974	},
    975	{
    976		.name = "gpio1cgrp",
    977		.pins = gpio1c_3512_pins,
    978		.num_pins = ARRAY_SIZE(gpio1c_3512_pins),
    979		/* Conflict with IDE, parallel and NAND flash */
    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		/* Conflict with LCD and TVC */
    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		/* Conflict with GMII GMAC1 and extended parallel flash */
    996	},
    997	{
    998		.name = "gpio2bgrp",
    999		.pins = gpio2b_3512_pins,
   1000		.num_pins = ARRAY_SIZE(gpio2b_3512_pins),
   1001		/* Conflict with GMII GMAC1, extended parallel flash and LCD */
   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		/* Conflict with PCI */
   1009		.mask = PCI_PADS_ENABLE,
   1010	},
   1011};
   1012
   1013/* Pin names for the pinmux subsystem, 3516 variant */
   1014static const struct pinctrl_pin_desc gemini_3516_pins[] = {
   1015	/* Row A */
   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	/* Row B */
   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	/* Row C */
   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	/* Row D */
   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	/* Row E */
   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	/* Row F */
   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	/* Row G */
   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	/* Row H */
   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	/* Row J (for some reason I is skipped) */
   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	/* Row K */
   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	/* Row L */
   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	/* Row M */
   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	/* Row N */
   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	/* Row P (for some reason O is skipped) */
   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	/* Row R (for some reason Q is skipped) */
   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	/* Row T (for some reason S is skipped) */
   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	/* Row U */
   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	/* Row V */
   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	/* Row W */
   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	/* Row Y */
   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/* Digital ground */
   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/* GMII, ethernet pins */
   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 * Apparently the LPC interface is using the PCICLK for the clocking so
   1499 * PCI needs to be active at the same time.
   1500 */
   1501static const unsigned int lpc_3516_pins[] = {
   1502	355, /* LPC_LAD[0] */
   1503	356, /* LPC_SERIRQ */
   1504	377, /* LPC_LAD[2] */
   1505	398, /* LPC_LFRAME# */
   1506	316, /* LPC_LAD[3] */
   1507	399, /* LPC_LAD[1] */
   1508};
   1509
   1510/* Character LCD */
   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, /* SSP_97RST# SSP AC97 Reset, active low */
   1517	356, /* SSP_FSC */
   1518	377, /* SSP_ECLK */
   1519	398, /* SSP_TXD */
   1520	316, /* SSP_RXD */
   1521	399, /* SSP_SCLK */
   1522};
   1523
   1524static const unsigned int uart_rxtx_3516_pins[] = {
   1525	313, /* UART_SIN serial input, RX */
   1526	335, /* UART_SOUT serial output, TX */
   1527};
   1528
   1529static const unsigned int uart_modem_3516_pins[] = {
   1530	355, /* UART_NDCD DCD carrier detect */
   1531	356, /* UART_NDTR DTR data terminal ready */
   1532	377, /* UART_NDSR DSR data set ready */
   1533	398, /* UART_NRTS RTS request to send */
   1534	316, /* UART_NCTS CTS clear to send */
   1535	399, /* UART_NRI RI ring indicator */
   1536};
   1537
   1538static const unsigned int tvc_3516_pins[] = {
   1539	353, /* TVC_DATA[0] */
   1540	311, /* TVC_DATA[1] */
   1541	394, /* TVC_DATA[2] */
   1542	374, /* TVC_DATA[3] */
   1543	354, /* TVC_DATA[4] */
   1544	395, /* TVC_DATA[5] */
   1545	312, /* TVC_DATA[6] */
   1546	334, /* TVC_DATA[7] */
   1547};
   1548
   1549static const unsigned int tvc_clk_3516_pins[] = {
   1550	333, /* TVC_CLK */
   1551};
   1552
   1553/* NAND flash pins */
   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/* Parallel (NOR) flash pins, D[0-15], A[16-25], CE0, CE1, RB, WE, OE, ALE */
   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 * The parallel flash can be set up in a 26-bit address bus mode exposing
   1568 * A[0-15] (A[15] takes the place of ALE), but it has the
   1569 * side effect of stealing pins from GMAC1 and TVC so these blocks cannot be
   1570 * used at the same time.
   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	/* The extra pins */
   1577	349, 308, 369, 389, 329, 350, 370, 309, 390, 391, 351, 310, 371, 330,
   1578	333
   1579};
   1580
   1581/* Serial flash pins CE0, CE1, DI, DO, CK */
   1582static const unsigned int sflash_3516_pins[] = { 296, 338, 295, 359, 339 };
   1583
   1584/* The GPIO0A (0-4) pins overlap with TVC and extended parallel flash */
   1585static const unsigned int gpio0a_3516_pins[] = { 354, 395, 312, 334 };
   1586
   1587/* The GPIO0B (5-7) pins overlap with ICE */
   1588static const unsigned int gpio0b_3516_pins[] = { 375, 396, 376 };
   1589
   1590/* The GPIO0C (8,11-15) pins overlap with LPC, UART and SSP */
   1591static const unsigned int gpio0c_3516_pins[] = { 355, 356, 377, 398, 316, 399 };
   1592
   1593/* The GPIO0D (9,10) pins overlap with UART RX/TX */
   1594static const unsigned int gpio0d_3516_pins[] = { 313, 335 };
   1595
   1596/* The GPIO0E (16) pins overlap with LCD */
   1597static const unsigned int gpio0e_3516_pins[] = { 314 };
   1598
   1599/* The GPIO0F (17,18) pins overlap with NAND flash CE0, CE1 */
   1600static const unsigned int gpio0f_3516_pins[] = { 337, 358 };
   1601
   1602/* The GPIO0G (19,20,26-29) pins overlap with parallel flash */
   1603static const unsigned int gpio0g_3516_pins[] = { 317, 379, 297, 318, 276, 319 };
   1604
   1605/* The GPIO0H (21,22) pins overlap with serial flash CE0, CE1 */
   1606static const unsigned int gpio0h_3516_pins[] = { 296, 338 };
   1607
   1608/* The GPIO0I (23) pins overlap with all flash */
   1609static const unsigned int gpio0i_3516_pins[] = { 295 };
   1610
   1611/* The GPIO0J (24,25) pins overlap with all flash and LCD */
   1612static const unsigned int gpio0j_3516_pins[] = { 359, 339 };
   1613
   1614/* The GPIO0K (30,31) pins overlap with NAND flash */
   1615static const unsigned int gpio0k_3516_pins[] = { 275, 298 };
   1616
   1617/* The GPIO0L (0) pins overlap with TVC_CLK */
   1618static const unsigned int gpio0l_3516_pins[] = { 333 };
   1619
   1620/* The GPIO1A (0-4) pins that overlap with IDE and parallel flash */
   1621static const unsigned int gpio1a_3516_pins[] = { 221, 200, 222, 201, 220 };
   1622
   1623/* The GPIO1B (5-10,27) pins overlap with just IDE */
   1624static const unsigned int gpio1b_3516_pins[] = { 241, 223, 240, 204, 242, 244, 360 };
   1625
   1626/* The GPIO1C (11-26) pins overlap with IDE, parallel flash and NAND flash */
   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/* The GPIO1D (28-31) pins overlap with TVC */
   1633static const unsigned int gpio1d_3516_pins[] = { 353, 311, 394, 374 };
   1634
   1635/* The GPIO2A (0-3) pins overlap with GMII GMAC1 and extended parallel flash */
   1636static const unsigned int gpio2a_3516_pins[] = { 308, 369, 389, 329 };
   1637
   1638/* The GPIO2B (4-7) pins overlap with GMII GMAC1, extended parallel flash and LCD */
   1639static const unsigned int gpio2b_3516_pins[] = { 391, 351, 310, 371 };
   1640
   1641/* The GPIO2C (8-31) pins overlap with PCI */
   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/* Groups for the 3516 SoC/package */
   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		/* Conflict with some GPIO groups */
   1690	},
   1691	{
   1692		.name = "idegrp",
   1693		.pins = ide_3516_pins,
   1694		.num_pins = ARRAY_SIZE(ide_3516_pins),
   1695		/* Conflict with all flash usage */
   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		/* Bring out RGMII on the GMAC1 pins */
   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		/* Conflict only with GPIO2 */
   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		/* Conflict with SSP */
   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		/* Conflict with LPC */
   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		/* No conflicts except GPIO */
   1762	},
   1763	{
   1764		.name = "uartmodemgrp",
   1765		.pins = uart_modem_3516_pins,
   1766		.num_pins = ARRAY_SIZE(uart_modem_3516_pins),
   1767		/*
   1768		 * Conflict with LPC and SSP,
   1769		 * so when those are both disabled, modem UART can thrive.
   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		/* Conflict with character LCD */
   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	 * The construction is done such that it is possible to use a serial
   1789	 * flash together with a NAND or parallel (NOR) flash, but it is not
   1790	 * possible to use NAND and parallel flash together. To use serial
   1791	 * flash with one of the two others, the muxbits need to be flipped
   1792	 * around before any access.
   1793	 */
   1794	{
   1795		.name = "nflashgrp",
   1796		.pins = nflash_3516_pins,
   1797		.num_pins = ARRAY_SIZE(nflash_3516_pins),
   1798		/* Conflict with IDE, parallel and serial flash */
   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		/* Conflict with IDE, NAND and serial flash */
   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		/* Conflict with IDE, NAND and parallel flash */
   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		/* Conflict with TVC and ICE */
   1823		.mask = TVC_PADS_ENABLE,
   1824	},
   1825	{
   1826		.name = "gpio0bgrp",
   1827		.pins = gpio0b_3516_pins,
   1828		.num_pins = ARRAY_SIZE(gpio0b_3516_pins),
   1829		/* Conflict with ICE */
   1830	},
   1831	{
   1832		.name = "gpio0cgrp",
   1833		.pins = gpio0c_3516_pins,
   1834		.num_pins = ARRAY_SIZE(gpio0c_3516_pins),
   1835		/* Conflict with LPC, UART and SSP */
   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		/* Conflict with UART */
   1843	},
   1844	{
   1845		.name = "gpio0egrp",
   1846		.pins = gpio0e_3516_pins,
   1847		.num_pins = ARRAY_SIZE(gpio0e_3516_pins),
   1848		/* Conflict with LCD */
   1849		.mask = LCD_PADS_ENABLE,
   1850	},
   1851	{
   1852		.name = "gpio0fgrp",
   1853		.pins = gpio0f_3516_pins,
   1854		.num_pins = ARRAY_SIZE(gpio0f_3516_pins),
   1855		/* Conflict with NAND flash */
   1856		.value = NAND_PADS_DISABLE,
   1857	},
   1858	{
   1859		.name = "gpio0ggrp",
   1860		.pins = gpio0g_3516_pins,
   1861		.num_pins = ARRAY_SIZE(gpio0g_3516_pins),
   1862		/* Conflict with parallel flash */
   1863		.value = PFLASH_PADS_DISABLE,
   1864	},
   1865	{
   1866		.name = "gpio0hgrp",
   1867		.pins = gpio0h_3516_pins,
   1868		.num_pins = ARRAY_SIZE(gpio0h_3516_pins),
   1869		/* Conflict with serial flash */
   1870		.value = SFLASH_PADS_DISABLE,
   1871	},
   1872	{
   1873		.name = "gpio0igrp",
   1874		.pins = gpio0i_3516_pins,
   1875		.num_pins = ARRAY_SIZE(gpio0i_3516_pins),
   1876		/* Conflict with all flash */
   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		/* Conflict with all flash and LCD */
   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		/* Conflict with parallel and NAND flash */
   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		/* Conflict with TVE CLK */
   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		/* Conflict with IDE and parallel flash */
   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		/* Conflict with IDE only */
   1916		.mask = IDE_PADS_ENABLE,
   1917	},
   1918	{
   1919		.name = "gpio1cgrp",
   1920		.pins = gpio1c_3516_pins,
   1921		.num_pins = ARRAY_SIZE(gpio1c_3516_pins),
   1922		/* Conflict with IDE, parallel and NAND flash */
   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		/* Conflict with TVC */
   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		/* Conflict with GMII GMAC1 and extended parallel flash */
   1939	},
   1940	{
   1941		.name = "gpio2bgrp",
   1942		.pins = gpio2b_3516_pins,
   1943		.num_pins = ARRAY_SIZE(gpio2b_3516_pins),
   1944		/* Conflict with GMII GMAC1, extended parallel flash and LCD */
   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		/* Conflict with PCI */
   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	/* The special case with the 3516 flash pin */
   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 * struct gemini_pmx_func - describes Gemini pinmux functions
   2029 * @name: the name of this specific function
   2030 * @groups: corresponding pin groups
   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		/* This function is strictly unavailable on 3512 */
   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	/* Which bits changed */
   2221	before &= PADS_MASK;
   2222	after &= PADS_MASK;
   2223	expected = before &= ~grp->mask;
   2224	expected |= grp->value;
   2225	expected &= PADS_MASK;
   2226
   2227	/* Print changed states */
   2228	tmp = grp->mask;
   2229	for_each_set_bit(i, &tmp, PADS_MAXBIT) {
   2230		bool enabled = !(i > 3);
   2231
   2232		/* Did not go low though it should */
   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		/* Did not go high though it should */
   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), /* GMAC0 RXDV */
   2311	GEMINI_CFGPIN(277, GLOBAL_GMAC_CTRL_SKEW, 4, 7), /* GMAC0 RXC */
   2312	GEMINI_CFGPIN(241, GLOBAL_GMAC_CTRL_SKEW, 8, 11), /* GMAC0 TXEN */
   2313	GEMINI_CFGPIN(312, GLOBAL_GMAC_CTRL_SKEW, 12, 15), /* GMAC0 TXC */
   2314	GEMINI_CFGPIN(298, GLOBAL_GMAC_CTRL_SKEW, 16, 19), /* GMAC1 RXDV */
   2315	GEMINI_CFGPIN(280, GLOBAL_GMAC_CTRL_SKEW, 20, 23), /* GMAC1 RXC */
   2316	GEMINI_CFGPIN(316, GLOBAL_GMAC_CTRL_SKEW, 24, 27), /* GMAC1 TXEN */
   2317	GEMINI_CFGPIN(243, GLOBAL_GMAC_CTRL_SKEW, 28, 31), /* GMAC1 TXC */
   2318	GEMINI_CFGPIN(295, GLOBAL_GMAC0_DATA_SKEW, 0, 3), /* GMAC0 RXD0 */
   2319	GEMINI_CFGPIN(313, GLOBAL_GMAC0_DATA_SKEW, 4, 7), /* GMAC0 RXD1 */
   2320	GEMINI_CFGPIN(242, GLOBAL_GMAC0_DATA_SKEW, 8, 11), /* GMAC0 RXD2 */
   2321	GEMINI_CFGPIN(260, GLOBAL_GMAC0_DATA_SKEW, 12, 15), /* GMAC0 RXD3 */
   2322	GEMINI_CFGPIN(294, GLOBAL_GMAC0_DATA_SKEW, 16, 19), /* GMAC0 TXD0 */
   2323	GEMINI_CFGPIN(276, GLOBAL_GMAC0_DATA_SKEW, 20, 23), /* GMAC0 TXD1 */
   2324	GEMINI_CFGPIN(258, GLOBAL_GMAC0_DATA_SKEW, 24, 27), /* GMAC0 TXD2 */
   2325	GEMINI_CFGPIN(240, GLOBAL_GMAC0_DATA_SKEW, 28, 31), /* GMAC0 TXD3 */
   2326	GEMINI_CFGPIN(262, GLOBAL_GMAC1_DATA_SKEW, 0, 3), /* GMAC1 RXD0 */
   2327	GEMINI_CFGPIN(244, GLOBAL_GMAC1_DATA_SKEW, 4, 7), /* GMAC1 RXD1 */
   2328	GEMINI_CFGPIN(317, GLOBAL_GMAC1_DATA_SKEW, 8, 11), /* GMAC1 RXD2 */
   2329	GEMINI_CFGPIN(299, GLOBAL_GMAC1_DATA_SKEW, 12, 15), /* GMAC1 RXD3 */
   2330	GEMINI_CFGPIN(261, GLOBAL_GMAC1_DATA_SKEW, 16, 19), /* GMAC1 TXD0 */
   2331	GEMINI_CFGPIN(279, GLOBAL_GMAC1_DATA_SKEW, 20, 23), /* GMAC1 TXD1 */
   2332	GEMINI_CFGPIN(297, GLOBAL_GMAC1_DATA_SKEW, 24, 27), /* GMAC1 TXD2 */
   2333	GEMINI_CFGPIN(315, GLOBAL_GMAC1_DATA_SKEW, 28, 31), /* GMAC1 TXD3 */
   2334};
   2335
   2336static const struct gemini_pin_conf gemini_confs_3516[] = {
   2337	GEMINI_CFGPIN(347, GLOBAL_GMAC_CTRL_SKEW, 0, 3), /* GMAC0 RXDV */
   2338	GEMINI_CFGPIN(386, GLOBAL_GMAC_CTRL_SKEW, 4, 7), /* GMAC0 RXC */
   2339	GEMINI_CFGPIN(307, GLOBAL_GMAC_CTRL_SKEW, 8, 11), /* GMAC0 TXEN */
   2340	GEMINI_CFGPIN(327, GLOBAL_GMAC_CTRL_SKEW, 12, 15), /* GMAC0 TXC */
   2341	GEMINI_CFGPIN(309, GLOBAL_GMAC_CTRL_SKEW, 16, 19), /* GMAC1 RXDV */
   2342	GEMINI_CFGPIN(390, GLOBAL_GMAC_CTRL_SKEW, 20, 23), /* GMAC1 RXC */
   2343	GEMINI_CFGPIN(370, GLOBAL_GMAC_CTRL_SKEW, 24, 27), /* GMAC1 TXEN */
   2344	GEMINI_CFGPIN(350, GLOBAL_GMAC_CTRL_SKEW, 28, 31), /* GMAC1 TXC */
   2345	GEMINI_CFGPIN(367, GLOBAL_GMAC0_DATA_SKEW, 0, 3), /* GMAC0 RXD0 */
   2346	GEMINI_CFGPIN(348, GLOBAL_GMAC0_DATA_SKEW, 4, 7), /* GMAC0 RXD1 */
   2347	GEMINI_CFGPIN(387, GLOBAL_GMAC0_DATA_SKEW, 8, 11), /* GMAC0 RXD2 */
   2348	GEMINI_CFGPIN(328, GLOBAL_GMAC0_DATA_SKEW, 12, 15), /* GMAC0 RXD3 */
   2349	GEMINI_CFGPIN(306, GLOBAL_GMAC0_DATA_SKEW, 16, 19), /* GMAC0 TXD0 */
   2350	GEMINI_CFGPIN(325, GLOBAL_GMAC0_DATA_SKEW, 20, 23), /* GMAC0 TXD1 */
   2351	GEMINI_CFGPIN(346, GLOBAL_GMAC0_DATA_SKEW, 24, 27), /* GMAC0 TXD2 */
   2352	GEMINI_CFGPIN(326, GLOBAL_GMAC0_DATA_SKEW, 28, 31), /* GMAC0 TXD3 */
   2353	GEMINI_CFGPIN(391, GLOBAL_GMAC1_DATA_SKEW, 0, 3), /* GMAC1 RXD0 */
   2354	GEMINI_CFGPIN(351, GLOBAL_GMAC1_DATA_SKEW, 4, 7), /* GMAC1 RXD1 */
   2355	GEMINI_CFGPIN(310, GLOBAL_GMAC1_DATA_SKEW, 8, 11), /* GMAC1 RXD2 */
   2356	GEMINI_CFGPIN(371, GLOBAL_GMAC1_DATA_SKEW, 12, 15), /* GMAC1 RXD3 */
   2357	GEMINI_CFGPIN(329, GLOBAL_GMAC1_DATA_SKEW, 16, 19), /* GMAC1 TXD0 */
   2358	GEMINI_CFGPIN(389, GLOBAL_GMAC1_DATA_SKEW, 20, 23), /* GMAC1 TXD1 */
   2359	GEMINI_CFGPIN(369, GLOBAL_GMAC1_DATA_SKEW, 24, 27), /* GMAC1 TXD2 */
   2360	GEMINI_CFGPIN(308, GLOBAL_GMAC1_DATA_SKEW, 28, 31), /* GMAC1 TXD3 */
   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	/* First figure out if this group supports configs */
   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	/* Create state holders etc for this driver */
   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	/* Check that regmap works at first call, then no more */
   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	/* Mask off relevant pads */
   2582	val &= PADS_MASK;
   2583	/* Invert the meaning of the DRAM+flash pads */
   2584	val ^= 0x0f;
   2585	/* Print initial state */
   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	/* Check if flash pin is set */
   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);