1*7f73aa11SBilly Tsai // SPDX-License-Identifier: GPL-2.0 2*7f73aa11SBilly Tsai 3*7f73aa11SBilly Tsai #include <linux/bitops.h> 4*7f73aa11SBilly Tsai #include <linux/bits.h> 5*7f73aa11SBilly Tsai #include <linux/mfd/syscon.h> 6*7f73aa11SBilly Tsai #include <linux/of.h> 7*7f73aa11SBilly Tsai #include <linux/pinctrl/pinconf-generic.h> 8*7f73aa11SBilly Tsai #include <linux/pinctrl/pinconf.h> 9*7f73aa11SBilly Tsai #include <linux/pinctrl/pinctrl.h> 10*7f73aa11SBilly Tsai #include <linux/pinctrl/pinmux.h> 11*7f73aa11SBilly Tsai #include <linux/platform_device.h> 12*7f73aa11SBilly Tsai #include <linux/regmap.h> 13*7f73aa11SBilly Tsai 14*7f73aa11SBilly Tsai #include "pinctrl-aspeed.h" 15*7f73aa11SBilly Tsai #include "pinmux-aspeed.h" 16*7f73aa11SBilly Tsai #include "../pinctrl-utils.h" 17*7f73aa11SBilly Tsai 18*7f73aa11SBilly Tsai #define SCU200 0x200 /* System Reset Control #1 */ 19*7f73aa11SBilly Tsai 20*7f73aa11SBilly Tsai #define SCU010 0x010 /* Hardware Strap Register */ 21*7f73aa11SBilly Tsai #define SCU400 0x400 /* Multi-function Pin Control #1 */ 22*7f73aa11SBilly Tsai #define SCU404 0x404 /* Multi-function Pin Control #2 */ 23*7f73aa11SBilly Tsai #define SCU408 0x408 /* Multi-function Pin Control #3 */ 24*7f73aa11SBilly Tsai #define SCU40C 0x40C /* Multi-function Pin Control #3 */ 25*7f73aa11SBilly Tsai #define SCU410 0x410 /* USB Multi-function Control Register */ 26*7f73aa11SBilly Tsai #define SCU414 0x414 /* VGA Function Control Register */ 27*7f73aa11SBilly Tsai 28*7f73aa11SBilly Tsai #define SCU480 0x480 /* GPIO18A0 IO Control Register */ 29*7f73aa11SBilly Tsai #define SCU484 0x484 /* GPIO18A1 IO Control Register */ 30*7f73aa11SBilly Tsai #define SCU488 0x488 /* GPIO18A2 IO Control Register */ 31*7f73aa11SBilly Tsai #define SCU48C 0x48c /* GPIO18A3 IO Control Register */ 32*7f73aa11SBilly Tsai #define SCU490 0x490 /* GPIO18A4 IO Control Register */ 33*7f73aa11SBilly Tsai #define SCU494 0x494 /* GPIO18A5 IO Control Register */ 34*7f73aa11SBilly Tsai #define SCU498 0x498 /* GPIO18A6 IO Control Register */ 35*7f73aa11SBilly Tsai #define SCU49C 0x49c /* GPIO18A7 IO Control Register */ 36*7f73aa11SBilly Tsai #define SCU4A0 0x4A0 /* GPIO18B0 IO Control Register */ 37*7f73aa11SBilly Tsai #define SCU4A4 0x4A4 /* GPIO18B1 IO Control Register */ 38*7f73aa11SBilly Tsai #define SCU4A8 0x4A8 /* GPIO18B2 IO Control Register */ 39*7f73aa11SBilly Tsai #define SCU4AC 0x4AC /* GPIO18B3 IO Control Register */ 40*7f73aa11SBilly Tsai 41*7f73aa11SBilly Tsai enum { 42*7f73aa11SBilly Tsai AC14, 43*7f73aa11SBilly Tsai AE15, 44*7f73aa11SBilly Tsai AD14, 45*7f73aa11SBilly Tsai AE14, 46*7f73aa11SBilly Tsai AF14, 47*7f73aa11SBilly Tsai AB13, 48*7f73aa11SBilly Tsai AB14, 49*7f73aa11SBilly Tsai AF15, 50*7f73aa11SBilly Tsai AF13, 51*7f73aa11SBilly Tsai AC13, 52*7f73aa11SBilly Tsai AD13, 53*7f73aa11SBilly Tsai AE13, 54*7f73aa11SBilly Tsai JTAG_PORT, 55*7f73aa11SBilly Tsai PCIERC0_PERST, 56*7f73aa11SBilly Tsai PCIERC1_PERST, 57*7f73aa11SBilly Tsai PORTA_MODE, 58*7f73aa11SBilly Tsai PORTA_U2, 59*7f73aa11SBilly Tsai PORTB_MODE, 60*7f73aa11SBilly Tsai PORTB_U2, 61*7f73aa11SBilly Tsai PORTA_U2_PHY, 62*7f73aa11SBilly Tsai PORTB_U2_PHY, 63*7f73aa11SBilly Tsai PORTA_U3, 64*7f73aa11SBilly Tsai PORTB_U3, 65*7f73aa11SBilly Tsai PORTA_U3_PHY, 66*7f73aa11SBilly Tsai PORTB_U3_PHY, 67*7f73aa11SBilly Tsai }; 68*7f73aa11SBilly Tsai 69*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AC14, EMMCCLK, EMMCG1, EMMC, SIG_DESC_SET(SCU400, 0)); 70*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AC14, VB1CS, VB1, VB, SIG_DESC_SET(SCU404, 0)); 71*7f73aa11SBilly Tsai PIN_DECL_2(AC14, GPIO18A0, EMMCCLK, VB1CS); 72*7f73aa11SBilly Tsai 73*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AE15, EMMCCMD, EMMCG1, EMMC, SIG_DESC_SET(SCU400, 1)); 74*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AE15, VB1CK, VB1, VB, SIG_DESC_SET(SCU404, 1)); 75*7f73aa11SBilly Tsai PIN_DECL_2(AE15, GPIO18A1, EMMCCMD, VB1CK); 76*7f73aa11SBilly Tsai 77*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AD14, EMMCDAT0, EMMCG1, EMMC, SIG_DESC_SET(SCU400, 2)); 78*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AD14, VB1MOSI, VB1, VB, SIG_DESC_SET(SCU404, 2)); 79*7f73aa11SBilly Tsai PIN_DECL_2(AD14, GPIO18A2, EMMCDAT0, VB1MOSI); 80*7f73aa11SBilly Tsai 81*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AE14, EMMCDAT1, EMMCG4, EMMC, SIG_DESC_SET(SCU400, 3)); 82*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AE14, VB1MISO, VB1, VB, SIG_DESC_SET(SCU404, 3)); 83*7f73aa11SBilly Tsai PIN_DECL_2(AE14, GPIO18A3, EMMCDAT1, VB1MISO); 84*7f73aa11SBilly Tsai 85*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AF14, EMMCDAT2, EMMCG4, EMMC, SIG_DESC_SET(SCU400, 4)); 86*7f73aa11SBilly Tsai PIN_DECL_1(AF14, GPIO18A4, EMMCDAT2); 87*7f73aa11SBilly Tsai 88*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AB13, EMMCDAT3, EMMCG4, EMMC, SIG_DESC_SET(SCU400, 5)); 89*7f73aa11SBilly Tsai PIN_DECL_1(AB13, GPIO18A5, EMMCDAT3); 90*7f73aa11SBilly Tsai 91*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AB14, EMMCCDN, EMMCG1, EMMC, SIG_DESC_SET(SCU400, 6)); 92*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AB14, VB0CS, VB0, VB, SIG_DESC_SET(SCU010, 17)); 93*7f73aa11SBilly Tsai PIN_DECL_2(AB14, GPIO18A6, EMMCCDN, VB0CS); 94*7f73aa11SBilly Tsai 95*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AF15, EMMCWPN, EMMCG1, EMMC, SIG_DESC_SET(SCU400, 7)); 96*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AF15, VB0CK, VB0, VB, SIG_DESC_SET(SCU010, 17)); 97*7f73aa11SBilly Tsai PIN_DECL_2(AF15, GPIO18A7, EMMCWPN, VB0CK); 98*7f73aa11SBilly Tsai 99*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SESG(AF13, TSPRSTN, TSPRSTN, SIG_DESC_SET(SCU010, 9)); 100*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AF13, EMMCDAT4, EMMCG8, EMMC, SIG_DESC_SET(SCU400, 8)); 101*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AF13, VB0MOSI, VB0, VB, SIG_DESC_SET(SCU010, 17)); 102*7f73aa11SBilly Tsai PIN_DECL_3(AF13, GPIO18B0, TSPRSTN, EMMCDAT4, VB0MOSI); 103*7f73aa11SBilly Tsai 104*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SESG(AC13, UFSCLKI, UFSCLKI, SIG_DESC_SET(SCU010, 19)); 105*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AC13, EMMCDAT5, EMMCG8, EMMC, SIG_DESC_SET(SCU400, 9)); 106*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AC13, VB0MISO, VB0, VB, SIG_DESC_SET(SCU010, 17)); 107*7f73aa11SBilly Tsai PIN_DECL_3(AC13, GPIO18B1, UFSCLKI, EMMCDAT5, VB0MISO); 108*7f73aa11SBilly Tsai 109*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AD13, EMMCDAT6, EMMCG8, EMMC, SIG_DESC_SET(SCU400, 10)); 110*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SESG(AD13, DDCCLK, VGADDC, SIG_DESC_SET(SCU404, 10)); 111*7f73aa11SBilly Tsai PIN_DECL_2(AD13, GPIO18B2, EMMCDAT6, DDCCLK); 112*7f73aa11SBilly Tsai 113*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(AE13, EMMCDAT7, EMMCG8, EMMC, SIG_DESC_SET(SCU400, 11)); 114*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SESG(AE13, DDCDAT, VGADDC, SIG_DESC_SET(SCU404, 11)); 115*7f73aa11SBilly Tsai PIN_DECL_2(AE13, GPIO18B3, EMMCDAT7, DDCDAT); 116*7f73aa11SBilly Tsai 117*7f73aa11SBilly Tsai GROUP_DECL(EMMCG1, AC14, AE15, AD14); 118*7f73aa11SBilly Tsai GROUP_DECL(EMMCG4, AC14, AE15, AD14, AE14, AF14, AB13); 119*7f73aa11SBilly Tsai GROUP_DECL(EMMCG8, AC14, AE15, AD14, AE14, AF14, AB13, AF13, AC13, AD13, AE13); 120*7f73aa11SBilly Tsai GROUP_DECL(EMMCWPN, AF15); 121*7f73aa11SBilly Tsai GROUP_DECL(EMMCCDN, AB14); 122*7f73aa11SBilly Tsai FUNC_DECL_(EMMC, "EMMCG1", "EMMCG4", "EMMCG8", "EMMCWPN", "EMMCCDN"); 123*7f73aa11SBilly Tsai 124*7f73aa11SBilly Tsai GROUP_DECL(VB1, AC14, AE15, AD14, AE14); 125*7f73aa11SBilly Tsai GROUP_DECL(VB0, AF15, AB14, AF13, AC13); 126*7f73aa11SBilly Tsai FUNC_DECL_2(VB, VB1, VB0); 127*7f73aa11SBilly Tsai 128*7f73aa11SBilly Tsai FUNC_GROUP_DECL(TSPRSTN, AF13); 129*7f73aa11SBilly Tsai 130*7f73aa11SBilly Tsai FUNC_GROUP_DECL(UFSCLKI, AC13); 131*7f73aa11SBilly Tsai 132*7f73aa11SBilly Tsai FUNC_GROUP_DECL(VGADDC, AD13, AE13); 133*7f73aa11SBilly Tsai 134*7f73aa11SBilly Tsai /* JTAG Port Selection */ 135*7f73aa11SBilly Tsai #define JTAG_PORT_PSP_DESC { ASPEED_IP_SCU, SCU408, GENMASK(12, 5), 0x0, 0 } 136*7f73aa11SBilly Tsai #define JTAG_PORT_SSP_DESC { ASPEED_IP_SCU, SCU408, GENMASK(12, 5), 0x41, 0 } 137*7f73aa11SBilly Tsai #define JTAG_PORT_TSP_DESC { ASPEED_IP_SCU, SCU408, GENMASK(12, 5), 0x42, 0 } 138*7f73aa11SBilly Tsai #define JTAG_PORT_DDR_DESC { ASPEED_IP_SCU, SCU408, GENMASK(12, 5), 0x43, 0 } 139*7f73aa11SBilly Tsai #define JTAG_PORT_USB3A_DESC { ASPEED_IP_SCU, SCU408, GENMASK(12, 5), 0x44, 0 } 140*7f73aa11SBilly Tsai #define JTAG_PORT_USB3B_DESC { ASPEED_IP_SCU, SCU408, GENMASK(12, 5), 0x45, 0 } 141*7f73aa11SBilly Tsai #define JTAG_PORT_PCIEA_DESC { ASPEED_IP_SCU, SCU408, GENMASK(12, 5), 0x46, 0 } 142*7f73aa11SBilly Tsai #define JTAG_PORT_PCIEB_DESC { ASPEED_IP_SCU, SCU408, GENMASK(12, 5), 0x47, 0 } 143*7f73aa11SBilly Tsai #define JTAG_PORT_JTAGM0_DESC { ASPEED_IP_SCU, SCU408, GENMASK(12, 5), 0x8, 0 } 144*7f73aa11SBilly Tsai 145*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(JTAG_PORT, JTAGPSP, JTAG0, JTAGPSP, JTAG_PORT_PSP_DESC); 146*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(JTAG_PORT, JTAGSSP, JTAG0, JTAGSSP, JTAG_PORT_SSP_DESC); 147*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(JTAG_PORT, JTAGTSP, JTAG0, JTAGTSP, JTAG_PORT_TSP_DESC); 148*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(JTAG_PORT, JTAGDDR, JTAG0, JTAGDDR, JTAG_PORT_DDR_DESC); 149*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(JTAG_PORT, JTAGUSB3A, JTAG0, JTAGUSB3A, JTAG_PORT_USB3A_DESC); 150*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(JTAG_PORT, JTAGUSB3B, JTAG0, JTAGUSB3B, JTAG_PORT_USB3B_DESC); 151*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(JTAG_PORT, JTAGPCIEA, JTAG0, JTAGPCIEA, JTAG_PORT_PCIEA_DESC); 152*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(JTAG_PORT, JTAGPCIEB, JTAG0, JTAGPCIEB, JTAG_PORT_PCIEB_DESC); 153*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(JTAG_PORT, JTAGM0, JTAG0, JTAGM0, JTAG_PORT_JTAGM0_DESC); 154*7f73aa11SBilly Tsai PIN_DECL_(JTAG_PORT, SIG_EXPR_LIST_PTR(JTAG_PORT, JTAGPSP), SIG_EXPR_LIST_PTR(JTAG_PORT, JTAGSSP), 155*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(JTAG_PORT, JTAGTSP), SIG_EXPR_LIST_PTR(JTAG_PORT, JTAGDDR), 156*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(JTAG_PORT, JTAGUSB3A), SIG_EXPR_LIST_PTR(JTAG_PORT, JTAGUSB3B), 157*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(JTAG_PORT, JTAGPCIEA), SIG_EXPR_LIST_PTR(JTAG_PORT, JTAGPCIEB), 158*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(JTAG_PORT, JTAGM0)); 159*7f73aa11SBilly Tsai 160*7f73aa11SBilly Tsai GROUP_DECL(JTAG0, JTAG_PORT); 161*7f73aa11SBilly Tsai 162*7f73aa11SBilly Tsai FUNC_DECL_1(JTAGPSP, JTAG0); 163*7f73aa11SBilly Tsai FUNC_DECL_1(JTAGSSP, JTAG0); 164*7f73aa11SBilly Tsai FUNC_DECL_1(JTAGTSP, JTAG0); 165*7f73aa11SBilly Tsai FUNC_DECL_1(JTAGDDR, JTAG0); 166*7f73aa11SBilly Tsai FUNC_DECL_1(JTAGUSB3A, JTAG0); 167*7f73aa11SBilly Tsai FUNC_DECL_1(JTAGUSB3B, JTAG0); 168*7f73aa11SBilly Tsai FUNC_DECL_1(JTAGPCIEA, JTAG0); 169*7f73aa11SBilly Tsai FUNC_DECL_1(JTAGPCIEB, JTAG0); 170*7f73aa11SBilly Tsai FUNC_DECL_1(JTAGM0, JTAG0); 171*7f73aa11SBilly Tsai 172*7f73aa11SBilly Tsai /* PCIe Reset Control */ 173*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SESG(PCIERC0_PERST, PCIERC0PERST, PCIERC0PERST, SIG_DESC_SET(SCU200, 21)); 174*7f73aa11SBilly Tsai PIN_DECL_(PCIERC0_PERST, SIG_EXPR_LIST_PTR(PCIERC0_PERST, PCIERC0PERST)); 175*7f73aa11SBilly Tsai FUNC_GROUP_DECL(PCIERC0PERST, PCIERC0_PERST); 176*7f73aa11SBilly Tsai 177*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SESG(PCIERC1_PERST, PCIERC1PERST, PCIERC1PERST, SIG_DESC_SET(SCU200, 19)); 178*7f73aa11SBilly Tsai PIN_DECL_(PCIERC1_PERST, SIG_EXPR_LIST_PTR(PCIERC1_PERST, PCIERC1PERST)); 179*7f73aa11SBilly Tsai FUNC_GROUP_DECL(PCIERC1PERST, PCIERC1_PERST); 180*7f73aa11SBilly Tsai 181*7f73aa11SBilly Tsai #define PORTA_MODE_HPD0_DESC { ASPEED_IP_SCU, SCU410, GENMASK(25, 24), 0, 0 } 182*7f73aa11SBilly Tsai #define PORTA_MODE_D0_DESC { ASPEED_IP_SCU, SCU410, GENMASK(25, 24), 1, 0 } 183*7f73aa11SBilly Tsai #define PORTA_MODE_H_DESC { ASPEED_IP_SCU, SCU410, GENMASK(25, 24), 2, 0 } 184*7f73aa11SBilly Tsai #define PORTA_MODE_HP_DESC { ASPEED_IP_SCU, SCU410, GENMASK(25, 24), 3, 0 } 185*7f73aa11SBilly Tsai 186*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_MODE, USB2AHPD0, USB2AH, USB2AHPD0, PORTA_MODE_HPD0_DESC); 187*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_MODE, USB2AH, USB2AHAP, USB2AH, PORTA_MODE_H_DESC); 188*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_MODE, USB2AHP, USB2AHAP, USB2AHP, PORTA_MODE_HP_DESC); 189*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_MODE, USB2AD0, USB2AHAP, USB2AD0, PORTA_MODE_D0_DESC); 190*7f73aa11SBilly Tsai PIN_DECL_(PORTA_MODE, SIG_EXPR_LIST_PTR(PORTA_MODE, USB2AHPD0), 191*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_MODE, USB2AH), SIG_EXPR_LIST_PTR(PORTA_MODE, USB2AHP), 192*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_MODE, USB2AD0)); 193*7f73aa11SBilly Tsai 194*7f73aa11SBilly Tsai #define PORTA_U2_XHD_DESC { ASPEED_IP_SCU, SCU410, GENMASK(3, 2), 0, 0 } 195*7f73aa11SBilly Tsai #define PORTA_U2_D1_DESC { ASPEED_IP_SCU, SCU410, GENMASK(3, 2), 1, 0 } 196*7f73aa11SBilly Tsai #define PORTA_U2_XH_DESC { ASPEED_IP_SCU, SCU410, GENMASK(3, 2), 2, 0 } 197*7f73aa11SBilly Tsai #define PORTA_U2_XH2E_DESC { ASPEED_IP_SCU, SCU410, GENMASK(3, 2), 3, 0 } 198*7f73aa11SBilly Tsai 199*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U2, USB2AXHD1, USB2A, USB2AXHD1, PORTA_U2_XHD_DESC, 200*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 9)); 201*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U2, USB2AXHPD1, USB2A, USB2AXHPD1, PORTA_U2_XHD_DESC, 202*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 9)); 203*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U2, USB2AXH, USB2AAP, USB2AXH, PORTA_U2_XH_DESC, 204*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 9)); 205*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U2, USB2AXHP, USB2AAP, USB2AXHP, PORTA_U2_XH_DESC, 206*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 9)); 207*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U2, USB2AXH2B, USB2ABP, USB2AXH2B, PORTA_U2_XH2E_DESC, 208*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 9)); 209*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U2, USB2AXHP2B, USB2ABP, USB2AXHP2B, PORTA_U2_XH2E_DESC, 210*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 9)); 211*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U2, USB2AD1, USB2ADAP, USB2AD1, PORTA_U2_D1_DESC); 212*7f73aa11SBilly Tsai PIN_DECL_(PORTA_U2, SIG_EXPR_LIST_PTR(PORTA_U2, USB2AXHD1), SIG_EXPR_LIST_PTR(PORTA_U2, USB2AXHPD1), 213*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U2, USB2AXH), SIG_EXPR_LIST_PTR(PORTA_U2, USB2AXHP), 214*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U2, USB2AXH2B), SIG_EXPR_LIST_PTR(PORTA_U2, USB2AXHP2B), 215*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U2, USB2AD1)); 216*7f73aa11SBilly Tsai 217*7f73aa11SBilly Tsai #define PORTB_MODE_HPD0_DESC { ASPEED_IP_SCU, SCU410, GENMASK(29, 28), 0, 0 } 218*7f73aa11SBilly Tsai #define PORTB_MODE_D0_DESC { ASPEED_IP_SCU, SCU410, GENMASK(29, 28), 1, 0 } 219*7f73aa11SBilly Tsai #define PORTB_MODE_H_DESC { ASPEED_IP_SCU, SCU410, GENMASK(29, 28), 2, 0 } 220*7f73aa11SBilly Tsai #define PORTB_MODE_HP_DESC { ASPEED_IP_SCU, SCU410, GENMASK(29, 28), 3, 0 } 221*7f73aa11SBilly Tsai 222*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_MODE, USB2BHPD0, USB2BH, USB2BHPD0, PORTB_MODE_HPD0_DESC); 223*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_MODE, USB2BH, USB2BHBP, USB2BH, PORTB_MODE_H_DESC); 224*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_MODE, USB2BHP, USB2BHBP, USB2BHP, PORTB_MODE_HP_DESC); 225*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_MODE, USB2BD0, USB2BHBP, USB2BD0, PORTB_MODE_D0_DESC); 226*7f73aa11SBilly Tsai PIN_DECL_(PORTB_MODE, SIG_EXPR_LIST_PTR(PORTB_MODE, USB2BHPD0), 227*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_MODE, USB2BH), SIG_EXPR_LIST_PTR(PORTB_MODE, USB2BHP), 228*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_MODE, USB2BD0)); 229*7f73aa11SBilly Tsai 230*7f73aa11SBilly Tsai #define PORTB_U2_XHD_DESC { ASPEED_IP_SCU, SCU410, GENMASK(7, 6), 0, 0 } 231*7f73aa11SBilly Tsai #define PORTB_U2_D1_DESC { ASPEED_IP_SCU, SCU410, GENMASK(7, 6), 1, 0 } 232*7f73aa11SBilly Tsai #define PORTB_U2_XH_DESC { ASPEED_IP_SCU, SCU410, GENMASK(7, 6), 2, 0 } 233*7f73aa11SBilly Tsai #define PORTB_U2_XH2E_DESC { ASPEED_IP_SCU, SCU410, GENMASK(7, 6), 3, 0 } 234*7f73aa11SBilly Tsai 235*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U2, USB2BXHD1, USB2B, USB2BXHD1, PORTB_U2_XHD_DESC, 236*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 10)); 237*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U2, USB2BXHPD1, USB2B, USB2BXHPD1, PORTB_U2_XHD_DESC, 238*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 10)); 239*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U2, USB2BXH, USB2BBP, USB2BXH, PORTB_U2_XH_DESC, 240*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 10)); 241*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U2, USB2BXHP, USB2BBP, USB2BXHP, PORTB_U2_XH_DESC, 242*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 10)); 243*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U2, USB2BXH2A, USB2BAP, USB2BXH2A, PORTB_U2_XH2E_DESC, 244*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 10)); 245*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U2, USB2BXHP2A, USB2BAP, USB2BXHP2A, PORTB_U2_XH2E_DESC, 246*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 10)); 247*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U2, USB2BD1, USB2BDBP, USB2BD1, PORTB_U2_D1_DESC); 248*7f73aa11SBilly Tsai PIN_DECL_(PORTB_U2, SIG_EXPR_LIST_PTR(PORTB_U2, USB2BXHD1), SIG_EXPR_LIST_PTR(PORTB_U2, USB2BXHPD1), 249*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U2, USB2BXH), SIG_EXPR_LIST_PTR(PORTB_U2, USB2BXHP), 250*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U2, USB2BXH2A), SIG_EXPR_LIST_PTR(PORTB_U2, USB2BXHP2A), 251*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U2, USB2BD1)); 252*7f73aa11SBilly Tsai /* 253*7f73aa11SBilly Tsai * USB2 virtual PHY pins. 254*7f73aa11SBilly Tsai * 255*7f73aa11SBilly Tsai * PORTA_U2_PHY and PORTB_U2_PHY are logical endpoints, not package pins. 256*7f73aa11SBilly Tsai * They alias existing USB2 expressions so pin groups can model direct and 257*7f73aa11SBilly Tsai * cross-coupled routing for host and mode paths. 258*7f73aa11SBilly Tsai * 259*7f73aa11SBilly Tsai * - USB2AAP/USB2ADAP/USB2AHAP: use PORTA_U2_PHY 260*7f73aa11SBilly Tsai * - USB2ABP : use PORTB_U2_PHY 261*7f73aa11SBilly Tsai * - USB2BBP/USB2BDBP/USB2BHBP: use PORTB_U2_PHY 262*7f73aa11SBilly Tsai * - USB2BAP : use PORTA_U2_PHY 263*7f73aa11SBilly Tsai * 264*7f73aa11SBilly Tsai * They do not have any registers to configure this behaviour; the goal is 265*7f73aa11SBilly Tsai * simply for the driver to prevent conflicting selections. For example, 266*7f73aa11SBilly Tsai * selecting group USB2ABP and USB2BBP at the same time should not be 267*7f73aa11SBilly Tsai * allowed. 268*7f73aa11SBilly Tsai */ 269*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U2_PHY, USB2AXH, USB2AAP); 270*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U2_PHY, USB2AXHP, USB2AAP); 271*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U2_PHY, USB2BXH2A, USB2BAP); 272*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U2_PHY, USB2BXHP2A, USB2BAP); 273*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U2_PHY, USB2AD1, USB2ADAP); 274*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U2_PHY, USB2AH, USB2AHAP); 275*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U2_PHY, USB2AHP, USB2AHAP); 276*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U2_PHY, USB2AD0, USB2AHAP); 277*7f73aa11SBilly Tsai PIN_DECL_(PORTA_U2_PHY, SIG_EXPR_LIST_PTR(PORTA_U2_PHY, USB2AXH), 278*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U2_PHY, USB2AXHP), SIG_EXPR_LIST_PTR(PORTA_U2_PHY, USB2BXH2A), 279*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U2_PHY, USB2BXHP2A), SIG_EXPR_LIST_PTR(PORTA_U2_PHY, USB2AD1), 280*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U2_PHY, USB2AH), SIG_EXPR_LIST_PTR(PORTA_U2_PHY, USB2AHP), 281*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U2_PHY, USB2AD0)); 282*7f73aa11SBilly Tsai 283*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U2_PHY, USB2AXH2B, USB2ABP); 284*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U2_PHY, USB2AXHP2B, USB2ABP); 285*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U2_PHY, USB2BXH, USB2BBP); 286*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U2_PHY, USB2BXHP, USB2BBP); 287*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U2_PHY, USB2BD1, USB2BDBP); 288*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U2_PHY, USB2BH, USB2BHBP); 289*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U2_PHY, USB2BHP, USB2BHBP); 290*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U2_PHY, USB2BD0, USB2BHBP); 291*7f73aa11SBilly Tsai PIN_DECL_(PORTB_U2_PHY, SIG_EXPR_LIST_PTR(PORTB_U2_PHY, USB2AXH2B), 292*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U2_PHY, USB2AXHP2B), SIG_EXPR_LIST_PTR(PORTB_U2_PHY, USB2BXH), 293*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U2_PHY, USB2BXHP), SIG_EXPR_LIST_PTR(PORTB_U2_PHY, USB2BD1), 294*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U2_PHY, USB2BH), SIG_EXPR_LIST_PTR(PORTB_U2_PHY, USB2BHP), 295*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U2_PHY, USB2BD0)); 296*7f73aa11SBilly Tsai 297*7f73aa11SBilly Tsai GROUP_DECL(USB2A, PORTA_U2); 298*7f73aa11SBilly Tsai GROUP_DECL(USB2AAP, PORTA_U2, PORTA_U2_PHY); 299*7f73aa11SBilly Tsai GROUP_DECL(USB2ABP, PORTA_U2, PORTB_U2_PHY); 300*7f73aa11SBilly Tsai GROUP_DECL(USB2ADAP, PORTA_U2, PORTA_U2_PHY); 301*7f73aa11SBilly Tsai GROUP_DECL(USB2AH, PORTA_MODE); 302*7f73aa11SBilly Tsai GROUP_DECL(USB2AHAP, PORTA_MODE, PORTA_U2_PHY); 303*7f73aa11SBilly Tsai 304*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AXHD1, USB2A); 305*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AXHPD1, USB2A); 306*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AXH, USB2AAP); 307*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AXHP, USB2AAP); 308*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AXH2B, USB2ABP); 309*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AXHP2B, USB2ABP); 310*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AD1, USB2ADAP); 311*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AHPD0, USB2AH); 312*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AH, USB2AHAP); 313*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AHP, USB2AHAP); 314*7f73aa11SBilly Tsai FUNC_DECL_1(USB2AD0, USB2AHAP); 315*7f73aa11SBilly Tsai 316*7f73aa11SBilly Tsai GROUP_DECL(USB2B, PORTB_U2); 317*7f73aa11SBilly Tsai GROUP_DECL(USB2BBP, PORTB_U2, PORTB_U2_PHY); 318*7f73aa11SBilly Tsai GROUP_DECL(USB2BAP, PORTB_U2, PORTA_U2_PHY); 319*7f73aa11SBilly Tsai GROUP_DECL(USB2BDBP, PORTB_U2, PORTB_U2_PHY); 320*7f73aa11SBilly Tsai GROUP_DECL(USB2BH, PORTB_MODE); 321*7f73aa11SBilly Tsai GROUP_DECL(USB2BHBP, PORTB_MODE, PORTB_U2_PHY); 322*7f73aa11SBilly Tsai 323*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BXHD1, USB2B); 324*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BXHPD1, USB2B); 325*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BXH, USB2BBP); 326*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BXHP, USB2BBP); 327*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BXH2A, USB2BAP); 328*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BXHP2A, USB2BAP); 329*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BD1, USB2BDBP); 330*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BHPD0, USB2BH); 331*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BH, USB2BHBP); 332*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BHP, USB2BHBP); 333*7f73aa11SBilly Tsai FUNC_DECL_1(USB2BD0, USB2BHBP); 334*7f73aa11SBilly Tsai 335*7f73aa11SBilly Tsai #define PORTA_U3_XHD_DESC { ASPEED_IP_SCU, SCU410, GENMASK(1, 0), 0, 0 } 336*7f73aa11SBilly Tsai #define PORTA_U3_XH_DESC { ASPEED_IP_SCU, SCU410, GENMASK(1, 0), 2, 0 } 337*7f73aa11SBilly Tsai #define PORTA_U3_XH2E_DESC { ASPEED_IP_SCU, SCU410, GENMASK(1, 0), 3, 0 } 338*7f73aa11SBilly Tsai 339*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U3, USB3AXHD, USB3A, USB3AXHD, PORTA_U3_XHD_DESC, 340*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 9)); 341*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U3, USB3AXHPD, USB3A, USB3AXHPD, PORTA_U3_XHD_DESC, 342*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 9)); 343*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U3, USB3AXH, USB3AAP, USB3AXH, PORTA_U3_XH_DESC, 344*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 9)); 345*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U3, USB3AXHP, USB3AAP, USB3AXHP, PORTA_U3_XH_DESC, 346*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 9)); 347*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U3, USB3AXH2B, USB3ABP, USB3AXH2B, PORTA_U3_XH2E_DESC, 348*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 9)); 349*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTA_U3, USB3AXHP2B, USB3ABP, USB3AXHP2B, PORTA_U3_XH2E_DESC, 350*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 9)); 351*7f73aa11SBilly Tsai PIN_DECL_(PORTA_U3, SIG_EXPR_LIST_PTR(PORTA_U3, USB3AXHD), SIG_EXPR_LIST_PTR(PORTA_U3, USB3AXHPD), 352*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U3, USB3AXH), SIG_EXPR_LIST_PTR(PORTA_U3, USB3AXHP), 353*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U3, USB3AXH2B), SIG_EXPR_LIST_PTR(PORTA_U3, USB3AXHP2B)); 354*7f73aa11SBilly Tsai 355*7f73aa11SBilly Tsai #define PORTB_U3_XHD_DESC { ASPEED_IP_SCU, SCU410, GENMASK(5, 4), 0, 0 } 356*7f73aa11SBilly Tsai #define PORTB_U3_XH_DESC { ASPEED_IP_SCU, SCU410, GENMASK(5, 4), 2, 0 } 357*7f73aa11SBilly Tsai #define PORTB_U3_XH2E_DESC { ASPEED_IP_SCU, SCU410, GENMASK(5, 4), 3, 0 } 358*7f73aa11SBilly Tsai 359*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U3, USB3BXHD, USB3B, USB3BXHD, PORTB_U3_XHD_DESC, 360*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 10)); 361*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U3, USB3BXHPD, USB3B, USB3BXHPD, PORTB_U3_XHD_DESC, 362*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 10)); 363*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U3, USB3BXH, USB3BBP, USB3BXH, PORTB_U3_XH_DESC, 364*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 10)); 365*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U3, USB3BXHP, USB3BBP, USB3BXHP, PORTB_U3_XH_DESC, 366*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 10)); 367*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U3, USB3BXH2A, USB3BAP, USB3BXH2A, PORTB_U3_XH2E_DESC, 368*7f73aa11SBilly Tsai SIG_DESC_SET(SCU410, 10)); 369*7f73aa11SBilly Tsai SIG_EXPR_LIST_DECL_SEMG(PORTB_U3, USB3BXHP2A, USB3BAP, USB3BXHP2A, PORTB_U3_XH2E_DESC, 370*7f73aa11SBilly Tsai SIG_DESC_CLEAR(SCU410, 10)); 371*7f73aa11SBilly Tsai PIN_DECL_(PORTB_U3, SIG_EXPR_LIST_PTR(PORTB_U3, USB3BXHD), SIG_EXPR_LIST_PTR(PORTB_U3, USB3BXHPD), 372*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U3, USB3BXH), SIG_EXPR_LIST_PTR(PORTB_U3, USB3BXHP), 373*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U3, USB3BXH2A), SIG_EXPR_LIST_PTR(PORTB_U3, USB3BXHP2A)); 374*7f73aa11SBilly Tsai 375*7f73aa11SBilly Tsai /* 376*7f73aa11SBilly Tsai * USB3 virtual PHY pins. 377*7f73aa11SBilly Tsai * 378*7f73aa11SBilly Tsai * PORTA_U3_PHY and PORTB_U3_PHY are logical endpoints, not package pins. 379*7f73aa11SBilly Tsai * They alias existing USB3 expressions so pin groups can model both direct and 380*7f73aa11SBilly Tsai * cross-coupled routing to PHY A/B. 381*7f73aa11SBilly Tsai * 382*7f73aa11SBilly Tsai * - USB3AAP: PORTA_U3 + PORTA_U3_PHY (A -> PHY A) 383*7f73aa11SBilly Tsai * - USB3ABP: PORTA_U3 + PORTB_U3_PHY (A -> PHY B) 384*7f73aa11SBilly Tsai * - USB3BBP: PORTB_U3 + PORTB_U3_PHY (B -> PHY B) 385*7f73aa11SBilly Tsai * - USB3BAP: PORTB_U3 + PORTA_U3_PHY (B -> PHY A) 386*7f73aa11SBilly Tsai * 387*7f73aa11SBilly Tsai * They do not have any registers to configure this behavior; the goal is 388*7f73aa11SBilly Tsai * simply for the driver to prevent conflicting selections. For example, 389*7f73aa11SBilly Tsai * selecting group USB3ABP and USB3BBP at the same time should not be 390*7f73aa11SBilly Tsai * allowed. 391*7f73aa11SBilly Tsai */ 392*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U3_PHY, USB3AXH, USB3AAP); 393*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U3_PHY, USB3AXHP, USB3AAP); 394*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U3_PHY, USB3BXH2A, USB3BAP); 395*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTA_U3_PHY, USB3BXHP2A, USB3BAP); 396*7f73aa11SBilly Tsai PIN_DECL_(PORTA_U3_PHY, SIG_EXPR_LIST_PTR(PORTA_U3_PHY, USB3AXH), 397*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U3_PHY, USB3AXHP), SIG_EXPR_LIST_PTR(PORTA_U3_PHY, USB3BXH2A), 398*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTA_U3_PHY, USB3BXHP2A)); 399*7f73aa11SBilly Tsai 400*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U3_PHY, USB3AXH2B, USB3ABP); 401*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U3_PHY, USB3AXHP2B, USB3ABP); 402*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U3_PHY, USB3BXH, USB3BBP); 403*7f73aa11SBilly Tsai SIG_EXPR_LIST_ALIAS(PORTB_U3_PHY, USB3BXHP, USB3BBP); 404*7f73aa11SBilly Tsai PIN_DECL_(PORTB_U3_PHY, SIG_EXPR_LIST_PTR(PORTB_U3_PHY, USB3AXH2B), 405*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U3_PHY, USB3AXHP2B), SIG_EXPR_LIST_PTR(PORTB_U3_PHY, USB3BXH), 406*7f73aa11SBilly Tsai SIG_EXPR_LIST_PTR(PORTB_U3_PHY, USB3BXHP)); 407*7f73aa11SBilly Tsai 408*7f73aa11SBilly Tsai /* USB3A xHCI to vHUB */ 409*7f73aa11SBilly Tsai GROUP_DECL(USB3A, PORTA_U3); 410*7f73aa11SBilly Tsai /* USB3A xHCI to USB3A PHY */ 411*7f73aa11SBilly Tsai GROUP_DECL(USB3AAP, PORTA_U3, PORTA_U3_PHY); 412*7f73aa11SBilly Tsai /* USB3A xHCI to USB3B PHY */ 413*7f73aa11SBilly Tsai GROUP_DECL(USB3ABP, PORTA_U3, PORTB_U3_PHY); 414*7f73aa11SBilly Tsai 415*7f73aa11SBilly Tsai FUNC_DECL_1(USB3AXHD, USB3A); 416*7f73aa11SBilly Tsai FUNC_DECL_1(USB3AXHPD, USB3A); 417*7f73aa11SBilly Tsai FUNC_DECL_1(USB3AXH, USB3AAP); 418*7f73aa11SBilly Tsai FUNC_DECL_1(USB3AXHP, USB3AAP); 419*7f73aa11SBilly Tsai FUNC_DECL_1(USB3AXH2B, USB3ABP); 420*7f73aa11SBilly Tsai FUNC_DECL_1(USB3AXHP2B, USB3ABP); 421*7f73aa11SBilly Tsai 422*7f73aa11SBilly Tsai /* USB3B xHCI to vHUB */ 423*7f73aa11SBilly Tsai GROUP_DECL(USB3B, PORTB_U3); 424*7f73aa11SBilly Tsai /* USB3B xHCI to USB3A PHY */ 425*7f73aa11SBilly Tsai GROUP_DECL(USB3BAP, PORTB_U3, PORTA_U3_PHY); 426*7f73aa11SBilly Tsai /* USB3B xHCI to USB3B PHY */ 427*7f73aa11SBilly Tsai GROUP_DECL(USB3BBP, PORTB_U3, PORTB_U3_PHY); 428*7f73aa11SBilly Tsai 429*7f73aa11SBilly Tsai FUNC_DECL_1(USB3BXHD, USB3B); 430*7f73aa11SBilly Tsai FUNC_DECL_1(USB3BXHPD, USB3B); 431*7f73aa11SBilly Tsai FUNC_DECL_1(USB3BXH, USB3BBP); 432*7f73aa11SBilly Tsai FUNC_DECL_1(USB3BXHP, USB3BBP); 433*7f73aa11SBilly Tsai FUNC_DECL_1(USB3BXH2A, USB3BAP); 434*7f73aa11SBilly Tsai FUNC_DECL_1(USB3BXHP2A, USB3BAP); 435*7f73aa11SBilly Tsai 436*7f73aa11SBilly Tsai static const struct pinctrl_pin_desc aspeed_g7_soc0_pins[] = { 437*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AC14), 438*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AE15), 439*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AD14), 440*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AE14), 441*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AF14), 442*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AB13), 443*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AB14), 444*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AF15), 445*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AF13), 446*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AC13), 447*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AD13), 448*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(AE13), 449*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(JTAG_PORT), 450*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PCIERC0_PERST), 451*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PCIERC1_PERST), 452*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTA_MODE), 453*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTA_U2), 454*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTA_U3), 455*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTA_U2_PHY), 456*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTA_U3_PHY), 457*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTB_MODE), 458*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTB_U2), 459*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTB_U3), 460*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTB_U2_PHY), 461*7f73aa11SBilly Tsai ASPEED_PINCTRL_PIN(PORTB_U3_PHY), 462*7f73aa11SBilly Tsai }; 463*7f73aa11SBilly Tsai 464*7f73aa11SBilly Tsai static const struct aspeed_pin_group aspeed_g7_soc0_groups[] = { 465*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(EMMCCDN), 466*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(EMMCG1), 467*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(EMMCG4), 468*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(EMMCG8), 469*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(EMMCWPN), 470*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(TSPRSTN), 471*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(UFSCLKI), 472*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(VB0), 473*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(VB1), 474*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(VGADDC), 475*7f73aa11SBilly Tsai /* JTAG groups */ 476*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(JTAG0), 477*7f73aa11SBilly Tsai /* PCIE RC groups */ 478*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(PCIERC0PERST), 479*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(PCIERC1PERST), 480*7f73aa11SBilly Tsai /* USB3A groups */ 481*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB3A), 482*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB3AAP), 483*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB3ABP), 484*7f73aa11SBilly Tsai /* USB3B groups */ 485*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB3B), 486*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB3BAP), 487*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB3BBP), 488*7f73aa11SBilly Tsai /* USB2A groups */ 489*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2A), 490*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2AAP), 491*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2ABP), 492*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2ADAP), 493*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2AH), 494*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2AHAP), 495*7f73aa11SBilly Tsai /* USB2B groups */ 496*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2B), 497*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2BAP), 498*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2BBP), 499*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2BDBP), 500*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2BH), 501*7f73aa11SBilly Tsai ASPEED_PINCTRL_GROUP(USB2BHBP), 502*7f73aa11SBilly Tsai }; 503*7f73aa11SBilly Tsai 504*7f73aa11SBilly Tsai static const struct aspeed_pin_function aspeed_g7_soc0_functions[] = { 505*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(EMMC), 506*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(TSPRSTN), 507*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(UFSCLKI), 508*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(VB), 509*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(VGADDC), 510*7f73aa11SBilly Tsai /* JTAG functions */ 511*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(JTAGDDR), 512*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(JTAGM0), 513*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(JTAGPCIEA), 514*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(JTAGPCIEB), 515*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(JTAGPSP), 516*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(JTAGSSP), 517*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(JTAGTSP), 518*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(JTAGUSB3A), 519*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(JTAGUSB3B), 520*7f73aa11SBilly Tsai /* PCIE RC functions */ 521*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(PCIERC0PERST), 522*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(PCIERC1PERST), 523*7f73aa11SBilly Tsai /* USB3A functions */ 524*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3AXH), 525*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3AXH2B), 526*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3AXHD), 527*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3AXHP), 528*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3AXHP2B), 529*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3AXHPD), 530*7f73aa11SBilly Tsai /* USB3B functions */ 531*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3BXH), 532*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3BXH2A), 533*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3BXHD), 534*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3BXHP), 535*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3BXHP2A), 536*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB3BXHPD), 537*7f73aa11SBilly Tsai /* USB2A functions */ 538*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AD0), 539*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AD1), 540*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AH), 541*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AHP), 542*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AHPD0), 543*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AXH), 544*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AXH2B), 545*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AXHD1), 546*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AXHP), 547*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AXHP2B), 548*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2AXHPD1), 549*7f73aa11SBilly Tsai /* USB2B functions */ 550*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BD0), 551*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BD1), 552*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BH), 553*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BHP), 554*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BHPD0), 555*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BXH), 556*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BXH2A), 557*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BXHD1), 558*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BXHP), 559*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BXHP2A), 560*7f73aa11SBilly Tsai ASPEED_PINCTRL_FUNC(USB2BXHPD1), 561*7f73aa11SBilly Tsai }; 562*7f73aa11SBilly Tsai 563*7f73aa11SBilly Tsai static const struct pinmux_ops aspeed_g7_soc0_pinmux_ops = { 564*7f73aa11SBilly Tsai .get_functions_count = aspeed_pinmux_get_fn_count, 565*7f73aa11SBilly Tsai .get_function_name = aspeed_pinmux_get_fn_name, 566*7f73aa11SBilly Tsai .get_function_groups = aspeed_pinmux_get_fn_groups, 567*7f73aa11SBilly Tsai .set_mux = aspeed_pinmux_set_mux, 568*7f73aa11SBilly Tsai .gpio_request_enable = aspeed_gpio_request_enable, 569*7f73aa11SBilly Tsai .strict = true, 570*7f73aa11SBilly Tsai }; 571*7f73aa11SBilly Tsai 572*7f73aa11SBilly Tsai static const struct pinctrl_ops aspeed_g7_soc0_pinctrl_ops = { 573*7f73aa11SBilly Tsai .get_groups_count = aspeed_pinctrl_get_groups_count, 574*7f73aa11SBilly Tsai .get_group_name = aspeed_pinctrl_get_group_name, 575*7f73aa11SBilly Tsai .get_group_pins = aspeed_pinctrl_get_group_pins, 576*7f73aa11SBilly Tsai .pin_dbg_show = aspeed_pinctrl_pin_dbg_show, 577*7f73aa11SBilly Tsai .dt_node_to_map = pinconf_generic_dt_node_to_map_all, 578*7f73aa11SBilly Tsai .dt_free_map = pinctrl_utils_free_map, 579*7f73aa11SBilly Tsai }; 580*7f73aa11SBilly Tsai 581*7f73aa11SBilly Tsai static const struct pinconf_ops aspeed_g7_soc0_pinconf_ops = { 582*7f73aa11SBilly Tsai .is_generic = true, 583*7f73aa11SBilly Tsai .pin_config_get = aspeed_pin_config_get, 584*7f73aa11SBilly Tsai .pin_config_set = aspeed_pin_config_set, 585*7f73aa11SBilly Tsai .pin_config_group_get = aspeed_pin_config_group_get, 586*7f73aa11SBilly Tsai .pin_config_group_set = aspeed_pin_config_group_set, 587*7f73aa11SBilly Tsai }; 588*7f73aa11SBilly Tsai 589*7f73aa11SBilly Tsai /* pinctrl_desc */ 590*7f73aa11SBilly Tsai static const struct pinctrl_desc aspeed_g7_soc0_pinctrl_desc = { 591*7f73aa11SBilly Tsai .name = "aspeed-g7-soc0-pinctrl", 592*7f73aa11SBilly Tsai .pins = aspeed_g7_soc0_pins, 593*7f73aa11SBilly Tsai .npins = ARRAY_SIZE(aspeed_g7_soc0_pins), 594*7f73aa11SBilly Tsai .pctlops = &aspeed_g7_soc0_pinctrl_ops, 595*7f73aa11SBilly Tsai .pmxops = &aspeed_g7_soc0_pinmux_ops, 596*7f73aa11SBilly Tsai .confops = &aspeed_g7_soc0_pinconf_ops, 597*7f73aa11SBilly Tsai }; 598*7f73aa11SBilly Tsai 599*7f73aa11SBilly Tsai static const struct aspeed_pin_config aspeed_g7_soc0_configs[] = { 600*7f73aa11SBilly Tsai /* GPIO18A */ 601*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AC14, AC14 }, SCU480, GENMASK(3, 0) }, 602*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AC14, AC14 }, SCU480, GENMASK(5, 4) }, 603*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AC14, AC14 }, SCU480, GENMASK(5, 4) }, 604*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AC14, AC14 }, SCU480, BIT(5) }, 605*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AE15, AE15 }, SCU484, GENMASK(3, 0) }, 606*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AE15, AE15 }, SCU484, GENMASK(5, 4) }, 607*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AE15, AE15 }, SCU484, GENMASK(5, 4) }, 608*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AE15, AE15 }, SCU484, BIT(5) }, 609*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AD14, AD14 }, SCU488, GENMASK(3, 0) }, 610*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AD14, AD14 }, SCU488, GENMASK(5, 4) }, 611*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AD14, AD14 }, SCU488, GENMASK(5, 4) }, 612*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AD14, AD14 }, SCU488, BIT(5) }, 613*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AE14, AE14 }, SCU48C, GENMASK(3, 0) }, 614*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AE14, AE14 }, SCU48C, GENMASK(5, 4) }, 615*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AE14, AE14 }, SCU48C, GENMASK(5, 4) }, 616*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AE14, AE14 }, SCU48C, BIT(5) }, 617*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AF14, AF14 }, SCU490, GENMASK(3, 0) }, 618*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AF14, AF14 }, SCU490, GENMASK(5, 4) }, 619*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AF14, AF14 }, SCU490, GENMASK(5, 4) }, 620*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AF14, AF14 }, SCU490, BIT(5) }, 621*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AB13, AB13 }, SCU494, GENMASK(3, 0) }, 622*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AB13, AB13 }, SCU494, GENMASK(5, 4) }, 623*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AB13, AB13 }, SCU494, GENMASK(5, 4) }, 624*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AB13, AB13 }, SCU494, BIT(5) }, 625*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AB14, AB14 }, SCU498, GENMASK(3, 0) }, 626*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AB14, AB14 }, SCU498, GENMASK(5, 4) }, 627*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AB14, AB14 }, SCU498, GENMASK(5, 4) }, 628*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AB14, AB14 }, SCU498, BIT(5) }, 629*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AF15, AF15 }, SCU49C, GENMASK(3, 0) }, 630*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AF15, AF15 }, SCU49C, GENMASK(5, 4) }, 631*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AF15, AF15 }, SCU49C, GENMASK(5, 4) }, 632*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AF15, AF15 }, SCU49C, BIT(5) }, 633*7f73aa11SBilly Tsai /* GPIO18B */ 634*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AF13, AF13 }, SCU4A0, GENMASK(3, 0) }, 635*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AF13, AF13 }, SCU4A0, GENMASK(5, 4) }, 636*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AF13, AF13 }, SCU4A0, GENMASK(5, 4) }, 637*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AF13, AF13 }, SCU4A0, BIT(5) }, 638*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AC13, AC13 }, SCU4A4, GENMASK(3, 0) }, 639*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AC13, AC13 }, SCU4A4, GENMASK(5, 4) }, 640*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AC13, AC13 }, SCU4A4, GENMASK(5, 4) }, 641*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AC13, AC13 }, SCU4A4, BIT(5) }, 642*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AD13, AD13 }, SCU4A8, GENMASK(3, 0) }, 643*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AD13, AD13 }, SCU4A8, GENMASK(5, 4) }, 644*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AD13, AD13 }, SCU4A8, GENMASK(5, 4) }, 645*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AD13, AD13 }, SCU4A8, BIT(5) }, 646*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, { AE13, AE13 }, SCU4AC, GENMASK(3, 0) }, 647*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, { AE13, AE13 }, SCU4AC, GENMASK(5, 4) }, 648*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, { AE13, AE13 }, SCU4AC, GENMASK(5, 4) }, 649*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, { AE13, AE13 }, SCU4AC, BIT(5) }, 650*7f73aa11SBilly Tsai }; 651*7f73aa11SBilly Tsai 652*7f73aa11SBilly Tsai static const struct aspeed_pin_config_map aspeed_g7_soc0_pin_config_map[] = { 653*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_DOWN, -1, 2, GENMASK(1, 0) }, 654*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_PULL_UP, -1, 3, GENMASK(1, 0) }, 655*7f73aa11SBilly Tsai { PIN_CONFIG_BIAS_DISABLE, -1, 0, BIT_MASK(0) }, 656*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 3, 0, GENMASK(3, 0) }, 657*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 6, 1, GENMASK(3, 0) }, 658*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 8, 2, GENMASK(3, 0) }, 659*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 11, 3, GENMASK(3, 0) }, 660*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 16, 4, GENMASK(3, 0) }, 661*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 18, 5, GENMASK(3, 0) }, 662*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 20, 6, GENMASK(3, 0) }, 663*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 23, 7, GENMASK(3, 0) }, 664*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 30, 8, GENMASK(3, 0) }, 665*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 32, 9, GENMASK(3, 0) }, 666*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 33, 10, GENMASK(3, 0) }, 667*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 35, 11, GENMASK(3, 0) }, 668*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 37, 12, GENMASK(3, 0) }, 669*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 38, 13, GENMASK(3, 0) }, 670*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 39, 14, GENMASK(3, 0) }, 671*7f73aa11SBilly Tsai { PIN_CONFIG_DRIVE_STRENGTH, 41, 15, GENMASK(3, 0) }, 672*7f73aa11SBilly Tsai 673*7f73aa11SBilly Tsai }; 674*7f73aa11SBilly Tsai 675*7f73aa11SBilly Tsai static int aspeed_g7_soc0_sig_expr_set(struct aspeed_pinmux_data *ctx, 676*7f73aa11SBilly Tsai const struct aspeed_sig_expr *expr, bool enable) 677*7f73aa11SBilly Tsai { 678*7f73aa11SBilly Tsai int ret; 679*7f73aa11SBilly Tsai int i; 680*7f73aa11SBilly Tsai 681*7f73aa11SBilly Tsai for (i = 0; i < expr->ndescs; i++) { 682*7f73aa11SBilly Tsai const struct aspeed_sig_desc *desc = &expr->descs[i]; 683*7f73aa11SBilly Tsai u32 pattern = enable ? desc->enable : desc->disable; 684*7f73aa11SBilly Tsai u32 val = (pattern << __ffs(desc->mask)); 685*7f73aa11SBilly Tsai 686*7f73aa11SBilly Tsai if (!ctx->maps[desc->ip]) 687*7f73aa11SBilly Tsai return -ENODEV; 688*7f73aa11SBilly Tsai 689*7f73aa11SBilly Tsai WARN_ON_ONCE(desc->ip != ASPEED_IP_SCU); 690*7f73aa11SBilly Tsai 691*7f73aa11SBilly Tsai ret = regmap_update_bits(ctx->maps[desc->ip], desc->reg, 692*7f73aa11SBilly Tsai desc->mask, val); 693*7f73aa11SBilly Tsai if (ret) 694*7f73aa11SBilly Tsai return ret; 695*7f73aa11SBilly Tsai } 696*7f73aa11SBilly Tsai 697*7f73aa11SBilly Tsai ret = aspeed_sig_expr_eval(ctx, expr, enable); 698*7f73aa11SBilly Tsai if (ret < 0) 699*7f73aa11SBilly Tsai return ret; 700*7f73aa11SBilly Tsai 701*7f73aa11SBilly Tsai return ret ? 0 : -EPERM; 702*7f73aa11SBilly Tsai } 703*7f73aa11SBilly Tsai 704*7f73aa11SBilly Tsai static const struct aspeed_pinmux_ops aspeed_g7_soc0_ops = { 705*7f73aa11SBilly Tsai .set = aspeed_g7_soc0_sig_expr_set, 706*7f73aa11SBilly Tsai }; 707*7f73aa11SBilly Tsai 708*7f73aa11SBilly Tsai static struct aspeed_pinctrl_data aspeed_g7_soc0_pinctrl_data = { 709*7f73aa11SBilly Tsai .pins = aspeed_g7_soc0_pins, 710*7f73aa11SBilly Tsai .npins = ARRAY_SIZE(aspeed_g7_soc0_pins), 711*7f73aa11SBilly Tsai .pinmux = { 712*7f73aa11SBilly Tsai .ops = &aspeed_g7_soc0_ops, 713*7f73aa11SBilly Tsai .groups = aspeed_g7_soc0_groups, 714*7f73aa11SBilly Tsai .ngroups = ARRAY_SIZE(aspeed_g7_soc0_groups), 715*7f73aa11SBilly Tsai .functions = aspeed_g7_soc0_functions, 716*7f73aa11SBilly Tsai .nfunctions = ARRAY_SIZE(aspeed_g7_soc0_functions), 717*7f73aa11SBilly Tsai }, 718*7f73aa11SBilly Tsai .configs = aspeed_g7_soc0_configs, 719*7f73aa11SBilly Tsai .nconfigs = ARRAY_SIZE(aspeed_g7_soc0_configs), 720*7f73aa11SBilly Tsai .confmaps = aspeed_g7_soc0_pin_config_map, 721*7f73aa11SBilly Tsai .nconfmaps = ARRAY_SIZE(aspeed_g7_soc0_pin_config_map), 722*7f73aa11SBilly Tsai }; 723*7f73aa11SBilly Tsai 724*7f73aa11SBilly Tsai static int aspeed_g7_soc0_pinctrl_probe(struct platform_device *pdev) 725*7f73aa11SBilly Tsai { 726*7f73aa11SBilly Tsai return aspeed_pinctrl_probe(pdev, &aspeed_g7_soc0_pinctrl_desc, 727*7f73aa11SBilly Tsai &aspeed_g7_soc0_pinctrl_data); 728*7f73aa11SBilly Tsai } 729*7f73aa11SBilly Tsai 730*7f73aa11SBilly Tsai static const struct of_device_id aspeed_g7_soc0_pinctrl_match[] = { 731*7f73aa11SBilly Tsai { .compatible = "aspeed,ast2700-soc0-pinctrl" }, 732*7f73aa11SBilly Tsai {} 733*7f73aa11SBilly Tsai }; 734*7f73aa11SBilly Tsai MODULE_DEVICE_TABLE(of, aspeed_g7_soc0_pinctrl_match); 735*7f73aa11SBilly Tsai 736*7f73aa11SBilly Tsai static struct platform_driver aspeed_g7_soc0_pinctrl_driver = { 737*7f73aa11SBilly Tsai .probe = aspeed_g7_soc0_pinctrl_probe, 738*7f73aa11SBilly Tsai .driver = { 739*7f73aa11SBilly Tsai .name = "aspeed-g7-soc0-pinctrl", 740*7f73aa11SBilly Tsai .of_match_table = aspeed_g7_soc0_pinctrl_match, 741*7f73aa11SBilly Tsai .suppress_bind_attrs = true, 742*7f73aa11SBilly Tsai }, 743*7f73aa11SBilly Tsai }; 744*7f73aa11SBilly Tsai 745*7f73aa11SBilly Tsai static int __init aspeed_g7_soc0_pinctrl_init(void) 746*7f73aa11SBilly Tsai { 747*7f73aa11SBilly Tsai return platform_driver_register(&aspeed_g7_soc0_pinctrl_driver); 748*7f73aa11SBilly Tsai } 749*7f73aa11SBilly Tsai arch_initcall(aspeed_g7_soc0_pinctrl_init); 750