Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp1478418pxu; Fri, 16 Oct 2020 13:04:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwLtOiRcXloTref01kQ9gY8t7RLcFfx0jxXzHOySmjnpCOzNNUm2NkZrWcDW8hXv0ePaRe7 X-Received: by 2002:a50:a455:: with SMTP id v21mr5822642edb.180.1602878648866; Fri, 16 Oct 2020 13:04:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602878648; cv=none; d=google.com; s=arc-20160816; b=FAL61AkYkgYE4wnle3sct4vQVtRBYjQ2/WY/ZPJ9Qooexhzp49cVCmVZ55ozJu9Cwz PtQuXsp3BEyS6a+MZFwA1RTw8Vqm09vq578P0r+fCfNjgbAioe1/Sp6Ipm99wZGov179 YE2sabvQx3k05fGt9px4ENXGhoWVK+OFAdAhTUyt/pZ4tzAgHflyLXhA5D2rUIphbEH2 m6jiEmUxVaC9oq3Fu7wUSGgCJOohB6I8/F6bSryQixWhj9NHvT7/k1rLUEbcutOr0vEQ NavveDDXwsifyPt/EegE2g9wu7BtDAjFDOOAOB1rcPM37zdxUJ5Rh0P2dU4j+coOEbt8 A3Ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=dveply3f4mdxAL1N9vLfEQnOSlL2X/11QusSpyCeKUQ=; b=nF7UAOkbIh3mlBXnYjgfgGIed2azKdVwod5PATbDPH5JZqQ+u4/CwThYrm0O4W3pmb UYv3skYr9Sw5i88qJGIzL+SKXnnowXB527BNJwgUkx+c2uWQgLwzc8eQWuPFXItrgoDw iiRXEe8xj2ON+hqO3wnjRBMSV0zeaUsERNpgmS9zUPl6yM4bh6QixsAIdpxKV5IbAcm4 0HxfcmY1N8NN+L/M0DYcE0hHc7gumv65MDSZtnGGVOuuNN0HM8gCe+QmH1nTwCzIxA7h RBtPD9rNbzezcpNHAXCUiHDm9oASFmCQ8aoHoKAEWL+Kf9PB6qiWbVLQMtCpFJU2rrGA y+Ww== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k25si2700983ejk.10.2020.10.16.13.03.46; Fri, 16 Oct 2020 13:04:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2409923AbgJPTEq (ORCPT + 99 others); Fri, 16 Oct 2020 15:04:46 -0400 Received: from alexa-out.qualcomm.com ([129.46.98.28]:52583 "EHLO alexa-out.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2409069AbgJPTEp (ORCPT ); Fri, 16 Oct 2020 15:04:45 -0400 Received: from ironmsg-lv-alpha.qualcomm.com ([10.47.202.13]) by alexa-out.qualcomm.com with ESMTP; 16 Oct 2020 12:04:45 -0700 X-QCInternal: smtphost Received: from ironmsg01-blr.qualcomm.com ([10.86.208.130]) by ironmsg-lv-alpha.qualcomm.com with ESMTP/TLS/AES256-SHA; 16 Oct 2020 12:04:43 -0700 X-QCInternal: smtphost Received: from gokulsri-linux.qualcomm.com ([10.201.2.207]) by ironmsg01-blr.qualcomm.com with ESMTP; 17 Oct 2020 00:34:29 +0530 Received: by gokulsri-linux.qualcomm.com (Postfix, from userid 432570) id 5F91721874; Sat, 17 Oct 2020 00:34:29 +0530 (IST) From: Gokul Sriram Palanisamy To: manivannan.sadhasivam@linaro.org, hemantk@codeaurora.org Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, sricharan@codeaurora.org, gokulsri@codeaurora.org Subject: [PATCH RFC] bus: mhi: core: Enable unique QRTR node ID support Date: Sat, 17 Oct 2020 00:34:29 +0530 Message-Id: <1602875069-12514-2-git-send-email-gokulsri@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1602875069-12514-1-git-send-email-gokulsri@codeaurora.org> References: <1602875069-12514-1-git-send-email-gokulsri@codeaurora.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On multi-mhi platforms, host WiFi driver and QMI test driver needs to differntiate between QMI packets received from multiple mhi devices. With QCN9000 PCI cards, once SBL gets loaded, we utilize ERRDBG2 register to write a unique value per mhi device from device-tree that the device utilizes to set a unique QRTR node ID and instance ID for the QMI service. This helps QRTR stack in differenting the packets in a multi-mhi environment and can route them accordingly. sample: root@OpenWrt:/# qrtr-lookup Service Version Instance Node Port 69 1 40 40 2 ATH10k WLAN firmware service 15 1 0 40 1 Test service 69 1 39 39 2 ATH10k WLAN firmware service 15 1 0 39 1 Test service Here on column 4, 39 and 40 are the node IDs that is unique per mhi device. Signed-off-by: Gokul Sriram Palanisamy --- .../devicetree/bindings/mhi/qcom,mhi.yaml | 36 ++++++++++++++++++++++ drivers/bus/mhi/core/boot.c | 14 +++++++++ 2 files changed, 50 insertions(+) create mode 100644 Documentation/devicetree/bindings/mhi/qcom,mhi.yaml diff --git a/Documentation/devicetree/bindings/mhi/qcom,mhi.yaml b/Documentation/devicetree/bindings/mhi/qcom,mhi.yaml new file mode 100644 index 0000000..f763e9f --- /dev/null +++ b/Documentation/devicetree/bindings/mhi/qcom,mhi.yaml @@ -0,0 +1,36 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) + +%YAML 1.2 +--- +$id: "http://devicetree.org/schemas/pci/qcom,pcie.yaml#" +$schema: "http://devicetree.org/meta-schemas/core.yaml#" + +title: Qualcomm Modem Host Interface + +maintainers: + - Gokul Sriram Palanisamy + +properties: + qrtr-instance-id: + const: 32 + +required: + - reg + - qrtr-instance-id + +examples: + - | + pcie: pci@10000000 { + compatible = "qcom,pcie-qcs404"; + status = "ok"; + perst-gpio = <&tlmm 58 0x1>; + + pcie0_rp: pcie0_rp { + reg = <0 0 0 0 0>; + status = "ok"; + mhi_0: qcom,mhi@0 { + reg = <0 0 0 0 0 >; + qrtr_instance_id = <0x20>; + }; + }; + }; diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c index 0b38014..7406f28 100644 --- a/drivers/bus/mhi/core/boot.c +++ b/drivers/bus/mhi/core/boot.c @@ -18,6 +18,9 @@ #include #include "internal.h" +#define QRTR_INSTANCE_MASK 0x0000FFFF +#define QRTR_INSTANCE_SHIFT 0 + /* Setup RDDM vector table for RDDM transfer and program RXVEC */ void mhi_rddm_prepare(struct mhi_controller *mhi_cntrl, struct image_info *img_info) @@ -445,6 +448,17 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl) return; } + if (!ret && mhi_cntrl->cntrl_dev->of_node) { + ret = of_property_read_u32(mhi_cntrl->cntrl_dev->of_node, + "qrtr-instance-id", &instance); + if (!ret) { + instance &= QRTR_INSTANCE_MASK; + mhi_write_reg_field(mhi_cntrl, mhi_cntrl->bhi, + BHI_ERRDBG2, QRTR_INSTANCE_MASK, + QRTR_INSTANCE_SHIFT, instance); + } + } + if (mhi_cntrl->ee == MHI_EE_EDL) return; -- 2.7.4