net: bgmac: use PHY subsystem for initializing PHY
authorRafał Miłecki <rafal@milecki.pl>
Tue, 31 Jan 2017 18:37:56 +0000 (19:37 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 31 Jan 2017 18:44:49 +0000 (13:44 -0500)
This adds support for using bgmac with PHYs supported by standalone PHY
drivers. Having any PHY initialization in bgmac is hacky and shouldn't
be extended but rather removed if anyone has hardware to test it.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c

index 9d9984999dce0a5f9c7a4ccc126f417ba8a929d1..6ce80cbcb48e30c17b7e9c5ecf3f79e8a247132e 100644 (file)
@@ -132,6 +132,10 @@ static void bcma_mdio_phy_init(struct bgmac *bgmac)
        struct bcma_chipinfo *ci = &bgmac->bcma.core->bus->chipinfo;
        u8 i;
 
+       /* For some legacy hardware we do chipset-based PHY initialization here
+        * without even detecting PHY ID. It's hacky and should be cleaned as
+        * soon as someone can test it.
+        */
        if (ci->id == BCMA_CHIP_ID_BCM5356) {
                for (i = 0; i < 5; i++) {
                        bcma_mdio_phy_write(bgmac, i, 0x1f, 0x008b);
@@ -140,6 +144,7 @@ static void bcma_mdio_phy_init(struct bgmac *bgmac)
                        bcma_mdio_phy_write(bgmac, i, 0x12, 0x2aaa);
                        bcma_mdio_phy_write(bgmac, i, 0x1f, 0x000b);
                }
+               return;
        }
        if ((ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg != 10) ||
            (ci->id == BCMA_CHIP_ID_BCM4749 && ci->pkg != 10) ||
@@ -161,7 +166,12 @@ static void bcma_mdio_phy_init(struct bgmac *bgmac)
                        bcma_mdio_phy_write(bgmac, i, 0x17, 0x9273);
                        bcma_mdio_phy_write(bgmac, i, 0x1f, 0x000b);
                }
+               return;
        }
+
+       /* For all other hw do initialization using PHY subsystem. */
+       if (bgmac->net_dev && bgmac->net_dev->phydev)
+               phy_init_hw(bgmac->net_dev->phydev);
 }
 
 /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyreset */