[PATCH] i3c: master: Disable slave events before RSTDAA
From: Defa Li
Date: Fri Nov 06 2026 - 01:23:51 EST
Bus initialization sends RSTDAA before disabling slave events. A hot-join
or other slave event may occur after RSTDAA and interfere with the
following DISEC command or the remaining initialization.
Send broadcast DISEC before RSTDAA to disable SIR, master request, and
hot-join events before resetting dynamic addresses. This prevents slave
events from disrupting bus initialization.
Signed-off-by: Defa Li <defa.li@xxxxxxxxxxxx>
---
drivers/i3c/master.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index 01e05bad8661..4fdc8f721364 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -2571,10 +2571,12 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
}
/*
- * Reset all dynamic address that may have been assigned before
- * (assigned by the bootloader for example).
+ * Disable all slave events before starting DAA. When no active device
+ * is on the bus, returns Mx error code M2, this error is ignored.
*/
- ret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR);
+ ret = i3c_master_enec_disec_locked(master, I3C_BROADCAST_ADDR, false,
+ I3C_CCC_EVENT_SIR | I3C_CCC_EVENT_MR |
+ I3C_CCC_EVENT_HJ, true);
if (ret)
goto err_bus_cleanup;
@@ -2585,12 +2587,10 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
}
/*
- * Disable all slave events before starting DAA. When no active device
- * is on the bus, returns Mx error code M2, this error is ignored.
+ * Reset all dynamic address that may have been assigned before
+ * (assigned by the bootloader for example).
*/
- ret = i3c_master_enec_disec_locked(master, I3C_BROADCAST_ADDR, false,
- I3C_CCC_EVENT_SIR | I3C_CCC_EVENT_MR |
- I3C_CCC_EVENT_HJ, true);
+ ret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR);
if (ret)
goto err_bus_cleanup;
--
2.43.0