[PATCH v2 07/17] i3c: renesas: Do not attach devices if xfer failed
Claudiu Beznea <[email protected]>
| Newsgroups | org.infradead.lists.linux-i3c,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
From: Claudiu Beznea <[email protected]> The controller may return an NRSPQP_ERROR_* error code while still providing a valid cmd->rx_count. It has been observed that when the transfer fails with NRSPQP_ERROR_ADDRESS_NACK, calling i3c_master_add_i3c_dev_locked() may lead to crashes. Set newdevs to zero if the transfer failed. Fixes: e7218986319b ("i3c: renesas: Add suspend/resume support") Cc: [email protected] Signed-off-by: Claudiu Beznea <[email protected]> --- Changes in v2: - none, this patch is new drivers/i3c/master/renesas-i3c.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/i3c/master/renesas-i3c.c b/drivers/i3c/master/renesas-i3c.c index 695aae6ac263..de09f0cadb72 100644 --- a/drivers/i3c/master/renesas-i3c.c +++ b/drivers/i3c/master/renesas-i3c.c @@ -727,8 +727,13 @@ static int renesas_i3c_daa(struct i3c_master_controller *m) renesas_i3c_wait_xfer(i3c, xfer); - newdevs = GENMASK(i3c->maxdevs - cmd->rx_count - 1, 0); - newdevs &= ~olddevs; + /* Skip attaching if there are failures on the xfer. */ + if (xfer->ret) { + newdevs = 0; + } else { + newdevs = GENMASK(i3c->maxdevs - cmd->rx_count - 1, 0); + newdevs &= ~olddevs; + } for (pos = 0; pos < i3c->maxdevs; pos++) { if (newdevs & BIT(pos)) -- 2.43.0 -- linux-i3c mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-i3c