[v3,0/7] Add support for MHI Endpoint function driver

Message ID 20230314044623.10254-1-manivannan.sadhasivam@linaro.org
Headers
Series Add support for MHI Endpoint function driver |

Message

Manivannan Sadhasivam March 14, 2023, 4:46 a.m. UTC
  Hello,

This series adds support for Modem Host Interface (MHI) Endpoint function
driver and few updates to the PCI endpoint core.

MHI
===

MHI is the communication protocol used by the host machines to control and
communicate with the Qualcomm modems/WLAN devices over any high speed physical
bus like PCIe. In Linux kernel, MHI is modeled as a bus driver [1] and there
are two instances of MHI used in a typical setup.

1. MHI host - MHI implementation for the host machines like x86/ARM64.
2. MHI Endpoint - MHI implementation for the endpoint devices like modems.

MHI EPF
=======

The MHI Endpoint function driver (MHI EPF) is used on the MHI endpoint devices
like modems. The MHI EPF driver sits in between the PCIe EP and MHI EP bus and
carries out all of the PCIe related activities like BAR config, PCIe Event
handling, MMIO read/write etc,... for the MHI EP bus.

Below is the simple representation of the setup:


                 +----------------------------------------------------+
                 |                  Endpoint CPU                      |                   
                 |                                                    |
+------------+   |   +------------+   +-----------+   +-----------+   |
|            |   |   |            |   |           |   |           |   |
|            |   |   |   MHI EP   |   |           |   |           |   | PCIe Bus
|  Modem DSP +---+---+    Bus     +---+  MHI EPF  +---+  PCIe EP  +---+---------
|            |   |   |            |   |           |   |           |   |
|            |   |   |            |   |           |   |           |   |
+------------+   |   +------------+   +-----------+   +-----------+   |
                 |                                                    |
                 |                                                    |
                 +----------------------------------------------------+

The data packets will be read from the Modem DSP by the MHI stack and will be
transmitted to the host machine over PCIe bus with the help of MHI EPF driver.

Test setup
==========

This series has been tested on Snapdragon X55 modem a.k.a SDX55 connected to
the ARM64 host machine.

Thanks,
Mani

[1] https://www.kernel.org/doc/html/latest/mhi/mhi.html

Changes in v3:

* Fixed the probe function of EPF_VNTB driver

Changes in v2:

* Rebased on top of v6.3-rc1
* Switched to the new callback interface for passing events from EPC to EPF
* Dropped one patch related to notifier

Manivannan Sadhasivam (7):
  PCI: endpoint: Pass EPF device ID to the probe function
  PCI: endpoint: Warn and return if EPC is started/stopped multiple
    times
  PCI: endpoint: Add linkdown notifier support
  PCI: endpoint: Add BME notifier support
  PCI: qcom-ep: Add support for Link down notification
  PCI: qcom-ep: Add support for BME notification
  PCI: endpoint: Add PCI Endpoint function driver for MHI bus

 drivers/pci/controller/dwc/pcie-qcom-ep.c     |   2 +
 drivers/pci/endpoint/functions/Kconfig        |  10 +
 drivers/pci/endpoint/functions/Makefile       |   1 +
 drivers/pci/endpoint/functions/pci-epf-mhi.c  | 454 ++++++++++++++++++
 drivers/pci/endpoint/functions/pci-epf-ntb.c  |   3 +-
 drivers/pci/endpoint/functions/pci-epf-test.c |   2 +-
 drivers/pci/endpoint/functions/pci-epf-vntb.c |   2 +-
 drivers/pci/endpoint/pci-ep-cfs.c             |   3 +
 drivers/pci/endpoint/pci-epc-core.c           |  52 ++
 drivers/pci/endpoint/pci-epf-core.c           |   8 +-
 include/linux/pci-epc.h                       |   2 +
 include/linux/pci-epf.h                       |   8 +-
 12 files changed, 540 insertions(+), 7 deletions(-)
 create mode 100644 drivers/pci/endpoint/functions/pci-epf-mhi.c
  

Comments

