Skip to content

Commit 15711ba

Browse files
johnydhuanglinusw
authored andcommitted
pinctrl: aspeed-g6: Add AST2600 pinconf support
The AST2600 pinconf is a little different from previous generations of ASPEED BMC SoCs in terms of architecture. The pull-down setting is per-pin setting now, and drive-strength support 4 kind of value (e.g. 4ma, 8ma, 12ma, 16ma). Signed-off-by: Johnny Huang <[email protected]> [AJ: Trim unused pinctrl register macros] Signed-off-by: Andrew Jeffery <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Linus Walleij <[email protected]>
1 parent 5f52c85 commit 15711ba

File tree

2 files changed

+297
-0
lines changed

2 files changed

+297
-0
lines changed

drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c

Lines changed: 290 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#define SCU438 0x438 /* Multi-function Pin Control #10 */
2929
#define SCU440 0x440 /* USB Multi-function Pin Control #12 */
3030
#define SCU450 0x450 /* Multi-function Pin Control #14 */
31+
#define SCU454 0x454 /* Multi-function Pin Control #15 */
32+
#define SCU458 0x458 /* Multi-function Pin Control #16 */
3133
#define SCU4B0 0x4B0 /* Multi-function Pin Control #17 */
3234
#define SCU4B4 0x4B4 /* Multi-function Pin Control #18 */
3335
#define SCU4B8 0x4B8 /* Multi-function Pin Control #19 */
@@ -36,6 +38,13 @@
3638
#define SCU4D8 0x4D8 /* Multi-function Pin Control #23 */
3739
#define SCU500 0x500 /* Hardware Strap 1 */
3840
#define SCU510 0x510 /* Hardware Strap 2 */
41+
#define SCU610 0x610 /* Disable GPIO Internal Pull-Down #0 */
42+
#define SCU614 0x614 /* Disable GPIO Internal Pull-Down #1 */
43+
#define SCU618 0x618 /* Disable GPIO Internal Pull-Down #2 */
44+
#define SCU61C 0x61c /* Disable GPIO Internal Pull-Down #3 */
45+
#define SCU620 0x620 /* Disable GPIO Internal Pull-Down #4 */
46+
#define SCU634 0x634 /* Disable GPIO Internal Pull-Down #5 */
47+
#define SCU638 0x638 /* Disable GPIO Internal Pull-Down #6 */
3948
#define SCU694 0x694 /* Multi-function Pin Control #25 */
4049
#define SCUC20 0xC20 /* PCIE configuration Setting Control */
4150

@@ -2333,6 +2342,260 @@ static const struct aspeed_pin_function aspeed_g6_functions[] = {
23332342
ASPEED_PINCTRL_FUNC(WDTRST4),
23342343
};
23352344

