cachepc-linux

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

pinctrl-armada-cp110.c (23180B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Marvell Armada CP110 pinctrl driver based on mvebu pinctrl core
      4 *
      5 * Copyright (C) 2017 Marvell
      6 *
      7 * Hanna Hawa <hannah@marvell.com>
      8 */
      9
     10#include <linux/err.h>
     11#include <linux/init.h>
     12#include <linux/io.h>
     13#include <linux/mfd/syscon.h>
     14#include <linux/of.h>
     15#include <linux/of_device.h>
     16#include <linux/pinctrl/pinctrl.h>
     17#include <linux/platform_device.h>
     18
     19#include "pinctrl-mvebu.h"
     20
     21/*
     22 * Even if the pin controller is the same the MMP available depend on the SoC
     23 * integration.
     24 *  - In Armada7K (single CP) almost all the MPPs are available (except the
     25 *    MMP 39 to 43)
     26 *  - In Armada8K (dual CP) the MPPs are split into 2 parts, MPPs 0-31 from
     27 *    CPS, and MPPs 32-62 from CPM, the below flags (V_ARMADA_8K_CPM,
     28 *    V_ARMADA_8K_CPS) set which MPP is available to the CPx.
     29 * The x_PLUS enum mean that the MPP available for CPx and for Armada70x0
     30 */
     31enum {
     32	V_ARMADA_7K = BIT(0),
     33	V_ARMADA_8K_CPM = BIT(1),
     34	V_ARMADA_8K_CPS = BIT(2),
     35	V_CP115_STANDALONE = BIT(3),
     36	V_ARMADA_7K_8K_CPM = (V_ARMADA_7K | V_ARMADA_8K_CPM),
     37	V_ARMADA_7K_8K_CPS = (V_ARMADA_7K | V_ARMADA_8K_CPS),
     38};
     39
     40static struct mvebu_mpp_mode armada_cp110_mpp_modes[] = {
     41	MPP_MODE(0,
     42		 MPP_FUNCTION(0,	"gpio",		NULL),
     43		 MPP_FUNCTION(1,	"dev",		"ale1"),
     44		 MPP_FUNCTION(2,	"au",		"i2smclk"),
     45		 MPP_FUNCTION(3,	"ge0",		"rxd3"),
     46		 MPP_FUNCTION(4,	"tdm",		"pclk"),
     47		 MPP_FUNCTION(6,	"ptp",		"pulse"),
     48		 MPP_FUNCTION(7,	"mss_i2c",	"sda"),
     49		 MPP_FUNCTION(8,	"uart0",	"rxd"),
     50		 MPP_FUNCTION(9,	"sata0",	"present_act"),
     51		 MPP_FUNCTION(10,	"ge",		"mdio")),
     52	MPP_MODE(1,
     53		 MPP_FUNCTION(0,	"gpio",		NULL),
     54		 MPP_FUNCTION(1,	"dev",		"ale0"),
     55		 MPP_FUNCTION(2,	"au",		"i2sdo_spdifo"),
     56		 MPP_FUNCTION(3,	"ge0",		"rxd2"),
     57		 MPP_FUNCTION(4,	"tdm",		"drx"),
     58		 MPP_FUNCTION(6,	"ptp",		"clk"),
     59		 MPP_FUNCTION(7,	"mss_i2c",	"sck"),
     60		 MPP_FUNCTION(8,	"uart0",	"txd"),
     61		 MPP_FUNCTION(9,	"sata1",	"present_act"),
     62		 MPP_FUNCTION(10,	"ge",		"mdc")),
     63	MPP_MODE(2,
     64		 MPP_FUNCTION(0,	"gpio",		NULL),
     65		 MPP_FUNCTION(1,	"dev",		"ad15"),
     66		 MPP_FUNCTION(2,	"au",		"i2sextclk"),
     67		 MPP_FUNCTION(3,	"ge0",		"rxd1"),
     68		 MPP_FUNCTION(4,	"tdm",		"dtx"),
     69		 MPP_FUNCTION(5,	"mss_uart",	"rxd"),
     70		 MPP_FUNCTION(6,	"ptp",		"pclk_out"),
     71		 MPP_FUNCTION(7,	"i2c1",		"sck"),
     72		 MPP_FUNCTION(8,	"uart1",	"rxd"),
     73		 MPP_FUNCTION(9,	"sata0",	"present_act"),
     74		 MPP_FUNCTION(10,	"xg",		"mdc")),
     75	MPP_MODE(3,
     76		 MPP_FUNCTION(0,	"gpio",		NULL),
     77		 MPP_FUNCTION(1,	"dev",		"ad14"),
     78		 MPP_FUNCTION(2,	"au",		"i2slrclk"),
     79		 MPP_FUNCTION(3,	"ge0",		"rxd0"),
     80		 MPP_FUNCTION(4,	"tdm",		"fsync"),
     81		 MPP_FUNCTION(5,	"mss_uart",	"txd"),
     82		 MPP_FUNCTION(6,	"pcie",		"rstoutn"),
     83		 MPP_FUNCTION(7,	"i2c1",		"sda"),
     84		 MPP_FUNCTION(8,	"uart1",	"txd"),
     85		 MPP_FUNCTION(9,	"sata1",	"present_act"),
     86		 MPP_FUNCTION(10,	"xg",		"mdio")),
     87	MPP_MODE(4,
     88		 MPP_FUNCTION(0,	"gpio",		NULL),
     89		 MPP_FUNCTION(1,	"dev",		"ad13"),
     90		 MPP_FUNCTION(2,	"au",		"i2sbclk"),
     91		 MPP_FUNCTION(3,	"ge0",		"rxctl"),
     92		 MPP_FUNCTION(4,	"tdm",		"rstn"),
     93		 MPP_FUNCTION(5,	"mss_uart",	"rxd"),
     94		 MPP_FUNCTION(6,	"uart1",	"cts"),
     95		 MPP_FUNCTION(7,	"pcie0",	"clkreq"),
     96		 MPP_FUNCTION(8,	"uart3",	"rxd"),
     97		 MPP_FUNCTION(10,	"ge",		"mdc")),
     98	MPP_MODE(5,
     99		 MPP_FUNCTION(0,	"gpio",		NULL),
    100		 MPP_FUNCTION(1,	"dev",		"ad12"),
    101		 MPP_FUNCTION(2,	"au",		"i2sdi"),
    102		 MPP_FUNCTION(3,	"ge0",		"rxclk"),
    103		 MPP_FUNCTION(4,	"tdm",		"intn"),
    104		 MPP_FUNCTION(5,	"mss_uart",	"txd"),
    105		 MPP_FUNCTION(6,	"uart1",	"rts"),
    106		 MPP_FUNCTION(7,	"pcie1",	"clkreq"),
    107		 MPP_FUNCTION(8,	"uart3",	"txd"),
    108		 MPP_FUNCTION(10,	"ge",		"mdio")),
    109	MPP_MODE(6,
    110		 MPP_FUNCTION(0,	"gpio",		NULL),
    111		 MPP_FUNCTION(1,	"dev",		"ad11"),
    112		 MPP_FUNCTION(3,	"ge0",		"txd3"),
    113		 MPP_FUNCTION(4,	"spi0",		"csn2"),
    114		 MPP_FUNCTION(5,	"au",		"i2sextclk"),
    115		 MPP_FUNCTION(6,	"sata1",	"present_act"),
    116		 MPP_FUNCTION(7,	"pcie2",	"clkreq"),
    117		 MPP_FUNCTION(8,	"uart0",	"rxd"),
    118		 MPP_FUNCTION(9,	"ptp",		"pulse")),
    119	MPP_MODE(7,
    120		 MPP_FUNCTION(0,	"gpio",		NULL),
    121		 MPP_FUNCTION(1,	"dev",		"ad10"),
    122		 MPP_FUNCTION(3,	"ge0",		"txd2"),
    123		 MPP_FUNCTION(4,	"spi0",		"csn1"),
    124		 MPP_FUNCTION(5,	"spi1",		"csn1"),
    125		 MPP_FUNCTION(6,	"sata0",	"present_act"),
    126		 MPP_FUNCTION(7,	"led",		"data"),
    127		 MPP_FUNCTION(8,	"uart0",	"txd"),
    128		 MPP_FUNCTION(9,	"ptp",		"clk")),
    129	MPP_MODE(8,
    130		 MPP_FUNCTION(0,	"gpio",		NULL),
    131		 MPP_FUNCTION(1,	"dev",		"ad9"),
    132		 MPP_FUNCTION(3,	"ge0",		"txd1"),
    133		 MPP_FUNCTION(4,	"spi0",		"csn0"),
    134		 MPP_FUNCTION(5,	"spi1",		"csn0"),
    135		 MPP_FUNCTION(6,	"uart0",	"cts"),
    136		 MPP_FUNCTION(7,	"led",		"stb"),
    137		 MPP_FUNCTION(8,	"uart2",	"rxd"),
    138		 MPP_FUNCTION(9,	"ptp",		"pclk_out"),
    139		 MPP_FUNCTION(10,	"synce1",	"clk")),
    140	MPP_MODE(9,
    141		 MPP_FUNCTION(0,	"gpio",		NULL),
    142		 MPP_FUNCTION(1,	"dev",		"ad8"),
    143		 MPP_FUNCTION(3,	"ge0",		"txd0"),
    144		 MPP_FUNCTION(4,	"spi0",		"mosi"),
    145		 MPP_FUNCTION(5,	"spi1",		"mosi"),
    146		 MPP_FUNCTION(7,	"pcie",		"rstoutn"),
    147		 MPP_FUNCTION(10,	"synce2",	"clk")),
    148	MPP_MODE(10,
    149		 MPP_FUNCTION(0,	"gpio",		NULL),
    150		 MPP_FUNCTION(1,	"dev",		"readyn"),
    151		 MPP_FUNCTION(3,	"ge0",		"txctl"),
    152		 MPP_FUNCTION(4,	"spi0",		"miso"),
    153		 MPP_FUNCTION(5,	"spi1",		"miso"),
    154		 MPP_FUNCTION(6,	"uart0",	"cts"),
    155		 MPP_FUNCTION(7,	"sata1",	"present_act")),
    156	MPP_MODE(11,
    157		 MPP_FUNCTION(0,	"gpio",		NULL),
    158		 MPP_FUNCTION(1,	"dev",		"wen1"),
    159		 MPP_FUNCTION(3,	"ge0",		"txclkout"),
    160		 MPP_FUNCTION(4,	"spi0",		"clk"),
    161		 MPP_FUNCTION(5,	"spi1",		"clk"),
    162		 MPP_FUNCTION(6,	"uart0",	"rts"),
    163		 MPP_FUNCTION(7,	"led",		"clk"),
    164		 MPP_FUNCTION(8,	"uart2",	"txd"),
    165		 MPP_FUNCTION(9,	"sata0",	"present_act")),
    166	MPP_MODE(12,
    167		 MPP_FUNCTION(0,	"gpio",		NULL),
    168		 MPP_FUNCTION(1,	"dev",		"clk_out"),
    169		 MPP_FUNCTION(2,	"nf",		"rbn1"),
    170		 MPP_FUNCTION(3,	"spi1",		"csn1"),
    171		 MPP_FUNCTION(4,	"ge0",		"rxclk")),
    172	MPP_MODE(13,
    173		 MPP_FUNCTION(0,	"gpio",		NULL),
    174		 MPP_FUNCTION(1,	"dev",		"burstn"),
    175		 MPP_FUNCTION(2,	"nf",		"rbn0"),
    176		 MPP_FUNCTION(3,	"spi1",		"miso"),
    177		 MPP_FUNCTION(4,	"ge0",		"rxctl"),
    178		 MPP_FUNCTION(8,	"mss_spi",	"miso")),
    179	MPP_MODE(14,
    180		 MPP_FUNCTION(0,	"gpio",		NULL),
    181		 MPP_FUNCTION(1,	"dev",		"bootcsn"),
    182		 MPP_FUNCTION(2,	"dev",		"csn0"),
    183		 MPP_FUNCTION(3,	"spi1",		"csn0"),
    184		 MPP_FUNCTION(4,	"spi0",		"csn3"),
    185		 MPP_FUNCTION(5,	"au",		"i2sextclk"),
    186		 MPP_FUNCTION(6,	"spi0",		"miso"),
    187		 MPP_FUNCTION(7,	"sata0",	"present_act"),
    188		 MPP_FUNCTION(8,	"mss_spi",	"csn")),
    189	MPP_MODE(15,
    190		 MPP_FUNCTION(0,	"gpio",		NULL),
    191		 MPP_FUNCTION(1,	"dev",		"ad7"),
    192		 MPP_FUNCTION(3,	"spi1",		"mosi"),
    193		 MPP_FUNCTION(6,	"spi0",		"mosi"),
    194		 MPP_FUNCTION(8,	"mss_spi",	"mosi"),
    195		 MPP_FUNCTION(11,	"ptp",		"pulse_cp2cp")),
    196	MPP_MODE(16,
    197		 MPP_FUNCTION(0,	"gpio",		NULL),
    198		 MPP_FUNCTION(1,	"dev",		"ad6"),
    199		 MPP_FUNCTION(3,	"spi1",		"clk"),
    200		 MPP_FUNCTION(8,	"mss_spi",	"clk")),
    201	MPP_MODE(17,
    202		 MPP_FUNCTION(0,	"gpio",		NULL),
    203		 MPP_FUNCTION(1,	"dev",		"ad5"),
    204		 MPP_FUNCTION(4,	"ge0",		"txd3")),
    205	MPP_MODE(18,
    206		 MPP_FUNCTION(0,	"gpio",		NULL),
    207		 MPP_FUNCTION(1,	"dev",		"ad4"),
    208		 MPP_FUNCTION(4,	"ge0",		"txd2"),
    209		 MPP_FUNCTION(11,	"ptp",		"clk_cp2cp")),
    210	MPP_MODE(19,
    211		 MPP_FUNCTION(0,	"gpio",		NULL),
    212		 MPP_FUNCTION(1,	"dev",		"ad3"),
    213		 MPP_FUNCTION(4,	"ge0",		"txd1"),
    214		 MPP_FUNCTION(11,	"wakeup",	"out_cp2cp")),
    215	MPP_MODE(20,
    216		 MPP_FUNCTION(0,	"gpio",		NULL),
    217		 MPP_FUNCTION(1,	"dev",		"ad2"),
    218		 MPP_FUNCTION(4,	"ge0",		"txd0")),
    219	MPP_MODE(21,
    220		 MPP_FUNCTION(0,	"gpio",		NULL),
    221		 MPP_FUNCTION(1,	"dev",		"ad1"),
    222		 MPP_FUNCTION(4,	"ge0",		"txctl"),
    223		 MPP_FUNCTION(11,	"sei",		"in_cp2cp")),
    224	MPP_MODE(22,
    225		 MPP_FUNCTION(0,	"gpio",		NULL),
    226		 MPP_FUNCTION(1,	"dev",		"ad0"),
    227		 MPP_FUNCTION(4,	"ge0",		"txclkout"),
    228		 MPP_FUNCTION(11,	"wakeup",	"in_cp2cp")),
    229	MPP_MODE(23,
    230		 MPP_FUNCTION(0,	"gpio",		NULL),
    231		 MPP_FUNCTION(1,	"dev",		"a1"),
    232		 MPP_FUNCTION(5,	"au",		"i2smclk"),
    233		 MPP_FUNCTION(11,	"link",		"rd_in_cp2cp")),
    234	MPP_MODE(24,
    235		 MPP_FUNCTION(0,	"gpio",		NULL),
    236		 MPP_FUNCTION(1,	"dev",		"a0"),
    237		 MPP_FUNCTION(5,	"au",		"i2slrclk")),
    238	MPP_MODE(25,
    239		 MPP_FUNCTION(0,	"gpio",		NULL),
    240		 MPP_FUNCTION(1,	"dev",		"oen"),
    241		 MPP_FUNCTION(5,	"au",		"i2sdo_spdifo")),
    242	MPP_MODE(26,
    243		 MPP_FUNCTION(0,	"gpio",		NULL),
    244		 MPP_FUNCTION(1,	"dev",		"wen0"),
    245		 MPP_FUNCTION(5,	"au",		"i2sbclk")),
    246	MPP_MODE(27,
    247		 MPP_FUNCTION(0,	"gpio",		NULL),
    248		 MPP_FUNCTION(1,	"dev",		"csn0"),
    249		 MPP_FUNCTION(2,	"spi1",		"miso"),
    250		 MPP_FUNCTION(3,	"mss_gpio4",	NULL),
    251		 MPP_FUNCTION(4,	"ge0",		"rxd3"),
    252		 MPP_FUNCTION(5,	"spi0",		"csn4"),
    253		 MPP_FUNCTION(8,	"ge",		"mdio"),
    254		 MPP_FUNCTION(9,	"sata0",	"present_act"),
    255		 MPP_FUNCTION(10,	"uart0",	"rts"),
    256		 MPP_FUNCTION(11,	"rei",		"in_cp2cp")),
    257	MPP_MODE(28,
    258		 MPP_FUNCTION(0,	"gpio",		NULL),
    259		 MPP_FUNCTION(1,	"dev",		"csn1"),
    260		 MPP_FUNCTION(2,	"spi1",		"csn0"),
    261		 MPP_FUNCTION(3,	"mss_gpio5",	NULL),
    262		 MPP_FUNCTION(4,	"ge0",		"rxd2"),
    263		 MPP_FUNCTION(5,	"spi0",		"csn5"),
    264		 MPP_FUNCTION(6,	"pcie2",	"clkreq"),
    265		 MPP_FUNCTION(7,	"ptp",		"pulse"),
    266		 MPP_FUNCTION(8,	"ge",		"mdc"),
    267		 MPP_FUNCTION(9,	"sata1",	"present_act"),
    268		 MPP_FUNCTION(10,	"uart0",	"cts"),
    269		 MPP_FUNCTION(11,	"led",		"data")),
    270	MPP_MODE(29,
    271		 MPP_FUNCTION(0,	"gpio",		NULL),
    272		 MPP_FUNCTION(1,	"dev",		"csn2"),
    273		 MPP_FUNCTION(2,	"spi1",		"mosi"),
    274		 MPP_FUNCTION(3,	"mss_gpio6",	NULL),
    275		 MPP_FUNCTION(4,	"ge0",		"rxd1"),
    276		 MPP_FUNCTION(5,	"spi0",		"csn6"),
    277		 MPP_FUNCTION(6,	"pcie1",	"clkreq"),
    278		 MPP_FUNCTION(7,	"ptp",		"clk"),
    279		 MPP_FUNCTION(8,	"mss_i2c",	"sda"),
    280		 MPP_FUNCTION(9,	"sata0",	"present_act"),
    281		 MPP_FUNCTION(10,	"uart0",	"rxd"),
    282		 MPP_FUNCTION(11,	"led",		"stb")),
    283	MPP_MODE(30,
    284		 MPP_FUNCTION(0,	"gpio",		NULL),
    285		 MPP_FUNCTION(1,	"dev",		"csn3"),
    286		 MPP_FUNCTION(2,	"spi1",		"clk"),
    287		 MPP_FUNCTION(3,	"mss_gpio7",	NULL),
    288		 MPP_FUNCTION(4,	"ge0",		"rxd0"),
    289		 MPP_FUNCTION(5,	"spi0",		"csn7"),
    290		 MPP_FUNCTION(6,	"pcie0",	"clkreq"),
    291		 MPP_FUNCTION(7,	"ptp",		"pclk_out"),
    292		 MPP_FUNCTION(8,	"mss_i2c",	"sck"),
    293		 MPP_FUNCTION(9,	"sata1",	"present_act"),
    294		 MPP_FUNCTION(10,	"uart0",	"txd"),
    295		 MPP_FUNCTION(11,	"led",		"clk")),
    296	MPP_MODE(31,
    297		 MPP_FUNCTION(0,	"gpio",		NULL),
    298		 MPP_FUNCTION(1,	"dev",		"a2"),
    299		 MPP_FUNCTION(3,	"mss_gpio4",	NULL),
    300		 MPP_FUNCTION(6,	"pcie",		"rstoutn"),
    301		 MPP_FUNCTION(8,	"ge",		"mdc")),
    302	MPP_MODE(32,
    303		 MPP_FUNCTION(0,	"gpio",		NULL),
    304		 MPP_FUNCTION(1,	"mii",		"col"),
    305		 MPP_FUNCTION(2,	"mii",		"txerr"),
    306		 MPP_FUNCTION(3,	"mss_spi",	"miso"),
    307		 MPP_FUNCTION(4,	"tdm",		"drx"),
    308		 MPP_FUNCTION(5,	"au",		"i2sextclk"),
    309		 MPP_FUNCTION(6,	"au",		"i2sdi"),
    310		 MPP_FUNCTION(7,	"ge",		"mdio"),
    311		 MPP_FUNCTION(8,	"sdio",		"v18_en"),
    312		 MPP_FUNCTION(9,	"pcie1",	"clkreq"),
    313		 MPP_FUNCTION(10,	"mss_gpio0",	NULL)),
    314	MPP_MODE(33,
    315		 MPP_FUNCTION(0,	"gpio",		NULL),
    316		 MPP_FUNCTION(1,	"mii",		"txclk"),
    317		 MPP_FUNCTION(2,	"sdio",		"pwr10"),
    318		 MPP_FUNCTION(3,	"mss_spi",	"csn"),
    319		 MPP_FUNCTION(4,	"tdm",		"fsync"),
    320		 MPP_FUNCTION(5,	"au",		"i2smclk"),
    321		 MPP_FUNCTION(6,	"sdio",		"bus_pwr"),
    322		 MPP_FUNCTION(8,	"xg",		"mdio"),
    323		 MPP_FUNCTION(9,	"pcie2",	"clkreq"),
    324		 MPP_FUNCTION(10,	"mss_gpio1",	NULL)),
    325	MPP_MODE(34,
    326		 MPP_FUNCTION(0,	"gpio",		NULL),
    327		 MPP_FUNCTION(1,	"mii",		"rxerr"),
    328		 MPP_FUNCTION(2,	"sdio",		"pwr11"),
    329		 MPP_FUNCTION(3,	"mss_spi",	"mosi"),
    330		 MPP_FUNCTION(4,	"tdm",		"dtx"),
    331		 MPP_FUNCTION(5,	"au",		"i2slrclk"),
    332		 MPP_FUNCTION(6,	"sdio",		"wr_protect"),
    333		 MPP_FUNCTION(7,	"ge",		"mdc"),
    334		 MPP_FUNCTION(9,	"pcie0",	"clkreq"),
    335		 MPP_FUNCTION(10,	"mss_gpio2",	NULL)),
    336	MPP_MODE(35,
    337		 MPP_FUNCTION(0,	"gpio",		NULL),
    338		 MPP_FUNCTION(1,	"sata1",	"present_act"),
    339		 MPP_FUNCTION(2,	"i2c1",		"sda"),
    340		 MPP_FUNCTION(3,	"mss_spi",	"clk"),
    341		 MPP_FUNCTION(4,	"tdm",		"pclk"),
    342		 MPP_FUNCTION(5,	"au",		"i2sdo_spdifo"),
    343		 MPP_FUNCTION(6,	"sdio",		"card_detect"),
    344		 MPP_FUNCTION(7,	"xg",		"mdio"),
    345		 MPP_FUNCTION(8,	"ge",		"mdio"),
    346		 MPP_FUNCTION(9,	"pcie",		"rstoutn"),
    347		 MPP_FUNCTION(10,	"mss_gpio3",	NULL)),
    348	MPP_MODE(36,
    349		 MPP_FUNCTION(0,	"gpio",		NULL),
    350		 MPP_FUNCTION(1,	"synce2",	"clk"),
    351		 MPP_FUNCTION(2,	"i2c1",		"sck"),
    352		 MPP_FUNCTION(3,	"ptp",		"clk"),
    353		 MPP_FUNCTION(4,	"synce1",	"clk"),
    354		 MPP_FUNCTION(5,	"au",		"i2sbclk"),
    355		 MPP_FUNCTION(6,	"sata0",	"present_act"),
    356		 MPP_FUNCTION(7,	"xg",		"mdc"),
    357		 MPP_FUNCTION(8,	"ge",		"mdc"),
    358		 MPP_FUNCTION(9,	"pcie2",	"clkreq"),
    359		 MPP_FUNCTION(10,	"mss_gpio5",	NULL)),
    360	MPP_MODE(37,
    361		 MPP_FUNCTION(0,	"gpio",		NULL),
    362		 MPP_FUNCTION(1,	"uart2",	"rxd"),
    363		 MPP_FUNCTION(2,	"i2c0",		"sck"),
    364		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),
    365		 MPP_FUNCTION(4,	"tdm",		"intn"),
    366		 MPP_FUNCTION(5,	"mss_i2c",	"sck"),
    367		 MPP_FUNCTION(6,	"sata1",	"present_act"),
    368		 MPP_FUNCTION(7,	"ge",		"mdc"),
    369		 MPP_FUNCTION(8,	"xg",		"mdc"),
    370		 MPP_FUNCTION(9,	"pcie1",	"clkreq"),
    371		 MPP_FUNCTION(10,	"mss_gpio6",	NULL),
    372		 MPP_FUNCTION(11,	"link",		"rd_out_cp2cp")),
    373	MPP_MODE(38,
    374		 MPP_FUNCTION(0,	"gpio",		NULL),
    375		 MPP_FUNCTION(1,	"uart2",	"txd"),
    376		 MPP_FUNCTION(2,	"i2c0",		"sda"),
    377		 MPP_FUNCTION(3,	"ptp",		"pulse"),
    378		 MPP_FUNCTION(4,	"tdm",		"rstn"),
    379		 MPP_FUNCTION(5,	"mss_i2c",	"sda"),
    380		 MPP_FUNCTION(6,	"sata0",	"present_act"),
    381		 MPP_FUNCTION(7,	"ge",		"mdio"),
    382		 MPP_FUNCTION(8,	"xg",		"mdio"),
    383		 MPP_FUNCTION(9,	"au",		"i2sextclk"),
    384		 MPP_FUNCTION(10,	"mss_gpio7",	NULL),
    385		 MPP_FUNCTION(11,	"ptp",		"pulse_cp2cp")),
    386	MPP_MODE(39,
    387		 MPP_FUNCTION(0,	"gpio",		NULL),
    388		 MPP_FUNCTION(1,	"sdio",		"wr_protect"),
    389		 MPP_FUNCTION(4,	"au",		"i2sbclk"),
    390		 MPP_FUNCTION(5,	"ptp",		"clk"),
    391		 MPP_FUNCTION(6,	"spi0",		"csn1"),
    392		 MPP_FUNCTION(9,	"sata1",	"present_act"),
    393		 MPP_FUNCTION(10,	"mss_gpio0",	NULL)),
    394	MPP_MODE(40,
    395		 MPP_FUNCTION(0,	"gpio",		NULL),
    396		 MPP_FUNCTION(1,	"sdio",		"pwr11"),
    397		 MPP_FUNCTION(2,	"synce1",	"clk"),
    398		 MPP_FUNCTION(3,	"mss_i2c",	"sda"),
    399		 MPP_FUNCTION(4,	"au",		"i2sdo_spdifo"),
    400		 MPP_FUNCTION(5,	"ptp",		"pclk_out"),
    401		 MPP_FUNCTION(6,	"spi0",		"clk"),
    402		 MPP_FUNCTION(7,	"uart1",	"txd"),
    403		 MPP_FUNCTION(8,	"ge",		"mdio"),
    404		 MPP_FUNCTION(9,	"sata0",	"present_act"),
    405		 MPP_FUNCTION(10,	"mss_gpio1",	NULL)),
    406	MPP_MODE(41,
    407		 MPP_FUNCTION(0,	"gpio",		NULL),
    408		 MPP_FUNCTION(1,	"sdio",		"pwr10"),
    409		 MPP_FUNCTION(2,	"sdio",		"bus_pwr"),
    410		 MPP_FUNCTION(3,	"mss_i2c",	"sck"),
    411		 MPP_FUNCTION(4,	"au",		"i2slrclk"),
    412		 MPP_FUNCTION(5,	"ptp",		"pulse"),
    413		 MPP_FUNCTION(6,	"spi0",		"mosi"),
    414		 MPP_FUNCTION(7,	"uart1",	"rxd"),
    415		 MPP_FUNCTION(8,	"ge",		"mdc"),
    416		 MPP_FUNCTION(9,	"sata1",	"present_act"),
    417		 MPP_FUNCTION(10,	"mss_gpio2",	NULL),
    418		 MPP_FUNCTION(11,	"rei",		"out_cp2cp")),
    419	MPP_MODE(42,
    420		 MPP_FUNCTION(0,	"gpio",		NULL),
    421		 MPP_FUNCTION(1,	"sdio",		"v18_en"),
    422		 MPP_FUNCTION(2,	"sdio",		"wr_protect"),
    423		 MPP_FUNCTION(3,	"synce2",	"clk"),
    424		 MPP_FUNCTION(4,	"au",		"i2smclk"),
    425		 MPP_FUNCTION(5,	"mss_uart",	"txd"),
    426		 MPP_FUNCTION(6,	"spi0",		"miso"),
    427		 MPP_FUNCTION(7,	"uart1",	"cts"),
    428		 MPP_FUNCTION(8,	"xg",		"mdc"),
    429		 MPP_FUNCTION(9,	"sata0",	"present_act"),
    430		 MPP_FUNCTION(10,	"mss_gpio4",	NULL)),
    431	MPP_MODE(43,
    432		 MPP_FUNCTION(0,	"gpio",		NULL),
    433		 MPP_FUNCTION(1,	"sdio",		"card_detect"),
    434		 MPP_FUNCTION(3,	"synce1",	"clk"),
    435		 MPP_FUNCTION(4,	"au",		"i2sextclk"),
    436		 MPP_FUNCTION(5,	"mss_uart",	"rxd"),
    437		 MPP_FUNCTION(6,	"spi0",		"csn0"),
    438		 MPP_FUNCTION(7,	"uart1",	"rts"),
    439		 MPP_FUNCTION(8,	"xg",		"mdio"),
    440		 MPP_FUNCTION(9,	"sata1",	"present_act"),
    441		 MPP_FUNCTION(10,	"mss_gpio5",	NULL),
    442		 MPP_FUNCTION(11,	"wakeup",	"out_cp2cp")),
    443	MPP_MODE(44,
    444		 MPP_FUNCTION(0,	"gpio",		NULL),
    445		 MPP_FUNCTION(1,	"ge1",		"txd2"),
    446		 MPP_FUNCTION(7,	"uart0",	"rts"),
    447		 MPP_FUNCTION(11,	"ptp",		"clk_cp2cp")),
    448	MPP_MODE(45,
    449		 MPP_FUNCTION(0,	"gpio",		NULL),
    450		 MPP_FUNCTION(1,	"ge1",		"txd3"),
    451		 MPP_FUNCTION(7,	"uart0",	"txd"),
    452		 MPP_FUNCTION(9,	"pcie",		"rstoutn")),
    453	MPP_MODE(46,
    454		 MPP_FUNCTION(0,	"gpio",		NULL),
    455		 MPP_FUNCTION(1,	"ge1",		"txd1"),
    456		 MPP_FUNCTION(7,	"uart1",	"rts")),
    457	MPP_MODE(47,
    458		 MPP_FUNCTION(0,	"gpio",		NULL),
    459		 MPP_FUNCTION(1,	"ge1",		"txd0"),
    460		 MPP_FUNCTION(5,	"spi1",		"clk"),
    461		 MPP_FUNCTION(7,	"uart1",	"txd"),
    462		 MPP_FUNCTION(8,	"ge",		"mdc")),
    463	MPP_MODE(48,
    464		 MPP_FUNCTION(0,	"gpio",		NULL),
    465		 MPP_FUNCTION(1,	"ge1",		"txctl_txen"),
    466		 MPP_FUNCTION(5,	"spi1",		"mosi"),
    467		 MPP_FUNCTION(8,	"xg",		"mdc"),
    468		 MPP_FUNCTION(11,	"wakeup",	"in_cp2cp")),
    469	MPP_MODE(49,
    470		 MPP_FUNCTION(0,	"gpio",		NULL),
    471		 MPP_FUNCTION(1,	"ge1",		"txclkout"),
    472		 MPP_FUNCTION(2,	"mii",		"crs"),
    473		 MPP_FUNCTION(5,	"spi1",		"miso"),
    474		 MPP_FUNCTION(7,	"uart1",	"rxd"),
    475		 MPP_FUNCTION(8,	"ge",		"mdio"),
    476		 MPP_FUNCTION(9,	"pcie0",	"clkreq"),
    477		 MPP_FUNCTION(10,	"sdio",		"v18_en"),
    478		 MPP_FUNCTION(11,	"sei",		"out_cp2cp")),
    479	MPP_MODE(50,
    480		 MPP_FUNCTION(0,	"gpio",		NULL),
    481		 MPP_FUNCTION(1,	"ge1",		"rxclk"),
    482		 MPP_FUNCTION(2,	"mss_i2c",	"sda"),
    483		 MPP_FUNCTION(5,	"spi1",		"csn0"),
    484		 MPP_FUNCTION(6,	"uart2",	"txd"),
    485		 MPP_FUNCTION(7,	"uart0",	"rxd"),
    486		 MPP_FUNCTION(8,	"xg",		"mdio"),
    487		 MPP_FUNCTION(10,	"sdio",		"pwr11")),
    488	MPP_MODE(51,
    489		 MPP_FUNCTION(0,	"gpio",		NULL),
    490		 MPP_FUNCTION(1,	"ge1",		"rxd0"),
    491		 MPP_FUNCTION(2,	"mss_i2c",	"sck"),
    492		 MPP_FUNCTION(5,	"spi1",		"csn1"),
    493		 MPP_FUNCTION(6,	"uart2",	"rxd"),
    494		 MPP_FUNCTION(7,	"uart0",	"cts"),
    495		 MPP_FUNCTION(10,	"sdio",		"pwr10")),
    496	MPP_MODE(52,
    497		 MPP_FUNCTION(0,	"gpio",		NULL),
    498		 MPP_FUNCTION(1,	"ge1",		"rxd1"),
    499		 MPP_FUNCTION(2,	"synce1",	"clk"),
    500		 MPP_FUNCTION(4,	"synce2",	"clk"),
    501		 MPP_FUNCTION(5,	"spi1",		"csn2"),
    502		 MPP_FUNCTION(7,	"uart1",	"cts"),
    503		 MPP_FUNCTION(8,	"led",		"clk"),
    504		 MPP_FUNCTION(9,	"pcie",		"rstoutn"),
    505		 MPP_FUNCTION(10,	"pcie0",	"clkreq")),
    506	MPP_MODE(53,
    507		 MPP_FUNCTION(0,	"gpio",		NULL),
    508		 MPP_FUNCTION(1,	"ge1",		"rxd2"),
    509		 MPP_FUNCTION(3,	"ptp",		"clk"),
    510		 MPP_FUNCTION(5,	"spi1",		"csn3"),
    511		 MPP_FUNCTION(7,	"uart1",	"rxd"),
    512		 MPP_FUNCTION(8,	"led",		"stb"),
    513		 MPP_FUNCTION(11,	"sdio",		"led")),
    514	MPP_MODE(54,
    515		 MPP_FUNCTION(0,	"gpio",		NULL),
    516		 MPP_FUNCTION(1,	"ge1",		"rxd3"),
    517		 MPP_FUNCTION(2,	"synce2",	"clk"),
    518		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),
    519		 MPP_FUNCTION(4,	"synce1",	"clk"),
    520		 MPP_FUNCTION(8,	"led",		"data"),
    521		 MPP_FUNCTION(10,	"sdio",		"hw_rst"),
    522		 MPP_FUNCTION(11,	"sdio_wp",	"wr_protect")),
    523	MPP_MODE(55,
    524		 MPP_FUNCTION(0,	"gpio",		NULL),
    525		 MPP_FUNCTION(1,	"ge1",		"rxctl_rxdv"),
    526		 MPP_FUNCTION(3,	"ptp",		"pulse"),
    527		 MPP_FUNCTION(10,	"sdio",		"led"),
    528		 MPP_FUNCTION(11,	"sdio_cd",	"card_detect")),
    529	MPP_MODE(56,
    530		 MPP_FUNCTION(0,	"gpio",		NULL),
    531		 MPP_FUNCTION(4,	"tdm",		"drx"),
    532		 MPP_FUNCTION(5,	"au",		"i2sdo_spdifo"),
    533		 MPP_FUNCTION(6,	"spi0",		"clk"),
    534		 MPP_FUNCTION(7,	"uart1",	"rxd"),
    535		 MPP_FUNCTION(9,	"sata1",	"present_act"),
    536		 MPP_FUNCTION(14,	"sdio",		"clk")),
    537	MPP_MODE(57,
    538		 MPP_FUNCTION(0,	"gpio",		NULL),
    539		 MPP_FUNCTION(2,	"mss_i2c",	"sda"),
    540		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),
    541		 MPP_FUNCTION(4,	"tdm",		"intn"),
    542		 MPP_FUNCTION(5,	"au",		"i2sbclk"),
    543		 MPP_FUNCTION(6,	"spi0",		"mosi"),
    544		 MPP_FUNCTION(7,	"uart1",	"txd"),
    545		 MPP_FUNCTION(9,	"sata0",	"present_act"),
    546		 MPP_FUNCTION(14,	"sdio",		"cmd")),
    547	MPP_MODE(58,
    548		 MPP_FUNCTION(0,	"gpio",		NULL),
    549		 MPP_FUNCTION(2,	"mss_i2c",	"sck"),
    550		 MPP_FUNCTION(3,	"ptp",		"clk"),
    551		 MPP_FUNCTION(4,	"tdm",		"rstn"),
    552		 MPP_FUNCTION(5,	"au",		"i2sdi"),
    553		 MPP_FUNCTION(6,	"spi0",		"miso"),
    554		 MPP_FUNCTION(7,	"uart1",	"cts"),
    555		 MPP_FUNCTION(8,	"led",		"clk"),
    556		 MPP_FUNCTION(14,	"sdio",		"d0")),
    557	MPP_MODE(59,
    558		 MPP_FUNCTION(0,	"gpio",		NULL),
    559		 MPP_FUNCTION(1,	"mss_gpio7",	NULL),
    560		 MPP_FUNCTION(2,	"synce2",	"clk"),
    561		 MPP_FUNCTION(4,	"tdm",		"fsync"),
    562		 MPP_FUNCTION(5,	"au",		"i2slrclk"),
    563		 MPP_FUNCTION(6,	"spi0",		"csn0"),
    564		 MPP_FUNCTION(7,	"uart0",	"cts"),
    565		 MPP_FUNCTION(8,	"led",		"stb"),
    566		 MPP_FUNCTION(9,	"uart1",	"txd"),
    567		 MPP_FUNCTION(14,	"sdio",		"d1")),
    568	MPP_MODE(60,
    569		 MPP_FUNCTION(0,	"gpio",		NULL),
    570		 MPP_FUNCTION(1,	"mss_gpio6",	NULL),
    571		 MPP_FUNCTION(3,	"ptp",		"pulse"),
    572		 MPP_FUNCTION(4,	"tdm",		"dtx"),
    573		 MPP_FUNCTION(5,	"au",		"i2smclk"),
    574		 MPP_FUNCTION(6,	"spi0",		"csn1"),
    575		 MPP_FUNCTION(7,	"uart0",	"rts"),
    576		 MPP_FUNCTION(8,	"led",		"data"),
    577		 MPP_FUNCTION(9,	"uart1",	"rxd"),
    578		 MPP_FUNCTION(14,	"sdio",		"d2")),
    579	MPP_MODE(61,
    580		 MPP_FUNCTION(0,	"gpio",		NULL),
    581		 MPP_FUNCTION(1,	"mss_gpio5",	NULL),
    582		 MPP_FUNCTION(3,	"ptp",		"clk"),
    583		 MPP_FUNCTION(4,	"tdm",		"pclk"),
    584		 MPP_FUNCTION(5,	"au",		"i2sextclk"),
    585		 MPP_FUNCTION(6,	"spi0",		"csn2"),
    586		 MPP_FUNCTION(7,	"uart0",	"txd"),
    587		 MPP_FUNCTION(8,	"uart2",	"txd"),
    588		 MPP_FUNCTION(9,	"sata1",	"present_act"),
    589		 MPP_FUNCTION(10,	"ge",		"mdio"),
    590		 MPP_FUNCTION(14,	"sdio",		"d3")),
    591	MPP_MODE(62,
    592		 MPP_FUNCTION(0,	"gpio",		NULL),
    593		 MPP_FUNCTION(1,	"mss_gpio4",	NULL),
    594		 MPP_FUNCTION(2,	"synce1",	"clk"),
    595		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),
    596		 MPP_FUNCTION(5,	"sata1",	"present_act"),
    597		 MPP_FUNCTION(6,	"spi0",		"csn3"),
    598		 MPP_FUNCTION(7,	"uart0",	"rxd"),
    599		 MPP_FUNCTION(8,	"uart2",	"rxd"),
    600		 MPP_FUNCTION(9,	"sata0",	"present_act"),
    601		 MPP_FUNCTION(10,	"ge",		"mdc"),
    602		 MPP_FUNCTION(14,	"sdio",		"ds")),
    603};
    604
    605static const struct of_device_id armada_cp110_pinctrl_of_match[] = {
    606	{
    607		.compatible	= "marvell,armada-7k-pinctrl",
    608		.data		= (void *) V_ARMADA_7K,
    609	},
    610	{
    611		.compatible	= "marvell,armada-8k-cpm-pinctrl",
    612		.data		= (void *) V_ARMADA_8K_CPM,
    613	},
    614	{
    615		.compatible	= "marvell,armada-8k-cps-pinctrl",
    616		.data		= (void *) V_ARMADA_8K_CPS,
    617	},
    618	{
    619		.compatible	= "marvell,cp115-standalone-pinctrl",
    620		.data		= (void *) V_CP115_STANDALONE,
    621	},
    622	{ },
    623};
    624
    625static const struct mvebu_mpp_ctrl armada_cp110_mpp_controls[] = {
    626	MPP_FUNC_CTRL(0, 62, NULL, mvebu_regmap_mpp_ctrl),
    627};
    628
    629static void mvebu_pinctrl_assign_variant(struct mvebu_mpp_mode *m,
    630					 u8 variant)
    631{
    632	struct mvebu_mpp_ctrl_setting *s;
    633
    634	for (s = m->settings ; s->name ; s++)
    635		s->variant = variant;
    636}
    637
    638static int armada_cp110_pinctrl_probe(struct platform_device *pdev)
    639{
    640	struct mvebu_pinctrl_soc_info *soc;
    641	const struct of_device_id *match =
    642		of_match_device(armada_cp110_pinctrl_of_match, &pdev->dev);
    643	int i;
    644
    645	if (!pdev->dev.parent)
    646		return -ENODEV;
    647
    648	soc = devm_kzalloc(&pdev->dev,
    649			   sizeof(struct mvebu_pinctrl_soc_info), GFP_KERNEL);
    650	if (!soc)
    651		return -ENOMEM;
    652
    653	soc->variant = (unsigned long) match->data & 0xff;
    654	soc->controls = armada_cp110_mpp_controls;
    655	soc->ncontrols = ARRAY_SIZE(armada_cp110_mpp_controls);
    656	soc->modes = armada_cp110_mpp_modes;
    657	soc->nmodes = ARRAY_SIZE(armada_cp110_mpp_modes);
    658	for (i = 0; i < ARRAY_SIZE(armada_cp110_mpp_modes); i++) {
    659		struct mvebu_mpp_mode *m = &armada_cp110_mpp_modes[i];
    660
    661		switch (i) {
    662		case 0 ... 31:
    663			mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPS |
    664							 V_CP115_STANDALONE));
    665			break;
    666		case 32 ... 38:
    667			mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM |
    668							 V_CP115_STANDALONE));
    669			break;
    670		case 39 ... 43:
    671			mvebu_pinctrl_assign_variant(m, (V_ARMADA_8K_CPM |
    672							 V_CP115_STANDALONE));
    673			break;
    674		case 44 ... 62:
    675			mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM |
    676							 V_CP115_STANDALONE));
    677			break;
    678		}
    679	}
    680	pdev->dev.platform_data = soc;
    681
    682	return mvebu_pinctrl_simple_regmap_probe(pdev, pdev->dev.parent, 0);
    683}
    684
    685static struct platform_driver armada_cp110_pinctrl_driver = {
    686	.driver = {
    687		.name = "armada-cp110-pinctrl",
    688		.of_match_table = of_match_ptr(armada_cp110_pinctrl_of_match),
    689	},
    690	.probe = armada_cp110_pinctrl_probe,
    691};
    692
    693builtin_platform_driver(armada_cp110_pinctrl_driver);