Skip to content

Commit

Permalink
i3c: mipi-i3c-hci: Report NACK response from CCC command to core
Browse files Browse the repository at this point in the history
Currently probe of mipi-i3c-hci will fail if bus doesn't have any I3C
devices connected. This happens when CCC commands that are sent during
i3c_master_bus_init() are not ACKed by any device and controller responds
with an error status set.

The controller can detect NACK both during I3C address header
transmission (broadcast address 0x7e is not ACKed) and when target
device address or dynamic address assignment is NACKed. Former as error
status 0x4: Address Header Error and latter as 0x5: NACK.

Difference between those two NACK statuses were not described explicitly
until MIPI I3C HCI Specification v1.1. Earlier versions share the same
error status code though.

Report both of those as I3C_ERROR_M2 to I3C core code.

Signed-off-by: Jarkko Nikula <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Alexandre Belloni <[email protected]>
  • Loading branch information
jhnikula authored and alexandrebelloni committed Nov 16, 2023
1 parent b85ea95 commit 9e0e9e8
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion drivers/i3c/master/mipi-i3c-hci/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,14 @@ static int i3c_hci_send_ccc_cmd(struct i3c_master_controller *m,
if (ccc->rnw)
ccc->dests[i - prefixed].payload.len =
RESP_DATA_LENGTH(xfer[i].response);
if (RESP_STATUS(xfer[i].response) != RESP_SUCCESS) {
switch (RESP_STATUS(xfer[i].response)) {
case RESP_SUCCESS:
continue;
case RESP_ERR_ADDR_HEADER:
case RESP_ERR_NACK:
ccc->err = I3C_ERROR_M2;
fallthrough;
default:
ret = -EIO;
goto out;
}
Expand Down

0 comments on commit 9e0e9e8

Please sign in to comment.