On Fri, 2022-03-18 at 15:00 +0800, Andy Chiu wrote: > In some SGMII use cases where both a fixed link external PHY and the > internal PCS/PMA PHY need to be configured, we should explicitly use a > phandle "pcs-phy" to get the reference to the PCS/PMA PHY. Otherwise, the > driver would use "phy-handle" in the DT as the reference to both the > external and the internal PCS/PMA PHY. > > In other cases where the core is connected to a SFP cage, we could still > point phy-handle to the intenal PCS/PMA PHY, and let the driver connect > to the SFP module, if exist, via phylink. > > Fixes: 1a02556086fc (net: axienet: Properly handle PCS/PMA PHY for 1000BaseX > mode) > Signed-off-by: Andy Chiu <andy.chiu@xxxxxxxxxx> > Reviewed-by: Greentime Hu <greentime.hu@xxxxxxxxxx> > --- > drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > index 6fd5157f0a6d..6f81d756e6c8 100644 > --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > @@ -2078,7 +2078,17 @@ static int axienet_probe(struct platform_device *pdev) > ret = -EINVAL; > goto cleanup_mdio; > } > - lp->pcs_phy = of_mdio_find_device(lp->phy_node); > + np = of_parse_phandle(pdev->dev.of_node, "pcs-handle", 0); > + if (np) { > + lp->pcs_phy = of_mdio_find_device(np); > + of_node_put(np); > + } else { > + /* Deprecated: Always use "pcs-handle" for pcs_phy. > + * Falling back to "phy-handle" here is only for > + * backward compatibility with old device trees. > + */ > + lp->pcs_phy = of_mdio_find_device(lp->phy_node); > + } > if (!lp->pcs_phy) { > ret = -EPROBE_DEFER; > goto cleanup_mdio; I think there are a few other changes in surrounding code required for this to work as expected: -The call to axienet_mdio_setup should not be conditional on whether phy_node is set -The code is currently failing out if phy-handle is not set, it should be satisfied if either phy-handle or pcs-handle are set. -I'm not actually sure why phy_node is being stored in the device structure rather than just doing an of_node_put on it right away after use, it doesn't look like anything else uses it after initialization. Might be a remnant of older code that could be changed to be treated the same as pcs-handle here. -- Robert Hancock Senior Hardware Designer, Calian Advanced Technologies www.calian.com