From patchwork Sun May 12 01:24:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Elder X-Patchwork-Id: 163968 Delivered-To: patch@linaro.org Received: by 2002:a05:6e02:142:0:0:0:0 with SMTP id j2csp4128600ilr; Sat, 11 May 2019 18:25:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqy8qwbzdDY2PPlmRJOOKFZhVvMCFg0McKBVVef8SdfV77DO8Hki4M5Y3s811WYjqUrrsVA1 X-Received: by 2002:a63:5511:: with SMTP id j17mr23639840pgb.449.1557624332414; Sat, 11 May 2019 18:25:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557624332; cv=none; d=google.com; s=arc-20160816; b=LAuUg1keYCuTpE5yVKcDUfVDcdSqQ/p+mAirE8+RLPRfboPK7P6pau5yAq4ZjBG/8n 7H5xOhX6zKLy9nc34vfUQTerX64FvLCrqsysRcGl3BkD2kozKyVN01BKwqkT5AS11/Qc wPkmllPUAphTWSjflM5360EkQN7+cIy3Tulob/l+FPQO+o9DVGcAmRtJrU4u+cecYplb ew8oE7qEJQzu/DGyhY+Busv9mG6QraE1c4CFRemjUm5KYrqE3fTcrEgyZZR5FZsUQgi0 /tfGxiJuZX79DAKkBOZj6baoW3r53ba/gX+93esytmCgGyDntS1oX1KbTSlLU+nw7tfk k2nA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=hIY61+72OuRAN3957lP5LhKCVDoCPp0jWpmduEMaRh4=; b=HT3yri0245z5KMkOO6ckHdVrl8YcC/3kpxJ9u5XcklyEesnouZ3168HbRm/brcydCr CbgmzhIzEd7Br0kCpNq/MSya5mUAfDde9Sp88kVatvD9LpiRYSIZ7VC83IEvkSbuSxBt YaR1fBlgTOVSNZNAnvH35A6mIx5M5PmZgw+O84QCd1YxOC2wczPSIaU4vk1eT6UrQ3mx iKxRV9aJ5c+v2bcMOxnf/r9ckPs3i5iwuIiA27NsZHD0Zkp3xsy9y6rgiHFLvig/N8+R Oo1GGTMf30nfjWMPOdDB3Zg36hSVVZkfUVmM29sVg8LsovB1nCe/QkegZLQpixOCtVQR dVHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=P9Y0sCqo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ba1si12079483plb.93.2019.05.11.18.25.31; Sat, 11 May 2019 18:25:32 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=P9Y0sCqo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726519AbfELBZ3 (ORCPT + 30 others); Sat, 11 May 2019 21:25:29 -0400 Received: from mail-it1-f194.google.com ([209.85.166.194]:50264 "EHLO mail-it1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726124AbfELBZ2 (ORCPT ); Sat, 11 May 2019 21:25:28 -0400 Received: by mail-it1-f194.google.com with SMTP id i10so11318434ite.0 for ; Sat, 11 May 2019 18:25:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hIY61+72OuRAN3957lP5LhKCVDoCPp0jWpmduEMaRh4=; b=P9Y0sCqobkC+s9Spr0dR3Sw5WvbI4yjuscRMI7xoLIxWsnmLWZVFqzZj78yDJHQQb3 BFBhe+mTZtyi16plFI46QZLZ24fd1nzCn2rk08nvuK0EXw1fnQXWmtUQEaskkvHOBPXi 5e95fV/WUvrjNrCr8w8LJWS8lBN5H2Ey/pfv1r7ExkPNlDZBThux4b8y7bXmNztBmq40 7zljySsIFelf5eUlYk94mcMNI0lkC6rUYv/e6AGfJ+dZLpRdLBuHR0o5Fw4lnqcAJk1Q I6c4hHMfppHv3IPrOxZ+ROnBurdotII7CwIXf9KkPrbceS7gzjfg1PAK2qdnoKj4Us31 dfjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hIY61+72OuRAN3957lP5LhKCVDoCPp0jWpmduEMaRh4=; b=UdVOvNF/R9ZLrgg3kVxCwdHA8HMuEmHViNQq21TD7GMLcmnCeZIXrOTp4gJxVylLYs M0NFke1w9OA4VDrNv2LfUgzCO6qAmv2Ryk0C+N1ORlaTJj5iDlHqzbsiIcaRhDevprv8 yPdbcXAFMZ8f7nEWrrIk8fYvMhv5jTyTGRTQ05or9bn+681oTvrxkCIK7Gwb4PMGSSJH LCuvcYRaVUQw1CbiV7SFI7tEYpgb3LNSCd46qJ7HZhKMTwXTL1sejB8ST0B/yn96AQBs Z/liULRd3F3EnjiPDhhf6bA48ut8LQ6/j4T5h7i9ppzsF+A92n8RdvATGMWnKaAOIO7L Xg1Q== X-Gm-Message-State: APjAAAUuvNGBaACQfcjywfLwg/dOuZbb88XW+foiQILlPEA9/0nstycY 1QFIV4D6qGtAYLrT+ghmyYyQ0g== X-Received: by 2002:a24:1a07:: with SMTP id 7mr14461192iti.16.1557624327634; Sat, 11 May 2019 18:25:27 -0700 (PDT) Received: from shibby.hil-lafwehx.chi.wayport.net (hampton-inn.wintek.com. [72.12.199.50]) by smtp.gmail.com with ESMTPSA id u134sm1579013itb.32.2019.05.11.18.25.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 11 May 2019 18:25:26 -0700 (PDT) From: Alex Elder To: davem@davemloft.net, arnd@arndb.de, bjorn.andersson@linaro.org, ilias.apalodimas@linaro.org Cc: syadagir@codeaurora.org, mjavid@codeaurora.org, evgreen@chromium.org, benchan@google.com, ejcaruso@google.com, abhishek.esse@gmail.com, linux-kernel@vger.kernel.org Subject: [PATCH 00/18] net: introduce Qualcomm IPA driver Date: Sat, 11 May 2019 20:24:50 -0500 Message-Id: <20190512012508.10608-1-elder@linaro.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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