Commit dbe17e77 authored by Wei Fang's avatar Wei Fang Committed by Paolo Abeni
Browse files

net: enetc: do not skip setting LaBCR[MDIO_PHYAD_PRTAD] for addr 0



Given that some platforms may use PHY address 0 (I suppose the PHY may
not treat address 0 as a broadcast address or default response address).
It is possible for some boards to connect multiple PHYs to the same
ENETC MAC, for example:

  - a PHY with a non-zero address connects to ENETC MAC through SGMII
    interface (selected via DTS_A)
  - a PHY with address 0 connects to ENETC MAC through RGMII interface
    (selected via DTS_B)

For the case where the ENETC port MDIO is used to manage the PHY, when
switching from DTS_A to DTS_B via soft reboot, LaBCR[MDIO_PHYAD_PRTAD]
must be updated to 0 because the NETCMIX block is not reset during soft
reboot. However, the current driver explicitly skips configuring address
0, causing LaBCR[MDIO_PHYAD_PRTAD] to retain its old value.

Therefore, remove the special-case skip of PHY address 0 so that valid
configurations using address 0 are properly supported.

Fixes: 6633df05 ("net: enetc: set the external PHY address in IERB for port MDIO usage")
Fixes: 50bfd9c0 ("net: enetc: set external PHY address in IERB for i.MX94 ENETC")
Reviewed-by: default avatarClark Wang <xiaoning.wang@nxp.com>
Signed-off-by: default avatarWei Fang <wei.fang@nxp.com>
Link: https://patch.msgid.link/20260305031211.904812-3-wei.fang@nxp.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 246953f3
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -438,12 +438,6 @@ static int imx95_enetc_mdio_phyaddr_config(struct platform_device *pdev)
				return -EINVAL;
			}

			/* The default value of LaBCR[MDIO_PHYAD_PRTAD ] is
			 * 0, so no need to set the register.
			 */
			if (!addr)
				continue;

			switch (bus_devfn) {
			case IMX95_ENETC0_BUS_DEVFN:
				netc_reg_write(priv->ierb, IERB_LBCR(0),
@@ -590,12 +584,6 @@ static int imx94_enetc_mdio_phyaddr_config(struct netc_blk_ctrl *priv,
		return addr;
	}

	/* The default value of LaBCR[MDIO_PHYAD_PRTAD] is 0,
	 * so no need to set the register.
	 */
	if (!addr)
		return 0;

	if (phy_mask & BIT(addr)) {
		dev_err(dev,
			"Find same PHY address in EMDIO and ENETC node\n");