Message ID | 20230421124938.21974-5-quic_devipriy@quicinc.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1056756vqo; Fri, 21 Apr 2023 06:12:47 -0700 (PDT) X-Google-Smtp-Source: AKy350YuyDYP1R5fXhwUvqZNbaU3sXmbeM53KGEHUdokqUYoNeA9CmDri/Lv2NnVCphn5XVSWQPH X-Received: by 2002:a1f:e846:0:b0:432:6ec5:69a5 with SMTP id f67-20020a1fe846000000b004326ec569a5mr681003vkh.3.1682082766955; Fri, 21 Apr 2023 06:12:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682082766; cv=none; d=google.com; s=arc-20160816; b=exrQPdPv/sUBNiOM6VAz6JyZZ2KNV7waj/C/aHvk7gXJMOibMT8mFz5H8lQvYEn9XH DFVDtAxjuYqIjamxn5njTAvx+ioA95TQPwrqqPyb9qnOjygwZenYRWyfEmeG+rtw4ZXJ L5G/TeOB3/EIoH4hgGs67AGaYJZBZSKV211jCoRzHSQRSFnYLQivuYcg9kK19V/H0X4o yYFrTXyZbJfEs2K1ZrJEuZq3ATwxXuYIfQ3nT6i1BpCb5nnwRJkfcwb8ukam+K4zia0B qOxgR2Pw7h3WsO10ti5fxK1iaRcrBTXnkN9YKBcLYmihU1NlNANP64RKXS7sl/oHrHam zk9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=Ln+iszR1A+kVe5kjdA/g4sMp99/KE7ILzjYCFhoJyss=; b=Q/UR4sCQboE+Kf290hjj9d9h9rEZpILnptXemgv6mrjWiE0IPbmfCgaEJVmpZiitR9 m1/3G/Fv018EXqh/QeJ7Lv/9V20A5/IunmxkIjE3OCPEhnR+pF/UXRTVZub62vx18eXx 90+g3jx3o4Fsn6A/jftOCTTHfhcI7yDRg0ALHoEa1r7QZYR737ZAZktW9/C/pah/2sCT x6zs+iUJtUPrC1226WrEFfDPcIytOOBuj1viKZ6nHMKAJPTKcsl64PKoLdVB6l84ftDf YYqlkSvLwaQ6c5oZqY+8JYGWjs9Zv85t6M++jTuRgFo3VZHcPZHJTfWYbTVDXgag9X8P 9K+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=QYc9dV3M; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i11-20020a056122128b00b0043fecfe5609si1041113vkp.89.2023.04.21.06.12.31; Fri, 21 Apr 2023 06:12:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=QYc9dV3M; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232119AbjDUMuv (ORCPT <rfc822;cjcooper78@gmail.com> + 99 others); Fri, 21 Apr 2023 08:50:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53402 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230424AbjDUMur (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Fri, 21 Apr 2023 08:50:47 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CB980902A; Fri, 21 Apr 2023 05:50:34 -0700 (PDT) Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 33LC8u7s005573; Fri, 21 Apr 2023 12:50:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=qcppdkim1; bh=Ln+iszR1A+kVe5kjdA/g4sMp99/KE7ILzjYCFhoJyss=; b=QYc9dV3MVFFRvCQsASBtR0KgtuVGmrAgEKj6U5hqnJ7u8+xXCwEJhUeuoCLYdHcIzSnS wN0EegS9Ho20IHbIEOMZp1jvgPDrsOoYfZ3g5AGHfBKpklhdARtRHYl24moqV4rVbBkv aug/4pGbI05vvbtsNwNg2fWFi6u1KU5CAI/7aHg49/OHNWsQdHdDl0Y+EDAtIiUMxb2m d1KC6F9Lu3SaCeUbrWy32m3S+SMlzR9pQhDDNIBQDkOA8EWMzNPnUBIECgqDraZ60EmZ dna+xJGWk26xHWLBt1CDEgO9a0ssAa8XazteK8ZbTqO4Mq6UzzhFVZHqblQnIhuRQLxe Gg== Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3q3cpysnde-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 21 Apr 2023 12:50:28 +0000 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA05.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 33LCoR57022574 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 21 Apr 2023 12:50:27 GMT Received: from devipriy-linux.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Fri, 21 Apr 2023 05:50:20 -0700 From: Devi Priya <quic_devipriy@quicinc.com> To: <agross@kernel.org>, <andersson@kernel.org>, <konrad.dybcio@linaro.org>, <lpieralisi@kernel.org>, <kw@linux.com>, <robh@kernel.org>, <bhelgaas@google.com>, <krzysztof.kozlowski+dt@linaro.org>, <mturquette@baylibre.com>, <sboyd@kernel.org>, <mani@kernel.org>, <linux-arm-msm@vger.kernel.org>, <devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-pci@vger.kernel.org>, <linux-clk@vger.kernel.org> CC: <quic_srichara@quicinc.com>, <quic_sjaganat@quicinc.com>, <quic_kathirav@quicinc.com>, <quic_arajkuma@quicinc.com>, <quic_anusha@quicinc.com>, <quic_ipkumar@quicinc.com> Subject: [PATCH V3 4/6] arm64: dts: qcom: ipq9574: Add PCIe PHYs and controller nodes Date: Fri, 21 Apr 2023 18:19:36 +0530 Message-ID: <20230421124938.21974-5-quic_devipriy@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230421124938.21974-1-quic_devipriy@quicinc.com> References: <20230421124938.21974-1-quic_devipriy@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: wR6oQbwOd5425lGcAXzpaBPwdpruI17L X-Proofpoint-ORIG-GUID: wR6oQbwOd5425lGcAXzpaBPwdpruI17L X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-21_05,2023-04-21_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 mlxlogscore=999 spamscore=0 mlxscore=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 adultscore=0 phishscore=0 bulkscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304210111 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1763791619630347505?= X-GMAIL-MSGID: =?utf-8?q?1763791619630347505?= |
Series |
Add PCIe support for IPQ9574
|
|
Commit Message
Devi Priya
April 21, 2023, 12:49 p.m. UTC
Add PCIe0, PCIe1, PCIe2, PCIe3 (and corresponding PHY) devices found on IPQ9574 platform. The PCIe0 & PCIe1 are 1-lane Gen3 host whereas PCIe2 & PCIe3 are 2-lane Gen3 host. Co-developed-by: Anusha Rao <quic_anusha@quicinc.com> Signed-off-by: Anusha Rao <quic_anusha@quicinc.com> Signed-off-by: Devi Priya <quic_devipriy@quicinc.com> --- Changes in V3: - Fixed up the PCI I/O port ranges arch/arm64/boot/dts/qcom/ipq9574.dtsi | 375 +++++++++++++++++++++++++- 1 file changed, 370 insertions(+), 5 deletions(-)
Comments
On Fri, 21 Apr 2023 at 15:50, Devi Priya <quic_devipriy@quicinc.com> wrote: > > Add PCIe0, PCIe1, PCIe2, PCIe3 (and corresponding PHY) devices > found on IPQ9574 platform. The PCIe0 & PCIe1 are 1-lane Gen3 > host whereas PCIe2 & PCIe3 are 2-lane Gen3 host. > > Co-developed-by: Anusha Rao <quic_anusha@quicinc.com> > Signed-off-by: Anusha Rao <quic_anusha@quicinc.com> > Signed-off-by: Devi Priya <quic_devipriy@quicinc.com> > --- > Changes in V3: > - Fixed up the PCI I/O port ranges > > arch/arm64/boot/dts/qcom/ipq9574.dtsi | 375 +++++++++++++++++++++++++- > 1 file changed, 370 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/boot/dts/qcom/ipq9574.dtsi b/arch/arm64/boot/dts/qcom/ipq9574.dtsi > index e757b57957cf..953a839a1141 100644 > --- a/arch/arm64/boot/dts/qcom/ipq9574.dtsi > +++ b/arch/arm64/boot/dts/qcom/ipq9574.dtsi > @@ -6,8 +6,8 @@ > * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. > */ > > -#include <dt-bindings/interrupt-controller/arm-gic.h> > #include <dt-bindings/clock/qcom,ipq9574-gcc.h> > +#include <dt-bindings/interrupt-controller/arm-gic.h> > #include <dt-bindings/reset/qcom,ipq9574-gcc.h> > > / { > @@ -116,6 +116,58 @@ > #size-cells = <1>; > ranges = <0 0 0 0xffffffff>; > > + pcie0_phy: phy@84000 { > + compatible = "qcom,ipq9574-qmp-gen3x1-pcie-phy"; > + reg = <0x00084000 0x1000>; > + > + clocks = <&gcc GCC_PCIE0_AUX_CLK>, > + <&gcc GCC_PCIE0_AHB_CLK>, > + <&gcc GCC_ANOC_PCIE0_1LANE_M_CLK>, > + <&gcc GCC_SNOC_PCIE0_1LANE_S_CLK>, > + <&gcc GCC_PCIE0_PIPE_CLK>; > + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; > + > + assigned-clocks = <&gcc GCC_PCIE0_AUX_CLK>; > + assigned-clock-rates = <20000000>; > + > + resets = <&gcc GCC_PCIE0_PHY_BCR>, > + <&gcc GCC_PCIE0PHY_PHY_BCR>; > + reset-names = "phy", "common"; > + > + #clock-cells = <0>; > + clock-output-names = "gcc_pcie0_pipe_clk_src"; > + > + #phy-cells = <0>; > + status = "disabled"; > + > + }; > + > + pcie2_phy: phy@8c000 { > + compatible = "qcom,ipq9574-qmp-gen3x2-pcie-phy"; > + reg = <0x0008c000 0x2000>; > + > + clocks = <&gcc GCC_PCIE2_AUX_CLK>, > + <&gcc GCC_PCIE2_AHB_CLK>, > + <&gcc GCC_ANOC_PCIE2_2LANE_M_CLK>, > + <&gcc GCC_SNOC_PCIE2_2LANE_S_CLK>, > + <&gcc GCC_PCIE2_PIPE_CLK>; > + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; > + > + assigned-clocks = <&gcc GCC_PCIE2_AUX_CLK>; > + assigned-clock-rates = <20000000>; > + > + resets = <&gcc GCC_PCIE2_PHY_BCR>, > + <&gcc GCC_PCIE2PHY_PHY_BCR>; > + reset-names = "phy", "common"; > + > + #clock-cells = <0>; > + clock-output-names = "gcc_pcie2_pipe_clk_src"; > + > + #phy-cells = <0>; > + status = "disabled"; > + > + }; > + > rng: rng@e3000 { > compatible = "qcom,prng-ee"; > reg = <0x000e3000 0x1000>; > @@ -123,6 +175,58 @@ > clock-names = "core"; > }; > > + pcie3_phy: phy@f4000 { > + compatible = "qcom,ipq9574-qmp-gen3x2-pcie-phy"; > + reg = <0x000f4000 0x2000>; > + > + clocks = <&gcc GCC_PCIE3_AUX_CLK>, > + <&gcc GCC_PCIE3_AHB_CLK>, > + <&gcc GCC_ANOC_PCIE3_2LANE_M_CLK>, > + <&gcc GCC_SNOC_PCIE3_2LANE_S_CLK>, > + <&gcc GCC_PCIE3_PIPE_CLK>; > + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; > + > + assigned-clocks = <&gcc GCC_PCIE3_AUX_CLK>; > + assigned-clock-rates = <20000000>; > + > + resets = <&gcc GCC_PCIE3_PHY_BCR>, > + <&gcc GCC_PCIE3PHY_PHY_BCR>; > + reset-names = "phy", "common"; > + > + #clock-cells = <0>; > + clock-output-names = "gcc_pcie3_pipe_clk_src"; > + > + #phy-cells = <0>; > + status = "disabled"; > + > + }; > + > + pcie1_phy: phy@fc000 { > + compatible = "qcom,ipq9574-qmp-gen3x1-pcie-phy"; > + reg = <0x000fc000 0x1000>; > + > + clocks = <&gcc GCC_PCIE1_AUX_CLK>, > + <&gcc GCC_PCIE1_AHB_CLK>, > + <&gcc GCC_ANOC_PCIE1_1LANE_M_CLK>, > + <&gcc GCC_SNOC_PCIE1_1LANE_S_CLK>, > + <&gcc GCC_PCIE1_PIPE_CLK>; > + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; > + > + assigned-clocks = <&gcc GCC_PCIE1_AUX_CLK>; > + assigned-clock-rates = <20000000>; > + > + resets = <&gcc GCC_PCIE1_PHY_BCR>, > + <&gcc GCC_PCIE1PHY_PHY_BCR>; > + reset-names = "phy", "common"; > + > + #clock-cells = <0>; > + clock-output-names = "gcc_pcie1_pipe_clk_src"; > + > + #phy-cells = <0>; > + status = "disabled"; > + > + }; > + > tlmm: pinctrl@1000000 { > compatible = "qcom,ipq9574-tlmm"; > reg = <0x01000000 0x300000>; > @@ -146,10 +250,10 @@ > reg = <0x01800000 0x80000>; > clocks = <&xo_board_clk>, > <&sleep_clk>, > - <0>, > - <0>, > - <0>, > - <0>, > + <&pcie0_phy>, > + <&pcie1_phy>, > + <&pcie2_phy>, > + <&pcie3_phy>, > <0>; > #clock-cells = <1>; > #reset-cells = <1>; > @@ -478,6 +582,267 @@ > status = "disabled"; > }; > }; > + > + pcie1: pci@10000000 { > + compatible = "qcom,pcie-ipq9574"; > + reg = <0x10000000 0xf1d>, > + <0x10000F20 0xa8>, > + <0x10001000 0x1000>, > + <0x000F8000 0x4000>, > + <0x10100000 0x1000>; > + reg-names = "dbi", "elbi", "atu", "parf", "config"; > + device_type = "pci"; > + linux,pci-domain = <2>; > + bus-range = <0x00 0xff>; > + num-lanes = <1>; > + #address-cells = <3>; > + #size-cells = <2>; > + > + ranges = <0x01000000 0x0 0x00000000 0x10200000 0x0 0x100000>, /* I/O */ > + <0x02000000 0x0 0x10300000 0x10300000 0x0 0x7d00000>; /* MEM */ > + > + #interrupt-cells = <1>; > + interrupt-map-mask = <0 0 0 0x7>; > + interrupt-map = <0 0 0 1 &intc 0 35 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ > + <0 0 0 2 &intc 0 49 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ > + <0 0 0 3 &intc 0 84 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ > + <0 0 0 4 &intc 0 85 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ > + No iommu-map? > + interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>; > + interrupt-names = "global_irq"; > + > + /* clocks and clock-names are used to enable the clock in CBCR */ > + clocks = <&gcc GCC_PCIE1_AHB_CLK>, > + <&gcc GCC_PCIE1_AUX_CLK>, > + <&gcc GCC_PCIE1_AXI_M_CLK>, > + <&gcc GCC_PCIE1_AXI_S_CLK>, > + <&gcc GCC_PCIE1_AXI_S_BRIDGE_CLK>, > + <&gcc GCC_PCIE1_RCHNG_CLK>; > + clock-names = "ahb", > + "aux", > + "axi_m", > + "axi_s", > + "axi_bridge", > + "rchng"; > + > + resets = <&gcc GCC_PCIE1_PIPE_ARES>, > + <&gcc GCC_PCIE1_CORE_STICKY_ARES>, > + <&gcc GCC_PCIE1_AXI_S_STICKY_ARES>, > + <&gcc GCC_PCIE1_AXI_S_ARES>, > + <&gcc GCC_PCIE1_AXI_M_STICKY_ARES>, > + <&gcc GCC_PCIE1_AXI_M_ARES>, > + <&gcc GCC_PCIE1_AUX_ARES>, > + <&gcc GCC_PCIE1_AHB_ARES>; > + reset-names = "pipe", > + "sticky", > + "axi_s_sticky", > + "axi_s", > + "axi_m_sticky", > + "axi_m", > + "aux", > + "ahb"; > + > + phys = <&pcie1_phy>; > + phy-names = "pciephy"; > + msi-parent = <&v2m0>; > + status = "disabled"; > + }; > + > + pcie3: pci@18000000 { > + compatible = "qcom,pcie-ipq9574"; > + reg = <0x18000000 0xf1d>, > + <0x18000F20 0xa8>, > + <0x18001000 0x1000>, > + <0x000F0000 0x4000>, > + <0x18100000 0x1000>; > + reg-names = "dbi", "elbi", "atu", "parf", "config"; > + device_type = "pci"; > + linux,pci-domain = <4>; > + bus-range = <0x00 0xff>; > + num-lanes = <2>; > + #address-cells = <3>; > + #size-cells = <2>; > + > + ranges = <0x01000000 0x0 0x00000000 0x18200000 0x0 0x100000>, /* I/O */ > + <0x02000000 0x0 0x18300000 0x18300000 0x0 0x7d00000>; /* MEM */ > + > + #interrupt-cells = <1>; > + interrupt-map-mask = <0 0 0 0x7>; > + interrupt-map = <0 0 0 1 &intc 0 189 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ > + <0 0 0 2 &intc 0 190 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ > + <0 0 0 3 &intc 0 191 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ > + <0 0 0 4 &intc 0 192 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ > + > + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; > + interrupt-names = "global_irq"; > + > + /* clocks and clock-names are used to enable the clock in CBCR */ > + clocks = <&gcc GCC_PCIE3_AHB_CLK>, > + <&gcc GCC_PCIE3_AUX_CLK>, > + <&gcc GCC_PCIE3_AXI_M_CLK>, > + <&gcc GCC_PCIE3_AXI_S_CLK>, > + <&gcc GCC_PCIE3_AXI_S_BRIDGE_CLK>, > + <&gcc GCC_PCIE3_RCHNG_CLK>; > + clock-names = "ahb", > + "aux", > + "axi_m", > + "axi_s", > + "axi_bridge", > + "rchng"; > + > + resets = <&gcc GCC_PCIE3_PIPE_ARES>, > + <&gcc GCC_PCIE3_CORE_STICKY_ARES>, > + <&gcc GCC_PCIE3_AXI_S_STICKY_ARES>, > + <&gcc GCC_PCIE3_AXI_S_ARES>, > + <&gcc GCC_PCIE3_AXI_M_STICKY_ARES>, > + <&gcc GCC_PCIE3_AXI_M_ARES>, > + <&gcc GCC_PCIE3_AUX_ARES>, > + <&gcc GCC_PCIE3_AHB_ARES>; > + reset-names = "pipe", > + "sticky", > + "axi_s_sticky", > + "axi_s", > + "axi_m_sticky", > + "axi_m", > + "aux", > + "ahb"; > + > + phys = <&pcie3_phy>; > + phy-names = "pciephy"; > + msi-parent = <&v2m0>; > + status = "disabled"; > + }; > + > + pcie2: pci@20000000 { > + compatible = "qcom,pcie-ipq9574"; > + reg = <0x20000000 0xf1d>, > + <0x20000F20 0xa8>, > + <0x20001000 0x1000>, > + <0x00088000 0x4000>, > + <0x20100000 0x1000>; > + reg-names = "dbi", "elbi", "atu", "parf", "config"; > + device_type = "pci"; > + linux,pci-domain = <3>; > + bus-range = <0x00 0xff>; > + num-lanes = <2>; > + #address-cells = <3>; > + #size-cells = <2>; > + > + ranges = <0x01000000 0x0 0x00000000 0x20200000 0x0 0x100000>, /* I/O */ > + <0x02000000 0x0 0x20300000 0x20300000 0x0 0x7d00000>; /* MEM */ > + > + #interrupt-cells = <1>; > + interrupt-map-mask = <0 0 0 0x7>; > + interrupt-map = <0 0 0 1 &intc 0 164 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ > + <0 0 0 2 &intc 0 165 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ > + <0 0 0 3 &intc 0 186 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ > + <0 0 0 4 &intc 0 187 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ > + > + interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>; > + interrupt-names = "global_irq"; > + > + /* clocks and clock-names are used to enable the clock in CBCR */ > + clocks = <&gcc GCC_PCIE2_AHB_CLK>, > + <&gcc GCC_PCIE2_AUX_CLK>, > + <&gcc GCC_PCIE2_AXI_M_CLK>, > + <&gcc GCC_PCIE2_AXI_S_CLK>, > + <&gcc GCC_PCIE2_AXI_S_BRIDGE_CLK>, > + <&gcc GCC_PCIE2_RCHNG_CLK>; > + clock-names = "ahb", > + "aux", > + "axi_m", > + "axi_s", > + "axi_bridge", > + "rchng"; > + > + resets = <&gcc GCC_PCIE2_PIPE_ARES>, > + <&gcc GCC_PCIE2_CORE_STICKY_ARES>, > + <&gcc GCC_PCIE2_AXI_S_STICKY_ARES>, > + <&gcc GCC_PCIE2_AXI_S_ARES>, > + <&gcc GCC_PCIE2_AXI_M_STICKY_ARES>, > + <&gcc GCC_PCIE2_AXI_M_ARES>, > + <&gcc GCC_PCIE2_AUX_ARES>, > + <&gcc GCC_PCIE2_AHB_ARES>; > + reset-names = "pipe", > + "sticky", > + "axi_s_sticky", > + "axi_s", > + "axi_m_sticky", > + "axi_m", > + "aux", > + "ahb"; > + > + phys = <&pcie2_phy>; > + phy-names = "pciephy"; > + msi-parent = <&v2m0>; > + status = "disabled"; > + }; > + > + pcie0: pci@28000000 { > + compatible = "qcom,pcie-ipq9574"; > + reg = <0x28000000 0xf1d>, > + <0x28000F20 0xa8>, > + <0x28001000 0x1000>, > + <0x00080000 0x4000>, > + <0x28100000 0x1000>; > + reg-names = "dbi", "elbi", "atu", "parf", "config"; > + device_type = "pci"; > + linux,pci-domain = <1>; > + bus-range = <0x00 0xff>; > + num-lanes = <1>; > + #address-cells = <3>; > + #size-cells = <2>; > + > + ranges = <0x01000000 0x0 0x00000000 0x28200000 0x0 0x100000>, /* I/O */ > + <0x02000000 0x0 0x28300000 0x28300000 0x0 0x7d00000>; /* MEM */ > + > + #interrupt-cells = <1>; > + interrupt-map-mask = <0 0 0 0x7>; > + interrupt-map = <0 0 0 1 &intc 0 75 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ > + <0 0 0 2 &intc 0 78 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ > + <0 0 0 3 &intc 0 79 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ > + <0 0 0 4 &intc 0 83 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ > + > + interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; > + interrupt-names = "global_irq"; > + > + /* clocks and clock-names are used to enable the clock in CBCR */ > + clocks = <&gcc GCC_PCIE0_AHB_CLK>, > + <&gcc GCC_PCIE0_AUX_CLK>, > + <&gcc GCC_PCIE0_AXI_M_CLK>, > + <&gcc GCC_PCIE0_AXI_S_CLK>, > + <&gcc GCC_PCIE0_AXI_S_BRIDGE_CLK>, > + <&gcc GCC_PCIE0_RCHNG_CLK>; > + clock-names = "ahb", > + "aux", > + "axi_m", > + "axi_s", > + "axi_bridge", > + "rchng"; > + > + resets = <&gcc GCC_PCIE0_PIPE_ARES>, > + <&gcc GCC_PCIE0_CORE_STICKY_ARES>, > + <&gcc GCC_PCIE0_AXI_S_STICKY_ARES>, > + <&gcc GCC_PCIE0_AXI_S_ARES>, > + <&gcc GCC_PCIE0_AXI_M_STICKY_ARES>, > + <&gcc GCC_PCIE0_AXI_M_ARES>, > + <&gcc GCC_PCIE0_AUX_ARES>, > + <&gcc GCC_PCIE0_AHB_ARES>; > + reset-names = "pipe", > + "sticky", > + "axi_s_sticky", > + "axi_s", > + "axi_m_sticky", > + "axi_m", > + "aux", > + "ahb"; > + > + phys = <&pcie0_phy>; > + phy-names = "pciephy"; > + msi-parent = <&v2m0>; > + status = "disabled"; > + }; > + > }; > > timer { > -- > 2.17.1 >
On 4/22/2023 5:49 AM, Dmitry Baryshkov wrote: > On Fri, 21 Apr 2023 at 15:50, Devi Priya <quic_devipriy@quicinc.com> wrote: >> >> Add PCIe0, PCIe1, PCIe2, PCIe3 (and corresponding PHY) devices >> found on IPQ9574 platform. The PCIe0 & PCIe1 are 1-lane Gen3 >> host whereas PCIe2 & PCIe3 are 2-lane Gen3 host. >> >> Co-developed-by: Anusha Rao <quic_anusha@quicinc.com> >> Signed-off-by: Anusha Rao <quic_anusha@quicinc.com> >> Signed-off-by: Devi Priya <quic_devipriy@quicinc.com> >> --- >> Changes in V3: >> - Fixed up the PCI I/O port ranges >> >> arch/arm64/boot/dts/qcom/ipq9574.dtsi | 375 +++++++++++++++++++++++++- >> 1 file changed, 370 insertions(+), 5 deletions(-) >> >> diff --git a/arch/arm64/boot/dts/qcom/ipq9574.dtsi b/arch/arm64/boot/dts/qcom/ipq9574.dtsi >> index e757b57957cf..953a839a1141 100644 >> --- a/arch/arm64/boot/dts/qcom/ipq9574.dtsi >> +++ b/arch/arm64/boot/dts/qcom/ipq9574.dtsi >> @@ -6,8 +6,8 @@ >> * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. >> */ >> >> -#include <dt-bindings/interrupt-controller/arm-gic.h> >> #include <dt-bindings/clock/qcom,ipq9574-gcc.h> >> +#include <dt-bindings/interrupt-controller/arm-gic.h> >> #include <dt-bindings/reset/qcom,ipq9574-gcc.h> >> >> / { >> @@ -116,6 +116,58 @@ >> #size-cells = <1>; >> ranges = <0 0 0 0xffffffff>; >> >> + pcie0_phy: phy@84000 { >> + compatible = "qcom,ipq9574-qmp-gen3x1-pcie-phy"; >> + reg = <0x00084000 0x1000>; >> + >> + clocks = <&gcc GCC_PCIE0_AUX_CLK>, >> + <&gcc GCC_PCIE0_AHB_CLK>, >> + <&gcc GCC_ANOC_PCIE0_1LANE_M_CLK>, >> + <&gcc GCC_SNOC_PCIE0_1LANE_S_CLK>, >> + <&gcc GCC_PCIE0_PIPE_CLK>; >> + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; >> + >> + assigned-clocks = <&gcc GCC_PCIE0_AUX_CLK>; >> + assigned-clock-rates = <20000000>; >> + >> + resets = <&gcc GCC_PCIE0_PHY_BCR>, >> + <&gcc GCC_PCIE0PHY_PHY_BCR>; >> + reset-names = "phy", "common"; >> + >> + #clock-cells = <0>; >> + clock-output-names = "gcc_pcie0_pipe_clk_src"; >> + >> + #phy-cells = <0>; >> + status = "disabled"; >> + >> + }; >> + >> + pcie2_phy: phy@8c000 { >> + compatible = "qcom,ipq9574-qmp-gen3x2-pcie-phy"; >> + reg = <0x0008c000 0x2000>; >> + >> + clocks = <&gcc GCC_PCIE2_AUX_CLK>, >> + <&gcc GCC_PCIE2_AHB_CLK>, >> + <&gcc GCC_ANOC_PCIE2_2LANE_M_CLK>, >> + <&gcc GCC_SNOC_PCIE2_2LANE_S_CLK>, >> + <&gcc GCC_PCIE2_PIPE_CLK>; >> + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; >> + >> + assigned-clocks = <&gcc GCC_PCIE2_AUX_CLK>; >> + assigned-clock-rates = <20000000>; >> + >> + resets = <&gcc GCC_PCIE2_PHY_BCR>, >> + <&gcc GCC_PCIE2PHY_PHY_BCR>; >> + reset-names = "phy", "common"; >> + >> + #clock-cells = <0>; >> + clock-output-names = "gcc_pcie2_pipe_clk_src"; >> + >> + #phy-cells = <0>; >> + status = "disabled"; >> + >> + }; >> + >> rng: rng@e3000 { >> compatible = "qcom,prng-ee"; >> reg = <0x000e3000 0x1000>; >> @@ -123,6 +175,58 @@ >> clock-names = "core"; >> }; >> >> + pcie3_phy: phy@f4000 { >> + compatible = "qcom,ipq9574-qmp-gen3x2-pcie-phy"; >> + reg = <0x000f4000 0x2000>; >> + >> + clocks = <&gcc GCC_PCIE3_AUX_CLK>, >> + <&gcc GCC_PCIE3_AHB_CLK>, >> + <&gcc GCC_ANOC_PCIE3_2LANE_M_CLK>, >> + <&gcc GCC_SNOC_PCIE3_2LANE_S_CLK>, >> + <&gcc GCC_PCIE3_PIPE_CLK>; >> + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; >> + >> + assigned-clocks = <&gcc GCC_PCIE3_AUX_CLK>; >> + assigned-clock-rates = <20000000>; >> + >> + resets = <&gcc GCC_PCIE3_PHY_BCR>, >> + <&gcc GCC_PCIE3PHY_PHY_BCR>; >> + reset-names = "phy", "common"; >> + >> + #clock-cells = <0>; >> + clock-output-names = "gcc_pcie3_pipe_clk_src"; >> + >> + #phy-cells = <0>; >> + status = "disabled"; >> + >> + }; >> + >> + pcie1_phy: phy@fc000 { >> + compatible = "qcom,ipq9574-qmp-gen3x1-pcie-phy"; >> + reg = <0x000fc000 0x1000>; >> + >> + clocks = <&gcc GCC_PCIE1_AUX_CLK>, >> + <&gcc GCC_PCIE1_AHB_CLK>, >> + <&gcc GCC_ANOC_PCIE1_1LANE_M_CLK>, >> + <&gcc GCC_SNOC_PCIE1_1LANE_S_CLK>, >> + <&gcc GCC_PCIE1_PIPE_CLK>; >> + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; >> + >> + assigned-clocks = <&gcc GCC_PCIE1_AUX_CLK>; >> + assigned-clock-rates = <20000000>; >> + >> + resets = <&gcc GCC_PCIE1_PHY_BCR>, >> + <&gcc GCC_PCIE1PHY_PHY_BCR>; >> + reset-names = "phy", "common"; >> + >> + #clock-cells = <0>; >> + clock-output-names = "gcc_pcie1_pipe_clk_src"; >> + >> + #phy-cells = <0>; >> + status = "disabled"; >> + >> + }; >> + >> tlmm: pinctrl@1000000 { >> compatible = "qcom,ipq9574-tlmm"; >> reg = <0x01000000 0x300000>; >> @@ -146,10 +250,10 @@ >> reg = <0x01800000 0x80000>; >> clocks = <&xo_board_clk>, >> <&sleep_clk>, >> - <0>, >> - <0>, >> - <0>, >> - <0>, >> + <&pcie0_phy>, >> + <&pcie1_phy>, >> + <&pcie2_phy>, >> + <&pcie3_phy>, >> <0>; >> #clock-cells = <1>; >> #reset-cells = <1>; >> @@ -478,6 +582,267 @@ >> status = "disabled"; >> }; >> }; >> + >> + pcie1: pci@10000000 { >> + compatible = "qcom,pcie-ipq9574"; >> + reg = <0x10000000 0xf1d>, >> + <0x10000F20 0xa8>, >> + <0x10001000 0x1000>, >> + <0x000F8000 0x4000>, >> + <0x10100000 0x1000>; >> + reg-names = "dbi", "elbi", "atu", "parf", "config"; >> + device_type = "pci"; >> + linux,pci-domain = <2>; >> + bus-range = <0x00 0xff>; >> + num-lanes = <1>; >> + #address-cells = <3>; >> + #size-cells = <2>; >> + >> + ranges = <0x01000000 0x0 0x00000000 0x10200000 0x0 0x100000>, /* I/O */ >> + <0x02000000 0x0 0x10300000 0x10300000 0x0 0x7d00000>; /* MEM */ >> + >> + #interrupt-cells = <1>; >> + interrupt-map-mask = <0 0 0 0x7>; >> + interrupt-map = <0 0 0 1 &intc 0 35 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ >> + <0 0 0 2 &intc 0 49 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ >> + <0 0 0 3 &intc 0 84 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ >> + <0 0 0 4 &intc 0 85 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ >> + > > No iommu-map? We do not enable the IOMMU stage1 translation for PCIe and the registers have secure access only from TrustZone (It enables only stage2 for Access control) Thanks, Devi Priya > >> + interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>; >> + interrupt-names = "global_irq"; >> + >> + /* clocks and clock-names are used to enable the clock in CBCR */ >> + clocks = <&gcc GCC_PCIE1_AHB_CLK>, >> + <&gcc GCC_PCIE1_AUX_CLK>, >> + <&gcc GCC_PCIE1_AXI_M_CLK>, >> + <&gcc GCC_PCIE1_AXI_S_CLK>, >> + <&gcc GCC_PCIE1_AXI_S_BRIDGE_CLK>, >> + <&gcc GCC_PCIE1_RCHNG_CLK>; >> + clock-names = "ahb", >> + "aux", >> + "axi_m", >> + "axi_s", >> + "axi_bridge", >> + "rchng"; >> + >> + resets = <&gcc GCC_PCIE1_PIPE_ARES>, >> + <&gcc GCC_PCIE1_CORE_STICKY_ARES>, >> + <&gcc GCC_PCIE1_AXI_S_STICKY_ARES>, >> + <&gcc GCC_PCIE1_AXI_S_ARES>, >> + <&gcc GCC_PCIE1_AXI_M_STICKY_ARES>, >> + <&gcc GCC_PCIE1_AXI_M_ARES>, >> + <&gcc GCC_PCIE1_AUX_ARES>, >> + <&gcc GCC_PCIE1_AHB_ARES>; >> + reset-names = "pipe", >> + "sticky", >> + "axi_s_sticky", >> + "axi_s", >> + "axi_m_sticky", >> + "axi_m", >> + "aux", >> + "ahb"; >> + >> + phys = <&pcie1_phy>; >> + phy-names = "pciephy"; >> + msi-parent = <&v2m0>; >> + status = "disabled"; >> + }; >> + >> + pcie3: pci@18000000 { >> + compatible = "qcom,pcie-ipq9574"; >> + reg = <0x18000000 0xf1d>, >> + <0x18000F20 0xa8>, >> + <0x18001000 0x1000>, >> + <0x000F0000 0x4000>, >> + <0x18100000 0x1000>; >> + reg-names = "dbi", "elbi", "atu", "parf", "config"; >> + device_type = "pci"; >> + linux,pci-domain = <4>; >> + bus-range = <0x00 0xff>; >> + num-lanes = <2>; >> + #address-cells = <3>; >> + #size-cells = <2>; >> + >> + ranges = <0x01000000 0x0 0x00000000 0x18200000 0x0 0x100000>, /* I/O */ >> + <0x02000000 0x0 0x18300000 0x18300000 0x0 0x7d00000>; /* MEM */ >> + >> + #interrupt-cells = <1>; >> + interrupt-map-mask = <0 0 0 0x7>; >> + interrupt-map = <0 0 0 1 &intc 0 189 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ >> + <0 0 0 2 &intc 0 190 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ >> + <0 0 0 3 &intc 0 191 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ >> + <0 0 0 4 &intc 0 192 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ >> + >> + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; >> + interrupt-names = "global_irq"; >> + >> + /* clocks and clock-names are used to enable the clock in CBCR */ >> + clocks = <&gcc GCC_PCIE3_AHB_CLK>, >> + <&gcc GCC_PCIE3_AUX_CLK>, >> + <&gcc GCC_PCIE3_AXI_M_CLK>, >> + <&gcc GCC_PCIE3_AXI_S_CLK>, >> + <&gcc GCC_PCIE3_AXI_S_BRIDGE_CLK>, >> + <&gcc GCC_PCIE3_RCHNG_CLK>; >> + clock-names = "ahb", >> + "aux", >> + "axi_m", >> + "axi_s", >> + "axi_bridge", >> + "rchng"; >> + >> + resets = <&gcc GCC_PCIE3_PIPE_ARES>, >> + <&gcc GCC_PCIE3_CORE_STICKY_ARES>, >> + <&gcc GCC_PCIE3_AXI_S_STICKY_ARES>, >> + <&gcc GCC_PCIE3_AXI_S_ARES>, >> + <&gcc GCC_PCIE3_AXI_M_STICKY_ARES>, >> + <&gcc GCC_PCIE3_AXI_M_ARES>, >> + <&gcc GCC_PCIE3_AUX_ARES>, >> + <&gcc GCC_PCIE3_AHB_ARES>; >> + reset-names = "pipe", >> + "sticky", >> + "axi_s_sticky", >> + "axi_s", >> + "axi_m_sticky", >> + "axi_m", >> + "aux", >> + "ahb"; >> + >> + phys = <&pcie3_phy>; >> + phy-names = "pciephy"; >> + msi-parent = <&v2m0>; >> + status = "disabled"; >> + }; >> + >> + pcie2: pci@20000000 { >> + compatible = "qcom,pcie-ipq9574"; >> + reg = <0x20000000 0xf1d>, >> + <0x20000F20 0xa8>, >> + <0x20001000 0x1000>, >> + <0x00088000 0x4000>, >> + <0x20100000 0x1000>; >> + reg-names = "dbi", "elbi", "atu", "parf", "config"; >> + device_type = "pci"; >> + linux,pci-domain = <3>; >> + bus-range = <0x00 0xff>; >> + num-lanes = <2>; >> + #address-cells = <3>; >> + #size-cells = <2>; >> + >> + ranges = <0x01000000 0x0 0x00000000 0x20200000 0x0 0x100000>, /* I/O */ >> + <0x02000000 0x0 0x20300000 0x20300000 0x0 0x7d00000>; /* MEM */ >> + >> + #interrupt-cells = <1>; >> + interrupt-map-mask = <0 0 0 0x7>; >> + interrupt-map = <0 0 0 1 &intc 0 164 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ >> + <0 0 0 2 &intc 0 165 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ >> + <0 0 0 3 &intc 0 186 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ >> + <0 0 0 4 &intc 0 187 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ >> + >> + interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>; >> + interrupt-names = "global_irq"; >> + >> + /* clocks and clock-names are used to enable the clock in CBCR */ >> + clocks = <&gcc GCC_PCIE2_AHB_CLK>, >> + <&gcc GCC_PCIE2_AUX_CLK>, >> + <&gcc GCC_PCIE2_AXI_M_CLK>, >> + <&gcc GCC_PCIE2_AXI_S_CLK>, >> + <&gcc GCC_PCIE2_AXI_S_BRIDGE_CLK>, >> + <&gcc GCC_PCIE2_RCHNG_CLK>; >> + clock-names = "ahb", >> + "aux", >> + "axi_m", >> + "axi_s", >> + "axi_bridge", >> + "rchng"; >> + >> + resets = <&gcc GCC_PCIE2_PIPE_ARES>, >> + <&gcc GCC_PCIE2_CORE_STICKY_ARES>, >> + <&gcc GCC_PCIE2_AXI_S_STICKY_ARES>, >> + <&gcc GCC_PCIE2_AXI_S_ARES>, >> + <&gcc GCC_PCIE2_AXI_M_STICKY_ARES>, >> + <&gcc GCC_PCIE2_AXI_M_ARES>, >> + <&gcc GCC_PCIE2_AUX_ARES>, >> + <&gcc GCC_PCIE2_AHB_ARES>; >> + reset-names = "pipe", >> + "sticky", >> + "axi_s_sticky", >> + "axi_s", >> + "axi_m_sticky", >> + "axi_m", >> + "aux", >> + "ahb"; >> + >> + phys = <&pcie2_phy>; >> + phy-names = "pciephy"; >> + msi-parent = <&v2m0>; >> + status = "disabled"; >> + }; >> + >> + pcie0: pci@28000000 { >> + compatible = "qcom,pcie-ipq9574"; >> + reg = <0x28000000 0xf1d>, >> + <0x28000F20 0xa8>, >> + <0x28001000 0x1000>, >> + <0x00080000 0x4000>, >> + <0x28100000 0x1000>; >> + reg-names = "dbi", "elbi", "atu", "parf", "config"; >> + device_type = "pci"; >> + linux,pci-domain = <1>; >> + bus-range = <0x00 0xff>; >> + num-lanes = <1>; >> + #address-cells = <3>; >> + #size-cells = <2>; >> + >> + ranges = <0x01000000 0x0 0x00000000 0x28200000 0x0 0x100000>, /* I/O */ >> + <0x02000000 0x0 0x28300000 0x28300000 0x0 0x7d00000>; /* MEM */ >> + >> + #interrupt-cells = <1>; >> + interrupt-map-mask = <0 0 0 0x7>; >> + interrupt-map = <0 0 0 1 &intc 0 75 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ >> + <0 0 0 2 &intc 0 78 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ >> + <0 0 0 3 &intc 0 79 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ >> + <0 0 0 4 &intc 0 83 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ >> + >> + interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; >> + interrupt-names = "global_irq"; >> + >> + /* clocks and clock-names are used to enable the clock in CBCR */ >> + clocks = <&gcc GCC_PCIE0_AHB_CLK>, >> + <&gcc GCC_PCIE0_AUX_CLK>, >> + <&gcc GCC_PCIE0_AXI_M_CLK>, >> + <&gcc GCC_PCIE0_AXI_S_CLK>, >> + <&gcc GCC_PCIE0_AXI_S_BRIDGE_CLK>, >> + <&gcc GCC_PCIE0_RCHNG_CLK>; >> + clock-names = "ahb", >> + "aux", >> + "axi_m", >> + "axi_s", >> + "axi_bridge", >> + "rchng"; >> + >> + resets = <&gcc GCC_PCIE0_PIPE_ARES>, >> + <&gcc GCC_PCIE0_CORE_STICKY_ARES>, >> + <&gcc GCC_PCIE0_AXI_S_STICKY_ARES>, >> + <&gcc GCC_PCIE0_AXI_S_ARES>, >> + <&gcc GCC_PCIE0_AXI_M_STICKY_ARES>, >> + <&gcc GCC_PCIE0_AXI_M_ARES>, >> + <&gcc GCC_PCIE0_AUX_ARES>, >> + <&gcc GCC_PCIE0_AHB_ARES>; >> + reset-names = "pipe", >> + "sticky", >> + "axi_s_sticky", >> + "axi_s", >> + "axi_m_sticky", >> + "axi_m", >> + "aux", >> + "ahb"; >> + >> + phys = <&pcie0_phy>; >> + phy-names = "pciephy"; >> + msi-parent = <&v2m0>; >> + status = "disabled"; >> + }; >> + >> }; >> >> timer { >> -- >> 2.17.1 >> > >
On 08/05/2023 13:53, Devi Priya wrote: > > > On 4/22/2023 5:49 AM, Dmitry Baryshkov wrote: >> On Fri, 21 Apr 2023 at 15:50, Devi Priya <quic_devipriy@quicinc.com> >> wrote: >>> >>> Add PCIe0, PCIe1, PCIe2, PCIe3 (and corresponding PHY) devices >>> found on IPQ9574 platform. The PCIe0 & PCIe1 are 1-lane Gen3 >>> host whereas PCIe2 & PCIe3 are 2-lane Gen3 host. >>> >>> Co-developed-by: Anusha Rao <quic_anusha@quicinc.com> >>> Signed-off-by: Anusha Rao <quic_anusha@quicinc.com> >>> Signed-off-by: Devi Priya <quic_devipriy@quicinc.com> >>> --- >>>  Changes in V3: >>>         - Fixed up the PCI I/O port ranges >>> >>>  arch/arm64/boot/dts/qcom/ipq9574.dtsi | 375 +++++++++++++++++++++++++- >>>  1 file changed, 370 insertions(+), 5 deletions(-) >>> >>> diff --git a/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>> b/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>> index e757b57957cf..953a839a1141 100644 >>> --- a/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>> +++ b/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>> @@ -6,8 +6,8 @@ >>>   * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights >>> reserved. >>>   */ >>> >>> -#include <dt-bindings/interrupt-controller/arm-gic.h> >>>  #include <dt-bindings/clock/qcom,ipq9574-gcc.h> >>> +#include <dt-bindings/interrupt-controller/arm-gic.h> >>>  #include <dt-bindings/reset/qcom,ipq9574-gcc.h> >>> >>>  / { >>> @@ -116,6 +116,58 @@ >>>                 #size-cells = <1>; >>>                 ranges = <0 0 0 0xffffffff>; >>> >>> +              pcie0_phy: phy@84000 { >>> +                      compatible = "qcom,ipq9574-qmp-gen3x1-pcie-phy"; >>> +                      reg = <0x00084000 0x1000>; >>> + >>> +                      clocks = <&gcc GCC_PCIE0_AUX_CLK>, >>> +                               <&gcc GCC_PCIE0_AHB_CLK>, >>> +                               <&gcc GCC_ANOC_PCIE0_1LANE_M_CLK>, >>> +                               <&gcc GCC_SNOC_PCIE0_1LANE_S_CLK>, >>> +                               <&gcc GCC_PCIE0_PIPE_CLK>; >>> +                      clock-names = "aux", "cfg_ahb", "anoc_lane", >>> "snoc_lane", "pipe"; >>> + >>> +                      assigned-clocks = <&gcc GCC_PCIE0_AUX_CLK>; >>> +                      assigned-clock-rates = <20000000>; >>> + >>> +                      resets = <&gcc GCC_PCIE0_PHY_BCR>, >>> +                               <&gcc GCC_PCIE0PHY_PHY_BCR>; >>> +                      reset-names = "phy", "common"; >>> + >>> +                      #clock-cells = <0>; >>> +                      clock-output-names = "gcc_pcie0_pipe_clk_src"; >>> + >>> +                      #phy-cells = <0>; >>> +                      status = "disabled"; >>> + >>> +              }; >>> + >>> +              pcie2_phy: phy@8c000 { >>> +                      compatible = "qcom,ipq9574-qmp-gen3x2-pcie-phy"; >>> +                      reg = <0x0008c000 0x2000>; >>> + >>> +                      clocks = <&gcc GCC_PCIE2_AUX_CLK>, >>> +                               <&gcc GCC_PCIE2_AHB_CLK>, >>> +                               <&gcc GCC_ANOC_PCIE2_2LANE_M_CLK>, >>> +                               <&gcc GCC_SNOC_PCIE2_2LANE_S_CLK>, >>> +                               <&gcc GCC_PCIE2_PIPE_CLK>; >>> +                      clock-names = "aux", "cfg_ahb", "anoc_lane", >>> "snoc_lane", "pipe"; >>> + >>> +                      assigned-clocks = <&gcc GCC_PCIE2_AUX_CLK>; >>> +                      assigned-clock-rates = <20000000>; >>> + >>> +                      resets = <&gcc GCC_PCIE2_PHY_BCR>, >>> +                               <&gcc GCC_PCIE2PHY_PHY_BCR>; >>> +                      reset-names = "phy", "common"; >>> + >>> +                      #clock-cells = <0>; >>> +                      clock-output-names = "gcc_pcie2_pipe_clk_src"; >>> + >>> +                      #phy-cells = <0>; >>> +                      status = "disabled"; >>> + >>> +              }; >>> + >>>                 rng: rng@e3000 { >>>                         compatible = "qcom,prng-ee"; >>>                         reg = <0x000e3000 0x1000>; >>> @@ -123,6 +175,58 @@ >>>                         clock-names = "core"; >>>                 }; >>> >>> +              pcie3_phy: phy@f4000 { >>> +                      compatible = "qcom,ipq9574-qmp-gen3x2-pcie-phy"; >>> +                      reg = <0x000f4000 0x2000>; >>> + >>> +                      clocks = <&gcc GCC_PCIE3_AUX_CLK>, >>> +                               <&gcc GCC_PCIE3_AHB_CLK>, >>> +                               <&gcc GCC_ANOC_PCIE3_2LANE_M_CLK>, >>> +                               <&gcc GCC_SNOC_PCIE3_2LANE_S_CLK>, >>> +                               <&gcc GCC_PCIE3_PIPE_CLK>; >>> +                      clock-names = "aux", "cfg_ahb", "anoc_lane", >>> "snoc_lane", "pipe"; >>> + >>> +                      assigned-clocks = <&gcc GCC_PCIE3_AUX_CLK>; >>> +                      assigned-clock-rates = <20000000>; >>> + >>> +                      resets = <&gcc GCC_PCIE3_PHY_BCR>, >>> +                               <&gcc GCC_PCIE3PHY_PHY_BCR>; >>> +                      reset-names = "phy", "common"; >>> + >>> +                      #clock-cells = <0>; >>> +                      clock-output-names = "gcc_pcie3_pipe_clk_src"; >>> + >>> +                      #phy-cells = <0>; >>> +                      status = "disabled"; >>> + >>> +              }; >>> + >>> +              pcie1_phy: phy@fc000 { >>> +                      compatible = "qcom,ipq9574-qmp-gen3x1-pcie-phy"; >>> +                      reg = <0x000fc000 0x1000>; >>> + >>> +                      clocks = <&gcc GCC_PCIE1_AUX_CLK>, >>> +                               <&gcc GCC_PCIE1_AHB_CLK>, >>> +                               <&gcc GCC_ANOC_PCIE1_1LANE_M_CLK>, >>> +                               <&gcc GCC_SNOC_PCIE1_1LANE_S_CLK>, >>> +                               <&gcc GCC_PCIE1_PIPE_CLK>; >>> +                      clock-names = "aux", "cfg_ahb", "anoc_lane", >>> "snoc_lane", "pipe"; >>> + >>> +                      assigned-clocks = <&gcc GCC_PCIE1_AUX_CLK>; >>> +                      assigned-clock-rates = <20000000>; >>> + >>> +                      resets = <&gcc GCC_PCIE1_PHY_BCR>, >>> +                               <&gcc GCC_PCIE1PHY_PHY_BCR>; >>> +                      reset-names = "phy", "common"; >>> + >>> +                      #clock-cells = <0>; >>> +                      clock-output-names = "gcc_pcie1_pipe_clk_src"; >>> + >>> +                      #phy-cells = <0>; >>> +                      status = "disabled"; >>> + >>> +              }; >>> + >>>                 tlmm: pinctrl@1000000 { >>>                         compatible = "qcom,ipq9574-tlmm"; >>>                         reg = <0x01000000 0x300000>; >>> @@ -146,10 +250,10 @@ >>>                         reg = <0x01800000 0x80000>; >>>                         clocks = <&xo_board_clk>, >>>                                  <&sleep_clk>, >>> -                               <0>, >>> -                               <0>, >>> -                               <0>, >>> -                               <0>, >>> +                               <&pcie0_phy>, >>> +                               <&pcie1_phy>, >>> +                               <&pcie2_phy>, >>> +                               <&pcie3_phy>, >>>                                  <0>; >>>                         #clock-cells = <1>; >>>                         #reset-cells = <1>; >>> @@ -478,6 +582,267 @@ >>>                                 status = "disabled"; >>>                         }; >>>                 }; >>> + >>> +              pcie1: pci@10000000 { >>> +                      compatible = "qcom,pcie-ipq9574"; >>> +                      reg = <0x10000000 0xf1d>, >>> +                             <0x10000F20 0xa8>, >>> +                             <0x10001000 0x1000>, >>> +                             <0x000F8000 0x4000>, >>> +                             <0x10100000 0x1000>; >>> +                      reg-names = "dbi", "elbi", "atu", "parf", >>> "config"; >>> +                      device_type = "pci"; >>> +                      linux,pci-domain = <2>; >>> +                      bus-range = <0x00 0xff>; >>> +                      num-lanes = <1>; >>> +                      #address-cells = <3>; >>> +                      #size-cells = <2>; >>> + >>> +                      ranges = <0x01000000 0x0 0x00000000 >>> 0x10200000 0x0 0x100000>, /* I/O */ >>> +                               <0x02000000 0x0 0x10300000 >>> 0x10300000 0x0 0x7d00000>; /* MEM */ >>> + >>> +                      #interrupt-cells = <1>; >>> +                      interrupt-map-mask = <0 0 0 0x7>; >>> +                      interrupt-map = <0 0 0 1 &intc 0 35 >>> IRQ_TYPE_LEVEL_HIGH>, /* int_a */ >>> +                                      <0 0 0 2 &intc 0 49 >>> IRQ_TYPE_LEVEL_HIGH>, /* int_b */ >>> +                                      <0 0 0 3 &intc 0 84 >>> IRQ_TYPE_LEVEL_HIGH>, /* int_c */ >>> +                                      <0 0 0 4 &intc 0 85 >>> IRQ_TYPE_LEVEL_HIGH>; /* int_d */ >>> + >> >> No iommu-map? > We do not enable the IOMMU stage1 translation for PCIe and the registers > have secure access only from TrustZone (It enables only stage2 for > Access control) So, no SMMU protection for PCIe transactions? This sounds like a step backwards.
On 5/8/2023 5:10 PM, Dmitry Baryshkov wrote: > On 08/05/2023 13:53, Devi Priya wrote: >> >> >> On 4/22/2023 5:49 AM, Dmitry Baryshkov wrote: >>> On Fri, 21 Apr 2023 at 15:50, Devi Priya <quic_devipriy@quicinc.com> >>> wrote: >>>> >>>> Add PCIe0, PCIe1, PCIe2, PCIe3 (and corresponding PHY) devices >>>> found on IPQ9574 platform. The PCIe0 & PCIe1 are 1-lane Gen3 >>>> host whereas PCIe2 & PCIe3 are 2-lane Gen3 host. >>>> >>>> Co-developed-by: Anusha Rao <quic_anusha@quicinc.com> >>>> Signed-off-by: Anusha Rao <quic_anusha@quicinc.com> >>>> Signed-off-by: Devi Priya <quic_devipriy@quicinc.com> >>>> --- >>>>  Changes in V3: >>>>         - Fixed up the PCI I/O port ranges >>>> >>>>  arch/arm64/boot/dts/qcom/ipq9574.dtsi | 375 >>>> +++++++++++++++++++++++++- >>>>  1 file changed, 370 insertions(+), 5 deletions(-) >>>> >>>> diff --git a/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>>> b/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>>> index e757b57957cf..953a839a1141 100644 >>>> --- a/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>>> +++ b/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>>> @@ -6,8 +6,8 @@ >>>>   * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights >>>> reserved. >>>>   */ >>>> >>>> -#include <dt-bindings/interrupt-controller/arm-gic.h> >>>>  #include <dt-bindings/clock/qcom,ipq9574-gcc.h> >>>> +#include <dt-bindings/interrupt-controller/arm-gic.h> >>>>  #include <dt-bindings/reset/qcom,ipq9574-gcc.h> >>>> >>>>  / { >>>> @@ -116,6 +116,58 @@ >>>>                 #size-cells = <1>; >>>>                 ranges = <0 0 0 0xffffffff>; >>>> >>>> +              pcie0_phy: phy@84000 { >>>> +                      compatible = >>>> "qcom,ipq9574-qmp-gen3x1-pcie-phy"; >>>> +                      reg = <0x00084000 0x1000>; >>>> + >>>> +                      clocks = <&gcc GCC_PCIE0_AUX_CLK>, >>>> +                               <&gcc GCC_PCIE0_AHB_CLK>, >>>> +                               <&gcc GCC_ANOC_PCIE0_1LANE_M_CLK>, >>>> +                               <&gcc GCC_SNOC_PCIE0_1LANE_S_CLK>, >>>> +                               <&gcc GCC_PCIE0_PIPE_CLK>; >>>> +                      clock-names = "aux", "cfg_ahb", "anoc_lane", >>>> "snoc_lane", "pipe"; >>>> + >>>> +                      assigned-clocks = <&gcc GCC_PCIE0_AUX_CLK>; >>>> +                      assigned-clock-rates = <20000000>; >>>> + >>>> +                      resets = <&gcc GCC_PCIE0_PHY_BCR>, >>>> +                               <&gcc GCC_PCIE0PHY_PHY_BCR>; >>>> +                      reset-names = "phy", "common"; >>>> + >>>> +                      #clock-cells = <0>; >>>> +                      clock-output-names = "gcc_pcie0_pipe_clk_src"; >>>> + >>>> +                      #phy-cells = <0>; >>>> +                      status = "disabled"; >>>> + >>>> +              }; >>>> + >>>> +              pcie2_phy: phy@8c000 { >>>> +                      compatible = >>>> "qcom,ipq9574-qmp-gen3x2-pcie-phy"; >>>> +                      reg = <0x0008c000 0x2000>; >>>> + >>>> +                      clocks = <&gcc GCC_PCIE2_AUX_CLK>, >>>> +                               <&gcc GCC_PCIE2_AHB_CLK>, >>>> +                               <&gcc GCC_ANOC_PCIE2_2LANE_M_CLK>, >>>> +                               <&gcc GCC_SNOC_PCIE2_2LANE_S_CLK>, >>>> +                               <&gcc GCC_PCIE2_PIPE_CLK>; >>>> +                      clock-names = "aux", "cfg_ahb", "anoc_lane", >>>> "snoc_lane", "pipe"; >>>> + >>>> +                      assigned-clocks = <&gcc GCC_PCIE2_AUX_CLK>; >>>> +                      assigned-clock-rates = <20000000>; >>>> + >>>> +                      resets = <&gcc GCC_PCIE2_PHY_BCR>, >>>> +                               <&gcc GCC_PCIE2PHY_PHY_BCR>; >>>> +                      reset-names = "phy", "common"; >>>> + >>>> +                      #clock-cells = <0>; >>>> +                      clock-output-names = "gcc_pcie2_pipe_clk_src"; >>>> + >>>> +                      #phy-cells = <0>; >>>> +                      status = "disabled"; >>>> + >>>> +              }; >>>> + >>>>                 rng: rng@e3000 { >>>>                         compatible = "qcom,prng-ee"; >>>>                         reg = <0x000e3000 0x1000>; >>>> @@ -123,6 +175,58 @@ >>>>                         clock-names = "core"; >>>>                 }; >>>> >>>> +              pcie3_phy: phy@f4000 { >>>> +                      compatible = >>>> "qcom,ipq9574-qmp-gen3x2-pcie-phy"; >>>> +                      reg = <0x000f4000 0x2000>; >>>> + >>>> +                      clocks = <&gcc GCC_PCIE3_AUX_CLK>, >>>> +                               <&gcc GCC_PCIE3_AHB_CLK>, >>>> +                               <&gcc GCC_ANOC_PCIE3_2LANE_M_CLK>, >>>> +                               <&gcc GCC_SNOC_PCIE3_2LANE_S_CLK>, >>>> +                               <&gcc GCC_PCIE3_PIPE_CLK>; >>>> +                      clock-names = "aux", "cfg_ahb", "anoc_lane", >>>> "snoc_lane", "pipe"; >>>> + >>>> +                      assigned-clocks = <&gcc GCC_PCIE3_AUX_CLK>; >>>> +                      assigned-clock-rates = <20000000>; >>>> + >>>> +                      resets = <&gcc GCC_PCIE3_PHY_BCR>, >>>> +                               <&gcc GCC_PCIE3PHY_PHY_BCR>; >>>> +                      reset-names = "phy", "common"; >>>> + >>>> +                      #clock-cells = <0>; >>>> +                      clock-output-names = "gcc_pcie3_pipe_clk_src"; >>>> + >>>> +                      #phy-cells = <0>; >>>> +                      status = "disabled"; >>>> + >>>> +              }; >>>> + >>>> +              pcie1_phy: phy@fc000 { >>>> +                      compatible = >>>> "qcom,ipq9574-qmp-gen3x1-pcie-phy"; >>>> +                      reg = <0x000fc000 0x1000>; >>>> + >>>> +                      clocks = <&gcc GCC_PCIE1_AUX_CLK>, >>>> +                               <&gcc GCC_PCIE1_AHB_CLK>, >>>> +                               <&gcc GCC_ANOC_PCIE1_1LANE_M_CLK>, >>>> +                               <&gcc GCC_SNOC_PCIE1_1LANE_S_CLK>, >>>> +                               <&gcc GCC_PCIE1_PIPE_CLK>; >>>> +                      clock-names = "aux", "cfg_ahb", "anoc_lane", >>>> "snoc_lane", "pipe"; >>>> + >>>> +                      assigned-clocks = <&gcc GCC_PCIE1_AUX_CLK>; >>>> +                      assigned-clock-rates = <20000000>; >>>> + >>>> +                      resets = <&gcc GCC_PCIE1_PHY_BCR>, >>>> +                               <&gcc GCC_PCIE1PHY_PHY_BCR>; >>>> +                      reset-names = "phy", "common"; >>>> + >>>> +                      #clock-cells = <0>; >>>> +                      clock-output-names = "gcc_pcie1_pipe_clk_src"; >>>> + >>>> +                      #phy-cells = <0>; >>>> +                      status = "disabled"; >>>> + >>>> +              }; >>>> + >>>>                 tlmm: pinctrl@1000000 { >>>>                         compatible = "qcom,ipq9574-tlmm"; >>>>                         reg = <0x01000000 0x300000>; >>>> @@ -146,10 +250,10 @@ >>>>                         reg = <0x01800000 0x80000>; >>>>                         clocks = <&xo_board_clk>, >>>>                                  <&sleep_clk>, >>>> -                               <0>, >>>> -                               <0>, >>>> -                               <0>, >>>> -                               <0>, >>>> +                               <&pcie0_phy>, >>>> +                               <&pcie1_phy>, >>>> +                               <&pcie2_phy>, >>>> +                               <&pcie3_phy>, >>>>                                  <0>; >>>>                         #clock-cells = <1>; >>>>                         #reset-cells = <1>; >>>> @@ -478,6 +582,267 @@ >>>>                                 status = "disabled"; >>>>                         }; >>>>                 }; >>>> + >>>> +              pcie1: pci@10000000 { >>>> +                      compatible = "qcom,pcie-ipq9574"; >>>> +                      reg = <0x10000000 0xf1d>, >>>> +                             <0x10000F20 0xa8>, >>>> +                             <0x10001000 0x1000>, >>>> +                             <0x000F8000 0x4000>, >>>> +                             <0x10100000 0x1000>; >>>> +                      reg-names = "dbi", "elbi", "atu", "parf", >>>> "config"; >>>> +                      device_type = "pci"; >>>> +                      linux,pci-domain = <2>; >>>> +                      bus-range = <0x00 0xff>; >>>> +                      num-lanes = <1>; >>>> +                      #address-cells = <3>; >>>> +                      #size-cells = <2>; >>>> + >>>> +                      ranges = <0x01000000 0x0 0x00000000 >>>> 0x10200000 0x0 0x100000>, /* I/O */ >>>> +                               <0x02000000 0x0 0x10300000 >>>> 0x10300000 0x0 0x7d00000>; /* MEM */ >>>> + >>>> +                      #interrupt-cells = <1>; >>>> +                      interrupt-map-mask = <0 0 0 0x7>; >>>> +                      interrupt-map = <0 0 0 1 &intc 0 35 >>>> IRQ_TYPE_LEVEL_HIGH>, /* int_a */ >>>> +                                      <0 0 0 2 &intc 0 49 >>>> IRQ_TYPE_LEVEL_HIGH>, /* int_b */ >>>> +                                      <0 0 0 3 &intc 0 84 >>>> IRQ_TYPE_LEVEL_HIGH>, /* int_c */ >>>> +                                      <0 0 0 4 &intc 0 85 >>>> IRQ_TYPE_LEVEL_HIGH>; /* int_d */ >>>> + >>> >>> No iommu-map? >> We do not enable the IOMMU stage1 translation for PCIe and the registers >> have secure access only from TrustZone (It enables only stage2 for >> Access control) > > So, no SMMU protection for PCIe transactions? This sounds like a step > backwards. Yes, we are not using stage1 translations. Thanks, Devi Priya >
On Mon, 15 May 2023 at 12:36, Devi Priya <quic_devipriy@quicinc.com> wrote: > > > > On 5/8/2023 5:10 PM, Dmitry Baryshkov wrote: > > On 08/05/2023 13:53, Devi Priya wrote: > >> > >> > >> On 4/22/2023 5:49 AM, Dmitry Baryshkov wrote: > >>> On Fri, 21 Apr 2023 at 15:50, Devi Priya <quic_devipriy@quicinc.com> > >>> wrote: > >>>> > >>>> Add PCIe0, PCIe1, PCIe2, PCIe3 (and corresponding PHY) devices > >>>> found on IPQ9574 platform. The PCIe0 & PCIe1 are 1-lane Gen3 > >>>> host whereas PCIe2 & PCIe3 are 2-lane Gen3 host. > >>>> > >>>> Co-developed-by: Anusha Rao <quic_anusha@quicinc.com> > >>>> Signed-off-by: Anusha Rao <quic_anusha@quicinc.com> > >>>> Signed-off-by: Devi Priya <quic_devipriy@quicinc.com> > >>>> --- > >>>> Changes in V3: > >>>> - Fixed up the PCI I/O port ranges > >>>> > >>>> arch/arm64/boot/dts/qcom/ipq9574.dtsi | 375 > >>>> +++++++++++++++++++++++++- > >>>> 1 file changed, 370 insertions(+), 5 deletions(-) > >>>> > >>>> diff --git a/arch/arm64/boot/dts/qcom/ipq9574.dtsi > >>>> b/arch/arm64/boot/dts/qcom/ipq9574.dtsi > >>>> index e757b57957cf..953a839a1141 100644 > >>>> --- a/arch/arm64/boot/dts/qcom/ipq9574.dtsi > >>>> +++ b/arch/arm64/boot/dts/qcom/ipq9574.dtsi > >>>> @@ -6,8 +6,8 @@ > >>>> * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights > >>>> reserved. > >>>> */ > >>>> > >>>> -#include <dt-bindings/interrupt-controller/arm-gic.h> > >>>> #include <dt-bindings/clock/qcom,ipq9574-gcc.h> > >>>> +#include <dt-bindings/interrupt-controller/arm-gic.h> > >>>> #include <dt-bindings/reset/qcom,ipq9574-gcc.h> > >>>> > >>>> / { > >>>> @@ -116,6 +116,58 @@ > >>>> #size-cells = <1>; > >>>> ranges = <0 0 0 0xffffffff>; > >>>> > >>>> + pcie0_phy: phy@84000 { > >>>> + compatible = > >>>> "qcom,ipq9574-qmp-gen3x1-pcie-phy"; > >>>> + reg = <0x00084000 0x1000>; > >>>> + > >>>> + clocks = <&gcc GCC_PCIE0_AUX_CLK>, > >>>> + <&gcc GCC_PCIE0_AHB_CLK>, > >>>> + <&gcc GCC_ANOC_PCIE0_1LANE_M_CLK>, > >>>> + <&gcc GCC_SNOC_PCIE0_1LANE_S_CLK>, > >>>> + <&gcc GCC_PCIE0_PIPE_CLK>; > >>>> + clock-names = "aux", "cfg_ahb", "anoc_lane", > >>>> "snoc_lane", "pipe"; > >>>> + > >>>> + assigned-clocks = <&gcc GCC_PCIE0_AUX_CLK>; > >>>> + assigned-clock-rates = <20000000>; > >>>> + > >>>> + resets = <&gcc GCC_PCIE0_PHY_BCR>, > >>>> + <&gcc GCC_PCIE0PHY_PHY_BCR>; > >>>> + reset-names = "phy", "common"; > >>>> + > >>>> + #clock-cells = <0>; > >>>> + clock-output-names = "gcc_pcie0_pipe_clk_src"; > >>>> + > >>>> + #phy-cells = <0>; > >>>> + status = "disabled"; > >>>> + > >>>> + }; > >>>> + > >>>> + pcie2_phy: phy@8c000 { > >>>> + compatible = > >>>> "qcom,ipq9574-qmp-gen3x2-pcie-phy"; > >>>> + reg = <0x0008c000 0x2000>; > >>>> + > >>>> + clocks = <&gcc GCC_PCIE2_AUX_CLK>, > >>>> + <&gcc GCC_PCIE2_AHB_CLK>, > >>>> + <&gcc GCC_ANOC_PCIE2_2LANE_M_CLK>, > >>>> + <&gcc GCC_SNOC_PCIE2_2LANE_S_CLK>, > >>>> + <&gcc GCC_PCIE2_PIPE_CLK>; > >>>> + clock-names = "aux", "cfg_ahb", "anoc_lane", > >>>> "snoc_lane", "pipe"; > >>>> + > >>>> + assigned-clocks = <&gcc GCC_PCIE2_AUX_CLK>; > >>>> + assigned-clock-rates = <20000000>; > >>>> + > >>>> + resets = <&gcc GCC_PCIE2_PHY_BCR>, > >>>> + <&gcc GCC_PCIE2PHY_PHY_BCR>; > >>>> + reset-names = "phy", "common"; > >>>> + > >>>> + #clock-cells = <0>; > >>>> + clock-output-names = "gcc_pcie2_pipe_clk_src"; > >>>> + > >>>> + #phy-cells = <0>; > >>>> + status = "disabled"; > >>>> + > >>>> + }; > >>>> + > >>>> rng: rng@e3000 { > >>>> compatible = "qcom,prng-ee"; > >>>> reg = <0x000e3000 0x1000>; > >>>> @@ -123,6 +175,58 @@ > >>>> clock-names = "core"; > >>>> }; > >>>> > >>>> + pcie3_phy: phy@f4000 { > >>>> + compatible = > >>>> "qcom,ipq9574-qmp-gen3x2-pcie-phy"; > >>>> + reg = <0x000f4000 0x2000>; > >>>> + > >>>> + clocks = <&gcc GCC_PCIE3_AUX_CLK>, > >>>> + <&gcc GCC_PCIE3_AHB_CLK>, > >>>> + <&gcc GCC_ANOC_PCIE3_2LANE_M_CLK>, > >>>> + <&gcc GCC_SNOC_PCIE3_2LANE_S_CLK>, > >>>> + <&gcc GCC_PCIE3_PIPE_CLK>; > >>>> + clock-names = "aux", "cfg_ahb", "anoc_lane", > >>>> "snoc_lane", "pipe"; > >>>> + > >>>> + assigned-clocks = <&gcc GCC_PCIE3_AUX_CLK>; > >>>> + assigned-clock-rates = <20000000>; > >>>> + > >>>> + resets = <&gcc GCC_PCIE3_PHY_BCR>, > >>>> + <&gcc GCC_PCIE3PHY_PHY_BCR>; > >>>> + reset-names = "phy", "common"; > >>>> + > >>>> + #clock-cells = <0>; > >>>> + clock-output-names = "gcc_pcie3_pipe_clk_src"; > >>>> + > >>>> + #phy-cells = <0>; > >>>> + status = "disabled"; > >>>> + > >>>> + }; > >>>> + > >>>> + pcie1_phy: phy@fc000 { > >>>> + compatible = > >>>> "qcom,ipq9574-qmp-gen3x1-pcie-phy"; > >>>> + reg = <0x000fc000 0x1000>; > >>>> + > >>>> + clocks = <&gcc GCC_PCIE1_AUX_CLK>, > >>>> + <&gcc GCC_PCIE1_AHB_CLK>, > >>>> + <&gcc GCC_ANOC_PCIE1_1LANE_M_CLK>, > >>>> + <&gcc GCC_SNOC_PCIE1_1LANE_S_CLK>, > >>>> + <&gcc GCC_PCIE1_PIPE_CLK>; > >>>> + clock-names = "aux", "cfg_ahb", "anoc_lane", > >>>> "snoc_lane", "pipe"; > >>>> + > >>>> + assigned-clocks = <&gcc GCC_PCIE1_AUX_CLK>; > >>>> + assigned-clock-rates = <20000000>; > >>>> + > >>>> + resets = <&gcc GCC_PCIE1_PHY_BCR>, > >>>> + <&gcc GCC_PCIE1PHY_PHY_BCR>; > >>>> + reset-names = "phy", "common"; > >>>> + > >>>> + #clock-cells = <0>; > >>>> + clock-output-names = "gcc_pcie1_pipe_clk_src"; > >>>> + > >>>> + #phy-cells = <0>; > >>>> + status = "disabled"; > >>>> + > >>>> + }; > >>>> + > >>>> tlmm: pinctrl@1000000 { > >>>> compatible = "qcom,ipq9574-tlmm"; > >>>> reg = <0x01000000 0x300000>; > >>>> @@ -146,10 +250,10 @@ > >>>> reg = <0x01800000 0x80000>; > >>>> clocks = <&xo_board_clk>, > >>>> <&sleep_clk>, > >>>> - <0>, > >>>> - <0>, > >>>> - <0>, > >>>> - <0>, > >>>> + <&pcie0_phy>, > >>>> + <&pcie1_phy>, > >>>> + <&pcie2_phy>, > >>>> + <&pcie3_phy>, > >>>> <0>; > >>>> #clock-cells = <1>; > >>>> #reset-cells = <1>; > >>>> @@ -478,6 +582,267 @@ > >>>> status = "disabled"; > >>>> }; > >>>> }; > >>>> + > >>>> + pcie1: pci@10000000 { > >>>> + compatible = "qcom,pcie-ipq9574"; > >>>> + reg = <0x10000000 0xf1d>, > >>>> + <0x10000F20 0xa8>, > >>>> + <0x10001000 0x1000>, > >>>> + <0x000F8000 0x4000>, > >>>> + <0x10100000 0x1000>; > >>>> + reg-names = "dbi", "elbi", "atu", "parf", > >>>> "config"; > >>>> + device_type = "pci"; > >>>> + linux,pci-domain = <2>; > >>>> + bus-range = <0x00 0xff>; > >>>> + num-lanes = <1>; > >>>> + #address-cells = <3>; > >>>> + #size-cells = <2>; > >>>> + > >>>> + ranges = <0x01000000 0x0 0x00000000 > >>>> 0x10200000 0x0 0x100000>, /* I/O */ > >>>> + <0x02000000 0x0 0x10300000 > >>>> 0x10300000 0x0 0x7d00000>; /* MEM */ > >>>> + > >>>> + #interrupt-cells = <1>; > >>>> + interrupt-map-mask = <0 0 0 0x7>; > >>>> + interrupt-map = <0 0 0 1 &intc 0 35 > >>>> IRQ_TYPE_LEVEL_HIGH>, /* int_a */ > >>>> + <0 0 0 2 &intc 0 49 > >>>> IRQ_TYPE_LEVEL_HIGH>, /* int_b */ > >>>> + <0 0 0 3 &intc 0 84 > >>>> IRQ_TYPE_LEVEL_HIGH>, /* int_c */ > >>>> + <0 0 0 4 &intc 0 85 > >>>> IRQ_TYPE_LEVEL_HIGH>; /* int_d */ > >>>> + > >>> > >>> No iommu-map? > >> We do not enable the IOMMU stage1 translation for PCIe and the registers > >> have secure access only from TrustZone (It enables only stage2 for > >> Access control) > > > > So, no SMMU protection for PCIe transactions? This sounds like a step > > backwards. > Yes, we are not using stage1 translations. We = software or we = hardware? If there is a hardware interface to SMMU, please describe it here.
On 5/15/2023 3:21 PM, Dmitry Baryshkov wrote: > On Mon, 15 May 2023 at 12:36, Devi Priya <quic_devipriy@quicinc.com> wrote: >> >> >> >> On 5/8/2023 5:10 PM, Dmitry Baryshkov wrote: >>> On 08/05/2023 13:53, Devi Priya wrote: >>>> >>>> >>>> On 4/22/2023 5:49 AM, Dmitry Baryshkov wrote: >>>>> On Fri, 21 Apr 2023 at 15:50, Devi Priya <quic_devipriy@quicinc.com> >>>>> wrote: >>>>>> >>>>>> Add PCIe0, PCIe1, PCIe2, PCIe3 (and corresponding PHY) devices >>>>>> found on IPQ9574 platform. The PCIe0 & PCIe1 are 1-lane Gen3 >>>>>> host whereas PCIe2 & PCIe3 are 2-lane Gen3 host. >>>>>> >>>>>> Co-developed-by: Anusha Rao <quic_anusha@quicinc.com> >>>>>> Signed-off-by: Anusha Rao <quic_anusha@quicinc.com> >>>>>> Signed-off-by: Devi Priya <quic_devipriy@quicinc.com> >>>>>> --- >>>>>> Changes in V3: >>>>>> - Fixed up the PCI I/O port ranges >>>>>> >>>>>> arch/arm64/boot/dts/qcom/ipq9574.dtsi | 375 >>>>>> +++++++++++++++++++++++++- >>>>>> 1 file changed, 370 insertions(+), 5 deletions(-) >>>>>> >>>>>> diff --git a/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>>>>> b/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>>>>> index e757b57957cf..953a839a1141 100644 >>>>>> --- a/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>>>>> +++ b/arch/arm64/boot/dts/qcom/ipq9574.dtsi >>>>>> @@ -6,8 +6,8 @@ >>>>>> * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights >>>>>> reserved. >>>>>> */ >>>>>> >>>>>> -#include <dt-bindings/interrupt-controller/arm-gic.h> >>>>>> #include <dt-bindings/clock/qcom,ipq9574-gcc.h> >>>>>> +#include <dt-bindings/interrupt-controller/arm-gic.h> >>>>>> #include <dt-bindings/reset/qcom,ipq9574-gcc.h> >>>>>> >>>>>> / { >>>>>> @@ -116,6 +116,58 @@ >>>>>> #size-cells = <1>; >>>>>> ranges = <0 0 0 0xffffffff>; >>>>>> >>>>>> + pcie0_phy: phy@84000 { >>>>>> + compatible = >>>>>> "qcom,ipq9574-qmp-gen3x1-pcie-phy"; >>>>>> + reg = <0x00084000 0x1000>; >>>>>> + >>>>>> + clocks = <&gcc GCC_PCIE0_AUX_CLK>, >>>>>> + <&gcc GCC_PCIE0_AHB_CLK>, >>>>>> + <&gcc GCC_ANOC_PCIE0_1LANE_M_CLK>, >>>>>> + <&gcc GCC_SNOC_PCIE0_1LANE_S_CLK>, >>>>>> + <&gcc GCC_PCIE0_PIPE_CLK>; >>>>>> + clock-names = "aux", "cfg_ahb", "anoc_lane", >>>>>> "snoc_lane", "pipe"; >>>>>> + >>>>>> + assigned-clocks = <&gcc GCC_PCIE0_AUX_CLK>; >>>>>> + assigned-clock-rates = <20000000>; >>>>>> + >>>>>> + resets = <&gcc GCC_PCIE0_PHY_BCR>, >>>>>> + <&gcc GCC_PCIE0PHY_PHY_BCR>; >>>>>> + reset-names = "phy", "common"; >>>>>> + >>>>>> + #clock-cells = <0>; >>>>>> + clock-output-names = "gcc_pcie0_pipe_clk_src"; >>>>>> + >>>>>> + #phy-cells = <0>; >>>>>> + status = "disabled"; >>>>>> + >>>>>> + }; >>>>>> + >>>>>> + pcie2_phy: phy@8c000 { >>>>>> + compatible = >>>>>> "qcom,ipq9574-qmp-gen3x2-pcie-phy"; >>>>>> + reg = <0x0008c000 0x2000>; >>>>>> + >>>>>> + clocks = <&gcc GCC_PCIE2_AUX_CLK>, >>>>>> + <&gcc GCC_PCIE2_AHB_CLK>, >>>>>> + <&gcc GCC_ANOC_PCIE2_2LANE_M_CLK>, >>>>>> + <&gcc GCC_SNOC_PCIE2_2LANE_S_CLK>, >>>>>> + <&gcc GCC_PCIE2_PIPE_CLK>; >>>>>> + clock-names = "aux", "cfg_ahb", "anoc_lane", >>>>>> "snoc_lane", "pipe"; >>>>>> + >>>>>> + assigned-clocks = <&gcc GCC_PCIE2_AUX_CLK>; >>>>>> + assigned-clock-rates = <20000000>; >>>>>> + >>>>>> + resets = <&gcc GCC_PCIE2_PHY_BCR>, >>>>>> + <&gcc GCC_PCIE2PHY_PHY_BCR>; >>>>>> + reset-names = "phy", "common"; >>>>>> + >>>>>> + #clock-cells = <0>; >>>>>> + clock-output-names = "gcc_pcie2_pipe_clk_src"; >>>>>> + >>>>>> + #phy-cells = <0>; >>>>>> + status = "disabled"; >>>>>> + >>>>>> + }; >>>>>> + >>>>>> rng: rng@e3000 { >>>>>> compatible = "qcom,prng-ee"; >>>>>> reg = <0x000e3000 0x1000>; >>>>>> @@ -123,6 +175,58 @@ >>>>>> clock-names = "core"; >>>>>> }; >>>>>> >>>>>> + pcie3_phy: phy@f4000 { >>>>>> + compatible = >>>>>> "qcom,ipq9574-qmp-gen3x2-pcie-phy"; >>>>>> + reg = <0x000f4000 0x2000>; >>>>>> + >>>>>> + clocks = <&gcc GCC_PCIE3_AUX_CLK>, >>>>>> + <&gcc GCC_PCIE3_AHB_CLK>, >>>>>> + <&gcc GCC_ANOC_PCIE3_2LANE_M_CLK>, >>>>>> + <&gcc GCC_SNOC_PCIE3_2LANE_S_CLK>, >>>>>> + <&gcc GCC_PCIE3_PIPE_CLK>; >>>>>> + clock-names = "aux", "cfg_ahb", "anoc_lane", >>>>>> "snoc_lane", "pipe"; >>>>>> + >>>>>> + assigned-clocks = <&gcc GCC_PCIE3_AUX_CLK>; >>>>>> + assigned-clock-rates = <20000000>; >>>>>> + >>>>>> + resets = <&gcc GCC_PCIE3_PHY_BCR>, >>>>>> + <&gcc GCC_PCIE3PHY_PHY_BCR>; >>>>>> + reset-names = "phy", "common"; >>>>>> + >>>>>> + #clock-cells = <0>; >>>>>> + clock-output-names = "gcc_pcie3_pipe_clk_src"; >>>>>> + >>>>>> + #phy-cells = <0>; >>>>>> + status = "disabled"; >>>>>> + >>>>>> + }; >>>>>> + >>>>>> + pcie1_phy: phy@fc000 { >>>>>> + compatible = >>>>>> "qcom,ipq9574-qmp-gen3x1-pcie-phy"; >>>>>> + reg = <0x000fc000 0x1000>; >>>>>> + >>>>>> + clocks = <&gcc GCC_PCIE1_AUX_CLK>, >>>>>> + <&gcc GCC_PCIE1_AHB_CLK>, >>>>>> + <&gcc GCC_ANOC_PCIE1_1LANE_M_CLK>, >>>>>> + <&gcc GCC_SNOC_PCIE1_1LANE_S_CLK>, >>>>>> + <&gcc GCC_PCIE1_PIPE_CLK>; >>>>>> + clock-names = "aux", "cfg_ahb", "anoc_lane", >>>>>> "snoc_lane", "pipe"; >>>>>> + >>>>>> + assigned-clocks = <&gcc GCC_PCIE1_AUX_CLK>; >>>>>> + assigned-clock-rates = <20000000>; >>>>>> + >>>>>> + resets = <&gcc GCC_PCIE1_PHY_BCR>, >>>>>> + <&gcc GCC_PCIE1PHY_PHY_BCR>; >>>>>> + reset-names = "phy", "common"; >>>>>> + >>>>>> + #clock-cells = <0>; >>>>>> + clock-output-names = "gcc_pcie1_pipe_clk_src"; >>>>>> + >>>>>> + #phy-cells = <0>; >>>>>> + status = "disabled"; >>>>>> + >>>>>> + }; >>>>>> + >>>>>> tlmm: pinctrl@1000000 { >>>>>> compatible = "qcom,ipq9574-tlmm"; >>>>>> reg = <0x01000000 0x300000>; >>>>>> @@ -146,10 +250,10 @@ >>>>>> reg = <0x01800000 0x80000>; >>>>>> clocks = <&xo_board_clk>, >>>>>> <&sleep_clk>, >>>>>> - <0>, >>>>>> - <0>, >>>>>> - <0>, >>>>>> - <0>, >>>>>> + <&pcie0_phy>, >>>>>> + <&pcie1_phy>, >>>>>> + <&pcie2_phy>, >>>>>> + <&pcie3_phy>, >>>>>> <0>; >>>>>> #clock-cells = <1>; >>>>>> #reset-cells = <1>; >>>>>> @@ -478,6 +582,267 @@ >>>>>> status = "disabled"; >>>>>> }; >>>>>> }; >>>>>> + >>>>>> + pcie1: pci@10000000 { >>>>>> + compatible = "qcom,pcie-ipq9574"; >>>>>> + reg = <0x10000000 0xf1d>, >>>>>> + <0x10000F20 0xa8>, >>>>>> + <0x10001000 0x1000>, >>>>>> + <0x000F8000 0x4000>, >>>>>> + <0x10100000 0x1000>; >>>>>> + reg-names = "dbi", "elbi", "atu", "parf", >>>>>> "config"; >>>>>> + device_type = "pci"; >>>>>> + linux,pci-domain = <2>; >>>>>> + bus-range = <0x00 0xff>; >>>>>> + num-lanes = <1>; >>>>>> + #address-cells = <3>; >>>>>> + #size-cells = <2>; >>>>>> + >>>>>> + ranges = <0x01000000 0x0 0x00000000 >>>>>> 0x10200000 0x0 0x100000>, /* I/O */ >>>>>> + <0x02000000 0x0 0x10300000 >>>>>> 0x10300000 0x0 0x7d00000>; /* MEM */ >>>>>> + >>>>>> + #interrupt-cells = <1>; >>>>>> + interrupt-map-mask = <0 0 0 0x7>; >>>>>> + interrupt-map = <0 0 0 1 &intc 0 35 >>>>>> IRQ_TYPE_LEVEL_HIGH>, /* int_a */ >>>>>> + <0 0 0 2 &intc 0 49 >>>>>> IRQ_TYPE_LEVEL_HIGH>, /* int_b */ >>>>>> + <0 0 0 3 &intc 0 84 >>>>>> IRQ_TYPE_LEVEL_HIGH>, /* int_c */ >>>>>> + <0 0 0 4 &intc 0 85 >>>>>> IRQ_TYPE_LEVEL_HIGH>; /* int_d */ >>>>>> + >>>>> >>>>> No iommu-map? >>>> We do not enable the IOMMU stage1 translation for PCIe and the registers >>>> have secure access only from TrustZone (It enables only stage2 for >>>> Access control) >>> >>> So, no SMMU protection for PCIe transactions? This sounds like a step >>> backwards. >> Yes, we are not using stage1 translations. > > We = software or we = hardware? If there is a hardware interface to > SMMU, please describe it here. > Trustzone software protects all non-secure access to any SMMU register. Hence it is not possible to enable stage 1 translation from HLOS. HLOS touching any SMMU register would result in a 'secure access violation' Thanks, Devi Priya
diff --git a/arch/arm64/boot/dts/qcom/ipq9574.dtsi b/arch/arm64/boot/dts/qcom/ipq9574.dtsi index e757b57957cf..953a839a1141 100644 --- a/arch/arm64/boot/dts/qcom/ipq9574.dtsi +++ b/arch/arm64/boot/dts/qcom/ipq9574.dtsi @@ -6,8 +6,8 @@ * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. */ -#include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/clock/qcom,ipq9574-gcc.h> +#include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/reset/qcom,ipq9574-gcc.h> / { @@ -116,6 +116,58 @@ #size-cells = <1>; ranges = <0 0 0 0xffffffff>; + pcie0_phy: phy@84000 { + compatible = "qcom,ipq9574-qmp-gen3x1-pcie-phy"; + reg = <0x00084000 0x1000>; + + clocks = <&gcc GCC_PCIE0_AUX_CLK>, + <&gcc GCC_PCIE0_AHB_CLK>, + <&gcc GCC_ANOC_PCIE0_1LANE_M_CLK>, + <&gcc GCC_SNOC_PCIE0_1LANE_S_CLK>, + <&gcc GCC_PCIE0_PIPE_CLK>; + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; + + assigned-clocks = <&gcc GCC_PCIE0_AUX_CLK>; + assigned-clock-rates = <20000000>; + + resets = <&gcc GCC_PCIE0_PHY_BCR>, + <&gcc GCC_PCIE0PHY_PHY_BCR>; + reset-names = "phy", "common"; + + #clock-cells = <0>; + clock-output-names = "gcc_pcie0_pipe_clk_src"; + + #phy-cells = <0>; + status = "disabled"; + + }; + + pcie2_phy: phy@8c000 { + compatible = "qcom,ipq9574-qmp-gen3x2-pcie-phy"; + reg = <0x0008c000 0x2000>; + + clocks = <&gcc GCC_PCIE2_AUX_CLK>, + <&gcc GCC_PCIE2_AHB_CLK>, + <&gcc GCC_ANOC_PCIE2_2LANE_M_CLK>, + <&gcc GCC_SNOC_PCIE2_2LANE_S_CLK>, + <&gcc GCC_PCIE2_PIPE_CLK>; + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; + + assigned-clocks = <&gcc GCC_PCIE2_AUX_CLK>; + assigned-clock-rates = <20000000>; + + resets = <&gcc GCC_PCIE2_PHY_BCR>, + <&gcc GCC_PCIE2PHY_PHY_BCR>; + reset-names = "phy", "common"; + + #clock-cells = <0>; + clock-output-names = "gcc_pcie2_pipe_clk_src"; + + #phy-cells = <0>; + status = "disabled"; + + }; + rng: rng@e3000 { compatible = "qcom,prng-ee"; reg = <0x000e3000 0x1000>; @@ -123,6 +175,58 @@ clock-names = "core"; }; + pcie3_phy: phy@f4000 { + compatible = "qcom,ipq9574-qmp-gen3x2-pcie-phy"; + reg = <0x000f4000 0x2000>; + + clocks = <&gcc GCC_PCIE3_AUX_CLK>, + <&gcc GCC_PCIE3_AHB_CLK>, + <&gcc GCC_ANOC_PCIE3_2LANE_M_CLK>, + <&gcc GCC_SNOC_PCIE3_2LANE_S_CLK>, + <&gcc GCC_PCIE3_PIPE_CLK>; + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; + + assigned-clocks = <&gcc GCC_PCIE3_AUX_CLK>; + assigned-clock-rates = <20000000>; + + resets = <&gcc GCC_PCIE3_PHY_BCR>, + <&gcc GCC_PCIE3PHY_PHY_BCR>; + reset-names = "phy", "common"; + + #clock-cells = <0>; + clock-output-names = "gcc_pcie3_pipe_clk_src"; + + #phy-cells = <0>; + status = "disabled"; + + }; + + pcie1_phy: phy@fc000 { + compatible = "qcom,ipq9574-qmp-gen3x1-pcie-phy"; + reg = <0x000fc000 0x1000>; + + clocks = <&gcc GCC_PCIE1_AUX_CLK>, + <&gcc GCC_PCIE1_AHB_CLK>, + <&gcc GCC_ANOC_PCIE1_1LANE_M_CLK>, + <&gcc GCC_SNOC_PCIE1_1LANE_S_CLK>, + <&gcc GCC_PCIE1_PIPE_CLK>; + clock-names = "aux", "cfg_ahb", "anoc_lane", "snoc_lane", "pipe"; + + assigned-clocks = <&gcc GCC_PCIE1_AUX_CLK>; + assigned-clock-rates = <20000000>; + + resets = <&gcc GCC_PCIE1_PHY_BCR>, + <&gcc GCC_PCIE1PHY_PHY_BCR>; + reset-names = "phy", "common"; + + #clock-cells = <0>; + clock-output-names = "gcc_pcie1_pipe_clk_src"; + + #phy-cells = <0>; + status = "disabled"; + + }; + tlmm: pinctrl@1000000 { compatible = "qcom,ipq9574-tlmm"; reg = <0x01000000 0x300000>; @@ -146,10 +250,10 @@ reg = <0x01800000 0x80000>; clocks = <&xo_board_clk>, <&sleep_clk>, - <0>, - <0>, - <0>, - <0>, + <&pcie0_phy>, + <&pcie1_phy>, + <&pcie2_phy>, + <&pcie3_phy>, <0>; #clock-cells = <1>; #reset-cells = <1>; @@ -478,6 +582,267 @@ status = "disabled"; }; }; + + pcie1: pci@10000000 { + compatible = "qcom,pcie-ipq9574"; + reg = <0x10000000 0xf1d>, + <0x10000F20 0xa8>, + <0x10001000 0x1000>, + <0x000F8000 0x4000>, + <0x10100000 0x1000>; + reg-names = "dbi", "elbi", "atu", "parf", "config"; + device_type = "pci"; + linux,pci-domain = <2>; + bus-range = <0x00 0xff>; + num-lanes = <1>; + #address-cells = <3>; + #size-cells = <2>; + + ranges = <0x01000000 0x0 0x00000000 0x10200000 0x0 0x100000>, /* I/O */ + <0x02000000 0x0 0x10300000 0x10300000 0x0 0x7d00000>; /* MEM */ + + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0x7>; + interrupt-map = <0 0 0 1 &intc 0 35 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ + <0 0 0 2 &intc 0 49 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ + <0 0 0 3 &intc 0 84 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ + <0 0 0 4 &intc 0 85 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ + + interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "global_irq"; + + /* clocks and clock-names are used to enable the clock in CBCR */ + clocks = <&gcc GCC_PCIE1_AHB_CLK>, + <&gcc GCC_PCIE1_AUX_CLK>, + <&gcc GCC_PCIE1_AXI_M_CLK>, + <&gcc GCC_PCIE1_AXI_S_CLK>, + <&gcc GCC_PCIE1_AXI_S_BRIDGE_CLK>, + <&gcc GCC_PCIE1_RCHNG_CLK>; + clock-names = "ahb", + "aux", + "axi_m", + "axi_s", + "axi_bridge", + "rchng"; + + resets = <&gcc GCC_PCIE1_PIPE_ARES>, + <&gcc GCC_PCIE1_CORE_STICKY_ARES>, + <&gcc GCC_PCIE1_AXI_S_STICKY_ARES>, + <&gcc GCC_PCIE1_AXI_S_ARES>, + <&gcc GCC_PCIE1_AXI_M_STICKY_ARES>, + <&gcc GCC_PCIE1_AXI_M_ARES>, + <&gcc GCC_PCIE1_AUX_ARES>, + <&gcc GCC_PCIE1_AHB_ARES>; + reset-names = "pipe", + "sticky", + "axi_s_sticky", + "axi_s", + "axi_m_sticky", + "axi_m", + "aux", + "ahb"; + + phys = <&pcie1_phy>; + phy-names = "pciephy"; + msi-parent = <&v2m0>; + status = "disabled"; + }; + + pcie3: pci@18000000 { + compatible = "qcom,pcie-ipq9574"; + reg = <0x18000000 0xf1d>, + <0x18000F20 0xa8>, + <0x18001000 0x1000>, + <0x000F0000 0x4000>, + <0x18100000 0x1000>; + reg-names = "dbi", "elbi", "atu", "parf", "config"; + device_type = "pci"; + linux,pci-domain = <4>; + bus-range = <0x00 0xff>; + num-lanes = <2>; + #address-cells = <3>; + #size-cells = <2>; + + ranges = <0x01000000 0x0 0x00000000 0x18200000 0x0 0x100000>, /* I/O */ + <0x02000000 0x0 0x18300000 0x18300000 0x0 0x7d00000>; /* MEM */ + + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0x7>; + interrupt-map = <0 0 0 1 &intc 0 189 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ + <0 0 0 2 &intc 0 190 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ + <0 0 0 3 &intc 0 191 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ + <0 0 0 4 &intc 0 192 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ + + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "global_irq"; + + /* clocks and clock-names are used to enable the clock in CBCR */ + clocks = <&gcc GCC_PCIE3_AHB_CLK>, + <&gcc GCC_PCIE3_AUX_CLK>, + <&gcc GCC_PCIE3_AXI_M_CLK>, + <&gcc GCC_PCIE3_AXI_S_CLK>, + <&gcc GCC_PCIE3_AXI_S_BRIDGE_CLK>, + <&gcc GCC_PCIE3_RCHNG_CLK>; + clock-names = "ahb", + "aux", + "axi_m", + "axi_s", + "axi_bridge", + "rchng"; + + resets = <&gcc GCC_PCIE3_PIPE_ARES>, + <&gcc GCC_PCIE3_CORE_STICKY_ARES>, + <&gcc GCC_PCIE3_AXI_S_STICKY_ARES>, + <&gcc GCC_PCIE3_AXI_S_ARES>, + <&gcc GCC_PCIE3_AXI_M_STICKY_ARES>, + <&gcc GCC_PCIE3_AXI_M_ARES>, + <&gcc GCC_PCIE3_AUX_ARES>, + <&gcc GCC_PCIE3_AHB_ARES>; + reset-names = "pipe", + "sticky", + "axi_s_sticky", + "axi_s", + "axi_m_sticky", + "axi_m", + "aux", + "ahb"; + + phys = <&pcie3_phy>; + phy-names = "pciephy"; + msi-parent = <&v2m0>; + status = "disabled"; + }; + + pcie2: pci@20000000 { + compatible = "qcom,pcie-ipq9574"; + reg = <0x20000000 0xf1d>, + <0x20000F20 0xa8>, + <0x20001000 0x1000>, + <0x00088000 0x4000>, + <0x20100000 0x1000>; + reg-names = "dbi", "elbi", "atu", "parf", "config"; + device_type = "pci"; + linux,pci-domain = <3>; + bus-range = <0x00 0xff>; + num-lanes = <2>; + #address-cells = <3>; + #size-cells = <2>; + + ranges = <0x01000000 0x0 0x00000000 0x20200000 0x0 0x100000>, /* I/O */ + <0x02000000 0x0 0x20300000 0x20300000 0x0 0x7d00000>; /* MEM */ + + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0x7>; + interrupt-map = <0 0 0 1 &intc 0 164 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ + <0 0 0 2 &intc 0 165 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ + <0 0 0 3 &intc 0 186 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ + <0 0 0 4 &intc 0 187 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ + + interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "global_irq"; + + /* clocks and clock-names are used to enable the clock in CBCR */ + clocks = <&gcc GCC_PCIE2_AHB_CLK>, + <&gcc GCC_PCIE2_AUX_CLK>, + <&gcc GCC_PCIE2_AXI_M_CLK>, + <&gcc GCC_PCIE2_AXI_S_CLK>, + <&gcc GCC_PCIE2_AXI_S_BRIDGE_CLK>, + <&gcc GCC_PCIE2_RCHNG_CLK>; + clock-names = "ahb", + "aux", + "axi_m", + "axi_s", + "axi_bridge", + "rchng"; + + resets = <&gcc GCC_PCIE2_PIPE_ARES>, + <&gcc GCC_PCIE2_CORE_STICKY_ARES>, + <&gcc GCC_PCIE2_AXI_S_STICKY_ARES>, + <&gcc GCC_PCIE2_AXI_S_ARES>, + <&gcc GCC_PCIE2_AXI_M_STICKY_ARES>, + <&gcc GCC_PCIE2_AXI_M_ARES>, + <&gcc GCC_PCIE2_AUX_ARES>, + <&gcc GCC_PCIE2_AHB_ARES>; + reset-names = "pipe", + "sticky", + "axi_s_sticky", + "axi_s", + "axi_m_sticky", + "axi_m", + "aux", + "ahb"; + + phys = <&pcie2_phy>; + phy-names = "pciephy"; + msi-parent = <&v2m0>; + status = "disabled"; + }; + + pcie0: pci@28000000 { + compatible = "qcom,pcie-ipq9574"; + reg = <0x28000000 0xf1d>, + <0x28000F20 0xa8>, + <0x28001000 0x1000>, + <0x00080000 0x4000>, + <0x28100000 0x1000>; + reg-names = "dbi", "elbi", "atu", "parf", "config"; + device_type = "pci"; + linux,pci-domain = <1>; + bus-range = <0x00 0xff>; + num-lanes = <1>; + #address-cells = <3>; + #size-cells = <2>; + + ranges = <0x01000000 0x0 0x00000000 0x28200000 0x0 0x100000>, /* I/O */ + <0x02000000 0x0 0x28300000 0x28300000 0x0 0x7d00000>; /* MEM */ + + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0x7>; + interrupt-map = <0 0 0 1 &intc 0 75 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ + <0 0 0 2 &intc 0 78 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ + <0 0 0 3 &intc 0 79 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ + <0 0 0 4 &intc 0 83 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ + + interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "global_irq"; + + /* clocks and clock-names are used to enable the clock in CBCR */ + clocks = <&gcc GCC_PCIE0_AHB_CLK>, + <&gcc GCC_PCIE0_AUX_CLK>, + <&gcc GCC_PCIE0_AXI_M_CLK>, + <&gcc GCC_PCIE0_AXI_S_CLK>, + <&gcc GCC_PCIE0_AXI_S_BRIDGE_CLK>, + <&gcc GCC_PCIE0_RCHNG_CLK>; + clock-names = "ahb", + "aux", + "axi_m", + "axi_s", + "axi_bridge", + "rchng"; + + resets = <&gcc GCC_PCIE0_PIPE_ARES>, + <&gcc GCC_PCIE0_CORE_STICKY_ARES>, + <&gcc GCC_PCIE0_AXI_S_STICKY_ARES>, + <&gcc GCC_PCIE0_AXI_S_ARES>, + <&gcc GCC_PCIE0_AXI_M_STICKY_ARES>, + <&gcc GCC_PCIE0_AXI_M_ARES>, + <&gcc GCC_PCIE0_AUX_ARES>, + <&gcc GCC_PCIE0_AHB_ARES>; + reset-names = "pipe", + "sticky", + "axi_s_sticky", + "axi_s", + "axi_m_sticky", + "axi_m", + "aux", + "ahb"; + + phys = <&pcie0_phy>; + phy-names = "pciephy"; + msi-parent = <&v2m0>; + status = "disabled"; + }; + }; timer {