Commit b4ab9d76 authored by David S. Miller's avatar David S. Miller

Merge branch 'thunderx-mdio-fixes'

David Daney says:

====================
net/phy: Fixes for Cavium Thunder MDIO code.

Previous patch set:
commit 5fc7cf17 ("net: thunderx: Cleanup PHY probing code.")
commit 1eefee90 ("phy: mdio-octeon: Refactor into two files/modules")
commit 379d7ac7 ("phy: mdio-thunder: Add driver for Cavium Thunder SoC MDIO buses.")

Had several problems.  We try to fix them here.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents e8e56ffd b7d3e3d3
...@@ -35,7 +35,7 @@ config THUNDER_NIC_BGX ...@@ -35,7 +35,7 @@ config THUNDER_NIC_BGX
tristate "Thunder MAC interface driver (BGX)" tristate "Thunder MAC interface driver (BGX)"
depends on 64BIT depends on 64BIT
select PHYLIB select PHYLIB
select MDIO_OCTEON select MDIO_THUNDER
---help--- ---help---
This driver supports programming and controlling of MAC This driver supports programming and controlling of MAC
interface from NIC physical function driver. interface from NIC physical function driver.
......
...@@ -974,17 +974,18 @@ static int bgx_init_acpi_phy(struct bgx *bgx) ...@@ -974,17 +974,18 @@ static int bgx_init_acpi_phy(struct bgx *bgx)
static int bgx_init_of_phy(struct bgx *bgx) static int bgx_init_of_phy(struct bgx *bgx)
{ {
struct fwnode_handle *fwn; struct fwnode_handle *fwn;
struct device_node *node = NULL;
u8 lmac = 0; u8 lmac = 0;
const char *mac;
device_for_each_child_node(&bgx->pdev->dev, fwn) { device_for_each_child_node(&bgx->pdev->dev, fwn) {
struct phy_device *pd; struct phy_device *pd;
struct device_node *phy_np; struct device_node *phy_np;
struct device_node *node = to_of_node(fwn); const char *mac;
/* Should always be an OF node. But if it is not, we /* Should always be an OF node. But if it is not, we
* cannot handle it, so exit the loop. * cannot handle it, so exit the loop.
*/ */
node = to_of_node(fwn);
if (!node) if (!node)
break; break;
...@@ -1005,17 +1006,30 @@ static int bgx_init_of_phy(struct bgx *bgx) ...@@ -1005,17 +1006,30 @@ static int bgx_init_of_phy(struct bgx *bgx)
/* Wait until the phy drivers are available */ /* Wait until the phy drivers are available */
pd = of_phy_find_device(phy_np); pd = of_phy_find_device(phy_np);
if (!pd) if (!pd)
return -EPROBE_DEFER; goto defer;
bgx->lmac[lmac].phydev = pd; bgx->lmac[lmac].phydev = pd;
} }
lmac++; lmac++;
if (lmac == MAX_LMAC_PER_BGX) { if (lmac == MAX_LMAC_PER_BGX)
of_node_put(node);
break; break;
}
} }
of_node_put(node);
return 0; return 0;
defer:
/* We are bailing out, try not to leak device reference counts
* for phy devices we may have already found.
*/
while (lmac) {
if (bgx->lmac[lmac].phydev) {
put_device(&bgx->lmac[lmac].phydev->mdio.dev);
bgx->lmac[lmac].phydev = NULL;
}
lmac--;
}
of_node_put(node);
return -EPROBE_DEFER;
} }
#else #else
......
...@@ -147,3 +147,7 @@ int cavium_mdiobus_write(struct mii_bus *bus, int phy_id, int regnum, u16 val) ...@@ -147,3 +147,7 @@ int cavium_mdiobus_write(struct mii_bus *bus, int phy_id, int regnum, u16 val)
return 0; return 0;
} }
EXPORT_SYMBOL(cavium_mdiobus_write); EXPORT_SYMBOL(cavium_mdiobus_write);
MODULE_DESCRIPTION("Common code for OCTEON and Thunder MDIO bus drivers");
MODULE_AUTHOR("David Daney");
MODULE_LICENSE("GPL");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment