| From b8a97f2a65388394f433bf0730293a94f7d49046 Mon Sep 17 00:00:00 2001 |
| From: Loic Poulain <loic.poulain@linaro.org> |
| Date: Fri, 16 Jul 2021 13:21:06 +0530 |
| Subject: bus: mhi: pci_generic: Fix inbound IPCR channel |
| |
| From: Loic Poulain <loic.poulain@linaro.org> |
| |
| commit b8a97f2a65388394f433bf0730293a94f7d49046 upstream. |
| |
| The qrtr-mhi client driver assumes that inbound buffers are |
| automatically allocated and queued by the MHI core, but this |
| doesn't happen for mhi pci devices since IPCR inbound channel is |
| not flagged with auto_queue, causing unusable IPCR (qrtr) |
| feature. Fix that. |
| |
| Link: https://lore.kernel.org/r/1625736749-24947-1-git-send-email-loic.poulain@linaro.org |
| [mani: fixed a spelling mistake in commit description] |
| Fixes: 855a70c12021 ("bus: mhi: Add MHI PCI support for WWAN modems") |
| Cc: stable@vger.kernel.org #5.10 |
| Reviewed-by: Hemant kumar <hemantk@codeaurora.org> |
| Reviewed-by: Manivannan Sadhasivam <mani@kernel.org> |
| Signed-off-by: Loic Poulain <loic.poulain@linaro.org> |
| Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> |
| Link: https://lore.kernel.org/r/20210716075106.49938-4-manivannan.sadhasivam@linaro.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/bus/mhi/pci_generic.c | 18 +++++++++++++++++- |
| 1 file changed, 17 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/bus/mhi/pci_generic.c |
| +++ b/drivers/bus/mhi/pci_generic.c |
| @@ -75,6 +75,22 @@ struct mhi_pci_dev_info { |
| .doorbell_mode_switch = false, \ |
| } |
| |
| +#define MHI_CHANNEL_CONFIG_DL_AUTOQUEUE(ch_num, ch_name, el_count, ev_ring) \ |
| + { \ |
| + .num = ch_num, \ |
| + .name = ch_name, \ |
| + .num_elements = el_count, \ |
| + .event_ring = ev_ring, \ |
| + .dir = DMA_FROM_DEVICE, \ |
| + .ee_mask = BIT(MHI_EE_AMSS), \ |
| + .pollcfg = 0, \ |
| + .doorbell = MHI_DB_BRST_DISABLE, \ |
| + .lpm_notify = false, \ |
| + .offload_channel = false, \ |
| + .doorbell_mode_switch = false, \ |
| + .auto_queue = true, \ |
| + } |
| + |
| #define MHI_EVENT_CONFIG_CTRL(ev_ring, el_count) \ |
| { \ |
| .num_elements = el_count, \ |
| @@ -213,7 +229,7 @@ static const struct mhi_channel_config m |
| MHI_CHANNEL_CONFIG_UL(14, "QMI", 4, 0), |
| MHI_CHANNEL_CONFIG_DL(15, "QMI", 4, 0), |
| MHI_CHANNEL_CONFIG_UL(20, "IPCR", 8, 0), |
| - MHI_CHANNEL_CONFIG_DL(21, "IPCR", 8, 0), |
| + MHI_CHANNEL_CONFIG_DL_AUTOQUEUE(21, "IPCR", 8, 0), |
| MHI_CHANNEL_CONFIG_UL_FP(34, "FIREHOSE", 32, 0), |
| MHI_CHANNEL_CONFIG_DL_FP(35, "FIREHOSE", 32, 0), |
| MHI_CHANNEL_CONFIG_HW_UL(100, "IP_HW0", 128, 2), |