2345+
static struct aspeed_pin_config aspeed_g6_configs[] = {
2346+
/* GPIOB7 */
2347+
ASPEED_PULL_DOWN_PINCONF(J24, SCU610, 15),
2348+
/* GPIOB6 */
2349+
ASPEED_PULL_DOWN_PINCONF(H25, SCU610, 14),
2350+
/* GPIOB5 */
2351+
ASPEED_PULL_DOWN_PINCONF(G26, SCU610, 13),
2352+
/* GPIOB4 */
2353+
ASPEED_PULL_DOWN_PINCONF(J23, SCU610, 12),
2354+
/* GPIOB3 */
2355+
ASPEED_PULL_DOWN_PINCONF(J25, SCU610, 11),
2356+
/* GPIOB2 */
2357+
ASPEED_PULL_DOWN_PINCONF(H26, SCU610, 10),
2358+
/* GPIOB1 */
2359+
ASPEED_PULL_DOWN_PINCONF(K23, SCU610, 9),
2360+
/* GPIOB0 */
2361+
ASPEED_PULL_DOWN_PINCONF(J26, SCU610, 8),
2362+
2363+
/* GPIOH3 */
2364+
ASPEED_PULL_DOWN_PINCONF(A17, SCU614, 27),
2365+
/* GPIOH2 */
2366+
ASPEED_PULL_DOWN_PINCONF(C18, SCU614, 26),
2367+
/* GPIOH1 */
2368+
ASPEED_PULL_DOWN_PINCONF(B18, SCU614, 25),
2369+
/* GPIOH0 */
2370+
ASPEED_PULL_DOWN_PINCONF(A18, SCU614, 24),
2371+
2372+
/* GPIOL7 */
2373+
ASPEED_PULL_DOWN_PINCONF(C14, SCU618, 31),
2374+
/* GPIOL6 */
2375+
ASPEED_PULL_DOWN_PINCONF(B14, SCU618, 30),
2376+
/* GPIOL5 */
2377+
ASPEED_PULL_DOWN_PINCONF(F15, SCU618, 29),
2378+
/* GPIOL4 */
2379+
ASPEED_PULL_DOWN_PINCONF(C15, SCU618, 28),
2380+
2381+
/* GPIOJ7 */
2382+
ASPEED_PULL_UP_PINCONF(D19, SCU618, 15),
2383+
/* GPIOJ6 */
2384+
ASPEED_PULL_UP_PINCONF(C20, SCU618, 14),
2385+
/* GPIOJ5 */
2386+
ASPEED_PULL_UP_PINCONF(A19, SCU618, 13),
2387+
/* GPIOJ4 */
2388+
ASPEED_PULL_UP_PINCONF(C19, SCU618, 12),
2389+
/* GPIOJ3 */
2390+
ASPEED_PULL_UP_PINCONF(D20, SCU618, 11),
2391+
/* GPIOJ2 */
2392+
ASPEED_PULL_UP_PINCONF(E19, SCU618, 10),
2393+
/* GPIOJ1 */
2394+
ASPEED_PULL_UP_PINCONF(A20, SCU618, 9),
2395+
/* GPIOJ0 */
2396+
ASPEED_PULL_UP_PINCONF(B20, SCU618, 8),
2397+
2398+
/* GPIOI7 */
2399+
ASPEED_PULL_DOWN_PINCONF(A15, SCU618, 7),
2400+
/* GPIOI6 */
2401+
ASPEED_PULL_DOWN_PINCONF(B16, SCU618, 6),
2402+
/* GPIOI5 */
2403+
ASPEED_PULL_DOWN_PINCONF(E16, SCU618, 5),
2404+
/* GPIOI4 */
2405+
ASPEED_PULL_DOWN_PINCONF(C16, SCU618, 4),
2406+
/* GPIOI3 */
2407+
ASPEED_PULL_DOWN_PINCONF(D16, SCU618, 3),
2408+
/* GPIOI2 */
2409+
ASPEED_PULL_DOWN_PINCONF(E17, SCU618, 2),
2410+
/* GPIOI1 */
2411+
ASPEED_PULL_DOWN_PINCONF(A16, SCU618, 1),
2412+
/* GPIOI0 */
2413+
ASPEED_PULL_DOWN_PINCONF(D17, SCU618, 0),
2414+
2415+
/* GPIOP7 */
2416+
ASPEED_PULL_DOWN_PINCONF(Y23, SCU61C, 31),
2417+
/* GPIOP6 */
2418+
ASPEED_PULL_DOWN_PINCONF(AB24, SCU61C, 30),
2419+
/* GPIOP5 */
2420+
ASPEED_PULL_DOWN_PINCONF(AB23, SCU61C, 29),
2421+
/* GPIOP4 */
2422+
ASPEED_PULL_DOWN_PINCONF(W23, SCU61C, 28),
2423+
/* GPIOP3 */
2424+
ASPEED_PULL_DOWN_PINCONF(AA24, SCU61C, 27),
2425+
/* GPIOP2 */
2426+
ASPEED_PULL_DOWN_PINCONF(AA23, SCU61C, 26),
2427+
/* GPIOP1 */
2428+
ASPEED_PULL_DOWN_PINCONF(W24, SCU61C, 25),
2429+
/* GPIOP0 */
2430+
ASPEED_PULL_DOWN_PINCONF(AB22, SCU61C, 24),
2431+
2432+
/* GPIOO7 */
2433+
ASPEED_PULL_DOWN_PINCONF(AC23, SCU61C, 23),
2434+
/* GPIOO6 */
2435+
ASPEED_PULL_DOWN_PINCONF(AC24, SCU61C, 22),
2436+
/* GPIOO5 */
2437+
ASPEED_PULL_DOWN_PINCONF(AC22, SCU61C, 21),
2438+
/* GPIOO4 */
2439+
ASPEED_PULL_DOWN_PINCONF(AD25, SCU61C, 20),
2440+
/* GPIOO3 */
2441+
ASPEED_PULL_DOWN_PINCONF(AD24, SCU61C, 19),
2442+
/* GPIOO2 */
2443+
ASPEED_PULL_DOWN_PINCONF(AD23, SCU61C, 18),
2444+
/* GPIOO1 */
2445+
ASPEED_PULL_DOWN_PINCONF(AD22, SCU61C, 17),
2446+
/* GPIOO0 */
2447+
ASPEED_PULL_DOWN_PINCONF(AD26, SCU61C, 16),
2448+
2449+
/* GPION7 */
2450+
ASPEED_PULL_DOWN_PINCONF(M26, SCU61C, 15),
2451+
/* GPION6 */
2452+
ASPEED_PULL_DOWN_PINCONF(N26, SCU61C, 14),
2453+
/* GPION5 */
2454+
ASPEED_PULL_DOWN_PINCONF(M23, SCU61C, 13),
2455+
/* GPION4 */
2456+
ASPEED_PULL_DOWN_PINCONF(P26, SCU61C, 12),
2457+
/* GPION3 */
2458+
ASPEED_PULL_DOWN_PINCONF(N24, SCU61C, 11),
2459+
/* GPION2 */
2460+
ASPEED_PULL_DOWN_PINCONF(N25, SCU61C, 10),
2461+
/* GPION1 */
2462+
ASPEED_PULL_DOWN_PINCONF(N23, SCU61C, 9),
2463+
/* GPION0 */
2464+
ASPEED_PULL_DOWN_PINCONF(P25, SCU61C, 8),
2465+
2466+
/* GPIOM7 */
2467+
ASPEED_PULL_DOWN_PINCONF(D13, SCU61C, 7),
2468+
/* GPIOM6 */
2469+
ASPEED_PULL_DOWN_PINCONF(C13, SCU61C, 6),
2470+
/* GPIOM5 */
2471+
ASPEED_PULL_DOWN_PINCONF(C12, SCU61C, 5),
2472+
/* GPIOM4 */
2473+
ASPEED_PULL_DOWN_PINCONF(B12, SCU61C, 4),
2474+
/* GPIOM3 */
2475+
ASPEED_PULL_DOWN_PINCONF(E14, SCU61C, 3),
2476+
/* GPIOM2 */
2477+
ASPEED_PULL_DOWN_PINCONF(A12, SCU61C, 2),
2478+
/* GPIOM1 */
2479+
ASPEED_PULL_DOWN_PINCONF(B13, SCU61C, 1),
2480+
/* GPIOM0 */
2481+
ASPEED_PULL_DOWN_PINCONF(D14, SCU61C, 0),
2482+
2483+
/* GPIOS7 */
2484+
ASPEED_PULL_DOWN_PINCONF(T24, SCU620, 23),
2485+
/* GPIOS6 */
2486+
ASPEED_PULL_DOWN_PINCONF(P23, SCU620, 22),
2487+
/* GPIOS5 */
2488+
ASPEED_PULL_DOWN_PINCONF(P24, SCU620, 21),
2489+
/* GPIOS4 */
2490+
ASPEED_PULL_DOWN_PINCONF(R26, SCU620, 20),
2491+
/* GPIOS3*/
2492+
ASPEED_PULL_DOWN_PINCONF(R24, SCU620, 19),
2493+
/* GPIOS2 */
2494+
ASPEED_PULL_DOWN_PINCONF(T26, SCU620, 18),
2495+
/* GPIOS1 */
2496+
ASPEED_PULL_DOWN_PINCONF(T25, SCU620, 17),
2497+
/* GPIOS0 */
2498+
ASPEED_PULL_DOWN_PINCONF(R23, SCU620, 16),
2499+
2500+
/* GPIOR7 */
2501+
ASPEED_PULL_DOWN_PINCONF(U26, SCU620, 15),
2502+
/* GPIOR6 */
2503+
ASPEED_PULL_DOWN_PINCONF(W26, SCU620, 14),
2504+
/* GPIOR5 */
2505+
ASPEED_PULL_DOWN_PINCONF(T23, SCU620, 13),
2506+
/* GPIOR4 */
2507+
ASPEED_PULL_DOWN_PINCONF(U25, SCU620, 12),
2508+
/* GPIOR3*/
2509+
ASPEED_PULL_DOWN_PINCONF(V26, SCU620, 11),
2510+
/* GPIOR2 */
2511+
ASPEED_PULL_DOWN_PINCONF(V24, SCU620, 10),
2512+
/* GPIOR1 */
2513+
ASPEED_PULL_DOWN_PINCONF(U24, SCU620, 9),
2514+
/* GPIOR0 */
2515+
ASPEED_PULL_DOWN_PINCONF(V25, SCU620, 8),
2516+
2517+
/* GPIOX7 */
2518+
ASPEED_PULL_DOWN_PINCONF(AB10, SCU634, 31),
2519+
/* GPIOX6 */
2520+
ASPEED_PULL_DOWN_PINCONF(AF9, SCU634, 30),
2521+
/* GPIOX5 */
2522+
ASPEED_PULL_DOWN_PINCONF(AD9, SCU634, 29),
2523+
/* GPIOX4 */
2524+
ASPEED_PULL_DOWN_PINCONF(AB9, SCU634, 28),
2525+
/* GPIOX3*/
2526+
ASPEED_PULL_DOWN_PINCONF(AF8, SCU634, 27),
2527+
/* GPIOX2 */
2528+
ASPEED_PULL_DOWN_PINCONF(AC9, SCU634, 26),
2529+
/* GPIOX1 */
2530+
ASPEED_PULL_DOWN_PINCONF(AA9, SCU634, 25),
2531+
/* GPIOX0 */
2532+
ASPEED_PULL_DOWN_PINCONF(AE8, SCU634, 24),
2533+
2534+
/* GPIOV7 */
2535+
ASPEED_PULL_DOWN_PINCONF(AF15, SCU634, 15),
2536+
/* GPIOV6 */
2537+
ASPEED_PULL_DOWN_PINCONF(AD15, SCU634, 14),
2538+
/* GPIOV5 */
2539+
ASPEED_PULL_DOWN_PINCONF(AE14, SCU634, 13),
2540+
/* GPIOV4 */
2541+
ASPEED_PULL_DOWN_PINCONF(AE15, SCU634, 12),
2542+
/* GPIOV3*/
2543+
ASPEED_PULL_DOWN_PINCONF(AC15, SCU634, 11),
2544+
/* GPIOV2 */
2545+
ASPEED_PULL_DOWN_PINCONF(AD14, SCU634, 10),
2546+
/* GPIOV1 */
2547+
ASPEED_PULL_DOWN_PINCONF(AF14, SCU634, 9),
2548+
/* GPIOV0 */
2549+
ASPEED_PULL_DOWN_PINCONF(AB15, SCU634, 8),
2550+
2551+
/* GPIOZ7 */
2552+
ASPEED_PULL_DOWN_PINCONF(AF10, SCU638, 15),
2553+
/* GPIOZ6 */
2554+
ASPEED_PULL_DOWN_PINCONF(AD11, SCU638, 14),
2555+
/* GPIOZ5 */
2556+
ASPEED_PULL_DOWN_PINCONF(AA11, SCU638, 13),
2557+
/* GPIOZ4 */
2558+
ASPEED_PULL_DOWN_PINCONF(AC11, SCU638, 12),
2559+
/* GPIOZ3*/
2560+
ASPEED_PULL_DOWN_PINCONF(AB11, SCU638, 11),
2561+
2562+
/* GPIOZ1 */
2563+
ASPEED_PULL_DOWN_PINCONF(AD10, SCU638, 9),
2564+
/* GPIOZ0 */
2565+
ASPEED_PULL_DOWN_PINCONF(AC10, SCU638, 8),
2566+
2567+
/* GPIOY6 */
2568+
ASPEED_PULL_DOWN_PINCONF(AC12, SCU638, 6),
2569+
/* GPIOY5 */
2570+
ASPEED_PULL_DOWN_PINCONF(AF12, SCU638, 5),
2571+
/* GPIOY4 */
2572+
ASPEED_PULL_DOWN_PINCONF(AE12, SCU638, 4),
2573+
/* GPIOY3 */
2574+
ASPEED_PULL_DOWN_PINCONF(AA12, SCU638, 3),
2575+
/* GPIOY2 */
2576+
ASPEED_PULL_DOWN_PINCONF(AE11, SCU638, 2),
2577+
/* GPIOY1 */
2578+
ASPEED_PULL_DOWN_PINCONF(AD12, SCU638, 1),
2579+
/* GPIOY0 */
2580+
ASPEED_PULL_DOWN_PINCONF(AF11, SCU638, 0),
2581+
2582+
/* LAD3 */
2583+
{ PIN_CONFIG_DRIVE_STRENGTH, { AC7, AC7 }, SCU454, GENMASK(31, 30)},
2584+
/* LAD2 */
2585+
{ PIN_CONFIG_DRIVE_STRENGTH, { AC8, AC8 }, SCU454, GENMASK(29, 28)},
2586+
/* LAD1 */
2587+
{ PIN_CONFIG_DRIVE_STRENGTH, { AB8, AB8 }, SCU454, GENMASK(27, 26)},
2588+
/* LAD0 */
2589+
{ PIN_CONFIG_DRIVE_STRENGTH, { AB7, AB7 }, SCU454, GENMASK(25, 24)},
2590+
2591+
/* MAC3 */
2592+
{ PIN_CONFIG_POWER_SOURCE, { H24, E26 }, SCU458, BIT_MASK(4)},
2593+
{ PIN_CONFIG_DRIVE_STRENGTH, { H24, E26 }, SCU458, GENMASK(1, 0)},
2594+
/* MAC4 */
2595+
{ PIN_CONFIG_POWER_SOURCE, { F24, B24 }, SCU458, BIT_MASK(5)},
2596+
{ PIN_CONFIG_DRIVE_STRENGTH, { F24, B24 }, SCU458, GENMASK(3, 2)},
2597+
};
2598+
23362599
/**
23372600
* Configure a pin's signal by applying an expression's descriptor state for
23382601
* all descriptors in the expression.
@@ -2400,6 +2663,20 @@ static int aspeed_g6_sig_expr_set(struct aspeed_pinmux_data *ctx,
24002663
return 0;
24012664
}
24022665

2666+
static const struct aspeed_pin_config_map aspeed_g6_pin_config_map[] = {
2667+
{ PIN_CONFIG_BIAS_PULL_DOWN, 0, 1, BIT_MASK(0)},
2668+
{ PIN_CONFIG_BIAS_PULL_DOWN, -1, 0, BIT_MASK(0)},
2669+
{ PIN_CONFIG_BIAS_PULL_UP, 0, 1, BIT_MASK(0)},
2670+
{ PIN_CONFIG_BIAS_PULL_UP, -1, 0, BIT_MASK(0)},
2671+
{ PIN_CONFIG_BIAS_DISABLE, -1, 1, BIT_MASK(0)},
2672+
{ PIN_CONFIG_DRIVE_STRENGTH, 4, 0, GENMASK(1, 0)},
2673+
{ PIN_CONFIG_DRIVE_STRENGTH, 8, 1, GENMASK(1, 0)},
2674+
{ PIN_CONFIG_DRIVE_STRENGTH, 12, 2, GENMASK(1, 0)},
2675+
{ PIN_CONFIG_DRIVE_STRENGTH, 16, 3, GENMASK(1, 0)},
2676+
{ PIN_CONFIG_POWER_SOURCE, 3300, 0, BIT_MASK(0)},
2677+
{ PIN_CONFIG_POWER_SOURCE, 1800, 1, BIT_MASK(0)},
2678+
};
2679+
24032680
static const struct aspeed_pinmux_ops aspeed_g5_ops = {
24042681
.set = aspeed_g6_sig_expr_set,
24052682
};
@@ -2414,6 +2691,10 @@ static struct aspeed_pinctrl_data aspeed_g6_pinctrl_data = {
24142691
.functions = aspeed_g6_functions,
24152692
.nfunctions = ARRAY_SIZE(aspeed_g6_functions),
24162693
},
2694+
.configs = aspeed_g6_configs,
2695+
.nconfigs = ARRAY_SIZE(aspeed_g6_configs),
2696+
.confmaps = aspeed_g6_pin_config_map,
2697+
.nconfmaps = ARRAY_SIZE(aspeed_g6_pin_config_map),
24172698
};
24182699

24192700
static const struct pinmux_ops aspeed_g6_pinmux_ops = {
@@ -2434,12 +2715,21 @@ static const struct pinctrl_ops aspeed_g6_pinctrl_ops = {
24342715
.dt_free_map = pinctrl_utils_free_map,
24352716
};
24362717

2718+
static const struct pinconf_ops aspeed_g6_conf_ops = {
2719+
.is_generic = true,
2720+
.pin_config_get = aspeed_pin_config_get,
2721+
.pin_config_set = aspeed_pin_config_set,
2722+
.pin_config_group_get = aspeed_pin_config_group_get,
2723+
.pin_config_group_set = aspeed_pin_config_group_set,
2724+
};
2725+
24372726
static struct pinctrl_desc aspeed_g6_pinctrl_desc = {
24382727
.name = "aspeed-g6-pinctrl",
24392728
.pins = aspeed_g6_pins,
24402729
.npins = ARRAY_SIZE(aspeed_g6_pins),
24412730
.pctlops = &aspeed_g6_pinctrl_ops,
24422731
.pmxops = &aspeed_g6_pinmux_ops,
2732+
.confops = &aspeed_g6_conf_ops,
24432733
};
24442734

24452735
static int aspeed_g6_pinctrl_probe(struct platform_device *pdev)

drivers/pinctrl/aspeed/pinctrl-aspeed.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ struct aspeed_pin_config {
4141
.mask = BIT_MASK(bit_) \
4242
}
4343

44+
#define ASPEED_PULL_DOWN_PINCONF(pin_, reg_, bit_) \
45+
ASPEED_SB_PINCONF(PIN_CONFIG_BIAS_PULL_DOWN, pin_, pin_, reg_, bit_), \
46+
ASPEED_SB_PINCONF(PIN_CONFIG_BIAS_DISABLE, pin_, pin_, reg_, bit_)
47+
48+
#define ASPEED_PULL_UP_PINCONF(pin_, reg_, bit_) \
49+
ASPEED_SB_PINCONF(PIN_CONFIG_BIAS_PULL_UP, pin_, pin_, reg_, bit_), \
50+
ASPEED_SB_PINCONF(PIN_CONFIG_BIAS_DISABLE, pin_, pin_, reg_, bit_)
4451
/*
4552
* Aspeed pin configuration description.
4653
*

0 commit comments

Comments
 (0)