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-mt7620.c (12667B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2
      3#include <asm/mach-ralink/ralink_regs.h>
      4#include <asm/mach-ralink/mt7620.h>
      5#include <linux/module.h>
      6#include <linux/platform_device.h>
      7#include <linux/of.h>
      8#include "pinctrl-ralink.h"
      9
     10#define MT7620_GPIO_MODE_UART0_SHIFT	2
     11#define MT7620_GPIO_MODE_UART0_MASK	0x7
     12#define MT7620_GPIO_MODE_UART0(x)	((x) << MT7620_GPIO_MODE_UART0_SHIFT)
     13#define MT7620_GPIO_MODE_UARTF		0x0
     14#define MT7620_GPIO_MODE_PCM_UARTF	0x1
     15#define MT7620_GPIO_MODE_PCM_I2S	0x2
     16#define MT7620_GPIO_MODE_I2S_UARTF	0x3
     17#define MT7620_GPIO_MODE_PCM_GPIO	0x4
     18#define MT7620_GPIO_MODE_GPIO_UARTF	0x5
     19#define MT7620_GPIO_MODE_GPIO_I2S	0x6
     20#define MT7620_GPIO_MODE_GPIO		0x7
     21
     22#define MT7620_GPIO_MODE_NAND		0
     23#define MT7620_GPIO_MODE_SD		1
     24#define MT7620_GPIO_MODE_ND_SD_GPIO	2
     25#define MT7620_GPIO_MODE_ND_SD_MASK	0x3
     26#define MT7620_GPIO_MODE_ND_SD_SHIFT	18
     27
     28#define MT7620_GPIO_MODE_PCIE_RST	0
     29#define MT7620_GPIO_MODE_PCIE_REF	1
     30#define MT7620_GPIO_MODE_PCIE_GPIO	2
     31#define MT7620_GPIO_MODE_PCIE_MASK	0x3
     32#define MT7620_GPIO_MODE_PCIE_SHIFT	16
     33
     34#define MT7620_GPIO_MODE_WDT_RST	0
     35#define MT7620_GPIO_MODE_WDT_REF	1
     36#define MT7620_GPIO_MODE_WDT_GPIO	2
     37#define MT7620_GPIO_MODE_WDT_MASK	0x3
     38#define MT7620_GPIO_MODE_WDT_SHIFT	21
     39
     40#define MT7620_GPIO_MODE_MDIO		0
     41#define MT7620_GPIO_MODE_MDIO_REFCLK	1
     42#define MT7620_GPIO_MODE_MDIO_GPIO	2
     43#define MT7620_GPIO_MODE_MDIO_MASK	0x3
     44#define MT7620_GPIO_MODE_MDIO_SHIFT	7
     45
     46#define MT7620_GPIO_MODE_I2C		0
     47#define MT7620_GPIO_MODE_UART1		5
     48#define MT7620_GPIO_MODE_RGMII1		9
     49#define MT7620_GPIO_MODE_RGMII2		10
     50#define MT7620_GPIO_MODE_SPI		11
     51#define MT7620_GPIO_MODE_SPI_REF_CLK	12
     52#define MT7620_GPIO_MODE_WLED		13
     53#define MT7620_GPIO_MODE_JTAG		15
     54#define MT7620_GPIO_MODE_EPHY		15
     55#define MT7620_GPIO_MODE_PA		20
     56
     57static struct ralink_pmx_func i2c_func[] =  { FUNC("i2c", 0, 1, 2) };
     58static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
     59static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
     60static struct ralink_pmx_func mdio_func[] = {
     61	FUNC("mdio", MT7620_GPIO_MODE_MDIO, 22, 2),
     62	FUNC("refclk", MT7620_GPIO_MODE_MDIO_REFCLK, 22, 2),
     63};
     64static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 24, 12) };
     65static struct ralink_pmx_func refclk_func[] = { FUNC("spi refclk", 0, 37, 3) };
     66static struct ralink_pmx_func ephy_func[] = { FUNC("ephy", 0, 40, 5) };
     67static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 60, 12) };
     68static struct ralink_pmx_func wled_func[] = { FUNC("wled", 0, 72, 1) };
     69static struct ralink_pmx_func pa_func[] = { FUNC("pa", 0, 18, 4) };
     70static struct ralink_pmx_func uartf_func[] = {
     71	FUNC("uartf", MT7620_GPIO_MODE_UARTF, 7, 8),
     72	FUNC("pcm uartf", MT7620_GPIO_MODE_PCM_UARTF, 7, 8),
     73	FUNC("pcm i2s", MT7620_GPIO_MODE_PCM_I2S, 7, 8),
     74	FUNC("i2s uartf", MT7620_GPIO_MODE_I2S_UARTF, 7, 8),
     75	FUNC("pcm gpio", MT7620_GPIO_MODE_PCM_GPIO, 11, 4),
     76	FUNC("gpio uartf", MT7620_GPIO_MODE_GPIO_UARTF, 7, 4),
     77	FUNC("gpio i2s", MT7620_GPIO_MODE_GPIO_I2S, 7, 4),
     78};
     79static struct ralink_pmx_func wdt_func[] = {
     80	FUNC("wdt rst", 0, 17, 1),
     81	FUNC("wdt refclk", 0, 17, 1),
     82	};
     83static struct ralink_pmx_func pcie_rst_func[] = {
     84	FUNC("pcie rst", MT7620_GPIO_MODE_PCIE_RST, 36, 1),
     85	FUNC("pcie refclk", MT7620_GPIO_MODE_PCIE_REF, 36, 1)
     86};
     87static struct ralink_pmx_func nd_sd_func[] = {
     88	FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15),
     89	FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13)
     90};
     91
     92static struct ralink_pmx_group mt7620a_pinmux_data[] = {
     93	GRP("i2c", i2c_func, 1, MT7620_GPIO_MODE_I2C),
     94	GRP("uartf", uartf_func, MT7620_GPIO_MODE_UART0_MASK,
     95		MT7620_GPIO_MODE_UART0_SHIFT),
     96	GRP("spi", spi_func, 1, MT7620_GPIO_MODE_SPI),
     97	GRP("uartlite", uartlite_func, 1, MT7620_GPIO_MODE_UART1),
     98	GRP_G("wdt", wdt_func, MT7620_GPIO_MODE_WDT_MASK,
     99		MT7620_GPIO_MODE_WDT_GPIO, MT7620_GPIO_MODE_WDT_SHIFT),
    100	GRP_G("mdio", mdio_func, MT7620_GPIO_MODE_MDIO_MASK,
    101		MT7620_GPIO_MODE_MDIO_GPIO, MT7620_GPIO_MODE_MDIO_SHIFT),
    102	GRP("rgmii1", rgmii1_func, 1, MT7620_GPIO_MODE_RGMII1),
    103	GRP("spi refclk", refclk_func, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
    104	GRP_G("pcie", pcie_rst_func, MT7620_GPIO_MODE_PCIE_MASK,
    105		MT7620_GPIO_MODE_PCIE_GPIO, MT7620_GPIO_MODE_PCIE_SHIFT),
    106	GRP_G("nd_sd", nd_sd_func, MT7620_GPIO_MODE_ND_SD_MASK,
    107		MT7620_GPIO_MODE_ND_SD_GPIO, MT7620_GPIO_MODE_ND_SD_SHIFT),
    108	GRP("rgmii2", rgmii2_func, 1, MT7620_GPIO_MODE_RGMII2),
    109	GRP("wled", wled_func, 1, MT7620_GPIO_MODE_WLED),
    110	GRP("ephy", ephy_func, 1, MT7620_GPIO_MODE_EPHY),
    111	GRP("pa", pa_func, 1, MT7620_GPIO_MODE_PA),
    112	{ 0 }
    113};
    114
    115static struct ralink_pmx_func pwm1_func_mt76x8[] = {
    116	FUNC("sdxc d6", 3, 19, 1),
    117	FUNC("utif", 2, 19, 1),
    118	FUNC("gpio", 1, 19, 1),
    119	FUNC("pwm1", 0, 19, 1),
    120};
    121
    122static struct ralink_pmx_func pwm0_func_mt76x8[] = {
    123	FUNC("sdxc d7", 3, 18, 1),
    124	FUNC("utif", 2, 18, 1),
    125	FUNC("gpio", 1, 18, 1),
    126	FUNC("pwm0", 0, 18, 1),
    127};
    128
    129static struct ralink_pmx_func uart2_func_mt76x8[] = {
    130	FUNC("sdxc d5 d4", 3, 20, 2),
    131	FUNC("pwm", 2, 20, 2),
    132	FUNC("gpio", 1, 20, 2),
    133	FUNC("uart2", 0, 20, 2),
    134};
    135
    136static struct ralink_pmx_func uart1_func_mt76x8[] = {
    137	FUNC("sw_r", 3, 45, 2),
    138	FUNC("pwm", 2, 45, 2),
    139	FUNC("gpio", 1, 45, 2),
    140	FUNC("uart1", 0, 45, 2),
    141};
    142
    143static struct ralink_pmx_func i2c_func_mt76x8[] = {
    144	FUNC("-", 3, 4, 2),
    145	FUNC("debug", 2, 4, 2),
    146	FUNC("gpio", 1, 4, 2),
    147	FUNC("i2c", 0, 4, 2),
    148};
    149
    150static struct ralink_pmx_func refclk_func_mt76x8[] = { FUNC("refclk", 0, 37, 1) };
    151static struct ralink_pmx_func perst_func_mt76x8[] = { FUNC("perst", 0, 36, 1) };
    152static struct ralink_pmx_func wdt_func_mt76x8[] = { FUNC("wdt", 0, 38, 1) };
    153static struct ralink_pmx_func spi_func_mt76x8[] = { FUNC("spi", 0, 7, 4) };
    154
    155static struct ralink_pmx_func sd_mode_func_mt76x8[] = {
    156	FUNC("jtag", 3, 22, 8),
    157	FUNC("utif", 2, 22, 8),
    158	FUNC("gpio", 1, 22, 8),
    159	FUNC("sdxc", 0, 22, 8),
    160};
    161
    162static struct ralink_pmx_func uart0_func_mt76x8[] = {
    163	FUNC("-", 3, 12, 2),
    164	FUNC("-", 2, 12, 2),
    165	FUNC("gpio", 1, 12, 2),
    166	FUNC("uart0", 0, 12, 2),
    167};
    168
    169static struct ralink_pmx_func i2s_func_mt76x8[] = {
    170	FUNC("antenna", 3, 0, 4),
    171	FUNC("pcm", 2, 0, 4),
    172	FUNC("gpio", 1, 0, 4),
    173	FUNC("i2s", 0, 0, 4),
    174};
    175
    176static struct ralink_pmx_func spi_cs1_func_mt76x8[] = {
    177	FUNC("-", 3, 6, 1),
    178	FUNC("refclk", 2, 6, 1),
    179	FUNC("gpio", 1, 6, 1),
    180	FUNC("spi cs1", 0, 6, 1),
    181};
    182
    183static struct ralink_pmx_func spis_func_mt76x8[] = {
    184	FUNC("pwm_uart2", 3, 14, 4),
    185	FUNC("utif", 2, 14, 4),
    186	FUNC("gpio", 1, 14, 4),
    187	FUNC("spis", 0, 14, 4),
    188};
    189
    190static struct ralink_pmx_func gpio_func_mt76x8[] = {
    191	FUNC("pcie", 3, 11, 1),
    192	FUNC("refclk", 2, 11, 1),
    193	FUNC("gpio", 1, 11, 1),
    194	FUNC("gpio", 0, 11, 1),
    195};
    196
    197static struct ralink_pmx_func p4led_kn_func_mt76x8[] = {
    198	FUNC("jtag", 3, 30, 1),
    199	FUNC("utif", 2, 30, 1),
    200	FUNC("gpio", 1, 30, 1),
    201	FUNC("p4led_kn", 0, 30, 1),
    202};
    203
    204static struct ralink_pmx_func p3led_kn_func_mt76x8[] = {
    205	FUNC("jtag", 3, 31, 1),
    206	FUNC("utif", 2, 31, 1),
    207	FUNC("gpio", 1, 31, 1),
    208	FUNC("p3led_kn", 0, 31, 1),
    209};
    210
    211static struct ralink_pmx_func p2led_kn_func_mt76x8[] = {
    212	FUNC("jtag", 3, 32, 1),
    213	FUNC("utif", 2, 32, 1),
    214	FUNC("gpio", 1, 32, 1),
    215	FUNC("p2led_kn", 0, 32, 1),
    216};
    217
    218static struct ralink_pmx_func p1led_kn_func_mt76x8[] = {
    219	FUNC("jtag", 3, 33, 1),
    220	FUNC("utif", 2, 33, 1),
    221	FUNC("gpio", 1, 33, 1),
    222	FUNC("p1led_kn", 0, 33, 1),
    223};
    224
    225static struct ralink_pmx_func p0led_kn_func_mt76x8[] = {
    226	FUNC("jtag", 3, 34, 1),
    227	FUNC("rsvd", 2, 34, 1),
    228	FUNC("gpio", 1, 34, 1),
    229	FUNC("p0led_kn", 0, 34, 1),
    230};
    231
    232static struct ralink_pmx_func wled_kn_func_mt76x8[] = {
    233	FUNC("rsvd", 3, 35, 1),
    234	FUNC("rsvd", 2, 35, 1),
    235	FUNC("gpio", 1, 35, 1),
    236	FUNC("wled_kn", 0, 35, 1),
    237};
    238
    239static struct ralink_pmx_func p4led_an_func_mt76x8[] = {
    240	FUNC("jtag", 3, 39, 1),
    241	FUNC("utif", 2, 39, 1),
    242	FUNC("gpio", 1, 39, 1),
    243	FUNC("p4led_an", 0, 39, 1),
    244};
    245
    246static struct ralink_pmx_func p3led_an_func_mt76x8[] = {
    247	FUNC("jtag", 3, 40, 1),
    248	FUNC("utif", 2, 40, 1),
    249	FUNC("gpio", 1, 40, 1),
    250	FUNC("p3led_an", 0, 40, 1),
    251};
    252
    253static struct ralink_pmx_func p2led_an_func_mt76x8[] = {
    254	FUNC("jtag", 3, 41, 1),
    255	FUNC("utif", 2, 41, 1),
    256	FUNC("gpio", 1, 41, 1),
    257	FUNC("p2led_an", 0, 41, 1),
    258};
    259
    260static struct ralink_pmx_func p1led_an_func_mt76x8[] = {
    261	FUNC("jtag", 3, 42, 1),
    262	FUNC("utif", 2, 42, 1),
    263	FUNC("gpio", 1, 42, 1),
    264	FUNC("p1led_an", 0, 42, 1),
    265};
    266
    267static struct ralink_pmx_func p0led_an_func_mt76x8[] = {
    268	FUNC("jtag", 3, 43, 1),
    269	FUNC("rsvd", 2, 43, 1),
    270	FUNC("gpio", 1, 43, 1),
    271	FUNC("p0led_an", 0, 43, 1),
    272};
    273
    274static struct ralink_pmx_func wled_an_func_mt76x8[] = {
    275	FUNC("rsvd", 3, 44, 1),
    276	FUNC("rsvd", 2, 44, 1),
    277	FUNC("gpio", 1, 44, 1),
    278	FUNC("wled_an", 0, 44, 1),
    279};
    280
    281#define MT76X8_GPIO_MODE_MASK		0x3
    282
    283#define MT76X8_GPIO_MODE_P4LED_KN	58
    284#define MT76X8_GPIO_MODE_P3LED_KN	56
    285#define MT76X8_GPIO_MODE_P2LED_KN	54
    286#define MT76X8_GPIO_MODE_P1LED_KN	52
    287#define MT76X8_GPIO_MODE_P0LED_KN	50
    288#define MT76X8_GPIO_MODE_WLED_KN	48
    289#define MT76X8_GPIO_MODE_P4LED_AN	42
    290#define MT76X8_GPIO_MODE_P3LED_AN	40
    291#define MT76X8_GPIO_MODE_P2LED_AN	38
    292#define MT76X8_GPIO_MODE_P1LED_AN	36
    293#define MT76X8_GPIO_MODE_P0LED_AN	34
    294#define MT76X8_GPIO_MODE_WLED_AN	32
    295#define MT76X8_GPIO_MODE_PWM1		30
    296#define MT76X8_GPIO_MODE_PWM0		28
    297#define MT76X8_GPIO_MODE_UART2		26
    298#define MT76X8_GPIO_MODE_UART1		24
    299#define MT76X8_GPIO_MODE_I2C		20
    300#define MT76X8_GPIO_MODE_REFCLK		18
    301#define MT76X8_GPIO_MODE_PERST		16
    302#define MT76X8_GPIO_MODE_WDT		14
    303#define MT76X8_GPIO_MODE_SPI		12
    304#define MT76X8_GPIO_MODE_SDMODE		10
    305#define MT76X8_GPIO_MODE_UART0		8
    306#define MT76X8_GPIO_MODE_I2S		6
    307#define MT76X8_GPIO_MODE_CS1		4
    308#define MT76X8_GPIO_MODE_SPIS		2
    309#define MT76X8_GPIO_MODE_GPIO		0
    310
    311static struct ralink_pmx_group mt76x8_pinmux_data[] = {
    312	GRP_G("pwm1", pwm1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    313				1, MT76X8_GPIO_MODE_PWM1),
    314	GRP_G("pwm0", pwm0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    315				1, MT76X8_GPIO_MODE_PWM0),
    316	GRP_G("uart2", uart2_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    317				1, MT76X8_GPIO_MODE_UART2),
    318	GRP_G("uart1", uart1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    319				1, MT76X8_GPIO_MODE_UART1),
    320	GRP_G("i2c", i2c_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    321				1, MT76X8_GPIO_MODE_I2C),
    322	GRP("refclk", refclk_func_mt76x8, 1, MT76X8_GPIO_MODE_REFCLK),
    323	GRP("perst", perst_func_mt76x8, 1, MT76X8_GPIO_MODE_PERST),
    324	GRP("wdt", wdt_func_mt76x8, 1, MT76X8_GPIO_MODE_WDT),
    325	GRP("spi", spi_func_mt76x8, 1, MT76X8_GPIO_MODE_SPI),
    326	GRP_G("sdmode", sd_mode_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    327				1, MT76X8_GPIO_MODE_SDMODE),
    328	GRP_G("uart0", uart0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    329				1, MT76X8_GPIO_MODE_UART0),
    330	GRP_G("i2s", i2s_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    331				1, MT76X8_GPIO_MODE_I2S),
    332	GRP_G("spi cs1", spi_cs1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    333				1, MT76X8_GPIO_MODE_CS1),
    334	GRP_G("spis", spis_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    335				1, MT76X8_GPIO_MODE_SPIS),
    336	GRP_G("gpio", gpio_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    337				1, MT76X8_GPIO_MODE_GPIO),
    338	GRP_G("wled_an", wled_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    339				1, MT76X8_GPIO_MODE_WLED_AN),
    340	GRP_G("p0led_an", p0led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    341				1, MT76X8_GPIO_MODE_P0LED_AN),
    342	GRP_G("p1led_an", p1led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    343				1, MT76X8_GPIO_MODE_P1LED_AN),
    344	GRP_G("p2led_an", p2led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    345				1, MT76X8_GPIO_MODE_P2LED_AN),
    346	GRP_G("p3led_an", p3led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    347				1, MT76X8_GPIO_MODE_P3LED_AN),
    348	GRP_G("p4led_an", p4led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    349				1, MT76X8_GPIO_MODE_P4LED_AN),
    350	GRP_G("wled_kn", wled_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    351				1, MT76X8_GPIO_MODE_WLED_KN),
    352	GRP_G("p0led_kn", p0led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    353				1, MT76X8_GPIO_MODE_P0LED_KN),
    354	GRP_G("p1led_kn", p1led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    355				1, MT76X8_GPIO_MODE_P1LED_KN),
    356	GRP_G("p2led_kn", p2led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    357				1, MT76X8_GPIO_MODE_P2LED_KN),
    358	GRP_G("p3led_kn", p3led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    359				1, MT76X8_GPIO_MODE_P3LED_KN),
    360	GRP_G("p4led_kn", p4led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
    361				1, MT76X8_GPIO_MODE_P4LED_KN),
    362	{ 0 }
    363};
    364
    365static int mt7620_pinctrl_probe(struct platform_device *pdev)
    366{
    367	if (is_mt76x8())
    368		return ralink_pinctrl_init(pdev, mt76x8_pinmux_data);
    369	else
    370		return ralink_pinctrl_init(pdev, mt7620a_pinmux_data);
    371}
    372
    373static const struct of_device_id mt7620_pinctrl_match[] = {
    374	{ .compatible = "ralink,mt7620-pinctrl" },
    375	{}
    376};
    377MODULE_DEVICE_TABLE(of, mt7620_pinctrl_match);
    378
    379static struct platform_driver mt7620_pinctrl_driver = {
    380	.probe = mt7620_pinctrl_probe,
    381	.driver = {
    382		.name = "mt7620-pinctrl",
    383		.of_match_table = mt7620_pinctrl_match,
    384	},
    385};
    386
    387static int __init mt7620_pinctrl_init(void)
    388{
    389	return platform_driver_register(&mt7620_pinctrl_driver);
    390}
    391core_initcall_sync(mt7620_pinctrl_init);