From: Federico Amedeo Izzo <[email protected]>
The slimbus controller register base was calculated using the
controller ID and the register size, producing wrong results for ID > 1.
The expression reduces to ngd->base = ctrl->base for controller with ID = 1;
but for ID > 1 the other factors produce a wrong base address.
This bug caused a crash while trying to bring-up the secondary
slimbus controller (ID = 3) on oneplus-enchilada with sdm845.
In practice, the correct base address for each slimbus controller can be
obtained from the device-tree, so there is no need for further
calculations.
This was validated by reading the version register from the WCN3990 slim
interface on oneplus-enchilada.
Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver")
Signed-off-by: Federico Amedeo Izzo <[email protected]>
---
Changes in v2:
- add missing Fixes and S-o-b tags
- Link to v1:
https://patch.msgid.link/[email protected]
---
drivers/slimbus/qcom-ngd-ctrl.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctrl.c
index 80877e951849..91932f8d021b 100644
--- a/drivers/slimbus/qcom-ngd-ctrl.c
+++ b/drivers/slimbus/qcom-ngd-ctrl.c
@@ -1547,8 +1547,7 @@ static int of_qcom_slim_ngd_register(struct device
*parent,
kfree(ngd);
return ret;
}
- ngd->base = ctrl->base + ngd->id * data->offset +
- (ngd->id - 1) * data->size;
+ ngd->base = ctrl->base + data->offset;
return 0;
}
---
base-commit: b9810cd75b9fb56a3425d391cba3f608502bd474
change-id: 20260709-qcom-ngd-register-base-fix-a59713a184b8
Best regards,
--
Federico Amedeo Izzo <[email protected]>