kernel: backport support for Sierra Wireless EM919x modems
authorKoen Vandeputte <koen.vandeputte@ncentric.com>
Fri, 5 Aug 2022 14:56:11 +0000 (16:56 +0200)
committerKoen Vandeputte <koen.vandeputte@ncentric.com>
Mon, 8 Aug 2022 13:37:34 +0000 (15:37 +0200)
Adds support for Sierra Wireless EM919x modem (X55 5G)
Backported from kernel 5.16

Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
target/linux/generic/backport-5.15/780-v5.16-bus-mhi-pci_generic-Introduce-Sierra-EM919X-support.patch [new file with mode: 0644]

diff --git a/target/linux/generic/backport-5.15/780-v5.16-bus-mhi-pci_generic-Introduce-Sierra-EM919X-support.patch b/target/linux/generic/backport-5.15/780-v5.16-bus-mhi-pci_generic-Introduce-Sierra-EM919X-support.patch
new file mode 100644 (file)
index 0000000..47a1234
--- /dev/null
@@ -0,0 +1,61 @@
+Index: linux-5.15.58/drivers/bus/mhi/pci_generic.c
+===================================================================
+--- linux-5.15.58.orig/drivers/bus/mhi/pci_generic.c
++++ linux-5.15.58/drivers/bus/mhi/pci_generic.c
+@@ -406,6 +406,46 @@ static const struct mhi_pci_dev_info mhi
+       .mru_default = 32768,
+ };
++static const struct mhi_channel_config mhi_sierra_em919x_channels[] = {
++      MHI_CHANNEL_CONFIG_UL_SBL(2, "SAHARA", 32, 0),
++      MHI_CHANNEL_CONFIG_DL_SBL(3, "SAHARA", 256, 0),
++      MHI_CHANNEL_CONFIG_UL(4, "DIAG", 32, 0),
++      MHI_CHANNEL_CONFIG_DL(5, "DIAG", 32, 0),
++      MHI_CHANNEL_CONFIG_UL(12, "MBIM", 128, 0),
++      MHI_CHANNEL_CONFIG_DL(13, "MBIM", 128, 0),
++      MHI_CHANNEL_CONFIG_UL(14, "QMI", 32, 0),
++      MHI_CHANNEL_CONFIG_DL(15, "QMI", 32, 0),
++      MHI_CHANNEL_CONFIG_UL(32, "DUN", 32, 0),
++      MHI_CHANNEL_CONFIG_DL(33, "DUN", 32, 0),
++      MHI_CHANNEL_CONFIG_HW_UL(100, "IP_HW0", 512, 1),
++      MHI_CHANNEL_CONFIG_HW_DL(101, "IP_HW0", 512, 2),
++};
++
++static struct mhi_event_config modem_sierra_em919x_mhi_events[] = {
++      /* first ring is control+data and DIAG ring */
++      MHI_EVENT_CONFIG_CTRL(0, 2048),
++      /* Hardware channels request dedicated hardware event rings */
++      MHI_EVENT_CONFIG_HW_DATA(1, 2048, 100),
++      MHI_EVENT_CONFIG_HW_DATA(2, 2048, 101)
++};
++
++static const struct mhi_controller_config modem_sierra_em919x_config = {
++      .max_channels = 128,
++      .timeout_ms = 24000,
++      .num_channels = ARRAY_SIZE(mhi_sierra_em919x_channels),
++      .ch_cfg = mhi_sierra_em919x_channels,
++      .num_events = ARRAY_SIZE(modem_sierra_em919x_mhi_events),
++      .event_cfg = modem_sierra_em919x_mhi_events,
++};
++
++static const struct mhi_pci_dev_info mhi_sierra_em919x_info = {
++      .name = "sierra-em919x",
++      .config = &modem_sierra_em919x_config,
++      .bar_num = MHI_PCI_DEFAULT_BAR_NUM,
++      .dma_data_width = 32,
++      .sideband_wake = false,
++};
++
+ static const struct mhi_channel_config mhi_telit_fn980_hw_v1_channels[] = {
+       MHI_CHANNEL_CONFIG_UL(14, "QMI", 32, 0),
+       MHI_CHANNEL_CONFIG_DL(15, "QMI", 32, 0),
+@@ -480,6 +520,9 @@ static const struct mhi_pci_dev_info mhi
+ };
+ static const struct pci_device_id mhi_pci_id_table[] = {
++      /* EM919x (sdx55), use the same vid:pid as qcom-sdx55m */
++      { PCI_DEVICE_SUB(PCI_VENDOR_ID_QCOM, 0x0306, 0x18d7, 0x0200),
++              .driver_data = (kernel_ulong_t) &mhi_sierra_em919x_info },
+       /* Telit FN980 hardware revision v1 */
+       { PCI_DEVICE_SUB(PCI_VENDOR_ID_QCOM, 0x0306, 0x1C5D, 0x2000),
+               .driver_data = (kernel_ulong_t) &mhi_telit_fn980_hw_v1_info },