[PATCH V2 46/49] net: eqos: add function to get phy node and address
Ramon Fried
rfried.dev at gmail.com
Sun Jul 3 21:17:21 CEST 2022
On Mon, Jun 27, 2022 at 5:44 AM Peng Fan (OSS) <peng.fan at oss.nxp.com> wrote:
>
> From: Ye Li <ye.li at nxp.com>
>
> Since new atheros PHY driver needs to access its PHY node through
> phy device, we have to assign the phy node in ethernet controller
> driver. Otherwise the PHY driver will fail to get some nodes
> and properties.
>
> Signed-off-by: Ye Li <ye.li at nxp.com>
> Signed-off-by: Peng Fan <peng.fan at nxp.com>
> ---
> drivers/net/dwc_eth_qos.c | 23 ++++++++++++++++++++---
> drivers/net/dwc_eth_qos.h | 1 +
> 2 files changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
> index 1f24f5cb0cf..a4380d17d9c 100644
> --- a/drivers/net/dwc_eth_qos.c
> +++ b/drivers/net/dwc_eth_qos.c
> @@ -719,6 +719,24 @@ static int eqos_read_rom_hwaddr(struct udevice *dev)
> return !is_valid_ethaddr(pdata->enetaddr);
> }
>
> +static int eqos_get_phy_addr(struct eqos_priv *priv, struct udevice *dev)
> +{
> + struct ofnode_phandle_args phandle_args;
> + int reg;
> +
> + if (dev_read_phandle_with_args(dev, "phy-handle", NULL, 0, 0,
> + &phandle_args)) {
> + debug("Failed to find phy-handle");
> + return -ENODEV;
> + }
> +
> + priv->phy_of_node = phandle_args.node;
> +
> + reg = ofnode_read_u32_default(phandle_args.node, "reg", 0);
> +
> + return reg;
> +}
> +
> static int eqos_start(struct udevice *dev)
> {
> struct eqos_priv *eqos = dev_get_priv(dev);
> @@ -767,9 +785,7 @@ static int eqos_start(struct udevice *dev)
> */
> if (!eqos->phy) {
> int addr = -1;
> -#ifdef CONFIG_DM_ETH_PHY
> - addr = eth_phy_get_addr(dev);
> -#endif
> + addr = eqos_get_phy_addr(eqos, dev);
> #ifdef DWC_NET_PHYADDR
> addr = DWC_NET_PHYADDR;
> #endif
> @@ -788,6 +804,7 @@ static int eqos_start(struct udevice *dev)
> }
> }
>
> + eqos->phy->node = eqos->phy_of_node;
> ret = phy_config(eqos->phy);
> if (ret < 0) {
> pr_err("phy_config() failed: %d", ret);
> diff --git a/drivers/net/dwc_eth_qos.h b/drivers/net/dwc_eth_qos.h
> index ce90e1f1ce1..f470189e8d4 100644
> --- a/drivers/net/dwc_eth_qos.h
> +++ b/drivers/net/dwc_eth_qos.h
> @@ -261,6 +261,7 @@ struct eqos_priv {
> struct clk clk_slave_bus;
> struct mii_dev *mii;
> struct phy_device *phy;
> + ofnode phy_of_node;
> u32 max_speed;
> void *descs;
> int tx_desc_idx, rx_desc_idx;
> --
> 2.36.0
>
Reviewed-by: Ramon Fried <rfried.dev at gmail.com>
More information about the U-Boot
mailing list