Patch "pinctrl: aspeed: Revert "Force to disable the function's signal"" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    pinctrl: aspeed: Revert "Force to disable the function's signal"

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     pinctrl-aspeed-revert-force-to-disable-the-function-.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4c3e209f99cc5cefc4a706306a4f0602f97fa9d8
Author: Joel Stanley <joel@xxxxxxxxx>
Date:   Tue Jan 31 08:38:45 2023 +1030

    pinctrl: aspeed: Revert "Force to disable the function's signal"
    
    [ Upstream commit 606d4ef4922662ded34aa7218288c3043ce0a41a ]
    
    This reverts commit cf517fef601b9dde151f0afc27164d13bf1fd907.
    
    The commit cf517fef601b ("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: cf517fef601b ("pinctrl: aspeed: Force to disable the function's signal")
    Link: https://github.com/openbmc/linux/issues/218
    Signed-off-by: Joel Stanley <joel@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20230130220845.917985-1-joel@xxxxxxxxx
    Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed.c b/drivers/pinctrl/aspeed/pinctrl-aspeed.c
index f93d6959cee94..5a12fc7cf91fb 100644
--- a/drivers/pinctrl/aspeed/pinctrl-aspeed.c
+++ b/drivers/pinctrl/aspeed/pinctrl-aspeed.c
@@ -92,10 +92,19 @@ static int aspeed_sig_expr_enable(struct aspeed_pinmux_data *ctx,
 static int aspeed_sig_expr_disable(struct aspeed_pinmux_data *ctx,
 				   const struct aspeed_sig_expr *expr)
 {
+	int ret;
+
 	pr_debug("Disabling signal %s for %s\n", expr->signal,
 		 expr->function);
 
-	return aspeed_sig_expr_set(ctx, expr, false);
+	ret = aspeed_sig_expr_eval(ctx, expr, true);
+	if (ret < 0)
+		return ret;
+
+	if (ret)
+		return aspeed_sig_expr_set(ctx, expr, false);
+
+	return 0;
 }
 
 /**



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux