[PATCH 00/11] char: qcom_csm_dp: Add data path driver for QDU100 device
Sivareddy Surasani <[email protected]>
| Newsgroups | dev.linux.lists.mhi,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
This series introduces a character device driver for the Qualcomm Cell Site Modem (CSM) Data Path (DP) interface to support the QDU100 5G distributed unit in cellular base station deployments The driver enables high-performance communication between an x86 Layer 2 host and the Qualcomm Distributed Unit (QDU100) by transmitting and receiving FAPI packets over PCIe using the Modem Host Interface (MHI). The design targets low-latency, high-rate data movement suitable for real-time 5G workloads. Key features ------------ - Provide a character-based interface to userspace and register as an MHI client. - Implement zero-copy using shared rings and memory pools to avoid data copies between user and kernel space, reducing latency and increasing throughput. - Expose ioctls for memory pool management and packet transmission. - Support two DMA channels (control and data) with system configuration ensuring correct channel assignment. - Add SR-IOV support so QDU100 can present multiple virtual PCIe functions to the host, scaling to up to 12 devices with up to 4 virtual functions per device. Userspace API(dp-lib) ------------- The character device exposes ioctls to: - create and manage memory pools and shared rings - enqueue and dequeue packet buffers for TX/RX - configure control vs data channel usage dp-lib: https://github.com/qualcomm/dp-lib MHI ------- Add support to read MHI capabilities. Initial post of MHI capabilities is referenced here: https://lore.kernel.org/all/[email protected]/ Add data path channels and event rings for QDU100 VFs. Disable IRQ moderation for hardware channels to improve latency. IP_HW1: Control configuration procedures over the L1 FAPI P5 interface include initialization, termination, restart, reset, and error notification. These procedures transition the PHY layer through IDLE, CONFIGURED, and RUNNING states. IP_HW2: Data path configuration procedures control DL and UL frame structures and transfer subframe data between L2/L3 software and PHY. Supported procedures include subframe message transmission, SFN/SF synchronization, and various transport channel operations. Add support for queuing multiple DMA buffers. Optimize MHI clients by allowing them to queue multiple DMA buffers for a given transfer without ringing the channel doorbell for every queue. This avoids unnecessary link access. Introduce the exported API mhi_queue_n_dma to pass an array of MHI buffers and MHI flags. Add support for mhi_poll API. New hardware channel clients use mhi_poll() to manage their own completion events instead of relying on the MHI core driver for notifications. Also support both DL and UL channels in mhi_poll. Add overflow disable flag for QDU100 hardware channels. When the client transfers a large packet, the host may set overflow events if the packet size exceeds the transfer ring element size. This flag disables overflow events. Add MHI callback support for channel error notifications. This allows the client driver to take further action if there is any issue on the device side. Introduce a new API to retrieve the length of a transfer ring. This API allows clients to query the ring length. Read the MHI capability for MAX TRB length if supported by the device. Use this information to send MHI data with a higher TRB length as allowed by the device. Signed-off-by: Sivareddy Surasani <[email protected]> Signed-off-by: Vivek Pernamitta <[email protected]> --- Change depends on: https://lore.kernel.org/all/[email protected]/ --- Sivareddy Surasani (1): char: qcom_csm_dp: Add data path driver for QDU100 device Vivek Pernamitta (10): bus: mhi: host: Add support to read MHI capabilities bus: mhi: pci_generic: Add Data plane channels for QDU100 VF's bus: mhi: host: Add support for queuing multiple DMA buffers Revert "bus: mhi: host: Remove mhi_poll() API" bus: mhi: host: Add support for both DL and Ul chan for poll bus: mhi: host: pci: Add overflow disable flag for QDU100 H/W channels bus: mhi: host: core: Add overflow disable flag bus: mhi: MHI CB support for Channel error notification bus: mhi: host: Get total descriptor count drivers: bus: mhi: host: Add support for MHI MAX TRB capability Documentation/misc-devices/qcom_csm_dp.rst | 138 +++ drivers/bus/mhi/common.h | 26 +- drivers/bus/mhi/host/init.c | 56 ++ drivers/bus/mhi/host/internal.h | 9 + drivers/bus/mhi/host/main.c | 270 +++++- drivers/bus/mhi/host/pci_generic.c | 59 ++ drivers/char/Kconfig | 2 + drivers/char/Makefile | 1 + drivers/char/qcom_csm_dp/Kconfig | 9 + drivers/char/qcom_csm_dp/Makefile | 5 + drivers/char/qcom_csm_dp/qcom_csm_dp.h | 173 ++++ drivers/char/qcom_csm_dp/qcom_csm_dp_cdev.c | 941 +++++++++++++++++++++ drivers/char/qcom_csm_dp/qcom_csm_dp_core.c | 571 +++++++++++++ drivers/char/qcom_csm_dp/qcom_csm_dp_debugfs.c | 993 ++++++++++++++++++++++ drivers/char/qcom_csm_dp/qcom_csm_dp_mem.c | 1078 ++++++++++++++++++++++++ drivers/char/qcom_csm_dp/qcom_csm_dp_mem.h | 292 +++++++ drivers/char/qcom_csm_dp/qcom_csm_dp_mhi.c | 651 ++++++++++++++ drivers/char/qcom_csm_dp/qcom_csm_dp_mhi.h | 81 ++ include/linux/mhi.h | 42 + include/uapi/linux/qcom_csm_dp_ioctl.h | 306 +++++++ 20 files changed, 5674 insertions(+), 29 deletions(-) --- base-commit: e3b1905d4f5cc4eb39fa7b9fac6b6db3ab1a89e2 change-id: 20251211-siva_mhi_dp2-237c022276a2 prerequisite-change-id: 20251211-siva_eth-ef9b2305b865:v6 Best regards, -- Sivareddy Surasani <[email protected]>