FAILED: patch "[PATCH] i3c: mipi-i3c-hci: Consolidate common xfer processing logic" failed to apply to 5.15-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 7ac45bc68f089887ab3a70358057edb7e6b6084e
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026031723-figurine-viewable-baf7@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 7ac45bc68f089887ab3a70358057edb7e6b6084e Mon Sep 17 00:00:00 2001
From: Adrian Hunter <[email protected]>
Date: Fri, 6 Mar 2026 09:24:48 +0200
Subject: [PATCH] i3c: mipi-i3c-hci: Consolidate common xfer processing logic
Several parts of the MIPI I3C HCI driver duplicate the same sequence for queuing a transfer, waiting for completion, and handling timeouts. This logic appears in five separate locations and will be affected by an upcoming fix.
Refactor the repeated code into a new helper, i3c_hci_process_xfer(), and store the timeout value in the hci_xfer structure so that callers do not need to pass it as a separate parameter.
drivers/i3c/master/mipi-i3c-hci/cmd_v1.c +3 -5
@@ -331,12 +331,10 @@ static int hci_cmd_v1_daa(struct i3c_hci *hci)CMD_A0_ROC |CMD_A0_TOC ; xfer->cmd_desc[1 ] =0 ; xfer->completion = &done; - hci->io->queue_xfer (hci, xfer,1 ); -if (!wait_for_completion_timeout (&done,HZ ) && - hci->io->dequeue_xfer (hci, xfer,1 )) { - ret = -ETIMEDOUT ; + xfer->timeout =HZ ; + ret =i3c_hci_process_xfer (hci, xfer,1 ); +if (ret)break ; - }if ((RESP_STATUS (xfer->response) ==RESP_ERR_ADDR_HEADER ||RESP_STATUS (xfer->response) ==RESP_ERR_NACK ) &&RESP_DATA_LENGTH (xfer->response) ==1 ) {
drivers/i3c/master/mipi-i3c-hci/cmd_v2.c +3 -5
@@ -253,6 +253,7 @@ static int hci_cmd_v2_daa(struct i3c_hci *hci) xfer[0 ].rnw = true; xfer[0 ].cmd_desc[1 ] =CMD_A1_DATA_LENGTH (8 ); xfer[1 ].completion = &done; + xfer[1 ].timeout =HZ ;for (;;) { ret =i3c_master_get_free_addr (&hci->master, next_addr);
@@ -272,12 +273,9 @@ static int hci_cmd_v2_daa(struct i3c_hci *hci)CMD_A0_ASSIGN_ADDRESS (next_addr) |CMD_A0_ROC |CMD_A0_TOC ; - hci->io->queue_xfer (hci, xfer,2 ); -if (!wait_for_completion_timeout (&done,HZ ) && - hci->io->dequeue_xfer (hci, xfer,2 )) { - ret = -ETIMEDOUT ; + ret =i3c_hci_process_xfer (hci, xfer,2 ); +if (ret)break ; - }if (RESP_STATUS (xfer[0 ].response) !=RESP_SUCCESS ) { ret =0 ;/* no more devices to be assigned */ break ;
drivers/i3c/master/mipi-i3c-hci/core.c +25 -18
79 lines not on this page · raw message
drivers/i3c/master/mipi-i3c-hci/hci.h +2 -0
@@ -89,6 +89,7 @@ struct hci_xfer {unsigned int data_len;unsigned int cmd_tid;struct completion *completion; +unsigned long timeout; union { struct { /* PIO specific */
@@ -156,5 +157,6 @@ void mipi_i3c_hci_dct_index_reset(struct i3c_hci *hci);void amd_set_od_pp_timing (struct i3c_hci *hci);void amd_set_resp_buf_thld (struct i3c_hci *hci);void i3c_hci_sync_irq_inactive (struct i3c_hci *hci); +int i3c_hci_process_xfer (struct i3c_hci *hci,struct hci_xfer *xfer,int n);#endif