Manivannan Sadhasivam May 15, 2023, 7 a.m. UTC | #1
On Tue, Mar 14, 2023 at 10:16:16AM +0530, Manivannan Sadhasivam wrote:
> Hello,
> 
> This series adds support for Modem Host Interface (MHI) Endpoint function
> driver and few updates to the PCI endpoint core.
> 
> MHI
> ===
> 
> MHI is the communication protocol used by the host machines to control and
> communicate with the Qualcomm modems/WLAN devices over any high speed physical
> bus like PCIe. In Linux kernel, MHI is modeled as a bus driver [1] and there
> are two instances of MHI used in a typical setup.
> 
> 1. MHI host - MHI implementation for the host machines like x86/ARM64.
> 2. MHI Endpoint - MHI implementation for the endpoint devices like modems.
> 
> MHI EPF
> =======
> 
> The MHI Endpoint function driver (MHI EPF) is used on the MHI endpoint devices
> like modems. The MHI EPF driver sits in between the PCIe EP and MHI EP bus and
> carries out all of the PCIe related activities like BAR config, PCIe Event
> handling, MMIO read/write etc,... for the MHI EP bus.
> 
> Below is the simple representation of the setup:
> 
> 
>                  +----------------------------------------------------+
>                  |                  Endpoint CPU                      |                   
>                  |                                                    |
> +------------+   |   +------------+   +-----------+   +-----------+   |
> |            |   |   |            |   |           |   |           |   |
> |            |   |   |   MHI EP   |   |           |   |           |   | PCIe Bus
> |  Modem DSP +---+---+    Bus     +---+  MHI EPF  +---+  PCIe EP  +---+---------
> |            |   |   |            |   |           |   |           |   |
> |            |   |   |            |   |           |   |           |   |
> +------------+   |   +------------+   +-----------+   +-----------+   |
>                  |                                                    |
>                  |                                                    |
>                  +----------------------------------------------------+
> 
> The data packets will be read from the Modem DSP by the MHI stack and will be
> transmitted to the host machine over PCIe bus with the help of MHI EPF driver.
> 
> Test setup
> ==========
> 
> This series has been tested on Snapdragon X55 modem a.k.a SDX55 connected to
> the ARM64 host machine.
> 

Lorenzo, gentle ping on this series.

- Mani

> Thanks,
> Mani
> 
> [1] https://www.kernel.org/doc/html/latest/mhi/mhi.html
> 
> Changes in v3:
> 
> * Fixed the probe function of EPF_VNTB driver
> 
> Changes in v2:
> 
> * Rebased on top of v6.3-rc1
> * Switched to the new callback interface for passing events from EPC to EPF
> * Dropped one patch related to notifier
> 
> Manivannan Sadhasivam (7):
>   PCI: endpoint: Pass EPF device ID to the probe function
>   PCI: endpoint: Warn and return if EPC is started/stopped multiple
>     times
>   PCI: endpoint: Add linkdown notifier support
>   PCI: endpoint: Add BME notifier support
>   PCI: qcom-ep: Add support for Link down notification
>   PCI: qcom-ep: Add support for BME notification
>   PCI: endpoint: Add PCI Endpoint function driver for MHI bus
> 
>  drivers/pci/controller/dwc/pcie-qcom-ep.c     |   2 +
>  drivers/pci/endpoint/functions/Kconfig        |  10 +
>  drivers/pci/endpoint/functions/Makefile       |   1 +
>  drivers/pci/endpoint/functions/pci-epf-mhi.c  | 454 ++++++++++++++++++
>  drivers/pci/endpoint/functions/pci-epf-ntb.c  |   3 +-
>  drivers/pci/endpoint/functions/pci-epf-test.c |   2 +-
>  drivers/pci/endpoint/functions/pci-epf-vntb.c |   2 +-
>  drivers/pci/endpoint/pci-ep-cfs.c             |   3 +
>  drivers/pci/endpoint/pci-epc-core.c           |  52 ++
>  drivers/pci/endpoint/pci-epf-core.c           |   8 +-
>  include/linux/pci-epc.h                       |   2 +
>  include/linux/pci-epf.h                       |   8 +-
>  12 files changed, 540 insertions(+), 7 deletions(-)
>  create mode 100644 drivers/pci/endpoint/functions/pci-epf-mhi.c
> 
> -- 
> 2.25.1
>