From: Neil Armstrong <neil.armstrong@linaro.org>
To: Qiang Yu <qiang.yu@oss.qualcomm.com>,
Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Cc: Vinod Koul <vkoul@kernel.org>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/5] phy: qcom: qmp-pcie: Add PCIe Gen5 8-lane bifurcation support for Glymur
Date: Fri, 6 Mar 2026 11:34:37 +0100 [thread overview]
Message-ID: <fb75023e-8fac-49c1-a8b7-2eb8b70fda3e@linaro.org> (raw)
In-Reply-To: <aaqdv7Zx5AODzg6P@hu-qianyu-lv.qualcomm.com>
On 3/6/26 10:26, Qiang Yu wrote:
> On Thu, Mar 05, 2026 at 10:14:05AM +0100, Konrad Dybcio wrote:
>> On 3/4/26 9:21 AM, Qiang Yu wrote:
>>> This patch series adds support for PCIe Gen5 8-lane bifurcation mode on
>>> the Glymur SoC's third PCIe controller. In this configuration, pcie3a PHY
>>> acts as leader and pcie3b PHY as follower to form a single 8-lane PCIe
>>> Gen5 interface.
>>>
>>> To support 8-lanes mode, this patch series add multiple power domain and
>>> multi nocsr reset infrastructure as the hardware programming guide
>>> specifies a strict initialization sequence for bifurcation mode that
>>> requires coordinated multi-PHY resource management:
>>>
>>> 1. Turn on both pcie3a_phy_gdsc and pcie3b_phy_gdsc power domains
>>> 2. Assert both pcie3a and pcie3b nocsr resets, then deassert them together
>>> 3. Enable all pcie3a PHY clocks and pcie3b PHY aux clock (bifur_aux)
>>> 4. Poll for PHY ready status
>>
>> I think we never concluded the discussion where I suggested the
>> bifurcated PHY may be better expressed as a single node with
>> #phy-cells = <1>, removing the need for duplicated resource references
DT requires strict hardware description, no abstraction for HW, so if there's
2 PHYs, then add 2 separate phys and reference them from the PCie controller.
On platforms where you want 2x4, then add 2 pcie_ports using 2 phys, on platforms
with 1x8 a single pcie_port with 2 phys.
Neil
>>
> I understand your suggestion would look like below. I agree that the
> unified PHY approach being more elegant from a device tree perspective,
> provide better DT flexibility and eliminate the need for different
> compatibles and dupicated resources between 1x8 and 2x4 modes.
>
> However, this will include implementation complexity to phy driver.
> The driver would need conditional logic to selectively enable different
> clocks/resets based on the PHY parameter and maintain mode-specific
> resource arrays. There's also the issue that assigned-clocks
> GCC_PCIE_3A_PHY_RCHNG_CLK and GCC_PCIE_3B_PHY_RCHNG_CLK will be set before
> probe no matter which mode is used, even though in 1x8 mode or only one of
> them is actually needed. For pipe clock outputs, only pcie3a_pipe_clk would
> be needed in 1x8 mode while pcie3b_pipe_clk would be unused. For
> powerdomain, we also need to add additional logic to attach and turn
> on/off them.
>
> While these challenges could be resolved, I'm not sure the benefits
> justify the added complexity.
>
> pcie3_unified_phy {
> compatible = "qcom,glymur-qmp-gen5-pcie-phy";
> reg = <0 0x00f00000 0 0x10000>, <0 0x00f10000 0 0x10000>; /* Both PHY ranges */
>
> clocks = <&gcc GCC_PCIE_PHY_3A_AUX_CLK>,
> <&gcc GCC_PCIE_3A_CFG_AHB_CLK>,
> <&tcsr TCSR_PCIE_3_CLKREF_EN>,
> <&gcc GCC_PCIE_3A_PHY_RCHNG_CLK>,
> <&gcc GCC_PCIE_3A_PIPE_CLK>,
> <&gcc GCC_PCIE_PHY_3B_AUX_CLK>,
> <&gcc GCC_PCIE_3B_CFG_AHB_CLK>,
> <&gcc GCC_PCIE_3B_PHY_RCHNG_CLK>,
> <&gcc GCC_PCIE_3B_PIPE_CLK>,
> <&gcc GCC_PCIE_3B_PIPE_DIV2_CLK>;
>
> power-domains = <&gcc GCC_PCIE_3A_PHY_GDSC>,
> <&gcc GCC_PCIE_3B_PHY_GDSC>;
>
> resets = <&gcc GCC_PCIE_3A_PHY_BCR>,
> <&gcc GCC_PCIE_3A_NOCSR_COM_PHY_BCR>,
> <&gcc GCC_PCIE_3B_PHY_BCR>,
> <&gcc GCC_PCIE_3B_NOCSR_COM_PHY_BCR>;
>
> #clock-cells = <1>;
> clock-output-names = "pcie3a_pipe_clk", "pcie3b_pipe_clk";
> assigned-clocks = <&gcc GCC_PCIE_3A_PHY_RCHNG_CLK>,
> <&gcc GCC_PCIE_3B_PHY_RCHNG_CLK>;
> assigned-clock-rates = <100000000>, <100000000>;
>
> #phy-cells = <1>; /* Parameter: 0=PHY_A, 1=PHY_B, 2=UNIFIED_8LANE */
> };
>
> For 2x4 mode (independent 4-lane PHYs):
> &pcie3a {
> phys = <&pcie3_unified_phy PHY_A>; /* PHY A only */
> status = "okay";
> };
>
> &pcie3b {
> phys = <&pcie3_unified_phy PHY_B>; /* PHY B only */
> status = "okay";
> };
>
> For 1x8 mode (unified 8-lane PHY):
>
> &pcie3a {
> phys = <&pcie3_unified_phy PHY_AB>;
> num-lanes = <8>;
> status = "okay";
> };
>
> &pcie3b {
> status = "disabled";
> };
>
> - Qiang Yu
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
next prev parent reply other threads:[~2026-03-06 10:34 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-04 8:21 [PATCH 0/5] phy: qcom: qmp-pcie: Add PCIe Gen5 8-lane bifurcation support for Glymur Qiang Yu
2026-03-04 8:21 ` [PATCH 1/5] dt-bindings: phy: qcom,sc8280xp-qmp-pcie-phy: Add support for glymur Gen5 x8 bifurcation mode Qiang Yu
2026-03-04 8:21 ` [PATCH 2/5] phy: qcom: qmp-pcie: Add multiple power-domains support Qiang Yu
2026-03-04 20:46 ` Bjorn Andersson
2026-03-05 8:17 ` Qiang Yu
2026-03-04 23:58 ` Dmitry Baryshkov
2026-03-05 8:34 ` Qiang Yu
2026-03-04 8:21 ` [PATCH 3/5] phy: qcom: qmp-pcie: Support multiple nocsr resets Qiang Yu
2026-03-04 8:21 ` [PATCH 4/5] phy: qcom: qmp-pcie: Add Gen5 8-lanes mode for Glymur Qiang Yu
2026-03-04 8:21 ` [PATCH 5/5] arch: arm64: dts: qcom: Add support for PCIe3a Qiang Yu
2026-03-05 0:02 ` Dmitry Baryshkov
2026-03-05 8:40 ` Qiang Yu
2026-03-05 9:14 ` [PATCH 0/5] phy: qcom: qmp-pcie: Add PCIe Gen5 8-lane bifurcation support for Glymur Konrad Dybcio
2026-03-06 9:26 ` Qiang Yu
2026-03-06 10:34 ` Neil Armstrong [this message]
2026-03-09 6:13 ` Qiang Yu
2026-04-24 10:58 ` Konrad Dybcio
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=fb75023e-8fac-49c1-a8b7-2eb8b70fda3e@linaro.org \
--to=neil.armstrong@linaro.org \
--cc=andersson@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=konrad.dybcio@oss.qualcomm.com \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=p.zabel@pengutronix.de \
--cc=qiang.yu@oss.qualcomm.com \
--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