linux/drivers/pinctrl/pinctrl-gemini.c
<<
>>
Prefs
   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 us 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 us 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);
2626