Skip to content

Commit 606d4ef

Browse files
shenkilinusw
authored andcommitted
pinctrl: aspeed: Revert "Force to disable the function's signal"
This reverts commit cf517fe. The commit cf517fe ("pinctrl: aspeed: Force to disable the function's signal") exposed a problem with fetching the regmap for reading the GFX register. The Romulus machine the device tree contains a gpio hog for GPIO S7. With the patch applied: Muxing pin 151 for GPIO Disabling signal VPOB9 for VPO aspeed-g5-pinctrl 1e6e2080.pinctrl: Failed to acquire regmap for IP block 1 aspeed-g5-pinctrl 1e6e2080.pinctrl: request() failed for pin 151 The code path is aspeed-gpio -> pinmux-g5 -> regmap -> clk, and the of_clock code returns an error as it doesn't have a valid struct clk_hw pointer. The regmap call happens because pinmux wants to check the GFX node (IP block 1) to query bits there. For reference, before the offending patch: Muxing pin 151 for GPIO Disabling signal VPOB9 for VPO Want SCU8C[0x00000080]=0x1, got 0x0 from 0x00000000 Disabling signal VPOB9 for VPOOFF1 Want SCU8C[0x00000080]=0x1, got 0x0 from 0x00000000 Disabling signal VPOB9 for VPOOFF2 Want SCU8C[0x00000080]=0x1, got 0x0 from 0x00000000 Enabling signal GPIOS7 for GPIOS7 Muxed pin 151 as GPIOS7 gpio-943 (seq_cont): hogged as output/low We can't skip the clock check to allow pinmux to proceed, because the write to disable VPOB9 will try to set a bit in the GFX register space which will not stick when the IP is in reset. However, we do not want to enable the IP just so pinmux can do a disable-enable dance for the pin. For now, revert the offending patch while a correct solution is found. Fixes: cf517fe ("pinctrl: aspeed: Force to disable the function's signal") Link: openbmc#218 Signed-off-by: Joel Stanley <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Linus Walleij <[email protected]>
1 parent d2d73e6 commit 606d4ef

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

drivers/pinctrl/aspeed/pinctrl-aspeed.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,19 @@ static int aspeed_sig_expr_enable(struct aspeed_pinmux_data *ctx,
9393
static int aspeed_sig_expr_disable(struct aspeed_pinmux_data *ctx,
9494
const struct aspeed_sig_expr *expr)
9595
{
96+
int ret;
97+
9698
pr_debug("Disabling signal %s for %s\n", expr->signal,
9799
expr->function);
98100

99-
return aspeed_sig_expr_set(ctx, expr, false);
101+
ret = aspeed_sig_expr_eval(ctx, expr, true);
102+
if (ret < 0)
103+
return ret;
104+
105+
if (ret)
106+
return aspeed_sig_expr_set(ctx, expr, false);
107+
108+
return 0;
100109
}
101110

102111
/**

0 commit comments

Comments
 (0)