* [PATCH v2] spi: sprd-adi: Fix probe succeeding without registering the controller
@ 2026-07-29 5:35 Babanpreet Singh
0 siblings, 0 replies; only message in thread
From: Babanpreet Singh @ 2026-07-29 5:35 UTC (permalink / raw)
To: Mark Brown
Cc: Orson Zhai, Baolin Wang, Chunyan Zhang, linux-spi, linux-kernel,
Babanpreet Singh
With CONFIG_HWSPINLOCK=n the of_hwspin_lock_get_id() stub returns 0
unconditionally. In sprd_adi_probe() the guard
if (ret > 0 || (IS_ENABLED(CONFIG_HWSPINLOCK) && ret == 0))
is false for that 0, so it takes the else branch, where the switch has no
case for 0 and lands in
default:
return dev_err_probe(&pdev->dev, ret, "failed to find hwlock id\n");
dev_err_probe() returns its err argument unchanged, so probe logs
"failed to find hwlock id" and then returns 0, reporting success.
sprd_adi_hw_init(), the restart handler and devm_spi_register_controller()
are all skipped: the device binds but no SPI controller is ever
registered.
The hardware spinlock is optional for this controller and the -ENOENT arm
already covers "no hardware spinlock supplied". Treat the stub's 0 the
same way and continue without a lock; all four users of sadi->hwlock
already test it for NULL.
This is not reachable on production kernels. Kconfig has
depends on HWSPINLOCK || (COMPILE_TEST && !HWSPINLOCK)
so the affected configuration exists only under COMPILE_TEST, where no
real hardware is present.
Found by smatch:
drivers/spi/spi-sprd-adi.c:560 sprd_adi_probe() warn: passing zero to 'dev_err_probe'
Fixes: f9adf61e983f ("spi: sprd: adi: Change hwlock to be optional")
Assisted-by: Claude:claude-opus-5
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Signed-off-by: Babanpreet Singh <bbnpreetsingh@gmail.com>
---
Changes in v2:
- Add the fallthrough; Baolin Wang asked for [1], and carry his
Reviewed-by. The v1 case carried only a comment, so gcc's
-Wimplicit-fallthrough never fired and W=1 was clean either way; this
makes the intent explicit rather than fixing a warning.
- Trim two sentences of build-verification detail out of the changelog.
v1: https://lore.kernel.org/all/20260726072221.7-1-bbnpreetsingh@gmail.com/
[1] https://lore.kernel.org/all/7792d078-f80e-42f4-9217-190ef5fb8573@linux.alibaba.com/
drivers/spi/spi-sprd-adi.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/spi/spi-sprd-adi.c b/drivers/spi/spi-sprd-adi.c
index e7d83c16b46c..a6baaf02b3c8 100644
--- a/drivers/spi/spi-sprd-adi.c
+++ b/drivers/spi/spi-sprd-adi.c
@@ -553,6 +553,12 @@ static int sprd_adi_probe(struct platform_device *pdev)
return -ENXIO;
} else {
switch (ret) {
+ case 0:
+ /*
+ * Only reachable with CONFIG_HWSPINLOCK=n, where the
+ * of_hwspin_lock_get_id() stub returns 0.
+ */
+ fallthrough;
case -ENOENT:
dev_info(&pdev->dev, "no hardware spinlock supplied\n");
break;
--
2.43.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-29 5:35 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-29 5:35 [PATCH v2] spi: sprd-adi: Fix probe succeeding without registering the controller Babanpreet Singh
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.