From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Ayushi Makhija <quic_amakhija@quicinc.com>,
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
Sasha Levin <sashal@kernel.org>,
andrzej.hajda@intel.com, neil.armstrong@linaro.org,
rfoss@kernel.org, maarten.lankhorst@linux.intel.com,
mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com,
simona@ffwll.ch, lumag@kernel.org, dianders@chromium.org,
wenst@chromium.org, u.kleine-koenig@baylibre.com,
xji@analogixsemi.com, robh@kernel.org,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: [PATCH AUTOSEL 5.15 06/43] drm/bridge: anx7625: change the gpiod_set_value API
Date: Sun, 1 Jun 2025 19:41:46 -0400 [thread overview]
Message-ID: <20250601234224.3517599-6-sashal@kernel.org> (raw)
In-Reply-To: <20250601234224.3517599-1-sashal@kernel.org>
From: Ayushi Makhija <quic_amakhija@quicinc.com>
[ Upstream commit 50935044e58e563cdcfd556d62f27bc8744dd64e ]
Use gpiod_set_value_cansleep() instead of gpiod_set_value()
to fix the below call trace in the boot log:
[ 5.690534] Call trace:
[ 5.690536] gpiod_set_value+0x40/0xa4
[ 5.690540] anx7625_runtime_pm_resume+0xa0/0x324 [anx7625]
[ 5.690545] __rpm_callback+0x48/0x1d8
[ 5.690549] rpm_callback+0x6c/0x78
Certain GPIO controllers require access via message-based buses
such as I2C or SPI, which may cause the GPIOs to enter a sleep
state. Therefore, use the gpiod_set_value_cansleep().
Signed-off-by: Ayushi Makhija <quic_amakhija@quicinc.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20250505094245.2660750-7-quic_amakhija@quicinc.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
**YES** This commit should be backported to stable kernel trees.
**Detailed Analysis:** **1. Bug Fix Nature:** The commit fixes a real
runtime issue that produces call traces in the boot log. The commit
message clearly shows a call trace stack: ``` [ 5.690534] Call trace: [
5.690536] gpiod_set_value+0x40/0xa4 [ 5.690540]
anx7625_runtime_pm_resume+0xa0/0x324 [anx7625] ``` This indicates users
are experiencing actual crashes or warnings when using this driver with
certain GPIO controllers. **2. Small, Contained Fix:** The code changes
are minimal and surgical - only 4 lines changed, replacing
`gpiod_set_value()` with `gpiod_set_value_cansleep()` in the
`anx7625_power_on()` and `anx7625_power_standby()` functions: - Line
1260: `gpiod_set_value(ctx->pdata.gpio_p_on, 1)` →
`gpiod_set_value_cansleep(ctx->pdata.gpio_p_on, 1)` - Line 1263:
`gpiod_set_value(ctx->pdata.gpio_reset, 1)` →
`gpiod_set_value_cansleep(ctx->pdata.gpio_reset, 1)` - Line 1283:
`gpiod_set_value(ctx->pdata.gpio_reset, 0)` →
`gpiod_set_value_cansleep(ctx->pdata.gpio_reset, 0)` - Line 1285:
`gpiod_set_value(ctx->pdata.gpio_p_on, 0)` →
`gpiod_set_value_cansleep(ctx->pdata.gpio_p_on, 0)` **3. Well-
Established Pattern:** Looking at the similar commits provided as
reference, this exact type of GPIO API fix is common and consistently
handles the same underlying issue. All 5 similar commits (marked as "NO"
for backport) show the same pattern of switching from
`gpiod_set_value()` to `gpiod_set_value_cansleep()` to handle GPIO
controllers on message-based buses (I2C/SPI). **4. Technical
Correctness:** The fix is technically sound. These functions are called
during power management operations (`anx7625_power_on()` and
`anx7625_power_standby()`) where sleeping is acceptable and expected.
The `_cansleep` variant is the correct API when GPIO controllers might
be accessed via slow buses like I2C or SPI. **5. Low Risk:** The change
has minimal risk of regression. The `gpiod_set_value_cansleep()`
function provides the same functionality as `gpiod_set_value()` but
allows sleeping, making it safe to use in contexts where the original
was used incorrectly. **6. Critical Subsystem Impact:** This affects the
DRM bridge subsystem and display functionality. Users with anx7625
bridge chips connected to I2C GPIO expanders would experience boot-time
call traces, which is a user-visible issue that should be fixed in
stable kernels. **7. Real Hardware Impact:** The commit specifically
mentions "Certain GPIO controllers require access via message-based
buses such as I2C or SPI" - this is a real hardware configuration that
users deploy, not an edge case. This commit meets all the criteria for
stable backporting: it fixes a user-visible bug, has minimal risk, is
contained to a single driver, and follows an established pattern for
this type of GPIO API fix.
drivers/gpu/drm/bridge/analogix/anx7625.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c
index 01612d2c034af..257f69b5e1783 100644
--- a/drivers/gpu/drm/bridge/analogix/anx7625.c
+++ b/drivers/gpu/drm/bridge/analogix/anx7625.c
@@ -920,10 +920,10 @@ static void anx7625_power_on(struct anx7625_data *ctx)
usleep_range(11000, 12000);
/* Power on pin enable */
- gpiod_set_value(ctx->pdata.gpio_p_on, 1);
+ gpiod_set_value_cansleep(ctx->pdata.gpio_p_on, 1);
usleep_range(10000, 11000);
/* Power reset pin enable */
- gpiod_set_value(ctx->pdata.gpio_reset, 1);
+ gpiod_set_value_cansleep(ctx->pdata.gpio_reset, 1);
usleep_range(10000, 11000);
DRM_DEV_DEBUG_DRIVER(dev, "power on !\n");
@@ -943,9 +943,9 @@ static void anx7625_power_standby(struct anx7625_data *ctx)
return;
}
- gpiod_set_value(ctx->pdata.gpio_reset, 0);
+ gpiod_set_value_cansleep(ctx->pdata.gpio_reset, 0);
usleep_range(1000, 1100);
- gpiod_set_value(ctx->pdata.gpio_p_on, 0);
+ gpiod_set_value_cansleep(ctx->pdata.gpio_p_on, 0);
usleep_range(1000, 1100);
ret = regulator_bulk_disable(ARRAY_SIZE(ctx->pdata.supplies),
--
2.39.5
next prev parent reply other threads:[~2025-06-01 23:42 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-01 23:41 [PATCH AUTOSEL 5.15 01/43] drm/amdgpu/gfx6: fix CSIB handling Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 02/43] sunrpc: update nextcheck time when adding new cache entries Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 03/43] drm/bridge: analogix_dp: Add irq flag IRQF_NO_AUTOEN instead of calling disable_irq() Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 04/43] exfat: fix double free in delayed_free Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 05/43] arm64/cpuinfo: only show one cpu's info in c_show() Sasha Levin
2025-06-01 23:41 ` Sasha Levin [this message]
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 07/43] media: i2c: imx334: Enable runtime PM before sub-device registration Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 08/43] drm/msm/hdmi: add runtime PM calls to DDC transfer function Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 09/43] media: uapi: v4l: Fix V4L2_TYPE_IS_OUTPUT condition Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 10/43] drm/amd/display: Add NULL pointer checks in dm_force_atomic_commit() Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 11/43] drm/msm/a6xx: Increase HFI response timeout Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 12/43] media: i2c: imx334: Fix runtime PM handling in remove function Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 13/43] drm/amdgpu/gfx10: fix CSIB handling Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 14/43] media: ccs-pll: Better validate VT PLL branch Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 15/43] media: uapi: v4l: Change V4L2_TYPE_IS_CAPTURE condition Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 16/43] drm/amdgpu/gfx7: fix CSIB handling Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 17/43] ext4: ext4: unify EXT4_EX_NOCACHE|NOFAIL flags in ext4_ext_remove_space() Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 18/43] jfs: fix array-index-out-of-bounds read in add_missing_indices Sasha Levin
2025-06-01 23:41 ` [PATCH AUTOSEL 5.15 19/43] media: ti: cal: Fix wrong goto on error path Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 20/43] media: rkvdec: h264: Use bytesperline and buffer height as virstride Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 21/43] media: rkvdec: Initialize the m2m context before the controls Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 22/43] sunrpc: fix race in cache cleanup causing stale nextcheck time Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 23/43] ext4: prevent stale extent cache entries caused by concurrent get es_cache Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 24/43] drm/amdgpu/gfx8: fix CSIB handling Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 25/43] drm/amdgpu/gfx9: " Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 26/43] jfs: Fix null-ptr-deref in jfs_ioc_trim Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 27/43] drm/msm/dpu: don't select single flush for active CTL blocks Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 28/43] drm/amdkfd: Set SDMA_RLCx_IB_CNTL/SWITCH_INSIDE_IB Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 29/43] media: tc358743: ignore video while HPD is low Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 30/43] media: platform: exynos4-is: Add hardware sync wait to fimc_is_hw_change_mode() Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 31/43] media: i2c: imx334: update mode_3840x2160_regs array Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 32/43] nios2: force update_mmu_cache on spurious tlb-permission--related pagefaults Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 33/43] ACPI: bus: Bail out if acpi_kobj registration fails Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 34/43] pmdomain: ti: Fix STANDBY handling of PER power domain Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 35/43] PM: runtime: fix denying of auto suspend in pm_suspend_timer_fn() Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 36/43] thermal/drivers/qcom/tsens: Update conditions to strictly evaluate for IP v2+ Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 37/43] clocksource: Fix the CPUs' choice in the watchdog per CPU verification Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 38/43] ACPICA: Avoid sequence overread in call to strncmp() Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 39/43] ACPICA: utilities: Fix overflow check in vsnprintf() Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 40/43] ALSA: seq: Remove unused snd_seq_queue_client_leave_cells Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 41/43] cpufreq: Force sync policy boost with global boost on sysfs update Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 42/43] power: supply: bq27xxx: Retrieve again when busy Sasha Levin
2025-06-01 23:42 ` [PATCH AUTOSEL 5.15 43/43] ASoC: tas2770: Power cycle amp on ISENSE/VSENSE change Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250601234224.3517599-6-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=dianders@chromium.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=patches@lists.linux.dev \
--cc=quic_amakhija@quicinc.com \
--cc=rfoss@kernel.org \
--cc=robh@kernel.org \
--cc=simona@ffwll.ch \
--cc=stable@vger.kernel.org \
--cc=tzimmermann@suse.de \
--cc=u.kleine-koenig@baylibre.com \
--cc=wenst@chromium.org \
--cc=xji@analogixsemi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®