[PATCH 00/18] net: introduce Qualcomm IPA driver

From: Alex Elder
Date: Sat May 11 2019 - 21:27:02 EST


This series presents the driver for the Qualcomm IP Accelerator (IPA).
The IPA is a component present in some Qualcomm SoCs that allows
network functions such as aggregation, filtering, routing, and NAT
to be performed without active involvement of the main application
processor (AP).

Initially, these advanced features are disabled; the IPA driver
simply provides a network interface that makes the modem's LTE
network available to the AP. In addition, only support for the
IPA found in the Qualcomm SDM845 SoC is provided.

This code is derived from a driver developed internally by Qualcomm.
A version of the original source can be seen here:
https://source.codeaurora.org/quic/la/kernel/msm-4.9/tree
in the "drivers/platform/msm/ipa" directory. Many were involved in
developing this, but the following individuals deserve explicit
acknowledgement for their substantial contributions:

Abhishek Choubey
Ady Abraham
Chaitanya Pratapa
David Arinzon
Ghanim Fodi
Gidon Studinski
Ravi Gummadidala
Shihuan Liu
Skylar Chang

A version of this code was posted in November 2018 as an RFC.
https://lore.kernel.org/lkml/20181107003250.5832-1-elder@xxxxxxxxxx/
Fixes addressing all feedback received have been implemented. It
has undergone considerable further rework since that time, and
most of the "future work" described then has now been completed.

This code (including its dependencies) is available in buildable
form here, based on kernel v5.1:
remote: ssh://git@xxxxxxxxxxxxxx/people/alex.elder/linux.git
branch: ipa-v1_kernel-v5.1
f5d4a676a981 arm64: defconfig: enable build of IPA code

-Alex

Alex Elder (18):
bitfield.h: add FIELD_MAX() and field_max()
soc: qcom: create "include/soc/qcom/rmnet.h"
dt-bindings: soc: qcom: add IPA bindings
soc: qcom: ipa: main code
soc: qcom: ipa: configuration data
soc: qcom: ipa: clocking, interrupts, and memory
soc: qcom: ipa: GSI headers
soc: qcom: ipa: the generic software interface
soc: qcom: ipa: GSI transactions
soc: qcom: ipa: IPA interface to GSI
soc: qcom: ipa: IPA endpoints
soc: qcom: ipa: immediate commands
soc: qcom: ipa: IPA network device and microcontroller
soc: qcom: ipa: AP/modem communications
soc: qcom: ipa: support build of IPA code
MAINTAINERS: add entry for the Qualcomm IPA driver
arm64: dts: sdm845: add IPA information
arm64: defconfig: enable build of IPA code

