[00/18] net: introduce Qualcomm IPA driver

Message ID 20190512012508.10608-1-elder@linaro.org
Headers show
Series
  • net: introduce Qualcomm IPA driver
Related show

Message

Alex Elder May 12, 2019, 1:24 a.m.
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@linaro.org/
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@git.linaro.org/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

Comments

Arnd Bergmann May 15, 2019, 12:37 p.m. | #1
On Sun, May 12, 2019 at 3:25 AM Alex Elder <elder@linaro.org> wrote:
>

> A version of this code was posted in November 2018 as an RFC.

>   https://lore.kernel.org/lkml/20181107003250.5832-1-elder@linaro.org/

> 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.


I think this has turned out really well now.  I've gone through the patches
today and not found any real show-stoppers, but replied with a couple of
minor things I noticed.

I think it's probably worth rearranging the rx and tx code to avoid
the spinlocks, which would be the main optimization I can still
think of to reduce the coherency traffic.

       Arnd
Alex Elder May 15, 2019, 12:52 p.m. | #2
On 5/15/19 7:37 AM, Arnd Bergmann wrote:
> On Sun, May 12, 2019 at 3:25 AM Alex Elder <elder@linaro.org> wrote:

>>

>> A version of this code was posted in November 2018 as an RFC.

>>   https://lore.kernel.org/lkml/20181107003250.5832-1-elder@linaro.org/

>> 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.

> 

> I think this has turned out really well now.  I've gone through the patches

> today and not found any real show-stoppers, but replied with a couple of

> minor things I noticed.

> 

> I think it's probably worth rearranging the rx and tx code to avoid

> the spinlocks, which would be the main optimization I can still

> think of to reduce the coherency traffic.


Arnd I appreciate your review *so* much.  You clearly committed
a significant block of time to this and your comments were very
insightful and focused.  I concur with everything you pointed
out and will address all of your concerns when I send out v2
of the series.

Thank you for your careful review.

					-Alex

> 

>        Arnd

>