From: Gabor Juhos j4g8y7@gmail.com
[ Upstream commit bfa0ff804ffa8b1246ade8be08de98c9eb19d16f ]
The armada_37xx_gpio_direction_{in,out}put() functions can fail, so propagate their error values back to the stack instead of silently ignoring those.
Signed-off-by: Imre Kaloz kaloz@openwrt.org Reviewed-by: Andrew Lunn andrew@lunn.ch Signed-off-by: Gabor Juhos j4g8y7@gmail.com Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-5-07e9ac1ab737@gmail... Signed-off-by: Linus Walleij linus.walleij@linaro.org Signed-off-by: Sasha Levin sashal@kernel.org ---
Based on my comprehensive analysis, here is my determination: **YES** ## Extensive Analysis for Backport Recommendation ### 1. **Bug Severity and Real User Impact** This commit fixes a **genuine bug** where the `armada_37xx_pmx_gpio_set_direction()` function silently ignores errors from GPIO direction setting operations. The current code at lines 476-481 shows: ```c if (input) armada_37xx_gpio_direction_input(chip, offset); // Return value ignored else armada_37xx_gpio_direction_output(chip, offset, 0); // Return value ignored return 0; // Always returns success regardless of actual result ``` This silent failure can cause **real user-visible problems**: - GPIO pins may remain in the wrong direction (input vs output) without any indication - Hardware peripherals controlled by these GPIOs may malfunction - Applications believe GPIO operations succeeded when they actually failed - No error reporting prevents proper debugging of hardware issues ### 2. **Code Change Assessment - Small and Contained** The fix is **minimal and surgical**: - Adds only one variable declaration (`int ret`) - Changes two function calls to capture return values - Replaces `return 0` with `return ret` - **No architectural changes or new features** - **No changes to external APIs or data structures** This precisely matches the stable tree criteria for small, contained fixes. ### 3. **Comparison with Historical Similar Commits** Looking at the provided examples: - **Similar Commit #1** (Status: YES): Also fixes GPIO direction callback behavior in the same driver - this establishes precedent for backporting armada-37xx GPIO fixes - **Similar Commits #4 & #5** (Status: NO): These fix similar error propagation issues in different drivers, but the "NO" status appears to be due to them being newer cleanup patches rather than fixing actual bugs ### 4. **Pattern Recognition from Kernel Tree Analysis** My examination of the kernel repository reveals this is **part of a systematic fix series** addressing error propagation throughout this driver. I found related commits: - `4229c28323db`: "propagate error from armada_37xx_pmx_set_by_name()" (marked YES in autosel.txt) - `6481c0a83367`: "propagate error from armada_37xx_gpio_get_direction()" (marked YES in autosel.txt) This indicates the kernel maintainers consider these error propagation fixes important enough for stable backporting. ### 5. **Risk Assessment - Minimal Regression Risk** The change has **very low regression risk**: - Only affects error handling paths that were previously broken - If the underlying GPIO operations were succeeding before, they continue to succeed - If they were failing before (but silently), now they properly report the failure - **No functional behavior changes when hardware operates correctly** - The worst case is that previously silent failures now get reported (which is the desired behavior) ### 6. **Critical Subsystem Impact** This affects the **pinctrl/GPIO subsystem**, which is critical for: - Hardware initialization and control - Board-specific functionality - Device driver operation - Embedded system reliability Silent failures in this subsystem can cause hard-to-debug issues that affect system stability. ### 7. **No Explicit Stable Backport Indicators** While the commit message lacks explicit `Cc: stable@vger.kernel.org` or `Fixes:` tags, this doesn't disqualify it. Many important bugfixes lack these tags, and the automated selection process (as evidenced by autosel.txt) is designed to catch such cases. ### 8. **Meets All Stable Tree Criteria** ✅ **Fixes important bug**: Silent GPIO failures can cause real hardware issues ✅ **Minimal risk**: Only improves error reporting, no functional changes ✅ **Small and contained**: 4-line change in a single function ✅ **No architectural changes**: Pure error handling improvement ✅ **Affects critical subsystem**: GPIO/pinctrl is fundamental to hardware operation ### Conclusion This commit should be backported because it fixes a genuine bug where hardware failures are silently ignored, potentially causing real user issues. The fix is small, safe, and aligns with similar commits that have been marked for stable backporting. The change only improves error handling without modifying functional behavior, making it an ideal candidate for stable tree inclusion.
drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c index 2431989c97e82..2438785c9ef88 100644 --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c @@ -470,16 +470,17 @@ static int armada_37xx_pmx_gpio_set_direction(struct pinctrl_dev *pctldev, { struct armada_37xx_pinctrl *info = pinctrl_dev_get_drvdata(pctldev); struct gpio_chip *chip = range->gc; + int ret;
dev_dbg(info->dev, "gpio_direction for pin %u as %s-%d to %s\n", offset, range->name, offset, input ? "input" : "output");
if (input) - armada_37xx_gpio_direction_input(chip, offset); + ret = armada_37xx_gpio_direction_input(chip, offset); else - armada_37xx_gpio_direction_output(chip, offset, 0); + ret = armada_37xx_gpio_direction_output(chip, offset, 0);
- return 0; + return ret; }
static int armada_37xx_gpio_request_enable(struct pinctrl_dev *pctldev,