.../devicetree/bindings/net/qcom,ipa.txt | 164 ++
MAINTAINERS | 6 +
arch/arm64/boot/dts/qcom/sdm845.dtsi | 51 +
arch/arm64/configs/defconfig | 1 +
drivers/net/Kconfig | 2 +
drivers/net/Makefile | 1 +
.../ethernet/qualcomm/rmnet/rmnet_handlers.c | 1 +
.../net/ethernet/qualcomm/rmnet/rmnet_map.h | 24 -
.../qualcomm/rmnet/rmnet_map_command.c | 1 +
.../ethernet/qualcomm/rmnet/rmnet_map_data.c | 1 +
.../net/ethernet/qualcomm/rmnet/rmnet_vnd.c | 1 +
drivers/net/ipa/Kconfig | 16 +
drivers/net/ipa/Makefile | 7 +
drivers/net/ipa/gsi.c | 1741 +++++++++++++++++
drivers/net/ipa/gsi.h | 241 +++
drivers/net/ipa/gsi_private.h | 147 ++
drivers/net/ipa/gsi_reg.h | 376 ++++
drivers/net/ipa/gsi_trans.c | 604 ++++++
drivers/net/ipa/gsi_trans.h | 106 +
drivers/net/ipa/ipa.h | 131 ++
drivers/net/ipa/ipa_clock.c | 291 +++
drivers/net/ipa/ipa_clock.h | 52 +
drivers/net/ipa/ipa_cmd.c | 372 ++++
drivers/net/ipa/ipa_cmd.h | 116 ++
drivers/net/ipa/ipa_data-sdm845.c | 245 +++
drivers/net/ipa/ipa_data.h | 267 +++
drivers/net/ipa/ipa_endpoint.c | 1253 ++++++++++++
drivers/net/ipa/ipa_endpoint.h | 96 +
drivers/net/ipa/ipa_gsi.c | 48 +
drivers/net/ipa/ipa_gsi.h | 49 +
drivers/net/ipa/ipa_interrupt.c | 279 +++
drivers/net/ipa/ipa_interrupt.h | 53 +
drivers/net/ipa/ipa_main.c | 920 +++++++++
drivers/net/ipa/ipa_mem.c | 237 +++
drivers/net/ipa/ipa_mem.h | 82 +
drivers/net/ipa/ipa_netdev.c | 250 +++
drivers/net/ipa/ipa_netdev.h | 24 +
drivers/net/ipa/ipa_qmi.c | 399 ++++
drivers/net/ipa/ipa_qmi.h | 35 +
drivers/net/ipa/ipa_qmi_msg.c | 583 ++++++
drivers/net/ipa/ipa_qmi_msg.h | 238 +++
drivers/net/ipa/ipa_reg.h | 279 +++
drivers/net/ipa/ipa_smp2p.c | 304 +++
drivers/net/ipa/ipa_smp2p.h | 47 +
drivers/net/ipa/ipa_uc.c | 208 ++
drivers/net/ipa/ipa_uc.h | 32 +
include/linux/bitfield.h | 14 +
include/soc/qcom/rmnet.h | 38 +
48 files changed, 10409 insertions(+), 24 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/qcom,ipa.txt
create mode 100644 drivers/net/ipa/Kconfig
create mode 100644 drivers/net/ipa/Makefile
create mode 100644 drivers/net/ipa/gsi.c
create mode 100644 drivers/net/ipa/gsi.h
create mode 100644 drivers/net/ipa/gsi_private.h
create mode 100644 drivers/net/ipa/gsi_reg.h
create mode 100644 drivers/net/ipa/gsi_trans.c
create mode 100644 drivers/net/ipa/gsi_trans.h
create mode 100644 drivers/net/ipa/ipa.h
create mode 100644 drivers/net/ipa/ipa_clock.c
create mode 100644 drivers/net/ipa/ipa_clock.h
create mode 100644 drivers/net/ipa/ipa_cmd.c
create mode 100644 drivers/net/ipa/ipa_cmd.h
create mode 100644 drivers/net/ipa/ipa_data-sdm845.c
create mode 100644 drivers/net/ipa/ipa_data.h
create mode 100644 drivers/net/ipa/ipa_endpoint.c
create mode 100644 drivers/net/ipa/ipa_endpoint.h
create mode 100644 drivers/net/ipa/ipa_gsi.c
create mode 100644 drivers/net/ipa/ipa_gsi.h
create mode 100644 drivers/net/ipa/ipa_interrupt.c
create mode 100644 drivers/net/ipa/ipa_interrupt.h
create mode 100644 drivers/net/ipa/ipa_main.c
create mode 100644 drivers/net/ipa/ipa_mem.c
create mode 100644 drivers/net/ipa/ipa_mem.h
create mode 100644 drivers/net/ipa/ipa_netdev.c
create mode 100644 drivers/net/ipa/ipa_netdev.h
create mode 100644 drivers/net/ipa/ipa_qmi.c
create mode 100644 drivers/net/ipa/ipa_qmi.h
create mode 100644 drivers/net/ipa/ipa_qmi_msg.c
create mode 100644 drivers/net/ipa/ipa_qmi_msg.h
create mode 100644 drivers/net/ipa/ipa_reg.h
create mode 100644 drivers/net/ipa/ipa_smp2p.c
create mode 100644 drivers/net/ipa/ipa_smp2p.h
create mode 100644 drivers/net/ipa/ipa_uc.c
create mode 100644 drivers/net/ipa/ipa_uc.h
create mode 100644 include/soc/qcom/rmnet.h

--
2.20.1