<div dir="ltr"><div dir="ltr"><div>Looks fine to me,</div>Reviewed-by : Tomer Maimon <<a href="mailto:tmaimon77@gmail.com" target="_blank">tmaimon77@gmail.com</a>><br><div><br></div><div>cheers,</div><div><br></div><div>Tomer</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 30 Mar 2021 at 01:37, Joel Stanley <<a href="mailto:joel@jms.id.au">joel@jms.id.au</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Sat, 27 Mar 2021 at 00:49, William A. Kennington III <<a href="mailto:wak@google.com" target="_blank">wak@google.com</a>> wrote:<br>
><br>
> Most of our machines don't have PHYs between the NIC and the BMC over<br>
> their NC-SI port. We don't want to use the kernel NC-SI machinery, but<br>
> we do want phyless support.<br>
><br>
> Signed-off-by: William A. Kennington III <<a href="mailto:wak@google.com" target="_blank">wak@google.com</a>><br>
<br>
This looks fine to me. Tomer, Avi, can I please get a review from<br>
someone at Nuvoton?<br>
<br>
Reviewed-by: Joel Stanley <<a href="mailto:joel@jms.id.au" target="_blank">joel@jms.id.au</a>><br>
<br>
It would be great to see this driver submitted upstream too!</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> ---<br>
>  drivers/net/ethernet/nuvoton/npcm7xx_emc.c | 31 +++++++++++++++++++++-<br>
>  1 file changed, 30 insertions(+), 1 deletion(-)<br>
><br>
> diff --git a/drivers/net/ethernet/nuvoton/npcm7xx_emc.c b/drivers/net/ethernet/nuvoton/npcm7xx_emc.c<br>
> index f07449e2f68d..1dc871a72180 100644<br>
> --- a/drivers/net/ethernet/nuvoton/npcm7xx_emc.c<br>
> +++ b/drivers/net/ethernet/nuvoton/npcm7xx_emc.c<br>
> @@ -26,6 +26,7 @@<br>
>  #include <linux/of.h><br>
>  #include <linux/of_net.h><br>
>  #include <linux/of_device.h><br>
> +#include <linux/of_mdio.h><br>
>  #include <linux/dma-mapping.h><br>
><br>
>  #include <linux/regmap.h><br>
> @@ -242,6 +243,7 @@ struct  npcm7xx_ether {<br>
>         struct net_device *ndev;<br>
>         struct resource *res;<br>
>         unsigned int msg_enable;<br>
> +       struct device_node *phy_dn;<br>
>         struct mii_bus *mii_bus;<br>
>         struct phy_device *phy_dev;<br>
>         struct napi_struct napi;<br>
> @@ -1774,6 +1776,17 @@ static int npcm7xx_mii_setup(struct net_device *dev)<br>
><br>
>         pdev = ether->pdev;<br>
><br>
> +       if (ether->phy_dn) {<br>
> +               ether->phy_dev = of_phy_connect(dev, ether->phy_dn,<br>
> +                                       &adjust_link, 0, 0);<br>
> +               if (!ether->phy_dn) {<br>
> +                       dev_err(&dev->dev, "could not connect to phy %pOF\n",<br>
> +                               ether->phy_dn);<br>
> +                       return -ENODEV;<br>
> +               }<br>
> +               return 0;<br>
> +       }<br>
> +<br>
>         ether->mii_bus = mdiobus_alloc();<br>
>         if (!ether->mii_bus) {<br>
>                 err = -ENOMEM;<br>
> @@ -2011,6 +2024,15 @@ static int npcm7xx_ether_probe(struct platform_device *pdev)<br>
>                 }<br>
>         } else {<br>
>                 ether->use_ncsi = false;<br>
> +<br>
> +               ether->phy_dn = of_parse_phandle(np, "phy-handle", 0);<br>
> +               if (!ether->phy_dn && of_phy_is_fixed_link(np)) {<br>
> +                       error = of_phy_register_fixed_link(np);<br>
> +                       if (error < 0)<br>
> +                               goto failed_free_napi;<br>
> +                       ether->phy_dn = of_node_get(np);<br>
> +               }<br>
> +<br>
>         error = npcm7xx_mii_setup(dev);<br>
>         if (error < 0) {<br>
>                 dev_err(&pdev->dev, "npcm7xx_mii_setup err\n");<br>
> @@ -2032,6 +2054,9 @@ static int npcm7xx_ether_probe(struct platform_device *pdev)<br>
>         return 0;<br>
><br>
>  failed_free_napi:<br>
> +       of_node_put(ether->phy_dn);<br>
> +       if (of_phy_is_fixed_link(np))<br>
> +               of_phy_deregister_fixed_link(np);<br>
>         netif_napi_del(&ether->napi);<br>
>         platform_set_drvdata(pdev, NULL);<br>
>  failed_free_io:<br>
> @@ -2048,13 +2073,17 @@ static int npcm7xx_ether_remove(struct platform_device *pdev)<br>
>  {<br>
>         struct net_device *dev = platform_get_drvdata(pdev);<br>
>         struct npcm7xx_ether *ether = netdev_priv(dev);<br>
> +       struct device_node *np = pdev->dev.of_node;<br>
><br>
>  #ifdef CONFIG_DEBUG_FS<br>
>         debugfs_remove_recursive(ether->dbgfs_dir);<br>
>  #endif<br>
> -<br>
>         unregister_netdev(dev);<br>
><br>
> +       of_node_put(ether->phy_dn);<br>
> +       if (of_phy_is_fixed_link(np))<br>
> +               of_phy_deregister_fixed_link(np);<br>
> +<br>
>         free_irq(ether->txirq, dev);<br>
>         free_irq(ether->rxirq, dev);<br>
><br>
> --<br>
> 2.31.0.291.g576ba9dcdaf-goog<br>
><br>
</blockquote></div></div>