From: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
To: "Vinod Koul" <vkoul@kernel.org>,
"Neil Armstrong" <neil.armstrong@linaro.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
"Manivannan Sadhasivam" <mani@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Bjorn Andersson" <andersson@kernel.org>,
"Maxime Chevallier" <maxime.chevallier@bootlin.com>,
"Philipp Zabel" <p.zabel@pengutronix.de>
Cc: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>,
linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-pci@vger.kernel.org
Subject: [PATCH 1/4] dt-bindings: phy: qcom: add Nord QMP PCIe PHY binding
Date: Tue, 25 Aug 2026 09:10:22 +0530 [thread overview]
Message-ID: <20260825-nord-v1-1-7c02f2b8765a@oss.qualcomm.com> (raw)
In-Reply-To: <20260825-nord-v1-0-7c02f2b8765a@oss.qualcomm.com>
Document the PCIe PHY found on the Qualcomm Nord platform.
Nord has a Gen5-capable QMP PCIe PHY that can operate in multiple
lane configurations using four PHY segments (A/B/C/D). The active
topology is selected by firmware through a TCSR configuration
register and may be configured as x16, x8+x8, x8+x4+x4, or
x8+x4+x2+x2.
The binding describes the register regions, clocks, resets, power
domains, regulators, PHY provider interface, clock provider interface,
and the qcom,link-mode property used by the driver to discover the
active lane configuration programmed by firmware.
Signed-off-by: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
---
.../bindings/phy/qcom,nord-qmp-pcie-phy.yaml | 276 +++++++++++++++++++++
1 file changed, 276 insertions(+)
diff --git a/Documentation/devicetree/bindings/phy/qcom,nord-qmp-pcie-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,nord-qmp-pcie-phy.yaml
new file mode 100644
index 000000000000..3575e99dadfd
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/qcom,nord-qmp-pcie-phy.yaml
@@ -0,0 +1,276 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/qcom,nord-qmp-pcie-phy.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm Nord QMP Bifurcated PCIe PHY
+
+maintainers:
+ - Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
+
+description: |
+ The Qualcomm Nord PCIe PHY is a Gen5-capable QMP PCIe PHY composed
+ of four PHY ports (A/B/C/D). The ports can be combined to support
+ multiple lane topologies, including x16, x8+x8, x8+x4+x4 and
+ x8+x4+x2+x2 configurations.
+
+ The selected topology is determined by the PCIe link configuration mode
+ programmed in TCSR registers. Depending on the selected mode, PHY ports
+ may operate independently or be grouped together to form wider PCIe links.
+
+ Each port provides dedicated register space, clocks, resets and power
+ resources required for PHY operation.
+
+properties:
+ compatible:
+ enum:
+ - qcom,nord-qmp-gen5x16-pcie-phy
+
+ reg:
+ minItems: 4
+ maxItems: 4
+
+ reg-names:
+ items:
+ - const: port_a
+ - const: port_b
+ - const: port_c
+ - const: port_d
+
+ clocks:
+ minItems: 17
+ maxItems: 17
+
+ clock-names:
+ items:
+ - const: aux_a
+ - const: cfg_ahb_a
+ - const: rchng_a
+ - const: pipe_a
+ - const: aux_b
+ - const: cfg_ahb_b
+ - const: rchng_b
+ - const: pipe_b
+ - const: aux_c
+ - const: cfg_ahb_c
+ - const: rchng_c
+ - const: pipe_c
+ - const: aux_d
+ - const: cfg_ahb_d
+ - const: rchng_d
+ - const: pipe_d
+ - const: ref
+
+ power-domains:
+ minItems: 4
+ maxItems: 4
+
+ power-domain-names:
+ items:
+ - const: port_a
+ - const: port_b
+ - const: port_c
+ - const: port_d
+
+ resets:
+ minItems: 8
+ maxItems: 8
+
+ reset-names:
+ items:
+ - const: port_a
+ - const: port_a_nocsr
+ - const: port_b
+ - const: port_b_nocsr
+ - const: port_c
+ - const: port_c_nocsr
+ - const: port_d
+ - const: port_d_nocsr
+
+ vdda-phy-a-supply: true
+
+ vdda-phy-b-supply: true
+
+ vdda-phy-c-supply: true
+
+ vdda-phy-d-supply: true
+
+ vdda-pll-a-supply: true
+
+ vdda-pll-b-supply: true
+
+ vdda-pll-c-supply: true
+
+ vdda-pll-d-supply: true
+
+ qcom,link-mode:
+ description: |
+ Reference to the TCSR syscon and the offset of the
+ TCSR_PCIE_LINK_CONFIG_MODE register.
+ 0 (QMP_PCIE_NORD_MODE_X16) — all ports ganged as x16
+ 1 (QMP_PCIE_NORD_MODE_X8_X8) — x8 (port A) + x8 (port B+C+D)
+ 2 (QMP_PCIE_NORD_MODE_X8_X4_X4) — x8 (A) + x4 (B) + x4 (C+D)
+ 3 (QMP_PCIE_NORD_MODE_X8_X4_X2_X2)— x8 (A) + x4 (B) + x2 (C) + x2 (D)
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ items:
+ - items:
+ - description: Phandle of the TCSR syscon
+ - description: Offset of TCSR_PCIE_LINK_CONFIG_MODE register
+
+ "#clock-cells":
+ const: 1
+ description: |
+ Selects the pipe clock output by port index (0=A, 1=B, 2=C, 3=D).
+ GCC pipe-clock mux parents reference this provider.
+
+ clock-output-names:
+ minItems: 1
+ maxItems: 4
+ description: Names for each port pipe clock output.
+
+ "#phy-cells":
+ const: 1
+ description: |
+ Selects the PHY instance by index:
+ 0 — port A (up to Gen4 x8; anchor in x16 mode)
+ 1 — port B (up to Gen4 x4)
+ 2 — port C (up to Gen2 x2)
+ 3 — port D (up to Gen2 x2)
+
+required:
+ - compatible
+ - reg
+ - reg-names
+ - clocks
+ - clock-names
+ - power-domains
+ - power-domain-names
+ - resets
+ - reset-names
+ - vdda-phy-a-supply
+ - vdda-phy-b-supply
+ - vdda-phy-c-supply
+ - vdda-phy-d-supply
+ - vdda-pll-a-supply
+ - vdda-pll-b-supply
+ - vdda-pll-c-supply
+ - vdda-pll-d-supply
+ - qcom,link-mode
+ - "#clock-cells"
+ - clock-output-names
+ - "#phy-cells"
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/qcom,nord-gcc.h>
+ #include <dt-bindings/clock/qcom,nord-tcsrcc.h>
+ #include <dt-bindings/phy/phy-qcom-qmp.h>
+
+ soc {
+ #address-cells = <2>;
+ #size-cells = <2>;
+
+ 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>,
+ <&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>,
+ <&tcsrcc TCSR_PCIE_CLKREF_EN>;
+ clock-names = "aux_a",
+ "cfg_ahb_a",
+ "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",
+ "ref";
+
+ 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";
+
+ 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>;
+
+ 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";
+ };
+ };
--
2.34.1
next prev parent reply other threads:[~2026-08-25 3:40 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-25 3:40 [PATCH 0/4] Add PCIe support for Qualcomm Nord platform Krishna Chaitanya Chundru
2026-08-25 3:40 ` Krishna Chaitanya Chundru [this message]
2026-08-25 9:04 ` [PATCH 1/4] dt-bindings: phy: qcom: add Nord QMP PCIe PHY binding Krzysztof Kozlowski
2026-08-25 3:40 ` [PATCH 2/4] dt-bindings: pci: qcom: add Nord PCIe controller compatible Krishna Chaitanya Chundru
2026-08-25 3:40 ` [PATCH 3/4] PCI: qcom: Add CGC disable workaround for Nord PCIe Krishna Chaitanya Chundru
2026-08-25 3:40 ` [PATCH 4/4] phy: qcom: qmp-pcie: Add Nord Gen5x16 PCIe multi-PHY support Krishna Chaitanya Chundru
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260825-nord-v1-1-7c02f2b8765a@oss.qualcomm.com \
--to=krishna.chundru@oss.qualcomm.com \
--cc=andersson@kernel.org \
--cc=bhelgaas@google.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kwilczynski@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=maxime.chevallier@bootlin.com \
--cc=neil.armstrong@linaro.org \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox