xref: /linux/drivers/pinctrl/aspeed/pinctrl-aspeed-g7-soc0.c (revision 53c7db5c1916afcecc8683ae01ff8415c708a883)
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