.../bindings/phy/qcom,sa8775p-dwmac-sgmii-phy.yaml | 11 +++++++ .../boot/dts/qcom/lemans-evk-ifp-mezzanine.dtso | 3 +- arch/arm64/boot/dts/qcom/lemans-evk.dts | 3 +- arch/arm64/boot/dts/qcom/lemans-ride-common.dtsi | 8 +++-- arch/arm64/boot/dts/qcom/monaco-evk.dts | 3 +- arch/arm64/boot/dts/qcom/qcs8300-ride.dts | 4 ++- drivers/phy/qualcomm/phy-qcom-sgmii-eth.c | 37 +++++++++++++++++++--- 7 files changed, 59 insertions(+), 10 deletions(-)
This is a long overdue v2 of the original patch series which tried to
address a SerDes power-up failure observed on the QCS8300 Ride board
using the phy-qcom-sgmii-eth driver. After going through a rabbit hole
of hardware schematics and power data, I now have a fuller picture of
this IP.
The Qualcomm SGMII SerDes PHY (used in Lemans and Monaco SoCs) is
powered by two voltage rails. The schematics call them vdda-0p9 and
vdda-1p2, so that's what we follow in the series. Additionally, the
0.9V regulator draws a peak current of 46 mA and the 1.2V regulator
draws a peak current of 15 mA.
If both rails are not enabled, we see the original issue where the
SerDes calibration times out:
qcom-dwmac-sgmii-phy 8909000.phy: QSERDES_COM_C_READY_STATUS timed-out
qcom-ethqos 23040000.ethernet eth0: __stmmac_open: Serdes powerup failed
Currently, the DT nodes across affected boards incorrectly describe
only a single regulator via the generic 'phy-supply' property (and in
some cases point to the wrong rail entirely). Moreover, the driver does
not set the proper current loads and just relies on an enable vote.
This series corrects this by:
1. Fixing the DT binding to describe both named supplies.
2. Fixing all affected board DTS to use the correct vdda-0p9-supply
and vdda-1p2-supply properties.
3. Adding bulk regulator support to the PHY driver so it enables both
supplies and sets the proper current loads.
The patches are sequenced to maintain bisectability. With the driver
change, the PHY framework will continue to vote for the regulator
described by 'phy-supply'. The DT changes which follow then remove
'phy-supply' in favour of 'vdda-0p9' and 'vdda-1p2'.
Testing:
This series was tested on the following Lemans and Monaco based boards.
1. Lemans IQ-9075 EVK with the IFP+ Mezzanine attach (dual GMAC +
QCOM SGMII SerDes + QCA8081 PHY)
2. Lemans QCS9100 Ride (dual GMAC + QCOM SGMII SerDes + AQR115C PHY)
3. Monaco IQ-8275 EVK (single GMAC + QCOM SGMII SerDes + QCA8081 PHY)
4. Monaco QCS8300 Ride (dual GMAC + QCOM SGMII SerDes + AQR115C PHY)
To conclusively test the new regulator voting, I tested builds with all
the other consumers of the regulators disabled from the DTS to ensure
that the phy-qcom-sgmii-eth driver held the only vote.
Changes since v1:
- Fixed the DT bindings to describe the actual SerDes PHY hardware,
which actually has two supplies rather than only one - Krzysztof.
- Use regulator_bulk_* APIs to properly set the current loads of the
two supplies - Konrad.
- Fixed Lemans board DTS files that incorrectly voted for vreg_l5a;
the correct rails per the power diagram are vreg_l4a (0.9V) and
vreg_l1c (1.2V).
- Link to v1: https://lore.kernel.org/linux-arm-msm/20251124-sgmiieth_serdes_regulator-v1-0-73ae8f9cbe2a@oss.qualcomm.com/T/#m0b93e06a0d6a09c4c1b65c500b475958ed5e288d.
Signed-off-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
---
Mohd Ayaan Anwar (6):
dt-bindings: phy: qcom,sa8775p-dwmac-sgmii-phy: add named voltage rails and deprecate phy-supply
phy: qcom: sgmii-eth: vote for both voltage rails with correct current loads
arm64: dts: qcom: lemans-evk: fix SerDes PHY regulator supplies
arm64: dts: qcom: lemans-ride-common: fix SerDes PHY regulator supplies
arm64: dts: qcom: monaco-evk: fix SerDes PHY regulator supplies
arm64: dts: qcom: qcs8300-ride: fix SerDes PHY regulator supplies
.../bindings/phy/qcom,sa8775p-dwmac-sgmii-phy.yaml | 11 +++++++
.../boot/dts/qcom/lemans-evk-ifp-mezzanine.dtso | 3 +-
arch/arm64/boot/dts/qcom/lemans-evk.dts | 3 +-
arch/arm64/boot/dts/qcom/lemans-ride-common.dtsi | 8 +++--
arch/arm64/boot/dts/qcom/monaco-evk.dts | 3 +-
arch/arm64/boot/dts/qcom/qcs8300-ride.dts | 4 ++-
drivers/phy/qualcomm/phy-qcom-sgmii-eth.c | 37 +++++++++++++++++++---
7 files changed, 59 insertions(+), 10 deletions(-)
---
base-commit: 415606a7be939835db9b0d6b711887586646346d
change-id: 20260803-b4-sgmiieth_serdes_regulator-0cf9e58dbb12
Best regards,
--
Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
On Tue, Aug 04, 2026 at 12:57:56AM +0530, Mohd Ayaan Anwar wrote: > This is a long overdue v2 of the original patch series which tried to > address a SerDes power-up failure observed on the QCS8300 Ride board > using the phy-qcom-sgmii-eth driver. After going through a rabbit hole > of hardware schematics and power data, I now have a fuller picture of > this IP. > > The Qualcomm SGMII SerDes PHY (used in Lemans and Monaco SoCs) is > powered by two voltage rails. The schematics call them vdda-0p9 and > vdda-1p2, so that's what we follow in the series. Additionally, the > 0.9V regulator draws a peak current of 46 mA and the 1.2V regulator > draws a peak current of 15 mA. > > If both rails are not enabled, we see the original issue where the > SerDes calibration times out: > > qcom-dwmac-sgmii-phy 8909000.phy: QSERDES_COM_C_READY_STATUS timed-out > qcom-ethqos 23040000.ethernet eth0: __stmmac_open: Serdes powerup failed > > Currently, the DT nodes across affected boards incorrectly describe > only a single regulator via the generic 'phy-supply' property (and in > some cases point to the wrong rail entirely). Moreover, the driver does > not set the proper current loads and just relies on an enable vote. > > This series corrects this by: > > 1. Fixing the DT binding to describe both named supplies. > 2. Fixing all affected board DTS to use the correct vdda-0p9-supply > and vdda-1p2-supply properties. > 3. Adding bulk regulator support to the PHY driver so it enables both > supplies and sets the proper current loads. > > The patches are sequenced to maintain bisectability. With the driver > change, the PHY framework will continue to vote for the regulator > described by 'phy-supply'. The DT changes which follow then remove > 'phy-supply' in favour of 'vdda-0p9' and 'vdda-1p2'. > > Testing: > This series was tested on the following Lemans and Monaco based boards. > 1. Lemans IQ-9075 EVK with the IFP+ Mezzanine attach (dual GMAC + > QCOM SGMII SerDes + QCA8081 PHY) > 2. Lemans QCS9100 Ride (dual GMAC + QCOM SGMII SerDes + AQR115C PHY) > 3. Monaco IQ-8275 EVK (single GMAC + QCOM SGMII SerDes + QCA8081 PHY) > 4. Monaco QCS8300 Ride (dual GMAC + QCOM SGMII SerDes + AQR115C PHY) > To conclusively test the new regulator voting, I tested builds with all > the other consumers of the regulators disabled from the DTS to ensure > that the phy-qcom-sgmii-eth driver held the only vote. > > Changes since v1: > - Fixed the DT bindings to describe the actual SerDes PHY hardware, > which actually has two supplies rather than only one - Krzysztof. > - Use regulator_bulk_* APIs to properly set the current loads of the > two supplies - Konrad. > - Fixed Lemans board DTS files that incorrectly voted for vreg_l5a; > the correct rails per the power diagram are vreg_l4a (0.9V) and > vreg_l1c (1.2V). > - Link to v1: https://lore.kernel.org/linux-arm-msm/20251124-sgmiieth_serdes_regulator-v1-0-73ae8f9cbe2a@oss.qualcomm.com/T/#m0b93e06a0d6a09c4c1b65c500b475958ed5e288d. > > Signed-off-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com> - Mani -- மணிவண்ணன் சதாசிவம்
On Tue, Aug 04, 2026 at 12:57:56AM +0530, Mohd Ayaan Anwar wrote: > This series corrects this by: > > 1. Fixing the DT binding to describe both named supplies. > 2. Fixing all affected board DTS to use the correct vdda-0p9-supply > and vdda-1p2-supply properties. > 3. Adding bulk regulator support to the PHY driver so it enables both > supplies and sets the proper current loads. > > The patches are sequenced to maintain bisectability. With the driver > change, the PHY framework will continue to vote for the regulator > described by 'phy-supply'. The DT changes which follow then remove > 'phy-supply' in favour of 'vdda-0p9' and 'vdda-1p2'. > Sashiko raises some valid concerns [0]: -- 1. This isn't a bug introduced by this patch, but I noticed that another file in the tree, monaco-monza-som.dtsi, still has the exact same configuration you are fixing here. It retains the deprecated phy-supply property and lacks the required 0.9V rail. Should monaco-monza-som.dtsi be updated similarly in this patch or as a follow-up in this series? 2. This is a pre-existing issue, but does registering the PHY provider before setting the driver data create a race condition here? Looking at the end of qcom_dwmac_sgmii_phy_probe(): provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); if (IS_ERR(provider)) return PTR_ERR(provider); phy_set_drvdata(phy, data); By calling devm_of_phy_provider_register() first, the PHY is made available to consumers before phy_set_drvdata() initializes the private data. If a consumer (such as a deferred probe workqueue) concurrently looks up the PHY and immediately invokes an operation like phy_power_on(), could qcom_dwmac_sgmii_phy_power_on() read a NULL driver data pointer and cause a NULL pointer dereference when attempting to access data->vregs? -- For 1., I can either post a follow-up patch or add it as part of v3. For 2., this is a genuine pre-existing bug. I will raise a separate patch to move phy_set_drvdata() before devm_of_phy_provider_register() to close the race window. Ayaan [0] https://sashiko.dev/#/patchset/20260804-b4-sgmiieth_serdes_regulator-v2-0-c4bc688177dd@oss.qualcomm.com
On Tue, 04 Aug 2026 00:57:56 +0530, Mohd Ayaan Anwar wrote:
> This is a long overdue v2 of the original patch series which tried to
> address a SerDes power-up failure observed on the QCS8300 Ride board
> using the phy-qcom-sgmii-eth driver. After going through a rabbit hole
> of hardware schematics and power data, I now have a fuller picture of
> this IP.
>
> The Qualcomm SGMII SerDes PHY (used in Lemans and Monaco SoCs) is
> powered by two voltage rails. The schematics call them vdda-0p9 and
> vdda-1p2, so that's what we follow in the series. Additionally, the
> 0.9V regulator draws a peak current of 46 mA and the 1.2V regulator
> draws a peak current of 15 mA.
>
> [...]
Applied, thanks!
[1/6] dt-bindings: phy: qcom,sa8775p-dwmac-sgmii-phy: add named voltage rails and deprecate phy-supply
commit: 3719850f1b70dd3f01173be830cb0a1d2bc03a4e
[2/6] phy: qcom: sgmii-eth: vote for both voltage rails with correct current loads
commit: 4f81684a1d1018d7d0e5579f08d95e7701279358
Best regards,
--
~Vinod
On Tue, 04 Aug 2026 00:57:56 +0530, Mohd Ayaan Anwar wrote:
> This is a long overdue v2 of the original patch series which tried to
> address a SerDes power-up failure observed on the QCS8300 Ride board
> using the phy-qcom-sgmii-eth driver. After going through a rabbit hole
> of hardware schematics and power data, I now have a fuller picture of
> this IP.
>
> The Qualcomm SGMII SerDes PHY (used in Lemans and Monaco SoCs) is
> powered by two voltage rails. The schematics call them vdda-0p9 and
> vdda-1p2, so that's what we follow in the series. Additionally, the
> 0.9V regulator draws a peak current of 46 mA and the 1.2V regulator
> draws a peak current of 15 mA.
>
> [...]
Applied, thanks!
[3/6] arm64: dts: qcom: lemans-evk: fix SerDes PHY regulator supplies
commit: 457cf65a7997e398d8d6cef08601b4ea61b58e38
[4/6] arm64: dts: qcom: lemans-ride-common: fix SerDes PHY regulator supplies
commit: 0d567fb7def9564d15c334ec0fa5f5f6a0114ffa
[5/6] arm64: dts: qcom: monaco-evk: fix SerDes PHY regulator supplies
commit: de7bc562fc363421902db7bdda8e347cc78a5173
[6/6] arm64: dts: qcom: qcs8300-ride: fix SerDes PHY regulator supplies
commit: e55080f068f3f6b733235fd7618c12e61744244b
Best regards,
--
Bjorn Andersson <andersson@kernel.org>
© 2016 - 2026 Red Hat, Inc.