[PATCH linux] net/ethernet/faraday: Forward port ftgmac100 NC-SI

Gavin Shan gwshan at linux.vnet.ibm.com
Tue May 24 13:27:40 AEST 2016


On Tue, May 24, 2016 at 11:37:33AM +0930, Joel Stanley wrote:
>This reflects changes made in order to build with 4.7.
>
>Signed-off-by: Joel Stanley <joel at jms.id.au>
>---
>
>Gavin,
>
>Can you please double check that this looks ok to you?
>
>Do you have a series that contains all of the NC-SI support that is ready to go upstream? If so, I would prefer to take that in the dev tree.
>

Joel, it looks good to me except below minor bits . Sorry that I don't have a series
based on upstream yet. I will start work on it later of this week or early of next
week depending on the work at hand (mainly bug fixing this moment). Will keep you
updated with the last state.

>Cheers,
>
>Joel
>
>
> drivers/net/ethernet/faraday/ftgmac100.c | 29 +++++++++++++++++------------
> 1 file changed, 17 insertions(+), 12 deletions(-)
>

Since the PHY device is embedded in "struct net_device", the one (@phydev) in "struct ftgmac100"
can be removed.

>diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
>index 644ef77215d5..d2b2c21da809 100644
>--- a/drivers/net/ethernet/faraday/ftgmac100.c
>+++ b/drivers/net/ethernet/faraday/ftgmac100.c
>@@ -1099,6 +1099,7 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget)
> static int ftgmac100_open(struct net_device *netdev)
> {
> 	struct ftgmac100 *priv = netdev_priv(netdev);
>+	struct phy_device *phydev = netdev->phydev;
> 	int err;
>
> 	err = ftgmac100_alloc_buffers(priv);
>@@ -1125,8 +1126,8 @@ static int ftgmac100_open(struct net_device *netdev)
> 	ftgmac100_init_hw(priv);
> 	ftgmac100_start_hw(priv, priv->use_ncsi ? 100 : 10);
>
>-	if (priv->phydev)
>-		phy_start(priv->phydev);
>+	if (phydev)
>+		phy_start(phydev);
> 	else if (priv->use_ncsi)
> 		netif_carrier_on(priv->netdev);
>
>@@ -1160,6 +1161,7 @@ err_alloc:
> static int ftgmac100_stop_dev(struct net_device *netdev)
> {
> 	struct ftgmac100 *priv = netdev_priv(netdev);
>+	struct phy_device *phydev = netdev->phydev;
>
> 	if (!priv->enabled)
> 		return 0;
>@@ -1170,8 +1172,8 @@ static int ftgmac100_stop_dev(struct net_device *netdev)
>
> 	netif_stop_queue(netdev);
> 	napi_disable(&priv->napi);
>-	if (priv->phydev)
>-		phy_stop(priv->phydev);
>+	if (phydev)
>+		phy_stop(phydev);
>
> 	ftgmac100_stop_hw(priv);
> 	free_irq(priv->irq, netdev);
>@@ -1216,11 +1218,11 @@ static int ftgmac100_hard_start_xmit(struct sk_buff *skb,
> /* optional */
> static int ftgmac100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
> {
>-	struct ftgmac100 *priv = netdev_priv(netdev);
>+	struct phy_device *phydev = netdev->phydev;
>
>-	if (!priv->phydev)
>+	if (!phydev)
> 		return -EINVAL;
>-	return phy_mii_ioctl(priv->phydev, ifr, cmd);
>+	return phy_mii_ioctl(phydev, ifr, cmd);
> }
>
> static int ftgmac100_setup_mdio(struct ftgmac100 *priv)
>@@ -1265,11 +1267,14 @@ err_alloc_mdiobus:
> 	return err;
> }
>
>-static void ftgmac100_destroy_mdio(struct ftgmac100 *priv)
>+static void ftgmac100_destroy_mdio(struct net_device *netdev)
> {
>+	struct ftgmac100 *priv = netdev_priv(netdev);
>+	struct phy_device *phydev = netdev->phydev;
>+
> 	if (!priv->use_ncsi)
> 		return;

This condition would be as below. Otherwise, the PHY device that is created
in non-NCSI circumstances won't be released.

	if (!phydev || priv->use_ncsi)
		return;

>-	phy_disconnect(priv->phydev);
>+	phy_disconnect(phydev);
> 	mdiobus_unregister(priv->mii_bus);
> 	mdiobus_free(priv->mii_bus);
> }
>@@ -1324,7 +1329,7 @@ static int ftgmac100_probe(struct platform_device *pdev)
> 	if (pdev->dev.of_node &&
> 	    of_get_property(pdev->dev.of_node, "use-nc-si", NULL)) {
> 		dev_info(&pdev->dev, "Using NCSI interface\n");
>-		priv->phydev = NULL;
>+		netdev->phydev = NULL;
> 		priv->use_ncsi = true;
> 	} else {
> 		priv->use_ncsi = false;
>@@ -1398,7 +1403,7 @@ static int ftgmac100_probe(struct platform_device *pdev)
>
> err_register_netdev:
> 	if (!priv->use_ncsi)
>-		ftgmac100_destroy_mdio(priv);
>+		ftgmac100_destroy_mdio(netdev);
> 	else
> 		ncsi_unregister_dev(priv->ndev);
> err_ncsi_dev:
>@@ -1422,7 +1427,7 @@ static int __exit ftgmac100_remove(struct platform_device *pdev)
>
> 	unregister_netdev(netdev);
>
>-	ftgmac100_destroy_mdio(priv);
>+	ftgmac100_destroy_mdio(netdev);
>
> 	iounmap(priv->base);
> 	release_resource(priv->res);

Thanks,
Gavin

>-- 
>2.8.1
>



More information about the openbmc mailing list