* [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and WLAN support
@ 2026-09-15 1:56 Shawn Guo
2026-09-15 1:56 ` [PATCH v2 1/5] arm64: dts: qcom: nord: Add PCIe PHY and controller nodes Shawn Guo
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Shawn Guo @ 2026-09-15 1:56 UTC (permalink / raw)
To: Bjorn Andersson
Cc: Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartosz Golaszewski, Krishna Chaitanya Chundru, Yu Zhang,
devicetree, linux-arm-msm, linux-kernel, Shawn Guo
This series enables PCIe on the Qualcomm Nord SoC and brings up the WLAN
modules on the two reference boards.
Nord has four PCIe controllers fed by a single quadfurcated Gen5 QMP
multi-PHY. The link topology (x16, x8+x8, x8+x4+x4 or x8+x4+x2+x2) is
selected by firmware through a TCSR register that the PHY driver reads at
probe time, so the DT only describes the PHY ports and hands the driver
the TCSR handle. Patch 1 adds the PHY, the four controllers and the PCIe
SMMU; patches 2 and 3 enable them on the IQ10 Robotics Reference Design
and the Ride Embedded board respectively, along with the per-port PERST#
and WAKE# lines.
Patches 4 and 5 add the WCN7850 WLAN module sitting on PCIe2 on both
boards. The two boards power the module differently: the Ride Embedded
connectivity adapter card derives the core rails from the module DBUs
gated by PWR_CORE and PWR_CTRL1, whereas the RRD generates them with
discrete on-board bucks behind a single core power enable. Both are
described as they are wired.
This depends on the Nord Gen5x16 multi-PHY driver support [1], without
which the PHY does not probe.
Dependencies:
- PCIe and PHY: https://lore.kernel.org/all/20260909-nord-v3-0-b0a82721c547@oss.qualcomm.com/
- DTS prerequisite: https://lore.kernel.org/all/20260904081619.593602-1-shengchao.guo@oss.qualcomm.com/
Changes for v2:
- Add missing leading zero for pcie_smmu reg property
- Link to v1: https://lore.kernel.org/all/20260914071944.164217-1-shengchao.guo@oss.qualcomm.com/
Krishna Chaitanya Chundru (3):
arm64: dts: qcom: nord: Add PCIe PHY and controller nodes
arm64: dts: qcom: nord-rrd: Enable PCIe controllers and PHY
arm64: dts: qcom: nord-ride-embedded: Enable PCIe controllers and PHY
Shawn Guo (1):
arm64: dts: qcom: nord-rrd: Add WCN7850 WLAN support
Yu Zhang(Yuriy) (1):
arm64: dts: qcom: nord-ride-embedded: Add WCN7850 WLAN support
arch/arm64/boot/dts/qcom/nord-embedded.dtsi | 926 +++++++++++++++++-
.../boot/dts/qcom/nord-ride-embedded.dts | 151 +++
arch/arm64/boot/dts/qcom/nord-rrd.dts | 158 +++
arch/arm64/boot/dts/qcom/nord.dtsi | 297 ++++++
4 files changed, 1528 insertions(+), 4 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/5] arm64: dts: qcom: nord: Add PCIe PHY and controller nodes
2026-09-15 1:56 [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and WLAN support Shawn Guo
@ 2026-09-15 1:56 ` Shawn Guo
2026-09-15 1:56 ` [PATCH v2 2/5] arm64: dts: qcom: nord-rrd: Enable PCIe controllers and PHY Shawn Guo
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Shawn Guo @ 2026-09-15 1:56 UTC (permalink / raw)
To: Bjorn Andersson
Cc: Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartosz Golaszewski, Krishna Chaitanya Chundru, Yu Zhang,
devicetree, linux-arm-msm, linux-kernel, Abel Vesa,
Bartosz Golaszewski, Shawn Guo
From: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
Nord has four PCIe controllers backed by a single quadfurcated Gen5
QMP PHY with four ports (A/B/C/D) and a common PCIe SMMU. The ports
can be ganged into x16, x8+x8, x8+x4+x4 or x8+x4+x2+x2 topologies; the
topology in effect is selected by firmware through the TCSR link-config
mode register, which the PHY driver reads at probe time. Describe the
x8+x4+x2+x2 topology, i.e. all four controllers usable, as that is the
configuration the boards ship with.
Add the controller and SMMU nodes to nord.dtsi, and the PHY node along
with the per-controller clocks, resets, GDSCs, interconnects, OPP tables
and TLMM pin states to nord-embedded.dtsi. The four PCIe pipe clocks
also become available now, so hook them up as GCC parents in place of
the <0> placeholders.
The controllers and the PHY are left disabled here and enabled per
board.
Signed-off-by: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Signed-off-by: Shawn Guo <shengchao.guo@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/nord-embedded.dtsi | 926 +++++++++++++++++++-
arch/arm64/boot/dts/qcom/nord.dtsi | 297 +++++++
2 files changed, 1219 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/nord-embedded.dtsi b/arch/arm64/boot/dts/qcom/nord-embedded.dtsi
index c7ac2e66632e..6e79f3cb20e9 100644
--- a/arch/arm64/boot/dts/qcom/nord-embedded.dtsi
+++ b/arch/arm64/boot/dts/qcom/nord-embedded.dtsi
@@ -342,6 +342,738 @@ &config_noc SLAVE_QUP_2 QCOM_ICC_TAG_ALWAYS>,
pinctrl-names = "default";
};
+&pcie0 {
+ clocks = <&gcc GCC_PCIE_A_AUX_CLK>,
+ <&gcc GCC_PCIE_A_CFG_AHB_CLK>,
+ <&gcc GCC_PCIE_A_MSTR_AXI_CLK>,
+ <&gcc GCC_PCIE_A_SLV_AXI_CLK>,
+ <&gcc GCC_PCIE_A_SLV_Q2A_AXI_CLK>;
+ clock-names = "aux",
+ "cfg",
+ "bus_master",
+ "bus_slave",
+ "slave_q2a";
+
+ assigned-clocks = <&gcc GCC_PCIE_A_AUX_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ interconnects = <&pcie_data_inbound MASTER_PCIE_0 QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+ <&hscnoc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS
+ &config_noc SLAVE_PCIE_0 QCOM_ICC_TAG_ALWAYS>;
+ interconnect-names = "pcie-mem",
+ "cpu-pcie";
+
+ power-domains = <&gcc GCC_PCIE_A_GDSC>;
+
+ resets = <&gcc GCC_PCIE_A_BCR>,
+ <&gcc GCC_PCIE_A_LINK_DOWN_BCR>;
+ reset-names = "pci",
+ "link_down";
+
+ pinctrl-0 = <&pcie0_default>;
+ pinctrl-names = "default";
+
+ operating-points-v2 = <&pcie0_opp_table>;
+
+ pcie0_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ /* GEN 1 x1 */
+ opp-2500000-1 {
+ opp-hz = /bits/ 64 <2500000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <250000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x2 */
+ opp-5000000-1 {
+ opp-hz = /bits/ 64 <5000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <500000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x4 */
+ opp-10000000-1 {
+ opp-hz = /bits/ 64 <10000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1000000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x8 */
+ opp-20000000-1 {
+ opp-hz = /bits/ 64 <20000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <2000000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x16 */
+ opp-40000000-1 {
+ opp-hz = /bits/ 64 <40000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <4000000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 2 x1 */
+ opp-5000000-2 {
+ opp-hz = /bits/ 64 <5000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <500000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x2 */
+ opp-10000000-2 {
+ opp-hz = /bits/ 64 <10000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x4 */
+ opp-20000000-2 {
+ opp-hz = /bits/ 64 <20000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <2000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x8 */
+ opp-40000000-2 {
+ opp-hz = /bits/ 64 <40000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <4000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x16 */
+ opp-80000000-2 {
+ opp-hz = /bits/ 64 <80000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <8000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 3 x1 */
+ opp-8000000-3 {
+ opp-hz = /bits/ 64 <8000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <984500 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x2 */
+ opp-16000000-3 {
+ opp-hz = /bits/ 64 <16000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1969000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x4 */
+ opp-32000000-3 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x8 */
+ opp-64000000-3 {
+ opp-hz = /bits/ 64 <64000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <7876000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x16 */
+ opp-128000000-3 {
+ opp-hz = /bits/ 64 <128000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <15753000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 4 x1 */
+ opp-16000000-4 {
+ opp-hz = /bits/ 64 <16000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <1969000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x2 */
+ opp-32000000-4 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x4 */
+ opp-64000000-4 {
+ opp-hz = /bits/ 64 <64000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <7876000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x8 */
+ opp-128000000-4 {
+ opp-hz = /bits/ 64 <128000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <15753000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x16 */
+ opp-256000000-4 {
+ opp-hz = /bits/ 64 <256000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <31506000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 5 x1 */
+ opp-32000000-5 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x2 */
+ opp-64000000-5 {
+ opp-hz = /bits/ 64 <64000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <7876000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x4 */
+ opp-128000000-5 {
+ opp-hz = /bits/ 64 <128000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <15753000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x8 */
+ opp-256000000-5 {
+ opp-hz = /bits/ 64 <256000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <31506000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x16 */
+ opp-512000000-5 {
+ opp-hz = /bits/ 64 <512000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <63012000 1>;
+ opp-level = <5>;
+ };
+ };
+};
+
+&pcie0_port0 {
+ phys = <&pcie_phy 0>;
+};
+
+&pcie1 {
+ clocks = <&gcc GCC_PCIE_B_AUX_CLK>,
+ <&gcc GCC_PCIE_B_CFG_AHB_CLK>,
+ <&gcc GCC_PCIE_B_MSTR_AXI_CLK>,
+ <&gcc GCC_PCIE_B_SLV_AXI_CLK>,
+ <&gcc GCC_PCIE_B_SLV_Q2A_AXI_CLK>;
+ clock-names = "aux",
+ "cfg",
+ "bus_master",
+ "bus_slave",
+ "slave_q2a";
+
+ assigned-clocks = <&gcc GCC_PCIE_B_AUX_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ interconnects = <&pcie_data_inbound MASTER_PCIE_1 QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+ <&hscnoc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS
+ &config_noc SLAVE_PCIE_1 QCOM_ICC_TAG_ALWAYS>;
+ interconnect-names = "pcie-mem",
+ "cpu-pcie";
+
+ power-domains = <&gcc GCC_PCIE_B_GDSC>;
+
+ resets = <&gcc GCC_PCIE_B_BCR>,
+ <&gcc GCC_PCIE_B_LINK_DOWN_BCR>;
+ reset-names = "pci",
+ "link_down";
+
+ pinctrl-0 = <&pcie1_default>;
+ pinctrl-names = "default";
+
+ operating-points-v2 = <&pcie1_opp_table>;
+
+ pcie1_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ /* GEN 1 x1 */
+ opp-2500000-1 {
+ opp-hz = /bits/ 64 <2500000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <250000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x2 */
+ opp-5000000-1 {
+ opp-hz = /bits/ 64 <5000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <500000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x4 */
+ opp-10000000-1 {
+ opp-hz = /bits/ 64 <10000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1000000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x8 */
+ opp-20000000-1 {
+ opp-hz = /bits/ 64 <20000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <2000000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 2 x1 */
+ opp-5000000-2 {
+ opp-hz = /bits/ 64 <5000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <500000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x2 */
+ opp-10000000-2 {
+ opp-hz = /bits/ 64 <10000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x4 */
+ opp-20000000-2 {
+ opp-hz = /bits/ 64 <20000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <2000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x8 */
+ opp-40000000-2 {
+ opp-hz = /bits/ 64 <40000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <4000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 3 x1 */
+ opp-8000000-3 {
+ opp-hz = /bits/ 64 <8000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <984500 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x2 */
+ opp-16000000-3 {
+ opp-hz = /bits/ 64 <16000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1969000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x4 */
+ opp-32000000-3 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x8 */
+ opp-64000000-3 {
+ opp-hz = /bits/ 64 <64000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <7876000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 4 x1 */
+ opp-16000000-4 {
+ opp-hz = /bits/ 64 <16000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <1969000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x2 */
+ opp-32000000-4 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x4 */
+ opp-64000000-4 {
+ opp-hz = /bits/ 64 <64000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <7876000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x8 */
+ opp-128000000-4 {
+ opp-hz = /bits/ 64 <128000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <15753000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 5 x1 */
+ opp-32000000-5 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x2 */
+ opp-64000000-5 {
+ opp-hz = /bits/ 64 <64000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <7876000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x4 */
+ opp-128000000-5 {
+ opp-hz = /bits/ 64 <128000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <15753000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x8 */
+ opp-256000000-5 {
+ opp-hz = /bits/ 64 <256000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <31506000 1>;
+ opp-level = <5>;
+ };
+ };
+};
+
+&pcie1_port0 {
+ phys = <&pcie_phy 1>;
+};
+
+&pcie2 {
+ clocks = <&gcc GCC_PCIE_C_AUX_CLK>,
+ <&gcc GCC_PCIE_C_CFG_AHB_CLK>,
+ <&gcc GCC_PCIE_C_MSTR_AXI_CLK>,
+ <&gcc GCC_PCIE_C_SLV_AXI_CLK>,
+ <&gcc GCC_PCIE_C_SLV_Q2A_AXI_CLK>;
+ clock-names = "aux",
+ "cfg",
+ "bus_master",
+ "bus_slave",
+ "slave_q2a";
+
+ assigned-clocks = <&gcc GCC_PCIE_C_AUX_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ interconnects = <&pcie_data_inbound MASTER_PCIE_2 QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+ <&hscnoc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS
+ &config_noc SLAVE_PCIE_2 QCOM_ICC_TAG_ALWAYS>;
+ interconnect-names = "pcie-mem",
+ "cpu-pcie";
+
+ power-domains = <&gcc GCC_PCIE_C_GDSC>;
+
+ resets = <&gcc GCC_PCIE_C_BCR>,
+ <&gcc GCC_PCIE_C_LINK_DOWN_BCR>;
+ reset-names = "pci",
+ "link_down";
+
+ pinctrl-0 = <&pcie2_default>;
+ pinctrl-names = "default";
+
+ operating-points-v2 = <&pcie2_opp_table>;
+
+ pcie2_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ /* GEN 1 x1 */
+ opp-2500000-1 {
+ opp-hz = /bits/ 64 <2500000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <250000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x2 */
+ opp-5000000-1 {
+ opp-hz = /bits/ 64 <5000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <500000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x4 */
+ opp-10000000-1 {
+ opp-hz = /bits/ 64 <10000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1000000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 2 x1 */
+ opp-5000000-2 {
+ opp-hz = /bits/ 64 <5000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <500000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x2 */
+ opp-10000000-2 {
+ opp-hz = /bits/ 64 <10000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x4 */
+ opp-20000000-2 {
+ opp-hz = /bits/ 64 <20000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <2000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 3 x1 */
+ opp-8000000-3 {
+ opp-hz = /bits/ 64 <8000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <984500 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x2 */
+ opp-16000000-3 {
+ opp-hz = /bits/ 64 <16000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1969000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x4 */
+ opp-32000000-3 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 4 x1 */
+ opp-16000000-4 {
+ opp-hz = /bits/ 64 <16000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <1969000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x2 */
+ opp-32000000-4 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x4 */
+ opp-64000000-4 {
+ opp-hz = /bits/ 64 <64000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <7876000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 5 x1 */
+ opp-32000000-5 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x2 */
+ opp-64000000-5 {
+ opp-hz = /bits/ 64 <64000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <7876000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x4 */
+ opp-128000000-5 {
+ opp-hz = /bits/ 64 <128000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <15753000 1>;
+ opp-level = <5>;
+ };
+ };
+};
+
+&pcie2_port0 {
+ phys = <&pcie_phy 2>;
+};
+
+&pcie3 {
+ clocks = <&gcc GCC_PCIE_D_AUX_CLK>,
+ <&gcc GCC_PCIE_D_CFG_AHB_CLK>,
+ <&gcc GCC_PCIE_D_MSTR_AXI_CLK>,
+ <&gcc GCC_PCIE_D_SLV_AXI_CLK>,
+ <&gcc GCC_PCIE_D_SLV_Q2A_AXI_CLK>;
+ clock-names = "aux",
+ "cfg",
+ "bus_master",
+ "bus_slave",
+ "slave_q2a";
+
+ assigned-clocks = <&gcc GCC_PCIE_D_AUX_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ interconnects = <&pcie_data_inbound MASTER_PCIE_3 QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+ <&hscnoc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS
+ &config_noc SLAVE_PCIE_3 QCOM_ICC_TAG_ALWAYS>;
+ interconnect-names = "pcie-mem",
+ "cpu-pcie";
+
+ power-domains = <&gcc GCC_PCIE_D_GDSC>;
+
+ resets = <&gcc GCC_PCIE_D_BCR>,
+ <&gcc GCC_PCIE_D_LINK_DOWN_BCR>;
+ reset-names = "pci",
+ "link_down";
+
+ pinctrl-0 = <&pcie3_default>;
+ pinctrl-names = "default";
+
+ operating-points-v2 = <&pcie3_opp_table>;
+
+ pcie3_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ /* GEN 1 x1 */
+ opp-2500000-1 {
+ opp-hz = /bits/ 64 <2500000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <250000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 1 x2 */
+ opp-5000000-1 {
+ opp-hz = /bits/ 64 <5000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <500000 1>;
+ opp-level = <1>;
+ };
+
+ /* GEN 2 x1 */
+ opp-5000000-2 {
+ opp-hz = /bits/ 64 <5000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <500000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 2 x2 */
+ opp-10000000-2 {
+ opp-hz = /bits/ 64 <10000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1000000 1>;
+ opp-level = <2>;
+ };
+
+ /* GEN 3 x1 */
+ opp-8000000-3 {
+ opp-hz = /bits/ 64 <8000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <984500 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 3 x2 */
+ opp-16000000-3 {
+ opp-hz = /bits/ 64 <16000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ opp-peak-kBps = <1969000 1>;
+ opp-level = <3>;
+ };
+
+ /* GEN 4 x1 */
+ opp-16000000-4 {
+ opp-hz = /bits/ 64 <16000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <1969000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 4 x2 */
+ opp-32000000-4 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <4>;
+ };
+
+ /* GEN 5 x1 */
+ opp-32000000-5 {
+ opp-hz = /bits/ 64 <32000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <3938000 1>;
+ opp-level = <5>;
+ };
+
+ /* GEN 5 x2 */
+ opp-64000000-5 {
+ opp-hz = /bits/ 64 <64000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ opp-peak-kBps = <7876000 1>;
+ opp-level = <5>;
+ };
+ };
+};
+
+&pcie3_port0 {
+ phys = <&pcie_phy 3>;
+};
+
&qupv3_0 {
clocks = <&segcc SE_GCC_QUPV3_WRAP0_M_AHB_CLK>,
<&segcc SE_GCC_QUPV3_WRAP0_S_AHB_CLK>;
@@ -704,10 +1436,10 @@ gcc: clock-controller@100000 {
reg = <0x0 0x00100000 0x0 0x1f4200>;
clocks = <&bi_tcxo_div2>,
<&sleep_clk>,
- <0>,
- <0>,
- <0>,
- <0>;
+ <&pcie_phy 0>,
+ <&pcie_phy 1>,
+ <&pcie_phy 2>,
+ <&pcie_phy 3>;
#clock-cells = <1>;
#reset-cells = <1>;
#power-domain-cells = <1>;
@@ -774,6 +1506,100 @@ mmss_noc: interconnect@1780000 {
qcom,bcm-voters = <&apps_bcm_voter>;
};
+ pcie_phy: phy@1b00000 {
+ compatible = "qcom,nord-qmp-gen5x16-pcie-phy";
+
+ reg = <0x0 0x01b00000 0x0 0x10000>,
+ <0x0 0x01b10000 0x0 0x10000>,
+ <0x0 0x01b20000 0x0 0x10000>,
+ <0x0 0x01b30000 0x0 0x10000>;
+ reg-names = "port_a",
+ "port_b",
+ "port_c",
+ "port_d";
+
+ clocks = <&gcc GCC_PCIE_A_PHY_AUX_CLK>,
+ <&gcc GCC_PCIE_A_CFG_AHB_CLK>,
+ <&tcsrcc TCSR_PCIE_CLKREF_EN>,
+ <&gcc GCC_PCIE_A_PHY_RCHNG_CLK>,
+ <&gcc GCC_PCIE_A_PIPE_CLK>,
+ <&gcc GCC_PCIE_B_PHY_AUX_CLK>,
+ <&gcc GCC_PCIE_B_CFG_AHB_CLK>,
+ <&gcc GCC_PCIE_B_PHY_RCHNG_CLK>,
+ <&gcc GCC_PCIE_B_PIPE_CLK>,
+ <&gcc GCC_PCIE_C_PHY_AUX_CLK>,
+ <&gcc GCC_PCIE_C_CFG_AHB_CLK>,
+ <&gcc GCC_PCIE_C_PHY_RCHNG_CLK>,
+ <&gcc GCC_PCIE_C_PIPE_CLK>,
+ <&gcc GCC_PCIE_D_PHY_AUX_CLK>,
+ <&gcc GCC_PCIE_D_CFG_AHB_CLK>,
+ <&gcc GCC_PCIE_D_PHY_RCHNG_CLK>,
+ <&gcc GCC_PCIE_D_PIPE_CLK>;
+ clock-names = "aux_a",
+ "cfg_ahb_a",
+ "ref",
+ "rchng_a",
+ "pipe_a",
+ "aux_b",
+ "cfg_ahb_b",
+ "rchng_b",
+ "pipe_b",
+ "aux_c",
+ "cfg_ahb_c",
+ "rchng_c",
+ "pipe_c",
+ "aux_d",
+ "cfg_ahb_d",
+ "rchng_d",
+ "pipe_d";
+
+ assigned-clocks = <&gcc GCC_PCIE_A_PHY_RCHNG_CLK>,
+ <&gcc GCC_PCIE_B_PHY_RCHNG_CLK>,
+ <&gcc GCC_PCIE_C_PHY_RCHNG_CLK>,
+ <&gcc GCC_PCIE_D_PHY_RCHNG_CLK>;
+ assigned-clock-rates = <100000000>,
+ <100000000>,
+ <100000000>,
+ <100000000>;
+
+ power-domains = <&gcc GCC_PCIE_A_PHY_GDSC>,
+ <&gcc GCC_PCIE_B_PHY_GDSC>,
+ <&gcc GCC_PCIE_C_PHY_GDSC>,
+ <&gcc GCC_PCIE_D_PHY_GDSC>;
+ power-domain-names = "port_a",
+ "port_b",
+ "port_c",
+ "port_d";
+
+ resets = <&gcc GCC_PCIE_A_PHY_COM_BCR>,
+ <&gcc GCC_PCIE_A_NOCSR_COM_PHY_BCR>,
+ <&gcc GCC_PCIE_B_PHY_COM_BCR>,
+ <&gcc GCC_PCIE_B_NOCSR_COM_PHY_BCR>,
+ <&gcc GCC_PCIE_C_PHY_COM_BCR>,
+ <&gcc GCC_PCIE_C_NOCSR_COM_PHY_BCR>,
+ <&gcc GCC_PCIE_D_PHY_COM_BCR>,
+ <&gcc GCC_PCIE_D_NOCSR_COM_PHY_BCR>;
+ reset-names = "port_a",
+ "port_a_nocsr",
+ "port_b",
+ "port_b_nocsr",
+ "port_c",
+ "port_c_nocsr",
+ "port_d",
+ "port_d_nocsr";
+
+ qcom,link-mode = <&tcsr 0x71050>;
+
+ #clock-cells = <1>;
+ clock-output-names = "pcie_a_pipe_clk",
+ "pcie_b_pipe_clk",
+ "pcie_c_pipe_clk",
+ "pcie_d_pipe_clk";
+ #phy-cells = <1>;
+
+ status = "disabled";
+ };
+
pcie_cfg: interconnect@1ba0000 {
compatible = "qcom,nord-pcie-cfg";
reg = <0x0 0x01ba0000 0x0 0x7200>;
@@ -998,6 +1824,98 @@ nsp_data_noc_3: interconnect@1fe00000 {
};
&tlmm {
+ pcie0_default: pcie0-default-state {
+ wake-pins {
+ pins = "gpio0";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ clkreq-pins {
+ pins = "gpio1";
+ function = "pcie0_clk_req_n";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ perst-pins {
+ pins = "gpio2";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+
+ pcie1_default: pcie1-default-state {
+ wake-pins {
+ pins = "gpio3";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ clkreq-pins {
+ pins = "gpio4";
+ function = "pcie1_clk_req_n";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ perst-pins {
+ pins = "gpio5";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+
+ pcie2_default: pcie2-default-state {
+ wake-pins {
+ pins = "gpio6";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ clkreq-pins {
+ pins = "gpio7";
+ function = "pcie2_clk_req_n";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ perst-pins {
+ pins = "gpio8";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+
+ pcie3_default: pcie3-default-state {
+ wake-pins {
+ pins = "gpio9";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ clkreq-pins {
+ pins = "gpio10";
+ function = "pcie3_clk_req_n";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ perst-pins {
+ pins = "gpio11";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+
qup_i2c0_default: qup-i2c0-default-state {
pins = "gpio111", "gpio112";
function = "qup0_se0";
diff --git a/arch/arm64/boot/dts/qcom/nord.dtsi b/arch/arm64/boot/dts/qcom/nord.dtsi
index 83760341456b..0fb292074b99 100644
--- a/arch/arm64/boot/dts/qcom/nord.dtsi
+++ b/arch/arm64/boot/dts/qcom/nord.dtsi
@@ -1587,6 +1587,290 @@ rng: rng@10c3000 {
reg = <0x0 0x010c3000 0x0 0x1000>;
};
+ pcie0: pci@1b80000 {
+ compatible = "qcom,nord-pcie", "qcom,pcie-sa8775p";
+
+ reg = <0x00 0x01b80000 0x00 0x00004000>,
+ <0x00 0x40000000 0x00 0x00000f20>,
+ <0x00 0x40000f20 0x00 0x000000a8>,
+ <0x00 0x40010000 0x00 0x00020000>,
+ <0x00 0x40100000 0x00 0x00100000>,
+ <0x00 0x01b84000 0x00 0x00001000>;
+ reg-names = "parf",
+ "dbi",
+ "elbi",
+ "atu",
+ "config",
+ "mhi";
+
+ ranges = <0x01000000 0x0 0x00000000 0x0 0x40200000 0x0 0x100000>,
+ <0x02000000 0x0 0x40300000 0x0 0x40300000 0x0 0xfd00000>;
+
+ bus-range = <0x00 0xff>;
+ device_type = "pci";
+ linux,pci-domain = <0>;
+ num-lanes = <8>;
+
+ #address-cells = <3>;
+ #size-cells = <2>;
+
+ dma-coherent;
+
+ interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "msi0",
+ "msi1",
+ "msi2",
+ "msi3",
+ "msi4",
+ "msi5",
+ "msi6",
+ "msi7",
+ "global";
+ #interrupt-cells = <1>;
+ interrupt-map-mask = <0 0 0 0x7>;
+ interrupt-map = <0 0 0 1 &intc 0 0 0 149 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 2 &intc 0 0 0 150 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 3 &intc 0 0 0 151 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 4 &intc 0 0 0 152 IRQ_TYPE_LEVEL_HIGH>;
+
+ iommu-map = <0x0 &pcie_smmu 0x0000 0x10000>;
+
+ msi-map = <0x0 &gic_its 0x80000 0x10000>;
+
+ status = "disabled";
+
+ pcie0_port0: pcie@0 {
+ compatible = "pciclass,0604";
+ reg = <0 0 0 0 0>;
+ bus-range = <0x01 0xff>;
+ device_type = "pci";
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+ };
+ };
+
+ pcie1: pci@1b88000 {
+ compatible = "qcom,nord-pcie", "qcom,pcie-sa8775p";
+
+ reg = <0x00 0x01b88000 0x00 0x00004000>,
+ <0x00 0x50000000 0x00 0x00000f20>,
+ <0x00 0x50000f20 0x00 0x000000a8>,
+ <0x00 0x50010000 0x00 0x00010000>,
+ <0x00 0x50100000 0x00 0x00100000>,
+ <0x00 0x01b8c000 0x00 0x00001000>;
+ reg-names = "parf",
+ "dbi",
+ "elbi",
+ "atu",
+ "config",
+ "mhi";
+
+ ranges = <0x01000000 0x0 0x00000000 0x0 0x50200000 0x0 0x100000>,
+ <0x02000000 0x0 0x50300000 0x0 0x50300000 0x0 0xfd00000>;
+
+ bus-range = <0x00 0xff>;
+ device_type = "pci";
+ linux,pci-domain = <1>;
+ num-lanes = <4>;
+
+ #address-cells = <3>;
+ #size-cells = <2>;
+
+ dma-coherent;
+
+ interrupts = <GIC_SPI 834 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 833 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 845 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 842 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 824 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 349 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 949 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "msi0",
+ "msi1",
+ "msi2",
+ "msi3",
+ "msi4",
+ "msi5",
+ "msi6",
+ "msi7",
+ "global";
+ #interrupt-cells = <1>;
+ interrupt-map-mask = <0 0 0 0x7>;
+ interrupt-map = <0 0 0 1 &intc 0 0 0 835 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 2 &intc 0 0 0 351 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 3 &intc 0 0 0 830 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 4 &intc 0 0 0 348 IRQ_TYPE_LEVEL_HIGH>;
+
+ msi-map = <0x0 &gic_its 0x90000 0x10000>;
+
+ iommu-map = <0x0 &pcie_smmu 0x10000 0x10000>;
+
+ status = "disabled";
+
+ pcie1_port0: pcie@0 {
+ device_type = "pci";
+ compatible = "pciclass,0604";
+ reg = <0 0 0 0 0>;
+ bus-range = <0x01 0xff>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+ };
+ };
+
+ pcie2: pci@1b90000 {
+ compatible = "qcom,nord-pcie", "qcom,pcie-sa8775p";
+
+ reg = <0x00 0x01b90000 0x00 0x00004000>,
+ <0x00 0x60000000 0x00 0x00000f20>,
+ <0x00 0x60000f20 0x00 0x000000a8>,
+ <0x00 0x60010000 0x00 0x00010000>,
+ <0x00 0x60100000 0x00 0x00100000>,
+ <0x00 0x01b94000 0x00 0x00001000>;
+ reg-names = "parf",
+ "dbi",
+ "elbi",
+ "atu",
+ "config",
+ "mhi";
+
+ ranges = <0x01000000 0x0 0x00000000 0x0 0x60200000 0x0 0x100000>,
+ <0x02000000 0x0 0x60300000 0x0 0x60300000 0x0 0xfd00000>;
+
+ bus-range = <0x00 0xff>;
+ device_type = "pci";
+ linux,pci-domain = <2>;
+ num-lanes = <2>;
+
+ #address-cells = <3>;
+ #size-cells = <2>;
+
+ dma-coherent;
+
+ interrupts = <GIC_SPI 844 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 838 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 825 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 846 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 350 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 837 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 464 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "msi0",
+ "msi1",
+ "msi2",
+ "msi3",
+ "msi4",
+ "msi5",
+ "msi6",
+ "msi7",
+ "global";
+ #interrupt-cells = <1>;
+ interrupt-map-mask = <0 0 0 0x7>;
+ interrupt-map = <0 0 0 1 &intc 0 0 0 263 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 2 &intc 0 0 0 154 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 3 &intc 0 0 0 110 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 4 &intc 0 0 0 258 IRQ_TYPE_LEVEL_HIGH>;
+
+ iommu-map = <0x0 &pcie_smmu 0x20000 0x10000>;
+
+ msi-map = <0x0 &gic_its 0xa0000 0x10000>;
+
+ status = "disabled";
+
+ pcie2_port0: pcie@0 {
+ device_type = "pci";
+ compatible = "pciclass,0604";
+ reg = <0 0 0 0 0>;
+ bus-range = <0x01 0xff>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+ };
+ };
+
+ pcie3: pci@1b98000 {
+ compatible = "qcom,nord-pcie", "qcom,pcie-sa8775p";
+
+ reg = <0x00 0x01b98000 0x00 0x00004000>,
+ <0x00 0x70000000 0x00 0x00000f20>,
+ <0x00 0x70000f20 0x00 0x000000a8>,
+ <0x00 0x70010000 0x00 0x00010000>,
+ <0x00 0x70100000 0x00 0x00100000>,
+ <0x00 0x01b9c000 0x00 0x00001000>;
+ reg-names = "parf",
+ "dbi",
+ "elbi",
+ "atu",
+ "config",
+ "mhi";
+
+ ranges = <0x01000000 0x0 0x00000000 0x0 0x70200000 0x0 0x100000>,
+ <0x02000000 0x0 0x70300000 0x0 0x70300000 0x0 0xfd00000>;
+
+ bus-range = <0x00 0xff>;
+ device_type = "pci";
+ linux,pci-domain = <3>;
+ num-lanes = <2>;
+
+ #address-cells = <3>;
+ #size-cells = <2>;
+
+ dma-coherent;
+
+ interrupts = <GIC_SPI 364 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 831 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 659 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 840 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 823 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 241 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 240 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 465 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "msi0",
+ "msi1",
+ "msi2",
+ "msi3",
+ "msi4",
+ "msi5",
+ "msi6",
+ "msi7",
+ "global";
+ #interrupt-cells = <1>;
+ interrupt-map-mask = <0 0 0 0x7>;
+ interrupt-map = <0 0 0 1 &intc 0 0 0 111 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 2 &intc 0 0 0 246 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 3 &intc 0 0 0 239 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 4 &intc 0 0 0 234 IRQ_TYPE_LEVEL_HIGH>;
+
+ msi-map = <0x0 &gic_its 0xb0000 0x10000>;
+
+ iommu-map = <0x0 &pcie_smmu 0x30000 0x10000>;
+
+ status = "disabled";
+
+ pcie3_port0: pcie@0 {
+ device_type = "pci";
+ compatible = "pciclass,0604";
+ reg = <0 0 0 0 0>;
+ bus-range = <0x01 0xff>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges;
+ };
+ };
+
ufs_mem_hc: ufshc@1d44000 {
compatible = "qcom,nord-ufshc",
"qcom,ufshc",
@@ -1736,6 +2020,19 @@ ipcc0: mailbox@9007000 {
#mbox-cells = <2>;
};
+ pcie_smmu: iommu@9980000 {
+ compatible = "arm,smmu-v3";
+ reg = <0x0 0x09980000 0x0 0x20000>;
+ interrupts = <GIC_SPI 898 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 900 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 902 IRQ_TYPE_EDGE_RISING>;
+ interrupt-names = "eventq",
+ "cmdq-sync",
+ "gerror";
+ dma-coherent;
+ #iommu-cells = <1>;
+ };
+
pdc: interrupt-controller@b220000 {
compatible = "qcom,nord-pdc",
"qcom,pdc";
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 2/5] arm64: dts: qcom: nord-rrd: Enable PCIe controllers and PHY
2026-09-15 1:56 [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and WLAN support Shawn Guo
2026-09-15 1:56 ` [PATCH v2 1/5] arm64: dts: qcom: nord: Add PCIe PHY and controller nodes Shawn Guo
@ 2026-09-15 1:56 ` Shawn Guo
2026-09-15 1:56 ` [PATCH v2 3/5] arm64: dts: qcom: nord-ride-embedded: " Shawn Guo
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Shawn Guo @ 2026-09-15 1:56 UTC (permalink / raw)
To: Bjorn Andersson
Cc: Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartosz Golaszewski, Krishna Chaitanya Chundru, Yu Zhang,
devicetree, linux-arm-msm, linux-kernel, Konrad Dybcio,
Abel Vesa, Bartosz Golaszewski, Shawn Guo
From: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
The Nord Robotics Reference Design board routes all four PCIe links, so
enable pcie0-pcie3 and the QMP PHY, supply the per-port PHY and PLL
rails, and describe the PERST# and WAKE# lines of each root port.
Signed-off-by: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Signed-off-by: Shawn Guo <shengchao.guo@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/nord-rrd.dts | 49 +++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/nord-rrd.dts b/arch/arm64/boot/dts/qcom/nord-rrd.dts
index c547963371b4..4c4d54d7aa90 100644
--- a/arch/arm64/boot/dts/qcom/nord-rrd.dts
+++ b/arch/arm64/boot/dts/qcom/nord-rrd.dts
@@ -377,6 +377,55 @@ rtc@32 {
};
};
+&pcie_phy {
+ vdda-phy-a-supply = <&vreg_l6a_1p2>;
+ vdda-phy-b-supply = <&vreg_l4a_1p2>;
+ vdda-phy-c-supply = <&vreg_l4a_1p2>;
+ vdda-phy-d-supply = <&vreg_l4a_1p2>;
+ vdda-pll-a-supply = <&vreg_l1e_0p9>;
+ vdda-pll-b-supply = <&vreg_l1e_0p9>;
+ vdda-pll-c-supply = <&vreg_l1e_0p9>;
+ vdda-pll-d-supply = <&vreg_l1e_0p9>;
+
+ status = "okay";
+};
+
+&pcie0 {
+ status = "okay";
+};
+
+&pcie0_port0 {
+ reset-gpios = <&tlmm 2 GPIO_ACTIVE_LOW>;
+ wake-gpios = <&tlmm 0 GPIO_ACTIVE_LOW>;
+};
+
+&pcie1 {
+ status = "okay";
+};
+
+&pcie1_port0 {
+ reset-gpios = <&tlmm 5 GPIO_ACTIVE_LOW>;
+ wake-gpios = <&tlmm 3 GPIO_ACTIVE_LOW>;
+};
+
+&pcie2 {
+ status = "okay";
+};
+
+&pcie2_port0 {
+ reset-gpios = <&tlmm 8 GPIO_ACTIVE_LOW>;
+ wake-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>;
+};
+
+&pcie3 {
+ status = "okay";
+};
+
+&pcie3_port0 {
+ reset-gpios = <&tlmm 11 GPIO_ACTIVE_LOW>;
+ wake-gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;
+};
+
&qupv3_0 {
firmware-name = "qcom/nord/qupv3fw.elf";
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 3/5] arm64: dts: qcom: nord-ride-embedded: Enable PCIe controllers and PHY
2026-09-15 1:56 [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and WLAN support Shawn Guo
2026-09-15 1:56 ` [PATCH v2 1/5] arm64: dts: qcom: nord: Add PCIe PHY and controller nodes Shawn Guo
2026-09-15 1:56 ` [PATCH v2 2/5] arm64: dts: qcom: nord-rrd: Enable PCIe controllers and PHY Shawn Guo
@ 2026-09-15 1:56 ` Shawn Guo
2026-09-15 1:56 ` [PATCH v2 4/5] arm64: dts: qcom: nord-ride-embedded: Add WCN7850 WLAN support Shawn Guo
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Shawn Guo @ 2026-09-15 1:56 UTC (permalink / raw)
To: Bjorn Andersson
Cc: Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartosz Golaszewski, Krishna Chaitanya Chundru, Yu Zhang,
devicetree, linux-arm-msm, linux-kernel, Konrad Dybcio,
Abel Vesa, Bartosz Golaszewski, Shawn Guo
From: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
The Nord Ride Embedded board routes all four PCIe links, so enable
pcie0-pcie3 and the QMP PHY, supply the per-port PHY and PLL rails, and
describe the PERST# and WAKE# lines of each root port.
Signed-off-by: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Signed-off-by: Shawn Guo <shengchao.guo@oss.qualcomm.com>
---
.../boot/dts/qcom/nord-ride-embedded.dts | 49 +++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/nord-ride-embedded.dts b/arch/arm64/boot/dts/qcom/nord-ride-embedded.dts
index 09ee525764ef..0b230551a49f 100644
--- a/arch/arm64/boot/dts/qcom/nord-ride-embedded.dts
+++ b/arch/arm64/boot/dts/qcom/nord-ride-embedded.dts
@@ -366,6 +366,55 @@ vreg_l3l_1p8: ldo3 {
};
};
+&pcie_phy {
+ vdda-phy-a-supply = <&vreg_l6a_1p2>;
+ vdda-phy-b-supply = <&vreg_l4a_1p2>;
+ vdda-phy-c-supply = <&vreg_l4a_1p2>;
+ vdda-phy-d-supply = <&vreg_l4a_1p2>;
+ vdda-pll-a-supply = <&vreg_l1e_0p9>;
+ vdda-pll-b-supply = <&vreg_l1e_0p9>;
+ vdda-pll-c-supply = <&vreg_l1e_0p9>;
+ vdda-pll-d-supply = <&vreg_l1e_0p9>;
+
+ status = "okay";
+};
+
+&pcie0 {
+ status = "okay";
+};
+
+&pcie0_port0 {
+ reset-gpios = <&tlmm 2 GPIO_ACTIVE_LOW>;
+ wake-gpios = <&tlmm 0 GPIO_ACTIVE_LOW>;
+};
+
+&pcie1 {
+ status = "okay";
+};
+
+&pcie1_port0 {
+ reset-gpios = <&tlmm 5 GPIO_ACTIVE_LOW>;
+ wake-gpios = <&tlmm 3 GPIO_ACTIVE_LOW>;
+};
+
+&pcie2 {
+ status = "okay";
+};
+
+&pcie2_port0 {
+ reset-gpios = <&tlmm 8 GPIO_ACTIVE_LOW>;
+ wake-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>;
+};
+
+&pcie3 {
+ status = "okay";
+};
+
+&pcie3_port0 {
+ reset-gpios = <&tlmm 11 GPIO_ACTIVE_LOW>;
+ wake-gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;
+};
+
&qupv3_0 {
firmware-name = "qcom/nord/qupv3fw.elf";
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 4/5] arm64: dts: qcom: nord-ride-embedded: Add WCN7850 WLAN support
2026-09-15 1:56 [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and WLAN support Shawn Guo
` (2 preceding siblings ...)
2026-09-15 1:56 ` [PATCH v2 3/5] arm64: dts: qcom: nord-ride-embedded: " Shawn Guo
@ 2026-09-15 1:56 ` Shawn Guo
2026-09-15 1:56 ` [PATCH v2 5/5] arm64: dts: qcom: nord-rrd: " Shawn Guo
2026-09-28 1:56 ` [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and " Bjorn Andersson
5 siblings, 0 replies; 7+ messages in thread
From: Shawn Guo @ 2026-09-15 1:56 UTC (permalink / raw)
To: Bjorn Andersson
Cc: Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartosz Golaszewski, Krishna Chaitanya Chundru, Yu Zhang,
devicetree, linux-arm-msm, linux-kernel, Abel Vesa,
Konrad Dybcio, Bartosz Golaszewski, Shawn Guo
From: "Yu Zhang(Yuriy)" <yu.zhang@oss.qualcomm.com>
The Nord Ride Embedded board carries a QCA6797AQ (WCN7850) LGA module on
a connectivity adapter card hanging off PCIe2. Two PMIC GPIOs gate the
module supplies: PWR_CORE (pmau0102_e GPIO6) enables the DBU_CORE_VL,
DBU_CORE_VM and DBU_CORE_VH regulators feeding VDD_CORE_VL/VM/VH, and
PWR_CTRL1 (pmau0102_e GPIO8) enables DBU4, which produces the 3.3 V rail.
PWR_CTRL2 drives DBU3, which is not populated, so it is left alone.
Describe those rails, the WCN7850 PMU that derives the chip supplies from
them, and the PCIe endpoint node consuming the PMU outputs.
Signed-off-by: Yu Zhang (Yuriy) <yu.zhang@oss.qualcomm.com>
Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Signed-off-by: Shawn Guo <shengchao.guo@oss.qualcomm.com>
---
.../boot/dts/qcom/nord-ride-embedded.dts | 102 ++++++++++++++++++
1 file changed, 102 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/nord-ride-embedded.dts b/arch/arm64/boot/dts/qcom/nord-ride-embedded.dts
index 0b230551a49f..38d50f040c4d 100644
--- a/arch/arm64/boot/dts/qcom/nord-ride-embedded.dts
+++ b/arch/arm64/boot/dts/qcom/nord-ride-embedded.dts
@@ -53,6 +53,93 @@ bi_tcxo_ao_div2: bi-tcxo-ao-div2-clk {
clock-div = <2>;
};
};
+
+ vreg_wcn_3p3: regulator-wcn-3p3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_wcn_3p3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&pmau0102_e_gpios 8 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ vreg_wcn_core_vl_0p95: regulator-wcn-core-vl-0p95 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_wcn_core_vl_0p95";
+ regulator-min-microvolt = <950000>;
+ regulator-max-microvolt = <950000>;
+ gpio = <&pmau0102_e_gpios 6 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ vreg_wcn_core_vm_1p35: regulator-wcn-core-vm-1p35 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_wcn_core_vm_1p35";
+ regulator-min-microvolt = <1350000>;
+ regulator-max-microvolt = <1350000>;
+ gpio = <&pmau0102_e_gpios 6 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ vreg_wcn_core_vh_1p95: regulator-wcn-core-vh-1p95 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_wcn_core_vh_1p95";
+ regulator-min-microvolt = <1950000>;
+ regulator-max-microvolt = <1950000>;
+ gpio = <&pmau0102_e_gpios 6 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ wcn7850-pmu {
+ compatible = "qcom,wcn7850-pmu";
+
+ wlan-enable-gpios = <&pmau0102_e_gpios 10 GPIO_ACTIVE_HIGH>;
+
+ vdd-supply = <&vreg_wcn_3p3>;
+ vddio-supply = <&vreg_s3a_1p8>;
+ vddaon-supply = <&vreg_wcn_core_vl_0p95>;
+ vdddig-supply = <&vreg_wcn_core_vl_0p95>;
+ vddrfa1p2-supply = <&vreg_wcn_core_vm_1p35>;
+ vddrfa1p8-supply = <&vreg_wcn_core_vh_1p95>;
+
+ regulators {
+ vreg_pmu_rfa_cmn: ldo0 {
+ regulator-name = "vreg_pmu_rfa_cmn";
+ };
+
+ vreg_pmu_aon_0p59: ldo1 {
+ regulator-name = "vreg_pmu_aon_0p59";
+ };
+
+ vreg_pmu_wlcx_0p8: ldo2 {
+ regulator-name = "vreg_pmu_wlcx_0p8";
+ };
+
+ vreg_pmu_wlmx_0p85: ldo3 {
+ regulator-name = "vreg_pmu_wlmx_0p85";
+ };
+
+ vreg_pmu_rfa_0p8: ldo5 {
+ regulator-name = "vreg_pmu_rfa_0p8";
+ };
+
+ vreg_pmu_rfa_1p2: ldo6 {
+ regulator-name = "vreg_pmu_rfa_1p2";
+ };
+
+ vreg_pmu_rfa_1p8: ldo7 {
+ regulator-name = "vreg_pmu_rfa_1p8";
+ };
+
+ vreg_pmu_pcie_0p9: ldo8 {
+ regulator-name = "vreg_pmu_pcie_0p9";
+ };
+
+ vreg_pmu_pcie_1p8: ldo9 {
+ regulator-name = "vreg_pmu_pcie_1p8";
+ };
+ };
+ };
};
&apps_rsc {
@@ -404,6 +491,21 @@ &pcie2 {
&pcie2_port0 {
reset-gpios = <&tlmm 8 GPIO_ACTIVE_LOW>;
wake-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>;
+
+ wifi@0 {
+ compatible = "pci17cb,1107";
+ reg = <0x10000 0x0 0x0 0x0 0x0>;
+
+ vddaon-supply = <&vreg_pmu_aon_0p59>;
+ vddwlcx-supply = <&vreg_pmu_wlcx_0p8>;
+ vddwlmx-supply = <&vreg_pmu_wlmx_0p85>;
+ vddrfacmn-supply = <&vreg_pmu_rfa_cmn>;
+ vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>;
+ vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>;
+ vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>;
+ vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>;
+ vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>;
+ };
};
&pcie3 {
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 5/5] arm64: dts: qcom: nord-rrd: Add WCN7850 WLAN support
2026-09-15 1:56 [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and WLAN support Shawn Guo
` (3 preceding siblings ...)
2026-09-15 1:56 ` [PATCH v2 4/5] arm64: dts: qcom: nord-ride-embedded: Add WCN7850 WLAN support Shawn Guo
@ 2026-09-15 1:56 ` Shawn Guo
2026-09-28 1:56 ` [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and " Bjorn Andersson
5 siblings, 0 replies; 7+ messages in thread
From: Shawn Guo @ 2026-09-15 1:56 UTC (permalink / raw)
To: Bjorn Andersson
Cc: Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartosz Golaszewski, Krishna Chaitanya Chundru, Yu Zhang,
devicetree, linux-arm-msm, linux-kernel, Shawn Guo, Abel Vesa,
Konrad Dybcio, Bartosz Golaszewski
The IQ10 Robotics Reference Design carries a Hamilton (WCN7850) module on
a board-to-board connector hanging off PCIe2, using two lanes.
Unlike the Ride Embedded board, the RRD generates the module supplies
itself rather than relying on the module DBUs: three discrete buck
converters produce VDD_CORE_VL, VDD_CORE_VM and VDD_CORE_VH (0.95 V,
1.35 V and 1.95 V), all gated by WLAN0_CORE_PWR_EN on pmau0102_e GPIO6,
while the 3.3 V and 1.8 V I/O rails are strapped to the always-on
peripheral rails. WLAN0_EN on pmau0102_e GPIO10 releases the module
itself.
Describe those rails, the WCN7850 PMU that derives the chip supplies from
them, and the PCIe endpoint node consuming the PMU outputs.
Assisted-by: LLM
Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Signed-off-by: Shawn Guo <shengchao.guo@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/nord-rrd.dts | 109 ++++++++++++++++++++++++++
1 file changed, 109 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/nord-rrd.dts b/arch/arm64/boot/dts/qcom/nord-rrd.dts
index 4c4d54d7aa90..c8a6df21fa87 100644
--- a/arch/arm64/boot/dts/qcom/nord-rrd.dts
+++ b/arch/arm64/boot/dts/qcom/nord-rrd.dts
@@ -53,6 +53,100 @@ bi_tcxo_ao_div2: bi-tcxo-ao-div2-clk {
clock-div = <2>;
};
};
+
+ vreg_wcn_3p3: regulator-wcn-3p3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_wcn_3p3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-always-on;
+ };
+
+ vreg_wcn_vddio_1p8: regulator-wcn-vddio-1p8 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_wcn_vddio_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-always-on;
+ };
+
+ vreg_wcn_core_vl_0p95: regulator-wcn-core-vl-0p95 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_wcn_core_vl_0p95";
+ regulator-min-microvolt = <950000>;
+ regulator-max-microvolt = <950000>;
+ gpio = <&pmau0102_e_gpios 6 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ vreg_wcn_core_vm_1p35: regulator-wcn-core-vm-1p35 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_wcn_core_vm_1p35";
+ regulator-min-microvolt = <1350000>;
+ regulator-max-microvolt = <1350000>;
+ gpio = <&pmau0102_e_gpios 6 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ vreg_wcn_core_vh_1p95: regulator-wcn-core-vh-1p95 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_wcn_core_vh_1p95";
+ regulator-min-microvolt = <1950000>;
+ regulator-max-microvolt = <1950000>;
+ gpio = <&pmau0102_e_gpios 6 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ wcn7850-pmu {
+ compatible = "qcom,wcn7850-pmu";
+
+ wlan-enable-gpios = <&pmau0102_e_gpios 10 GPIO_ACTIVE_HIGH>;
+
+ vdd-supply = <&vreg_wcn_3p3>;
+ vddio-supply = <&vreg_wcn_vddio_1p8>;
+ vddaon-supply = <&vreg_wcn_core_vl_0p95>;
+ vdddig-supply = <&vreg_wcn_core_vl_0p95>;
+ vddrfa1p2-supply = <&vreg_wcn_core_vm_1p35>;
+ vddrfa1p8-supply = <&vreg_wcn_core_vh_1p95>;
+
+ regulators {
+ vreg_pmu_rfa_cmn: ldo0 {
+ regulator-name = "vreg_pmu_rfa_cmn";
+ };
+
+ vreg_pmu_aon_0p59: ldo1 {
+ regulator-name = "vreg_pmu_aon_0p59";
+ };
+
+ vreg_pmu_wlcx_0p8: ldo2 {
+ regulator-name = "vreg_pmu_wlcx_0p8";
+ };
+
+ vreg_pmu_wlmx_0p85: ldo3 {
+ regulator-name = "vreg_pmu_wlmx_0p85";
+ };
+
+ vreg_pmu_rfa_0p8: ldo5 {
+ regulator-name = "vreg_pmu_rfa_0p8";
+ };
+
+ vreg_pmu_rfa_1p2: ldo6 {
+ regulator-name = "vreg_pmu_rfa_1p2";
+ };
+
+ vreg_pmu_rfa_1p8: ldo7 {
+ regulator-name = "vreg_pmu_rfa_1p8";
+ };
+
+ vreg_pmu_pcie_0p9: ldo8 {
+ regulator-name = "vreg_pmu_pcie_0p9";
+ };
+
+ vreg_pmu_pcie_1p8: ldo9 {
+ regulator-name = "vreg_pmu_pcie_1p8";
+ };
+ };
+ };
};
&apps_rsc {
@@ -415,6 +509,21 @@ &pcie2 {
&pcie2_port0 {
reset-gpios = <&tlmm 8 GPIO_ACTIVE_LOW>;
wake-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>;
+
+ wifi@0 {
+ compatible = "pci17cb,1107";
+ reg = <0x10000 0x0 0x0 0x0 0x0>;
+
+ vddaon-supply = <&vreg_pmu_aon_0p59>;
+ vddwlcx-supply = <&vreg_pmu_wlcx_0p8>;
+ vddwlmx-supply = <&vreg_pmu_wlmx_0p85>;
+ vddrfacmn-supply = <&vreg_pmu_rfa_cmn>;
+ vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>;
+ vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>;
+ vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>;
+ vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>;
+ vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>;
+ };
};
&pcie3 {
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and WLAN support
2026-09-15 1:56 [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and WLAN support Shawn Guo
` (4 preceding siblings ...)
2026-09-15 1:56 ` [PATCH v2 5/5] arm64: dts: qcom: nord-rrd: " Shawn Guo
@ 2026-09-28 1:56 ` Bjorn Andersson
5 siblings, 0 replies; 7+ messages in thread
From: Bjorn Andersson @ 2026-09-28 1:56 UTC (permalink / raw)
To: Shawn Guo
Cc: Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartosz Golaszewski, Krishna Chaitanya Chundru, Yu Zhang,
devicetree, linux-arm-msm, linux-kernel
On Tue, Sep 15, 2026 at 09:56:27AM +0800, Shawn Guo wrote:
> This series enables PCIe on the Qualcomm Nord SoC and brings up the WLAN
> modules on the two reference boards.
>
> Nord has four PCIe controllers fed by a single quadfurcated Gen5 QMP
> multi-PHY. The link topology (x16, x8+x8, x8+x4+x4 or x8+x4+x2+x2) is
> selected by firmware through a TCSR register that the PHY driver reads at
> probe time, so the DT only describes the PHY ports and hands the driver
> the TCSR handle. Patch 1 adds the PHY, the four controllers and the PCIe
> SMMU; patches 2 and 3 enable them on the IQ10 Robotics Reference Design
> and the Ride Embedded board respectively, along with the per-port PERST#
> and WAKE# lines.
>
> Patches 4 and 5 add the WCN7850 WLAN module sitting on PCIe2 on both
> boards. The two boards power the module differently: the Ride Embedded
> connectivity adapter card derives the core rails from the module DBUs
> gated by PWR_CORE and PWR_CTRL1, whereas the RRD generates them with
> discrete on-board bucks behind a single core power enable. Both are
> described as they are wired.
>
> This depends on the Nord Gen5x16 multi-PHY driver support [1], without
> which the PHY does not probe.
>
> Dependencies:
> - PCIe and PHY: https://lore.kernel.org/all/20260909-nord-v3-0-b0a82721c547@oss.qualcomm.com/
This doesn't look like it will be merged, please retest and resubmit
once the dependencies has been accepted.
Thanks,
Bjorn
> - DTS prerequisite: https://lore.kernel.org/all/20260904081619.593602-1-shengchao.guo@oss.qualcomm.com/
>
> Changes for v2:
> - Add missing leading zero for pcie_smmu reg property
> - Link to v1: https://lore.kernel.org/all/20260914071944.164217-1-shengchao.guo@oss.qualcomm.com/
>
> Krishna Chaitanya Chundru (3):
> arm64: dts: qcom: nord: Add PCIe PHY and controller nodes
> arm64: dts: qcom: nord-rrd: Enable PCIe controllers and PHY
> arm64: dts: qcom: nord-ride-embedded: Enable PCIe controllers and PHY
>
> Shawn Guo (1):
> arm64: dts: qcom: nord-rrd: Add WCN7850 WLAN support
>
> Yu Zhang(Yuriy) (1):
> arm64: dts: qcom: nord-ride-embedded: Add WCN7850 WLAN support
>
> arch/arm64/boot/dts/qcom/nord-embedded.dtsi | 926 +++++++++++++++++-
> .../boot/dts/qcom/nord-ride-embedded.dts | 151 +++
> arch/arm64/boot/dts/qcom/nord-rrd.dts | 158 +++
> arch/arm64/boot/dts/qcom/nord.dtsi | 297 ++++++
> 4 files changed, 1528 insertions(+), 4 deletions(-)
>
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-09-28 1:56 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-15 1:56 [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and WLAN support Shawn Guo
2026-09-15 1:56 ` [PATCH v2 1/5] arm64: dts: qcom: nord: Add PCIe PHY and controller nodes Shawn Guo
2026-09-15 1:56 ` [PATCH v2 2/5] arm64: dts: qcom: nord-rrd: Enable PCIe controllers and PHY Shawn Guo
2026-09-15 1:56 ` [PATCH v2 3/5] arm64: dts: qcom: nord-ride-embedded: " Shawn Guo
2026-09-15 1:56 ` [PATCH v2 4/5] arm64: dts: qcom: nord-ride-embedded: Add WCN7850 WLAN support Shawn Guo
2026-09-15 1:56 ` [PATCH v2 5/5] arm64: dts: qcom: nord-rrd: " Shawn Guo
2026-09-28 1:56 ` [PATCH v2 0/5] arm64: dts: qcom: nord: Add PCIe and " Bjorn Andersson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®