* [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code
@ 2025-05-03 5:32 Dmitry Baryshkov
2025-05-03 5:32 ` [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins Dmitry Baryshkov
` (4 more replies)
0 siblings, 5 replies; 16+ messages in thread
From: Dmitry Baryshkov @ 2025-05-03 5:32 UTC (permalink / raw)
To: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Bartosz Golaszewski, Matti Vaittinen, Doug Anderson
Cc: linux-arm-msm, linux-gpio, linux-kernel
Fix/rework several issues in the pinctrl-msm common code. The most
important fix is the one for the gpio-hog handling.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
Dmitry Baryshkov (4):
pinctrl: qcom: don't crash on enabling GPIO HOG pins
pinctrl: qcom: switch to devm_register_sys_off_handler()
pinctrl: qcom: switch to devm_gpiochip_add_data()
pinctrl: qcom: drop msm_pinctrl_remove()
drivers/pinctrl/qcom/pinctrl-apq8064.c | 1 -
drivers/pinctrl/qcom/pinctrl-apq8084.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq4019.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq5018.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq5332.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq5424.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq6018.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq8064.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq8074.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq9574.c | 1 -
drivers/pinctrl/qcom/pinctrl-mdm9607.c | 1 -
drivers/pinctrl/qcom/pinctrl-mdm9615.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm.c | 41 ++++++++++++++++-----------------
drivers/pinctrl/qcom/pinctrl-msm.h | 1 -
drivers/pinctrl/qcom/pinctrl-msm8226.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8660.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8909.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8916.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8917.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8953.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8960.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8976.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8994.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8996.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8998.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8x74.c | 1 -
drivers/pinctrl/qcom/pinctrl-qcm2290.c | 1 -
drivers/pinctrl/qcom/pinctrl-qcs404.c | 1 -
drivers/pinctrl/qcom/pinctrl-qcs615.c | 1 -
drivers/pinctrl/qcom/pinctrl-qcs8300.c | 1 -
drivers/pinctrl/qcom/pinctrl-qdf2xxx.c | 1 -
drivers/pinctrl/qcom/pinctrl-qdu1000.c | 1 -
drivers/pinctrl/qcom/pinctrl-sa8775p.c | 1 -
drivers/pinctrl/qcom/pinctrl-sar2130p.c | 1 -
drivers/pinctrl/qcom/pinctrl-sc7180.c | 1 -
drivers/pinctrl/qcom/pinctrl-sc7280.c | 1 -
drivers/pinctrl/qcom/pinctrl-sc8180x.c | 1 -
drivers/pinctrl/qcom/pinctrl-sc8280xp.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdm660.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdm670.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdm845.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdx55.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdx65.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdx75.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm4450.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm6115.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm6125.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm6350.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm6375.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm7150.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8150.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8250.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8350.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8450.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8550.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8650.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8750.c | 1 -
drivers/pinctrl/qcom/pinctrl-x1e80100.c | 1 -
58 files changed, 20 insertions(+), 78 deletions(-)
---
base-commit: 6ac908f24cd7ddae52c496bbc888e97ee7b033ac
change-id: 20250503-pinctrl-msm-fix-b225fc7ead2c
Best regards,
--
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins
2025-05-03 5:32 [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code Dmitry Baryshkov
@ 2025-05-03 5:32 ` Dmitry Baryshkov
2025-05-05 5:49 ` Matti Vaittinen
` (2 more replies)
2025-05-03 5:32 ` [PATCH 2/4] pinctrl: qcom: switch to devm_register_sys_off_handler() Dmitry Baryshkov
` (3 subsequent siblings)
4 siblings, 3 replies; 16+ messages in thread
From: Dmitry Baryshkov @ 2025-05-03 5:32 UTC (permalink / raw)
To: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Bartosz Golaszewski, Matti Vaittinen, Doug Anderson
Cc: linux-arm-msm, linux-gpio, linux-kernel
On Qualcomm platforms if the board uses GPIO hogs msm_pinmux_request()
calls gpiochip_line_is_valid(). After commit 8015443e24e7 ("gpio: Hide
valid_mask from direct assignments") gpiochip_line_is_valid() uses
gc->gpiodev, which is NULL when GPIO hog pins are being processed.
Thus after this commit using GPIO hogs causes the following crash. In
order to fix this, verify that gpiochip->gpiodev is not NULL.
Note: it is not possible to reorder calls (e.g. by calling
msm_gpio_init() before pinctrl registration or by splitting
pinctrl_register() into _and_init() and pinctrl_enable() and calling the
latter function after msm_gpio_init()) because GPIO chip registration
would fail with EPROBE_DEFER if pinctrl is not enabled at the time of
registration.
pc : gpiochip_line_is_valid+0x4/0x28
lr : msm_pinmux_request+0x24/0x40
sp : ffff8000808eb870
x29: ffff8000808eb870 x28: 0000000000000000 x27: 0000000000000000
x26: 0000000000000000 x25: ffff726240f9d040 x24: 0000000000000000
x23: ffff7262438c0510 x22: 0000000000000080 x21: ffff726243ea7000
x20: ffffab13f2c4e698 x19: 0000000000000080 x18: 00000000ffffffff
x17: ffff726242ba6000 x16: 0000000000000100 x15: 0000000000000028
x14: 0000000000000000 x13: 0000000000002948 x12: 0000000000000003
x11: 0000000000000078 x10: 0000000000002948 x9 : ffffab13f50eb5e8
x8 : 0000000003ecb21b x7 : 000000000000002d x6 : 0000000000000b68
x5 : 0000007fffffffff x4 : ffffab13f52f84a8 x3 : ffff8000808eb804
x2 : ffffab13f1de8190 x1 : 0000000000000080 x0 : 0000000000000000
Call trace:
gpiochip_line_is_valid+0x4/0x28 (P)
pin_request+0x208/0x2c0
pinmux_enable_setting+0xa0/0x2e0
pinctrl_commit_state+0x150/0x26c
pinctrl_enable+0x6c/0x2a4
pinctrl_register+0x3c/0xb0
devm_pinctrl_register+0x58/0xa0
msm_pinctrl_probe+0x2a8/0x584
sdm845_pinctrl_probe+0x20/0x88
platform_probe+0x68/0xc0
really_probe+0xbc/0x298
__driver_probe_device+0x78/0x12c
driver_probe_device+0x3c/0x160
__device_attach_driver+0xb8/0x138
bus_for_each_drv+0x84/0xe0
__device_attach+0x9c/0x188
device_initial_probe+0x14/0x20
bus_probe_device+0xac/0xb0
deferred_probe_work_func+0x8c/0xc8
process_one_work+0x208/0x5e8
worker_thread+0x1b4/0x35c
kthread+0x144/0x220
ret_from_fork+0x10/0x20
Code: b5fffba0 17fffff2 9432ec27 f9400400 (f9428800)
Fixes: 8015443e24e7 ("gpio: Hide valid_mask from direct assignments")
Reported-by: Doug Anderson <dianders@chromium.org>
Closes: https://lore.kernel.org/r/CAD=FV=Vg8_ZOLgLoC4WhFPzhVsxXFC19NrF38W6cW_W_3nFjbw@mail.gmail.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/pinctrl/qcom/pinctrl-msm.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index 9ec15ae4a104cbeb9a7d819b964d341f3bba58ea..a99275f3c4a66a39f4d9318fe918101127ef4487 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -149,6 +149,13 @@ static int msm_pinmux_request(struct pinctrl_dev *pctldev, unsigned offset)
struct msm_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
struct gpio_chip *chip = &pctrl->chip;
+ /*
+ * hog pins are requested before registering GPIO chip, don't crash in
+ * gpiochip_line_is_valid().
+ */
+ if (!chip->gpiodev)
+ return 0;
+
return gpiochip_line_is_valid(chip, offset) ? 0 : -EINVAL;
}
--
2.39.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/4] pinctrl: qcom: switch to devm_register_sys_off_handler()
2025-05-03 5:32 [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code Dmitry Baryshkov
2025-05-03 5:32 ` [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins Dmitry Baryshkov
@ 2025-05-03 5:32 ` Dmitry Baryshkov
2025-05-03 5:32 ` [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data() Dmitry Baryshkov
` (2 subsequent siblings)
4 siblings, 0 replies; 16+ messages in thread
From: Dmitry Baryshkov @ 2025-05-03 5:32 UTC (permalink / raw)
To: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Bartosz Golaszewski, Matti Vaittinen, Doug Anderson
Cc: linux-arm-msm, linux-gpio, linux-kernel
Error-handling paths in msm_pinctrl_probe() don't call
a function required to unroll restart handler registration,
unregister_restart_handler(). Instead of adding calls to this function,
switch the msm pinctrl code into using devm_register_sys_off_handler().
Fixes: cf1fc1876289 ("pinctrl: qcom: use restart_notifier mechanism for ps_hold")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/pinctrl/qcom/pinctrl-msm.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index a99275f3c4a66a39f4d9318fe918101127ef4487..88dd462516c76d58b43d49accbddeea38af8f1ec 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -44,7 +44,6 @@
* @pctrl: pinctrl handle.
* @chip: gpiochip handle.
* @desc: pin controller descriptor
- * @restart_nb: restart notifier block.
* @irq: parent irq for the TLMM irq_chip.
* @intr_target_use_scm: route irq to application cpu using scm calls
* @lock: Spinlock to protect register resources as well
@@ -64,7 +63,6 @@ struct msm_pinctrl {
struct pinctrl_dev *pctrl;
struct gpio_chip chip;
struct pinctrl_desc desc;
- struct notifier_block restart_nb;
int irq;
@@ -1480,10 +1478,9 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
return 0;
}
-static int msm_ps_hold_restart(struct notifier_block *nb, unsigned long action,
- void *data)
+static int msm_ps_hold_restart(struct sys_off_data *data)
{
- struct msm_pinctrl *pctrl = container_of(nb, struct msm_pinctrl, restart_nb);
+ struct msm_pinctrl *pctrl = data->cb_data;
writel(0, pctrl->regs[0] + PS_HOLD_OFFSET);
mdelay(1000);
@@ -1494,7 +1491,11 @@ static struct msm_pinctrl *poweroff_pctrl;
static void msm_ps_hold_poweroff(void)
{
- msm_ps_hold_restart(&poweroff_pctrl->restart_nb, 0, NULL);
+ struct sys_off_data data = {
+ .cb_data = poweroff_pctrl,
+ };
+
+ msm_ps_hold_restart(&data);
}
static void msm_pinctrl_setup_pm_reset(struct msm_pinctrl *pctrl)
@@ -1504,9 +1505,11 @@ static void msm_pinctrl_setup_pm_reset(struct msm_pinctrl *pctrl)
for (i = 0; i < pctrl->soc->nfunctions; i++)
if (!strcmp(func[i].name, "ps_hold")) {
- pctrl->restart_nb.notifier_call = msm_ps_hold_restart;
- pctrl->restart_nb.priority = 128;
- if (register_restart_handler(&pctrl->restart_nb))
+ if (devm_register_sys_off_handler(pctrl->dev,
+ SYS_OFF_MODE_RESTART,
+ 128,
+ msm_ps_hold_restart,
+ pctrl))
dev_err(pctrl->dev,
"failed to setup restart handler.\n");
poweroff_pctrl = pctrl;
@@ -1608,8 +1611,6 @@ void msm_pinctrl_remove(struct platform_device *pdev)
struct msm_pinctrl *pctrl = platform_get_drvdata(pdev);
gpiochip_remove(&pctrl->chip);
-
- unregister_restart_handler(&pctrl->restart_nb);
}
EXPORT_SYMBOL(msm_pinctrl_remove);
--
2.39.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data()
2025-05-03 5:32 [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code Dmitry Baryshkov
2025-05-03 5:32 ` [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins Dmitry Baryshkov
2025-05-03 5:32 ` [PATCH 2/4] pinctrl: qcom: switch to devm_register_sys_off_handler() Dmitry Baryshkov
@ 2025-05-03 5:32 ` Dmitry Baryshkov
2025-05-05 5:54 ` Matti Vaittinen
2025-05-06 17:18 ` Bartosz Golaszewski
2025-05-03 5:32 ` [PATCH 4/4] pinctrl: qcom: drop msm_pinctrl_remove() Dmitry Baryshkov
2025-05-13 9:28 ` [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code Linus Walleij
4 siblings, 2 replies; 16+ messages in thread
From: Dmitry Baryshkov @ 2025-05-03 5:32 UTC (permalink / raw)
To: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Bartosz Golaszewski, Matti Vaittinen, Doug Anderson
Cc: linux-arm-msm, linux-gpio, linux-kernel
In order to simplify cleanup actions, use devres-enabled version of
gpiochip_add_data().
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/pinctrl/qcom/pinctrl-msm.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index 88dd462516c76d58b43d49accbddeea38af8f1ec..b2e8f7b3f3e3d5d232b2bd60e5cace62b21ffb03 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -1449,7 +1449,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
girq->handler = handle_bad_irq;
girq->parents[0] = pctrl->irq;
- ret = gpiochip_add_data(&pctrl->chip, pctrl);
+ ret = devm_gpiochip_add_data(pctrl->dev, &pctrl->chip, pctrl);
if (ret) {
dev_err(pctrl->dev, "Failed register gpiochip\n");
return ret;
@@ -1470,7 +1470,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
dev_name(pctrl->dev), 0, 0, chip->ngpio);
if (ret) {
dev_err(pctrl->dev, "Failed to add pin range\n");
- gpiochip_remove(&pctrl->chip);
return ret;
}
}
@@ -1608,9 +1607,6 @@ EXPORT_SYMBOL(msm_pinctrl_probe);
void msm_pinctrl_remove(struct platform_device *pdev)
{
- struct msm_pinctrl *pctrl = platform_get_drvdata(pdev);
-
- gpiochip_remove(&pctrl->chip);
}
EXPORT_SYMBOL(msm_pinctrl_remove);
--
2.39.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 4/4] pinctrl: qcom: drop msm_pinctrl_remove()
2025-05-03 5:32 [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code Dmitry Baryshkov
` (2 preceding siblings ...)
2025-05-03 5:32 ` [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data() Dmitry Baryshkov
@ 2025-05-03 5:32 ` Dmitry Baryshkov
2025-05-13 9:28 ` [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code Linus Walleij
4 siblings, 0 replies; 16+ messages in thread
From: Dmitry Baryshkov @ 2025-05-03 5:32 UTC (permalink / raw)
To: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Bartosz Golaszewski, Matti Vaittinen, Doug Anderson
Cc: linux-arm-msm, linux-gpio, linux-kernel
The msm_pinctrl_remove() function is now empty. Drop the function and
all its calls from the corresponding pinctrl drivers.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/pinctrl/qcom/pinctrl-apq8064.c | 1 -
drivers/pinctrl/qcom/pinctrl-apq8084.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq4019.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq5018.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq5332.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq5424.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq6018.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq8064.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq8074.c | 1 -
drivers/pinctrl/qcom/pinctrl-ipq9574.c | 1 -
drivers/pinctrl/qcom/pinctrl-mdm9607.c | 1 -
drivers/pinctrl/qcom/pinctrl-mdm9615.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm.c | 5 -----
drivers/pinctrl/qcom/pinctrl-msm.h | 1 -
drivers/pinctrl/qcom/pinctrl-msm8226.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8660.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8909.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8916.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8917.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8953.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8960.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8976.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8994.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8996.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8998.c | 1 -
drivers/pinctrl/qcom/pinctrl-msm8x74.c | 1 -
drivers/pinctrl/qcom/pinctrl-qcm2290.c | 1 -
drivers/pinctrl/qcom/pinctrl-qcs404.c | 1 -
drivers/pinctrl/qcom/pinctrl-qcs615.c | 1 -
drivers/pinctrl/qcom/pinctrl-qcs8300.c | 1 -
drivers/pinctrl/qcom/pinctrl-qdf2xxx.c | 1 -
drivers/pinctrl/qcom/pinctrl-qdu1000.c | 1 -
drivers/pinctrl/qcom/pinctrl-sa8775p.c | 1 -
drivers/pinctrl/qcom/pinctrl-sar2130p.c | 1 -
drivers/pinctrl/qcom/pinctrl-sc7180.c | 1 -
drivers/pinctrl/qcom/pinctrl-sc7280.c | 1 -
drivers/pinctrl/qcom/pinctrl-sc8180x.c | 1 -
drivers/pinctrl/qcom/pinctrl-sc8280xp.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdm660.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdm670.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdm845.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdx55.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdx65.c | 1 -
drivers/pinctrl/qcom/pinctrl-sdx75.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm4450.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm6115.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm6125.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm6350.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm6375.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm7150.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8150.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8250.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8350.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8450.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8550.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8650.c | 1 -
drivers/pinctrl/qcom/pinctrl-sm8750.c | 1 -
drivers/pinctrl/qcom/pinctrl-x1e80100.c | 1 -
58 files changed, 62 deletions(-)
diff --git a/drivers/pinctrl/qcom/pinctrl-apq8064.c b/drivers/pinctrl/qcom/pinctrl-apq8064.c
index 20c3b9025044515477f39bc25f0202dcca561743..3654913f1ae584394f5d08305f49e72a9b49fe5a 100644
--- a/drivers/pinctrl/qcom/pinctrl-apq8064.c
+++ b/drivers/pinctrl/qcom/pinctrl-apq8064.c
@@ -629,7 +629,6 @@ static struct platform_driver apq8064_pinctrl_driver = {
.of_match_table = apq8064_pinctrl_of_match,
},
.probe = apq8064_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init apq8064_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-apq8084.c b/drivers/pinctrl/qcom/pinctrl-apq8084.c
index 3fc0a40762b631ad3dc15c9a7624ab705f367e74..27693cd648818bbcf6236cffad2efcd31c92018b 100644
--- a/drivers/pinctrl/qcom/pinctrl-apq8084.c
+++ b/drivers/pinctrl/qcom/pinctrl-apq8084.c
@@ -1207,7 +1207,6 @@ static struct platform_driver apq8084_pinctrl_driver = {
.of_match_table = apq8084_pinctrl_of_match,
},
.probe = apq8084_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init apq8084_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-ipq4019.c b/drivers/pinctrl/qcom/pinctrl-ipq4019.c
index 1f7944dd829d1b9cb8c445ee075e0e29a12294b9..6ede3149b6e1730ea432a1636152abcbf0fa73b2 100644
--- a/drivers/pinctrl/qcom/pinctrl-ipq4019.c
+++ b/drivers/pinctrl/qcom/pinctrl-ipq4019.c
@@ -710,7 +710,6 @@ static struct platform_driver ipq4019_pinctrl_driver = {
.of_match_table = ipq4019_pinctrl_of_match,
},
.probe = ipq4019_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init ipq4019_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-ipq5018.c b/drivers/pinctrl/qcom/pinctrl-ipq5018.c
index e2951f81c3eeb3f4d52c3941ab6f591da0254a23..10b99d5d8a11db644e974a80b9d7d04ffc09bd4c 100644
--- a/drivers/pinctrl/qcom/pinctrl-ipq5018.c
+++ b/drivers/pinctrl/qcom/pinctrl-ipq5018.c
@@ -754,7 +754,6 @@ static struct platform_driver ipq5018_pinctrl_driver = {
.of_match_table = ipq5018_pinctrl_of_match,
},
.probe = ipq5018_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init ipq5018_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-ipq5332.c b/drivers/pinctrl/qcom/pinctrl-ipq5332.c
index 625f8014051f6acf8e6f91d48d0406b8c2bd8caf..1ac2fc09c11923cd716495b16a7f4af5686ce398 100644
--- a/drivers/pinctrl/qcom/pinctrl-ipq5332.c
+++ b/drivers/pinctrl/qcom/pinctrl-ipq5332.c
@@ -834,7 +834,6 @@ static struct platform_driver ipq5332_pinctrl_driver = {
.of_match_table = ipq5332_pinctrl_of_match,
},
.probe = ipq5332_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init ipq5332_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-ipq5424.c b/drivers/pinctrl/qcom/pinctrl-ipq5424.c
index 0d610b076da3bb7940c99cfaf4c69261f9509390..7ff1f8acc1a3a81037298464130fda59f329d53e 100644
--- a/drivers/pinctrl/qcom/pinctrl-ipq5424.c
+++ b/drivers/pinctrl/qcom/pinctrl-ipq5424.c
@@ -791,7 +791,6 @@ static struct platform_driver ipq5424_pinctrl_driver = {
.of_match_table = ipq5424_pinctrl_of_match,
},
.probe = ipq5424_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init ipq5424_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-ipq6018.c b/drivers/pinctrl/qcom/pinctrl-ipq6018.c
index 0ad08647dbcdf0b1fa21a618310f150a1bde2fae..a4ba980252e187879947e7057004fa48815f2620 100644
--- a/drivers/pinctrl/qcom/pinctrl-ipq6018.c
+++ b/drivers/pinctrl/qcom/pinctrl-ipq6018.c
@@ -1080,7 +1080,6 @@ static struct platform_driver ipq6018_pinctrl_driver = {
.of_match_table = ipq6018_pinctrl_of_match,
},
.probe = ipq6018_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init ipq6018_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-ipq8064.c b/drivers/pinctrl/qcom/pinctrl-ipq8064.c
index e2bb94e86aef6e0055860794a1c64649c722aebc..0a9e357e64c60d61a094000f167defc80503e649 100644
--- a/drivers/pinctrl/qcom/pinctrl-ipq8064.c
+++ b/drivers/pinctrl/qcom/pinctrl-ipq8064.c
@@ -631,7 +631,6 @@ static struct platform_driver ipq8064_pinctrl_driver = {
.of_match_table = ipq8064_pinctrl_of_match,
},
.probe = ipq8064_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init ipq8064_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-ipq8074.c b/drivers/pinctrl/qcom/pinctrl-ipq8074.c
index 337f3a1c92c19285f16f59a79f3e2b20561ae19a..482f13282fc2be951032cbe6dc5100bf9129ea5f 100644
--- a/drivers/pinctrl/qcom/pinctrl-ipq8074.c
+++ b/drivers/pinctrl/qcom/pinctrl-ipq8074.c
@@ -1041,7 +1041,6 @@ static struct platform_driver ipq8074_pinctrl_driver = {
.of_match_table = ipq8074_pinctrl_of_match,
},
.probe = ipq8074_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init ipq8074_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-ipq9574.c b/drivers/pinctrl/qcom/pinctrl-ipq9574.c
index e2491617b2364a64169297426351e723c37f030c..89c05d8eb55034dea3e1c7299ede6567c20e0159 100644
--- a/drivers/pinctrl/qcom/pinctrl-ipq9574.c
+++ b/drivers/pinctrl/qcom/pinctrl-ipq9574.c
@@ -799,7 +799,6 @@ static struct platform_driver ipq9574_pinctrl_driver = {
.of_match_table = ipq9574_pinctrl_of_match,
},
.probe = ipq9574_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init ipq9574_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-mdm9607.c b/drivers/pinctrl/qcom/pinctrl-mdm9607.c
index e7cd3ef1cf3e815ae25aa9e0c6872fbbd2c8ac79..3e18ba124fede923f56eab1aec5aaf875f06e343 100644
--- a/drivers/pinctrl/qcom/pinctrl-mdm9607.c
+++ b/drivers/pinctrl/qcom/pinctrl-mdm9607.c
@@ -1059,7 +1059,6 @@ static struct platform_driver mdm9607_pinctrl_driver = {
.of_match_table = mdm9607_pinctrl_of_match,
},
.probe = mdm9607_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init mdm9607_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-mdm9615.c b/drivers/pinctrl/qcom/pinctrl-mdm9615.c
index 0a2ae383d3d57bd4101efb7a2093b68b8920b426..bea1ca3d1b7f84c28c23af2a52cc464da44a90b0 100644
--- a/drivers/pinctrl/qcom/pinctrl-mdm9615.c
+++ b/drivers/pinctrl/qcom/pinctrl-mdm9615.c
@@ -446,7 +446,6 @@ static struct platform_driver mdm9615_pinctrl_driver = {
.of_match_table = mdm9615_pinctrl_of_match,
},
.probe = mdm9615_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init mdm9615_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index b2e8f7b3f3e3d5d232b2bd60e5cace62b21ffb03..2297040e2a7b0d66d5eca7a888bd430b6a870918 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -1605,10 +1605,5 @@ int msm_pinctrl_probe(struct platform_device *pdev,
}
EXPORT_SYMBOL(msm_pinctrl_probe);
-void msm_pinctrl_remove(struct platform_device *pdev)
-{
-}
-EXPORT_SYMBOL(msm_pinctrl_remove);
-
MODULE_DESCRIPTION("Qualcomm Technologies, Inc. TLMM driver");
MODULE_LICENSE("GPL v2");
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.h b/drivers/pinctrl/qcom/pinctrl-msm.h
index 63852ed702957b8111b364267af17737b7a582a1..d7dc0947bb161868c8f433dc2536719b8afc8bd8 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.h
+++ b/drivers/pinctrl/qcom/pinctrl-msm.h
@@ -171,6 +171,5 @@ extern const struct dev_pm_ops msm_pinctrl_dev_pm_ops;
int msm_pinctrl_probe(struct platform_device *pdev,
const struct msm_pinctrl_soc_data *soc_data);
-void msm_pinctrl_remove(struct platform_device *pdev);
#endif
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8226.c b/drivers/pinctrl/qcom/pinctrl-msm8226.c
index 64fee70f1772c41f5d8e20deb270ed66cb20a151..f9a957347340813f87e58d3bcbea81faa9d6255e 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8226.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8226.c
@@ -654,7 +654,6 @@ static struct platform_driver msm8226_pinctrl_driver = {
.of_match_table = msm8226_pinctrl_of_match,
},
.probe = msm8226_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8226_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8660.c b/drivers/pinctrl/qcom/pinctrl-msm8660.c
index 999a5f867eb5081232443a893773d73c8dc65d1b..4dbc19ffd80efcdab059a253904e1ffe95fd36f7 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8660.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8660.c
@@ -981,7 +981,6 @@ static struct platform_driver msm8660_pinctrl_driver = {
.of_match_table = msm8660_pinctrl_of_match,
},
.probe = msm8660_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8660_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8909.c b/drivers/pinctrl/qcom/pinctrl-msm8909.c
index 756856d20d6b5f2d4e764ff32f2493de24ca677c..0aa4f77b774f45947ffade7d167dd25cc4da5297 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8909.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8909.c
@@ -929,7 +929,6 @@ static struct platform_driver msm8909_pinctrl_driver = {
.of_match_table = msm8909_pinctrl_of_match,
},
.probe = msm8909_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8909_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8916.c b/drivers/pinctrl/qcom/pinctrl-msm8916.c
index cea5c54f92fec1829c5378a8441eb8710fd500f0..0dfc6dd33d58b2d9df7a5cc3f7ff8890976207d3 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8916.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8916.c
@@ -969,7 +969,6 @@ static struct platform_driver msm8916_pinctrl_driver = {
.of_match_table = msm8916_pinctrl_of_match,
},
.probe = msm8916_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8916_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8917.c b/drivers/pinctrl/qcom/pinctrl-msm8917.c
index 350636807b07d9ab0e207368de63837bc5fa5502..2e1a94ab18b219f818c591ff3b07280578822d1a 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8917.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8917.c
@@ -1607,7 +1607,6 @@ static struct platform_driver msm8917_pinctrl_driver = {
.of_match_table = msm8917_pinctrl_of_match,
},
.probe = msm8917_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8917_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8953.c b/drivers/pinctrl/qcom/pinctrl-msm8953.c
index 998351bdfee1369fe0f369648d66a1a05493c8fb..956383341a7a777edf28c710353dc6deab124ef9 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8953.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8953.c
@@ -1816,7 +1816,6 @@ static struct platform_driver msm8953_pinctrl_driver = {
.of_match_table = msm8953_pinctrl_of_match,
},
.probe = msm8953_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8953_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8960.c b/drivers/pinctrl/qcom/pinctrl-msm8960.c
index ebe230b3b437ccc63535fdf51639e64a67fe05eb..a937ea867de709326a2aea77f980cae1d8480f35 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8960.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8960.c
@@ -1246,7 +1246,6 @@ static struct platform_driver msm8960_pinctrl_driver = {
.of_match_table = msm8960_pinctrl_of_match,
},
.probe = msm8960_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8960_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8976.c b/drivers/pinctrl/qcom/pinctrl-msm8976.c
index c30d80e4e98ca68ccede66001445967a47d6ec8f..3bcb03387781f803bf7e0251496a88a43b562b8d 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8976.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8976.c
@@ -1096,7 +1096,6 @@ static struct platform_driver msm8976_pinctrl_driver = {
.of_match_table = msm8976_pinctrl_of_match,
},
.probe = msm8976_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8976_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8994.c b/drivers/pinctrl/qcom/pinctrl-msm8994.c
index b1a6759ab4a5e70501aba4325e80db2359251204..7a3b6cbccb687c8b5040ee6bf372f092f21aa872 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8994.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8994.c
@@ -1343,7 +1343,6 @@ static struct platform_driver msm8994_pinctrl_driver = {
.of_match_table = msm8994_pinctrl_of_match,
},
.probe = msm8994_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8994_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8996.c b/drivers/pinctrl/qcom/pinctrl-msm8996.c
index 1b5d80eaab83c7e2c81c96019e8b0cc6f5461c69..d86d83106d3ba12343a4685e5b87c661f823c35b 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8996.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8996.c
@@ -1920,7 +1920,6 @@ static struct platform_driver msm8996_pinctrl_driver = {
.of_match_table = msm8996_pinctrl_of_match,
},
.probe = msm8996_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8996_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8998.c b/drivers/pinctrl/qcom/pinctrl-msm8998.c
index b7cbf32b3125a91081c6644cd3d343e08499dd1f..1daee815888f54b711505dfacefd614df83affc0 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8998.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8998.c
@@ -1535,7 +1535,6 @@ static struct platform_driver msm8998_pinctrl_driver = {
.of_match_table = msm8998_pinctrl_of_match,
},
.probe = msm8998_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8998_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8x74.c b/drivers/pinctrl/qcom/pinctrl-msm8x74.c
index 238c83f6ec4f41ff2dc572fd910c1c9aef9d290a..8253aa25775b247dc54a377c9781094e465e22b6 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm8x74.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm8x74.c
@@ -1083,7 +1083,6 @@ static struct platform_driver msm8x74_pinctrl_driver = {
.of_match_table = msm8x74_pinctrl_of_match,
},
.probe = msm8x74_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init msm8x74_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-qcm2290.c b/drivers/pinctrl/qcom/pinctrl-qcm2290.c
index f885af571ec93d66533f4909e935e5c7a2dd0511..85c951305abd6640b33cc4d8bf2283ffab18bbc4 100644
--- a/drivers/pinctrl/qcom/pinctrl-qcm2290.c
+++ b/drivers/pinctrl/qcom/pinctrl-qcm2290.c
@@ -1125,7 +1125,6 @@ static struct platform_driver qcm2290_pinctrl_driver = {
.of_match_table = qcm2290_pinctrl_of_match,
},
.probe = qcm2290_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init qcm2290_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-qcs404.c b/drivers/pinctrl/qcom/pinctrl-qcs404.c
index ae7224012f8aa00a41350b3ce670511aa8ce18bd..54e3b44353494e9398a88702945b7a85ff901b4d 100644
--- a/drivers/pinctrl/qcom/pinctrl-qcs404.c
+++ b/drivers/pinctrl/qcom/pinctrl-qcs404.c
@@ -1644,7 +1644,6 @@ static struct platform_driver qcs404_pinctrl_driver = {
.of_match_table = qcs404_pinctrl_of_match,
},
.probe = qcs404_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init qcs404_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-qcs615.c b/drivers/pinctrl/qcom/pinctrl-qcs615.c
index 23015b055f6a925e8157363952f3ce659059d719..0c3182808d021616848c31d605383296eb4e8e43 100644
--- a/drivers/pinctrl/qcom/pinctrl-qcs615.c
+++ b/drivers/pinctrl/qcom/pinctrl-qcs615.c
@@ -1087,7 +1087,6 @@ static struct platform_driver qcs615_tlmm_driver = {
.of_match_table = qcs615_tlmm_of_match,
},
.probe = qcs615_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init qcs615_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-qcs8300.c b/drivers/pinctrl/qcom/pinctrl-qcs8300.c
index ba6de944a859a0b637812e5d39c9eab7ea3ef8ed..e4ca2c0c12a6eb7460cdbf6f2e4a3086313a5a55 100644
--- a/drivers/pinctrl/qcom/pinctrl-qcs8300.c
+++ b/drivers/pinctrl/qcom/pinctrl-qcs8300.c
@@ -1227,7 +1227,6 @@ static struct platform_driver qcs8300_pinctrl_driver = {
.of_match_table = qcs8300_pinctrl_of_match,
},
.probe = qcs8300_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init qcs8300_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-qdf2xxx.c b/drivers/pinctrl/qcom/pinctrl-qdf2xxx.c
index b5808fcfb13cdebd04c0c71b24043b924094a683..9ecc4d40e4dc4f36aafc70309102b9e66ce024c0 100644
--- a/drivers/pinctrl/qcom/pinctrl-qdf2xxx.c
+++ b/drivers/pinctrl/qcom/pinctrl-qdf2xxx.c
@@ -145,7 +145,6 @@ static struct platform_driver qdf2xxx_pinctrl_driver = {
.acpi_match_table = qdf2xxx_acpi_ids,
},
.probe = qdf2xxx_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init qdf2xxx_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-qdu1000.c b/drivers/pinctrl/qcom/pinctrl-qdu1000.c
index 47bc529ef550d2ab9a13341295eacc08faed24c4..eacb89fa388850ef39ceb50497df9e5cca54191c 100644
--- a/drivers/pinctrl/qcom/pinctrl-qdu1000.c
+++ b/drivers/pinctrl/qcom/pinctrl-qdu1000.c
@@ -1248,7 +1248,6 @@ static struct platform_driver qdu1000_tlmm_driver = {
.of_match_table = qdu1000_tlmm_of_match,
},
.probe = qdu1000_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init qdu1000_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sa8775p.c b/drivers/pinctrl/qcom/pinctrl-sa8775p.c
index a5b38221aea851ce09448eb7eb71f7f94721443a..1b62eb3e6620c978225c5fd2ab541451cbe93093 100644
--- a/drivers/pinctrl/qcom/pinctrl-sa8775p.c
+++ b/drivers/pinctrl/qcom/pinctrl-sa8775p.c
@@ -1540,7 +1540,6 @@ static struct platform_driver sa8775p_pinctrl_driver = {
.of_match_table = sa8775p_pinctrl_of_match,
},
.probe = sa8775p_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sa8775p_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sar2130p.c b/drivers/pinctrl/qcom/pinctrl-sar2130p.c
index 19a2e37826c7b25f6d37f130a0fb5ef4cdadb61c..3dd1b5e5cfee489ec34b16ee2ae1c8d2c2756553 100644
--- a/drivers/pinctrl/qcom/pinctrl-sar2130p.c
+++ b/drivers/pinctrl/qcom/pinctrl-sar2130p.c
@@ -1486,7 +1486,6 @@ static struct platform_driver sar2130p_tlmm_driver = {
.of_match_table = sar2130p_tlmm_of_match,
},
.probe = sar2130p_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sar2130p_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sc7180.c b/drivers/pinctrl/qcom/pinctrl-sc7180.c
index 6eb0c73791c0bc9883bf0b740b8930fe7c7fced0..c43fe10b71add7d6294c90e86578ed472b8759a3 100644
--- a/drivers/pinctrl/qcom/pinctrl-sc7180.c
+++ b/drivers/pinctrl/qcom/pinctrl-sc7180.c
@@ -1159,7 +1159,6 @@ static struct platform_driver sc7180_pinctrl_driver = {
.of_match_table = sc7180_pinctrl_of_match,
},
.probe = sc7180_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sc7180_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sc7280.c b/drivers/pinctrl/qcom/pinctrl-sc7280.c
index 0c10eeb60b55e742a73dfd43d647f7009471b1b0..1b070e9d41f5972470d245edb821d202ca24522b 100644
--- a/drivers/pinctrl/qcom/pinctrl-sc7280.c
+++ b/drivers/pinctrl/qcom/pinctrl-sc7280.c
@@ -1505,7 +1505,6 @@ static struct platform_driver sc7280_pinctrl_driver = {
.of_match_table = sc7280_pinctrl_of_match,
},
.probe = sc7280_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sc7280_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sc8180x.c b/drivers/pinctrl/qcom/pinctrl-sc8180x.c
index d6a79ad41a40a804c503d97a6279db4b533f0047..26dd165d154348a8659720335ec16c3e5ace30ef 100644
--- a/drivers/pinctrl/qcom/pinctrl-sc8180x.c
+++ b/drivers/pinctrl/qcom/pinctrl-sc8180x.c
@@ -1720,7 +1720,6 @@ static struct platform_driver sc8180x_pinctrl_driver = {
.acpi_match_table = sc8180x_pinctrl_acpi_match,
},
.probe = sc8180x_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sc8180x_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sc8280xp.c b/drivers/pinctrl/qcom/pinctrl-sc8280xp.c
index 96f4fb5a5d297f784e63f4335e294ebdee5f487f..6ccd7e5648d420072f7ce467d92ef0764a6d7764 100644
--- a/drivers/pinctrl/qcom/pinctrl-sc8280xp.c
+++ b/drivers/pinctrl/qcom/pinctrl-sc8280xp.c
@@ -1926,7 +1926,6 @@ static struct platform_driver sc8280xp_pinctrl_driver = {
.of_match_table = sc8280xp_pinctrl_of_match,
},
.probe = sc8280xp_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sc8280xp_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sdm660.c b/drivers/pinctrl/qcom/pinctrl-sdm660.c
index 907e4ffca5e7df48aed8f917455f35c0da8c6265..1a78288f1bc832837d5c72d9eb1659f397d79b94 100644
--- a/drivers/pinctrl/qcom/pinctrl-sdm660.c
+++ b/drivers/pinctrl/qcom/pinctrl-sdm660.c
@@ -1442,7 +1442,6 @@ static struct platform_driver sdm660_pinctrl_driver = {
.of_match_table = sdm660_pinctrl_of_match,
},
.probe = sdm660_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sdm660_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sdm670.c b/drivers/pinctrl/qcom/pinctrl-sdm670.c
index c76183ba95e17473d1ed313090e8cc3546431348..0fe1fa94cd6da13591397442a63ce8daec9f4674 100644
--- a/drivers/pinctrl/qcom/pinctrl-sdm670.c
+++ b/drivers/pinctrl/qcom/pinctrl-sdm670.c
@@ -1337,7 +1337,6 @@ static struct platform_driver sdm670_pinctrl_driver = {
.of_match_table = sdm670_pinctrl_of_match,
},
.probe = sdm670_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sdm670_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sdm845.c b/drivers/pinctrl/qcom/pinctrl-sdm845.c
index cc05c415ed15512f1f99a598650d3adfdc795a6d..0446e291aa4831da439af12b7934fbda5915ee5a 100644
--- a/drivers/pinctrl/qcom/pinctrl-sdm845.c
+++ b/drivers/pinctrl/qcom/pinctrl-sdm845.c
@@ -1351,7 +1351,6 @@ static struct platform_driver sdm845_pinctrl_driver = {
.acpi_match_table = ACPI_PTR(sdm845_pinctrl_acpi_match),
},
.probe = sdm845_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sdm845_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sdx55.c b/drivers/pinctrl/qcom/pinctrl-sdx55.c
index 8826db9d21d04cecca844b0607984e21a500f15b..2c17bf889146362edf9f482d33b17d35a255882e 100644
--- a/drivers/pinctrl/qcom/pinctrl-sdx55.c
+++ b/drivers/pinctrl/qcom/pinctrl-sdx55.c
@@ -990,7 +990,6 @@ static struct platform_driver sdx55_pinctrl_driver = {
.of_match_table = sdx55_pinctrl_of_match,
},
.probe = sdx55_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sdx55_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sdx65.c b/drivers/pinctrl/qcom/pinctrl-sdx65.c
index f6f319c997fc7a39d672872c0df1fa2ea821b2d9..85b5c0206dbd199c6efc15aad10784d20c1addde 100644
--- a/drivers/pinctrl/qcom/pinctrl-sdx65.c
+++ b/drivers/pinctrl/qcom/pinctrl-sdx65.c
@@ -939,7 +939,6 @@ static struct platform_driver sdx65_pinctrl_driver = {
.of_match_table = sdx65_pinctrl_of_match,
},
.probe = sdx65_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sdx65_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sdx75.c b/drivers/pinctrl/qcom/pinctrl-sdx75.c
index 3cfe8c7f04df816a93252a162ccfa502854411fe..ab13a3a57a830781f35916ff508ca65d6699271d 100644
--- a/drivers/pinctrl/qcom/pinctrl-sdx75.c
+++ b/drivers/pinctrl/qcom/pinctrl-sdx75.c
@@ -1124,7 +1124,6 @@ static struct platform_driver sdx75_pinctrl_driver = {
.of_match_table = sdx75_pinctrl_of_match,
},
.probe = sdx75_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sdx75_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm4450.c b/drivers/pinctrl/qcom/pinctrl-sm4450.c
index 622f20e6f6f859ee4f132809304bc3f0685e8ff3..1ecdf1ab4f275ede7cb629321f9c37d3f81a25e9 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm4450.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm4450.c
@@ -994,7 +994,6 @@ static struct platform_driver sm4450_tlmm_driver = {
.of_match_table = sm4450_tlmm_of_match,
},
.probe = sm4450_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
MODULE_DEVICE_TABLE(of, sm4450_tlmm_of_match);
diff --git a/drivers/pinctrl/qcom/pinctrl-sm6115.c b/drivers/pinctrl/qcom/pinctrl-sm6115.c
index 4e91c75ad952487e755e0abdf861b1f118bf4de5..c273efa4399630a2187845382e231fe150d997fd 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm6115.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm6115.c
@@ -907,7 +907,6 @@ static struct platform_driver sm6115_tlmm_driver = {
.of_match_table = sm6115_tlmm_of_match,
},
.probe = sm6115_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm6115_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm6125.c b/drivers/pinctrl/qcom/pinctrl-sm6125.c
index c188842047aae054929e124f650290034cfad979..5092f20e0c1bdee2e99b768f12cfbec31972c24c 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm6125.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm6125.c
@@ -1266,7 +1266,6 @@ static struct platform_driver sm6125_tlmm_driver = {
.of_match_table = sm6125_tlmm_of_match,
},
.probe = sm6125_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm6125_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm6350.c b/drivers/pinctrl/qcom/pinctrl-sm6350.c
index f3828c07b134500e4307db1d42aabae389a03360..ba4686c86c54b8c1dc32522c83587521e149a5ae 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm6350.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm6350.c
@@ -1373,7 +1373,6 @@ static struct platform_driver sm6350_tlmm_driver = {
.of_match_table = sm6350_tlmm_of_match,
},
.probe = sm6350_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm6350_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm6375.c b/drivers/pinctrl/qcom/pinctrl-sm6375.c
index c82c8516932ea2e1880284fa86bdaf3683f024cc..49031571e65ee3291fb1e5269e071a08a77c87de 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm6375.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm6375.c
@@ -1516,7 +1516,6 @@ static struct platform_driver sm6375_tlmm_driver = {
.of_match_table = sm6375_tlmm_of_match,
},
.probe = sm6375_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm6375_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm7150.c b/drivers/pinctrl/qcom/pinctrl-sm7150.c
index 3c7fd8af6635b94df107f44e3e0e68a2778a25e7..6e89966cd70e34bcb74cfb50e80e110e40655b0e 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm7150.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm7150.c
@@ -1255,7 +1255,6 @@ static struct platform_driver sm7150_tlmm_driver = {
.of_match_table = sm7150_tlmm_of_match,
},
.probe = sm7150_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm7150_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm8150.c b/drivers/pinctrl/qcom/pinctrl-sm8150.c
index 01aea9c70b7a78168ee063f5ac88afc0d7290bcb..794ed99463f76032f56be9464a4aa3018537df94 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm8150.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm8150.c
@@ -1542,7 +1542,6 @@ static struct platform_driver sm8150_pinctrl_driver = {
.of_match_table = sm8150_pinctrl_of_match,
},
.probe = sm8150_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm8150_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm8250.c b/drivers/pinctrl/qcom/pinctrl-sm8250.c
index e9961a49ff9811bfa3ed3c6c1a8f1cf90afa1d29..fb6f005d64f53f318d58e69681f07e36404439cf 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm8250.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm8250.c
@@ -1351,7 +1351,6 @@ static struct platform_driver sm8250_pinctrl_driver = {
.of_match_table = sm8250_pinctrl_of_match,
},
.probe = sm8250_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm8250_pinctrl_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm8350.c b/drivers/pinctrl/qcom/pinctrl-sm8350.c
index 9c69458bd9109119e7a88d1a92f633bbf188ed0c..c8a3f39ce6f1b8565a783f04100269b3cadb9bcc 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm8350.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm8350.c
@@ -1642,7 +1642,6 @@ static struct platform_driver sm8350_tlmm_driver = {
.of_match_table = sm8350_tlmm_of_match,
},
.probe = sm8350_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm8350_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm8450.c b/drivers/pinctrl/qcom/pinctrl-sm8450.c
index d11bb1ee9e3d8dfbb1e810051d5c854a959b428b..f2e52d5a0f9369d21922d0651539908d592301e5 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm8450.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm8450.c
@@ -1677,7 +1677,6 @@ static struct platform_driver sm8450_tlmm_driver = {
.of_match_table = sm8450_tlmm_of_match,
},
.probe = sm8450_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm8450_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm8550.c b/drivers/pinctrl/qcom/pinctrl-sm8550.c
index 3c847d9cb5d93bbc7bb5a9b0b2ee707e14de6387..1b4496cb39eb46b2b660ef213e1f3c8fdac2b21e 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm8550.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm8550.c
@@ -1762,7 +1762,6 @@ static struct platform_driver sm8550_tlmm_driver = {
.of_match_table = sm8550_tlmm_of_match,
},
.probe = sm8550_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm8550_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm8650.c b/drivers/pinctrl/qcom/pinctrl-sm8650.c
index 104708252d12a82a887aa2bdaecf31d3308a102c..449a0077f4b10666ecd9dfaae8e0057a91e181a6 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm8650.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm8650.c
@@ -1742,7 +1742,6 @@ static struct platform_driver sm8650_tlmm_driver = {
.of_match_table = sm8650_tlmm_of_match,
},
.probe = sm8650_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm8650_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-sm8750.c b/drivers/pinctrl/qcom/pinctrl-sm8750.c
index 1af11cd95fb0e69fcc876fe069cc2cd6fd6679fd..b2764b722a560e932660f3d0557ad745880b91c4 100644
--- a/drivers/pinctrl/qcom/pinctrl-sm8750.c
+++ b/drivers/pinctrl/qcom/pinctrl-sm8750.c
@@ -1709,7 +1709,6 @@ static struct platform_driver sm8750_tlmm_driver = {
.of_match_table = sm8750_tlmm_of_match,
},
.probe = sm8750_tlmm_probe,
- .remove = msm_pinctrl_remove,
};
static int __init sm8750_tlmm_init(void)
diff --git a/drivers/pinctrl/qcom/pinctrl-x1e80100.c b/drivers/pinctrl/qcom/pinctrl-x1e80100.c
index 419cb8facb2f3d261558593800a26694eddb4817..d4b215f34c39bf67a0656a3f894b8639491e898b 100644
--- a/drivers/pinctrl/qcom/pinctrl-x1e80100.c
+++ b/drivers/pinctrl/qcom/pinctrl-x1e80100.c
@@ -1861,7 +1861,6 @@ static struct platform_driver x1e80100_pinctrl_driver = {
.of_match_table = x1e80100_pinctrl_of_match,
},
.probe = x1e80100_pinctrl_probe,
- .remove = msm_pinctrl_remove,
};
static int __init x1e80100_pinctrl_init(void)
--
2.39.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins
2025-05-03 5:32 ` [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins Dmitry Baryshkov
@ 2025-05-05 5:49 ` Matti Vaittinen
2025-05-05 15:23 ` Doug Anderson
2025-05-06 17:28 ` Bartosz Golaszewski
2 siblings, 0 replies; 16+ messages in thread
From: Matti Vaittinen @ 2025-05-05 5:49 UTC (permalink / raw)
To: Dmitry Baryshkov, Bjorn Andersson, Linus Walleij, Guenter Roeck,
Josh Cartwright, Bartosz Golaszewski, Doug Anderson
Cc: linux-arm-msm, linux-gpio, linux-kernel
On 03/05/2025 08:32, Dmitry Baryshkov wrote:
> On Qualcomm platforms if the board uses GPIO hogs msm_pinmux_request()
> calls gpiochip_line_is_valid(). After commit 8015443e24e7 ("gpio: Hide
> valid_mask from direct assignments") gpiochip_line_is_valid() uses
> gc->gpiodev, which is NULL when GPIO hog pins are being processed.
> Thus after this commit using GPIO hogs causes the following crash. In
> order to fix this, verify that gpiochip->gpiodev is not NULL.
>
> Note: it is not possible to reorder calls (e.g. by calling
> msm_gpio_init() before pinctrl registration or by splitting
> pinctrl_register() into _and_init() and pinctrl_enable() and calling the
> latter function after msm_gpio_init()) because GPIO chip registration
> would fail with EPROBE_DEFER if pinctrl is not enabled at the time of
> registration.
>
> pc : gpiochip_line_is_valid+0x4/0x28
> lr : msm_pinmux_request+0x24/0x40
> sp : ffff8000808eb870
> x29: ffff8000808eb870 x28: 0000000000000000 x27: 0000000000000000
> x26: 0000000000000000 x25: ffff726240f9d040 x24: 0000000000000000
> x23: ffff7262438c0510 x22: 0000000000000080 x21: ffff726243ea7000
> x20: ffffab13f2c4e698 x19: 0000000000000080 x18: 00000000ffffffff
> x17: ffff726242ba6000 x16: 0000000000000100 x15: 0000000000000028
> x14: 0000000000000000 x13: 0000000000002948 x12: 0000000000000003
> x11: 0000000000000078 x10: 0000000000002948 x9 : ffffab13f50eb5e8
> x8 : 0000000003ecb21b x7 : 000000000000002d x6 : 0000000000000b68
> x5 : 0000007fffffffff x4 : ffffab13f52f84a8 x3 : ffff8000808eb804
> x2 : ffffab13f1de8190 x1 : 0000000000000080 x0 : 0000000000000000
> Call trace:
> gpiochip_line_is_valid+0x4/0x28 (P)
> pin_request+0x208/0x2c0
> pinmux_enable_setting+0xa0/0x2e0
> pinctrl_commit_state+0x150/0x26c
> pinctrl_enable+0x6c/0x2a4
> pinctrl_register+0x3c/0xb0
> devm_pinctrl_register+0x58/0xa0
> msm_pinctrl_probe+0x2a8/0x584
> sdm845_pinctrl_probe+0x20/0x88
> platform_probe+0x68/0xc0
> really_probe+0xbc/0x298
> __driver_probe_device+0x78/0x12c
> driver_probe_device+0x3c/0x160
> __device_attach_driver+0xb8/0x138
> bus_for_each_drv+0x84/0xe0
> __device_attach+0x9c/0x188
> device_initial_probe+0x14/0x20
> bus_probe_device+0xac/0xb0
> deferred_probe_work_func+0x8c/0xc8
> process_one_work+0x208/0x5e8
> worker_thread+0x1b4/0x35c
> kthread+0x144/0x220
> ret_from_fork+0x10/0x20
> Code: b5fffba0 17fffff2 9432ec27 f9400400 (f9428800)
>
> Fixes: 8015443e24e7 ("gpio: Hide valid_mask from direct assignments")
> Reported-by: Doug Anderson <dianders@chromium.org>
> Closes: https://lore.kernel.org/r/CAD=FV=Vg8_ZOLgLoC4WhFPzhVsxXFC19NrF38W6cW_W_3nFjbw@mail.gmail.com
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> drivers/pinctrl/qcom/pinctrl-msm.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
> index 9ec15ae4a104cbeb9a7d819b964d341f3bba58ea..a99275f3c4a66a39f4d9318fe918101127ef4487 100644
> --- a/drivers/pinctrl/qcom/pinctrl-msm.c
> +++ b/drivers/pinctrl/qcom/pinctrl-msm.c
> @@ -149,6 +149,13 @@ static int msm_pinmux_request(struct pinctrl_dev *pctldev, unsigned offset)
> struct msm_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
> struct gpio_chip *chip = &pctrl->chip;
>
> + /*
> + * hog pins are requested before registering GPIO chip, don't crash in
> + * gpiochip_line_is_valid().
> + */
> + if (!chip->gpiodev)
> + return 0;
> +
This should fix the reported crash at hog registration. Still, I feel
this is only papering over a real problem, which is the dependency from
pinmux request to the gpiodev. As far as I can say, there is no
mechanism ensuring the gpiochip is there, right? Even though this fixes
the reported crash, it also causes all early pinmux requests to assume
all the GPIOs are valid, right?
Also, I suppose there will be a time window at remove path when the
pinctrl is still there - but gpio has already gone. (I didn't really
dive into the dirty details of the pinctrl... Perhaps if this is somehow
prevented?) Anyways, I'm not sure how valid it is to assume the
gpiochip_line_is_valid() will work in such case?
Unfortunately, I don't have any better suggestion how to fix this. So,
what little it is worth, I am Ok with applying this, at least as a fix
for the crash!
> return gpiochip_line_is_valid(chip, offset) ? 0 : -EINVAL;
> }
Yours,
-- Matti
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data()
2025-05-03 5:32 ` [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data() Dmitry Baryshkov
@ 2025-05-05 5:54 ` Matti Vaittinen
2025-05-06 17:18 ` Bartosz Golaszewski
1 sibling, 0 replies; 16+ messages in thread
From: Matti Vaittinen @ 2025-05-05 5:54 UTC (permalink / raw)
To: Dmitry Baryshkov, Bjorn Andersson, Linus Walleij, Guenter Roeck,
Josh Cartwright, Bartosz Golaszewski, Doug Anderson
Cc: linux-arm-msm, linux-gpio, linux-kernel
On 03/05/2025 08:32, Dmitry Baryshkov wrote:
> In order to simplify cleanup actions, use devres-enabled version of
> gpiochip_add_data().
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> drivers/pinctrl/qcom/pinctrl-msm.c | 6 +-----
> 1 file changed, 1 insertion(+), 5 deletions(-)
>
> diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
> index 88dd462516c76d58b43d49accbddeea38af8f1ec..b2e8f7b3f3e3d5d232b2bd60e5cace62b21ffb03 100644
> --- a/drivers/pinctrl/qcom/pinctrl-msm.c
> +++ b/drivers/pinctrl/qcom/pinctrl-msm.c
> @@ -1449,7 +1449,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
> girq->handler = handle_bad_irq;
> girq->parents[0] = pctrl->irq;
>
> - ret = gpiochip_add_data(&pctrl->chip, pctrl);
> + ret = devm_gpiochip_add_data(pctrl->dev, &pctrl->chip, pctrl);
> if (ret) {
> dev_err(pctrl->dev, "Failed register gpiochip\n");
> return ret;
> @@ -1470,7 +1470,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
> dev_name(pctrl->dev), 0, 0, chip->ngpio);
> if (ret) {
> dev_err(pctrl->dev, "Failed to add pin range\n");
> - gpiochip_remove(&pctrl->chip);
> return ret;
> }
> }
> @@ -1608,9 +1607,6 @@ EXPORT_SYMBOL(msm_pinctrl_probe);
>
> void msm_pinctrl_remove(struct platform_device *pdev)
> {
> - struct msm_pinctrl *pctrl = platform_get_drvdata(pdev);
> -
> - gpiochip_remove(&pctrl->chip);
> }
> EXPORT_SYMBOL(msm_pinctrl_remove);
I suppose this should also make the time window when the GPIO chip has
gone, but pinmux is still there (to call the 'gpiochip_line_is_valid()')
smaller.
FWIW:
Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
Yours,
-- Matti
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins
2025-05-03 5:32 ` [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins Dmitry Baryshkov
2025-05-05 5:49 ` Matti Vaittinen
@ 2025-05-05 15:23 ` Doug Anderson
2025-05-06 17:28 ` Bartosz Golaszewski
2 siblings, 0 replies; 16+ messages in thread
From: Doug Anderson @ 2025-05-05 15:23 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Bartosz Golaszewski, Matti Vaittinen, linux-arm-msm, linux-gpio,
linux-kernel
Hi,
On Fri, May 2, 2025 at 10:32 PM Dmitry Baryshkov
<dmitry.baryshkov@oss.qualcomm.com> wrote:
>
> On Qualcomm platforms if the board uses GPIO hogs msm_pinmux_request()
> calls gpiochip_line_is_valid(). After commit 8015443e24e7 ("gpio: Hide
> valid_mask from direct assignments") gpiochip_line_is_valid() uses
> gc->gpiodev, which is NULL when GPIO hog pins are being processed.
> Thus after this commit using GPIO hogs causes the following crash. In
> order to fix this, verify that gpiochip->gpiodev is not NULL.
>
> Note: it is not possible to reorder calls (e.g. by calling
> msm_gpio_init() before pinctrl registration or by splitting
> pinctrl_register() into _and_init() and pinctrl_enable() and calling the
> latter function after msm_gpio_init()) because GPIO chip registration
> would fail with EPROBE_DEFER if pinctrl is not enabled at the time of
> registration.
>
> pc : gpiochip_line_is_valid+0x4/0x28
> lr : msm_pinmux_request+0x24/0x40
> sp : ffff8000808eb870
> x29: ffff8000808eb870 x28: 0000000000000000 x27: 0000000000000000
> x26: 0000000000000000 x25: ffff726240f9d040 x24: 0000000000000000
> x23: ffff7262438c0510 x22: 0000000000000080 x21: ffff726243ea7000
> x20: ffffab13f2c4e698 x19: 0000000000000080 x18: 00000000ffffffff
> x17: ffff726242ba6000 x16: 0000000000000100 x15: 0000000000000028
> x14: 0000000000000000 x13: 0000000000002948 x12: 0000000000000003
> x11: 0000000000000078 x10: 0000000000002948 x9 : ffffab13f50eb5e8
> x8 : 0000000003ecb21b x7 : 000000000000002d x6 : 0000000000000b68
> x5 : 0000007fffffffff x4 : ffffab13f52f84a8 x3 : ffff8000808eb804
> x2 : ffffab13f1de8190 x1 : 0000000000000080 x0 : 0000000000000000
> Call trace:
> gpiochip_line_is_valid+0x4/0x28 (P)
> pin_request+0x208/0x2c0
> pinmux_enable_setting+0xa0/0x2e0
> pinctrl_commit_state+0x150/0x26c
> pinctrl_enable+0x6c/0x2a4
> pinctrl_register+0x3c/0xb0
> devm_pinctrl_register+0x58/0xa0
> msm_pinctrl_probe+0x2a8/0x584
> sdm845_pinctrl_probe+0x20/0x88
> platform_probe+0x68/0xc0
> really_probe+0xbc/0x298
> __driver_probe_device+0x78/0x12c
> driver_probe_device+0x3c/0x160
> __device_attach_driver+0xb8/0x138
> bus_for_each_drv+0x84/0xe0
> __device_attach+0x9c/0x188
> device_initial_probe+0x14/0x20
> bus_probe_device+0xac/0xb0
> deferred_probe_work_func+0x8c/0xc8
> process_one_work+0x208/0x5e8
> worker_thread+0x1b4/0x35c
> kthread+0x144/0x220
> ret_from_fork+0x10/0x20
> Code: b5fffba0 17fffff2 9432ec27 f9400400 (f9428800)
>
> Fixes: 8015443e24e7 ("gpio: Hide valid_mask from direct assignments")
> Reported-by: Doug Anderson <dianders@chromium.org>
> Closes: https://lore.kernel.org/r/CAD=FV=Vg8_ZOLgLoC4WhFPzhVsxXFC19NrF38W6cW_W_3nFjbw@mail.gmail.com
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> drivers/pinctrl/qcom/pinctrl-msm.c | 7 +++++++
> 1 file changed, 7 insertions(+)
So I guess this is fine because nobody would specify a hog in their
device tree that's an invalid GPIO?
In any case, this works for me. Thanks for the fix!
Tested-by: Douglas Anderson <dianders@chromium.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data()
2025-05-03 5:32 ` [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data() Dmitry Baryshkov
2025-05-05 5:54 ` Matti Vaittinen
@ 2025-05-06 17:18 ` Bartosz Golaszewski
2025-05-06 17:23 ` Bartosz Golaszewski
1 sibling, 1 reply; 16+ messages in thread
From: Bartosz Golaszewski @ 2025-05-06 17:18 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Matti Vaittinen, Doug Anderson, linux-arm-msm, linux-gpio,
linux-kernel
On Sat, 3 May 2025 at 07:32, Dmitry Baryshkov
<dmitry.baryshkov@oss.qualcomm.com> wrote:
>
> In order to simplify cleanup actions, use devres-enabled version of
> gpiochip_add_data().
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> drivers/pinctrl/qcom/pinctrl-msm.c | 6 +-----
> 1 file changed, 1 insertion(+), 5 deletions(-)
>
> diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
> index 88dd462516c76d58b43d49accbddeea38af8f1ec..b2e8f7b3f3e3d5d232b2bd60e5cace62b21ffb03 100644
> --- a/drivers/pinctrl/qcom/pinctrl-msm.c
> +++ b/drivers/pinctrl/qcom/pinctrl-msm.c
> @@ -1449,7 +1449,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
> girq->handler = handle_bad_irq;
> girq->parents[0] = pctrl->irq;
>
> - ret = gpiochip_add_data(&pctrl->chip, pctrl);
> + ret = devm_gpiochip_add_data(pctrl->dev, &pctrl->chip, pctrl);
> if (ret) {
> dev_err(pctrl->dev, "Failed register gpiochip\n");
> return ret;
> @@ -1470,7 +1470,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
> dev_name(pctrl->dev), 0, 0, chip->ngpio);
> if (ret) {
> dev_err(pctrl->dev, "Failed to add pin range\n");
> - gpiochip_remove(&pctrl->chip);
> return ret;
> }
> }
> @@ -1608,9 +1607,6 @@ EXPORT_SYMBOL(msm_pinctrl_probe);
>
> void msm_pinctrl_remove(struct platform_device *pdev)
> {
> - struct msm_pinctrl *pctrl = platform_get_drvdata(pdev);
> -
> - gpiochip_remove(&pctrl->chip);
> }
> EXPORT_SYMBOL(msm_pinctrl_remove);
>
>
> --
> 2.39.5
>
If you're at it then why not remove this function here and the
callback assignment throughout the pinctrl/qcom/ directory?
Bart
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data()
2025-05-06 17:18 ` Bartosz Golaszewski
@ 2025-05-06 17:23 ` Bartosz Golaszewski
2025-05-07 0:30 ` Dmitry Baryshkov
0 siblings, 1 reply; 16+ messages in thread
From: Bartosz Golaszewski @ 2025-05-06 17:23 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Matti Vaittinen, Doug Anderson, linux-arm-msm, linux-gpio,
linux-kernel
On Tue, 6 May 2025 at 19:18, Bartosz Golaszewski
<bartosz.golaszewski@linaro.org> wrote:
>
> On Sat, 3 May 2025 at 07:32, Dmitry Baryshkov
> <dmitry.baryshkov@oss.qualcomm.com> wrote:
> >
> > In order to simplify cleanup actions, use devres-enabled version of
> > gpiochip_add_data().
> >
> > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> > ---
> > drivers/pinctrl/qcom/pinctrl-msm.c | 6 +-----
> > 1 file changed, 1 insertion(+), 5 deletions(-)
> >
> > diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
> > index 88dd462516c76d58b43d49accbddeea38af8f1ec..b2e8f7b3f3e3d5d232b2bd60e5cace62b21ffb03 100644
> > --- a/drivers/pinctrl/qcom/pinctrl-msm.c
> > +++ b/drivers/pinctrl/qcom/pinctrl-msm.c
> > @@ -1449,7 +1449,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
> > girq->handler = handle_bad_irq;
> > girq->parents[0] = pctrl->irq;
> >
> > - ret = gpiochip_add_data(&pctrl->chip, pctrl);
> > + ret = devm_gpiochip_add_data(pctrl->dev, &pctrl->chip, pctrl);
> > if (ret) {
> > dev_err(pctrl->dev, "Failed register gpiochip\n");
> > return ret;
> > @@ -1470,7 +1470,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
> > dev_name(pctrl->dev), 0, 0, chip->ngpio);
> > if (ret) {
> > dev_err(pctrl->dev, "Failed to add pin range\n");
> > - gpiochip_remove(&pctrl->chip);
> > return ret;
> > }
> > }
> > @@ -1608,9 +1607,6 @@ EXPORT_SYMBOL(msm_pinctrl_probe);
> >
> > void msm_pinctrl_remove(struct platform_device *pdev)
> > {
> > - struct msm_pinctrl *pctrl = platform_get_drvdata(pdev);
> > -
> > - gpiochip_remove(&pctrl->chip);
> > }
> > EXPORT_SYMBOL(msm_pinctrl_remove);
> >
> >
> > --
> > 2.39.5
> >
>
> If you're at it then why not remove this function here and the
> callback assignment throughout the pinctrl/qcom/ directory?
>
> Bart
Ah, it's in the next patch. I'd make it one commit though, no reason
to split it IMO.
Bartosz
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins
2025-05-03 5:32 ` [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins Dmitry Baryshkov
2025-05-05 5:49 ` Matti Vaittinen
2025-05-05 15:23 ` Doug Anderson
@ 2025-05-06 17:28 ` Bartosz Golaszewski
2025-05-13 9:26 ` Linus Walleij
2 siblings, 1 reply; 16+ messages in thread
From: Bartosz Golaszewski @ 2025-05-06 17:28 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Matti Vaittinen, Doug Anderson, linux-arm-msm, linux-gpio,
linux-kernel
On Sat, 3 May 2025 at 07:32, Dmitry Baryshkov
<dmitry.baryshkov@oss.qualcomm.com> wrote:
>
> On Qualcomm platforms if the board uses GPIO hogs msm_pinmux_request()
> calls gpiochip_line_is_valid(). After commit 8015443e24e7 ("gpio: Hide
> valid_mask from direct assignments") gpiochip_line_is_valid() uses
> gc->gpiodev, which is NULL when GPIO hog pins are being processed.
> Thus after this commit using GPIO hogs causes the following crash. In
> order to fix this, verify that gpiochip->gpiodev is not NULL.
>
> Note: it is not possible to reorder calls (e.g. by calling
> msm_gpio_init() before pinctrl registration or by splitting
> pinctrl_register() into _and_init() and pinctrl_enable() and calling the
> latter function after msm_gpio_init()) because GPIO chip registration
> would fail with EPROBE_DEFER if pinctrl is not enabled at the time of
> registration.
>
> pc : gpiochip_line_is_valid+0x4/0x28
> lr : msm_pinmux_request+0x24/0x40
> sp : ffff8000808eb870
> x29: ffff8000808eb870 x28: 0000000000000000 x27: 0000000000000000
> x26: 0000000000000000 x25: ffff726240f9d040 x24: 0000000000000000
> x23: ffff7262438c0510 x22: 0000000000000080 x21: ffff726243ea7000
> x20: ffffab13f2c4e698 x19: 0000000000000080 x18: 00000000ffffffff
> x17: ffff726242ba6000 x16: 0000000000000100 x15: 0000000000000028
> x14: 0000000000000000 x13: 0000000000002948 x12: 0000000000000003
> x11: 0000000000000078 x10: 0000000000002948 x9 : ffffab13f50eb5e8
> x8 : 0000000003ecb21b x7 : 000000000000002d x6 : 0000000000000b68
> x5 : 0000007fffffffff x4 : ffffab13f52f84a8 x3 : ffff8000808eb804
> x2 : ffffab13f1de8190 x1 : 0000000000000080 x0 : 0000000000000000
> Call trace:
> gpiochip_line_is_valid+0x4/0x28 (P)
> pin_request+0x208/0x2c0
> pinmux_enable_setting+0xa0/0x2e0
> pinctrl_commit_state+0x150/0x26c
> pinctrl_enable+0x6c/0x2a4
> pinctrl_register+0x3c/0xb0
> devm_pinctrl_register+0x58/0xa0
> msm_pinctrl_probe+0x2a8/0x584
> sdm845_pinctrl_probe+0x20/0x88
> platform_probe+0x68/0xc0
> really_probe+0xbc/0x298
> __driver_probe_device+0x78/0x12c
> driver_probe_device+0x3c/0x160
> __device_attach_driver+0xb8/0x138
> bus_for_each_drv+0x84/0xe0
> __device_attach+0x9c/0x188
> device_initial_probe+0x14/0x20
> bus_probe_device+0xac/0xb0
> deferred_probe_work_func+0x8c/0xc8
> process_one_work+0x208/0x5e8
> worker_thread+0x1b4/0x35c
> kthread+0x144/0x220
> ret_from_fork+0x10/0x20
> Code: b5fffba0 17fffff2 9432ec27 f9400400 (f9428800)
>
> Fixes: 8015443e24e7 ("gpio: Hide valid_mask from direct assignments")
> Reported-by: Doug Anderson <dianders@chromium.org>
> Closes: https://lore.kernel.org/r/CAD=FV=Vg8_ZOLgLoC4WhFPzhVsxXFC19NrF38W6cW_W_3nFjbw@mail.gmail.com
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> drivers/pinctrl/qcom/pinctrl-msm.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
> index 9ec15ae4a104cbeb9a7d819b964d341f3bba58ea..a99275f3c4a66a39f4d9318fe918101127ef4487 100644
> --- a/drivers/pinctrl/qcom/pinctrl-msm.c
> +++ b/drivers/pinctrl/qcom/pinctrl-msm.c
> @@ -149,6 +149,13 @@ static int msm_pinmux_request(struct pinctrl_dev *pctldev, unsigned offset)
> struct msm_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
> struct gpio_chip *chip = &pctrl->chip;
>
> + /*
> + * hog pins are requested before registering GPIO chip, don't crash in
> + * gpiochip_line_is_valid().
> + */
> + if (!chip->gpiodev)
> + return 0;
> +
I really dislike you dereferencing gpiodev here which is (implicitly,
I know...) very much a private structure for GPIOLIB. Can we move this
into gpiochip_line_is_valid() itself?
Treewide there's only one driver (under drivers/pinctrl/) that
accesses gc->gpiodev and I would love to fix that as well and have
nobody dereference this.
Bart
> return gpiochip_line_is_valid(chip, offset) ? 0 : -EINVAL;
> }
>
>
> --
> 2.39.5
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data()
2025-05-06 17:23 ` Bartosz Golaszewski
@ 2025-05-07 0:30 ` Dmitry Baryshkov
0 siblings, 0 replies; 16+ messages in thread
From: Dmitry Baryshkov @ 2025-05-07 0:30 UTC (permalink / raw)
To: Bartosz Golaszewski
Cc: Bjorn Andersson, Linus Walleij, Guenter Roeck, Josh Cartwright,
Matti Vaittinen, Doug Anderson, linux-arm-msm, linux-gpio,
linux-kernel
On Tue, May 06, 2025 at 07:23:10PM +0200, Bartosz Golaszewski wrote:
> On Tue, 6 May 2025 at 19:18, Bartosz Golaszewski
> <bartosz.golaszewski@linaro.org> wrote:
> >
> > On Sat, 3 May 2025 at 07:32, Dmitry Baryshkov
> > <dmitry.baryshkov@oss.qualcomm.com> wrote:
> > >
> > > In order to simplify cleanup actions, use devres-enabled version of
> > > gpiochip_add_data().
> > >
> > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> > > ---
> > > drivers/pinctrl/qcom/pinctrl-msm.c | 6 +-----
> > > 1 file changed, 1 insertion(+), 5 deletions(-)
> > >
> > > diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
> > > index 88dd462516c76d58b43d49accbddeea38af8f1ec..b2e8f7b3f3e3d5d232b2bd60e5cace62b21ffb03 100644
> > > --- a/drivers/pinctrl/qcom/pinctrl-msm.c
> > > +++ b/drivers/pinctrl/qcom/pinctrl-msm.c
> > > @@ -1449,7 +1449,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
> > > girq->handler = handle_bad_irq;
> > > girq->parents[0] = pctrl->irq;
> > >
> > > - ret = gpiochip_add_data(&pctrl->chip, pctrl);
> > > + ret = devm_gpiochip_add_data(pctrl->dev, &pctrl->chip, pctrl);
> > > if (ret) {
> > > dev_err(pctrl->dev, "Failed register gpiochip\n");
> > > return ret;
> > > @@ -1470,7 +1470,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
> > > dev_name(pctrl->dev), 0, 0, chip->ngpio);
> > > if (ret) {
> > > dev_err(pctrl->dev, "Failed to add pin range\n");
> > > - gpiochip_remove(&pctrl->chip);
> > > return ret;
> > > }
> > > }
> > > @@ -1608,9 +1607,6 @@ EXPORT_SYMBOL(msm_pinctrl_probe);
> > >
> > > void msm_pinctrl_remove(struct platform_device *pdev)
> > > {
> > > - struct msm_pinctrl *pctrl = platform_get_drvdata(pdev);
> > > -
> > > - gpiochip_remove(&pctrl->chip);
> > > }
> > > EXPORT_SYMBOL(msm_pinctrl_remove);
> > >
> > >
> > > --
> > > 2.39.5
> > >
> >
> > If you're at it then why not remove this function here and the
> > callback assignment throughout the pinctrl/qcom/ directory?
> >
> > Bart
>
> Ah, it's in the next patch. I'd make it one commit though, no reason
> to split it IMO.
Up to you, but from my POV it's cleaner this way: first patch removes
the contents, second one removes the function. Otherwise it's too easy
to loose the functional changes (of gpiochip_remove() removal) in the
noise of updating all the platform files.
If you wish, I can add a note to the commit message telling that the
actual function will be dropped in the next commit.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins
2025-05-06 17:28 ` Bartosz Golaszewski
@ 2025-05-13 9:26 ` Linus Walleij
2025-05-13 15:07 ` Doug Anderson
0 siblings, 1 reply; 16+ messages in thread
From: Linus Walleij @ 2025-05-13 9:26 UTC (permalink / raw)
To: Bartosz Golaszewski
Cc: Dmitry Baryshkov, Bjorn Andersson, Guenter Roeck, Josh Cartwright,
Matti Vaittinen, Doug Anderson, linux-arm-msm, linux-gpio,
linux-kernel
Hi Dmitry,
thanks for your patch!
On Tue, May 6, 2025 at 7:28 PM Bartosz Golaszewski
<bartosz.golaszewski@linaro.org> wrote:
> On Sat, 3 May 2025 at 07:32, Dmitry Baryshkov
> <dmitry.baryshkov@oss.qualcomm.com> wrote:
> > + /*
> > + * hog pins are requested before registering GPIO chip, don't crash in
> > + * gpiochip_line_is_valid().
> > + */
> > + if (!chip->gpiodev)
> > + return 0;
> > +
>
> I really dislike you dereferencing gpiodev here which is (implicitly,
> I know...) very much a private structure for GPIOLIB. Can we move this
> into gpiochip_line_is_valid() itself?
I agree with Bartosz. Patch gpiochip_line_is_valid() so everyone
can benefit from the extended check.
Thanks!
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code
2025-05-03 5:32 [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code Dmitry Baryshkov
` (3 preceding siblings ...)
2025-05-03 5:32 ` [PATCH 4/4] pinctrl: qcom: drop msm_pinctrl_remove() Dmitry Baryshkov
@ 2025-05-13 9:28 ` Linus Walleij
4 siblings, 0 replies; 16+ messages in thread
From: Linus Walleij @ 2025-05-13 9:28 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Bjorn Andersson, Guenter Roeck, Josh Cartwright,
Bartosz Golaszewski, Matti Vaittinen, Doug Anderson,
linux-arm-msm, linux-gpio, linux-kernel
Hi Dmitry,
On Sat, May 3, 2025 at 7:32 AM Dmitry Baryshkov
<dmitry.baryshkov@oss.qualcomm.com> wrote:
> Fix/rework several issues in the pinctrl-msm common code. The most
> important fix is the one for the gpio-hog handling.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> Dmitry Baryshkov (4):
> pinctrl: qcom: don't crash on enabling GPIO HOG pins
> pinctrl: qcom: switch to devm_register_sys_off_handler()
> pinctrl: qcom: switch to devm_gpiochip_add_data()
> pinctrl: qcom: drop msm_pinctrl_remove()
Nice work, since it is core stuff it'd be great if Bjorn could take a look
at the next iteration too. (I'd suggest to ping him on IRC.)
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins
2025-05-13 9:26 ` Linus Walleij
@ 2025-05-13 15:07 ` Doug Anderson
2025-05-13 22:14 ` Linus Walleij
0 siblings, 1 reply; 16+ messages in thread
From: Doug Anderson @ 2025-05-13 15:07 UTC (permalink / raw)
To: Linus Walleij
Cc: Bartosz Golaszewski, Dmitry Baryshkov, Bjorn Andersson,
Guenter Roeck, Josh Cartwright, Matti Vaittinen, linux-arm-msm,
linux-gpio, linux-kernel
Hi,
On Tue, May 13, 2025 at 2:27 AM Linus Walleij <linus.walleij@linaro.org> wrote:
>
> Hi Dmitry,
>
> thanks for your patch!
>
> On Tue, May 6, 2025 at 7:28 PM Bartosz Golaszewski
> <bartosz.golaszewski@linaro.org> wrote:
> > On Sat, 3 May 2025 at 07:32, Dmitry Baryshkov
> > <dmitry.baryshkov@oss.qualcomm.com> wrote:
>
> > > + /*
> > > + * hog pins are requested before registering GPIO chip, don't crash in
> > > + * gpiochip_line_is_valid().
> > > + */
> > > + if (!chip->gpiodev)
> > > + return 0;
> > > +
> >
> > I really dislike you dereferencing gpiodev here which is (implicitly,
> > I know...) very much a private structure for GPIOLIB. Can we move this
> > into gpiochip_line_is_valid() itself?
>
> I agree with Bartosz. Patch gpiochip_line_is_valid() so everyone
> can benefit from the extended check.
Any chance we can get a solution landed sooner rather than later?
Every time I test mainline I have to account for this bug or my device
crashes at bootup. ;-)
-Doug
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins
2025-05-13 15:07 ` Doug Anderson
@ 2025-05-13 22:14 ` Linus Walleij
0 siblings, 0 replies; 16+ messages in thread
From: Linus Walleij @ 2025-05-13 22:14 UTC (permalink / raw)
To: Doug Anderson
Cc: Bartosz Golaszewski, Dmitry Baryshkov, Bjorn Andersson,
Guenter Roeck, Josh Cartwright, Matti Vaittinen, linux-arm-msm,
linux-gpio, linux-kernel
On Tue, May 13, 2025 at 5:08 PM Doug Anderson <dianders@chromium.org> wrote:
> On Tue, May 13, 2025 at 2:27 AM Linus Walleij <linus.walleij@linaro.org> wrote:
> >
> > Hi Dmitry,
> >
> > thanks for your patch!
> >
> > On Tue, May 6, 2025 at 7:28 PM Bartosz Golaszewski
> > <bartosz.golaszewski@linaro.org> wrote:
> > > On Sat, 3 May 2025 at 07:32, Dmitry Baryshkov
> > > <dmitry.baryshkov@oss.qualcomm.com> wrote:
> >
> > > > + /*
> > > > + * hog pins are requested before registering GPIO chip, don't crash in
> > > > + * gpiochip_line_is_valid().
> > > > + */
> > > > + if (!chip->gpiodev)
> > > > + return 0;
> > > > +
> > >
> > > I really dislike you dereferencing gpiodev here which is (implicitly,
> > > I know...) very much a private structure for GPIOLIB. Can we move this
> > > into gpiochip_line_is_valid() itself?
> >
> > I agree with Bartosz. Patch gpiochip_line_is_valid() so everyone
> > can benefit from the extended check.
>
> Any chance we can get a solution landed sooner rather than later?
> Every time I test mainline I have to account for this bug or my device
> crashes at bootup. ;-)
Normally at this point in the development cycle only super-crititcal
patches go to the -rc (v6.15) but I trust you more than most so I take
it this is one of those, so we will need to funnel this to Torvalds as
soon as there is an acceptable patch.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-05-13 22:14 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-03 5:32 [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code Dmitry Baryshkov
2025-05-03 5:32 ` [PATCH 1/4] pinctrl: qcom: don't crash on enabling GPIO HOG pins Dmitry Baryshkov
2025-05-05 5:49 ` Matti Vaittinen
2025-05-05 15:23 ` Doug Anderson
2025-05-06 17:28 ` Bartosz Golaszewski
2025-05-13 9:26 ` Linus Walleij
2025-05-13 15:07 ` Doug Anderson
2025-05-13 22:14 ` Linus Walleij
2025-05-03 5:32 ` [PATCH 2/4] pinctrl: qcom: switch to devm_register_sys_off_handler() Dmitry Baryshkov
2025-05-03 5:32 ` [PATCH 3/4] pinctrl: qcom: switch to devm_gpiochip_add_data() Dmitry Baryshkov
2025-05-05 5:54 ` Matti Vaittinen
2025-05-06 17:18 ` Bartosz Golaszewski
2025-05-06 17:23 ` Bartosz Golaszewski
2025-05-07 0:30 ` Dmitry Baryshkov
2025-05-03 5:32 ` [PATCH 4/4] pinctrl: qcom: drop msm_pinctrl_remove() Dmitry Baryshkov
2025-05-13 9:28 ` [PATCH 0/4] pinctrl: qcom: several fixes for the pinctrl-msm code Linus Walleij
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).