Merge branch 'thunderx-mdio-fixes'
David Daney says: ==================== net/phy: Fixes for Cavium Thunder MDIO code. Previous patch set: commit5fc7cf1794
("net: thunderx: Cleanup PHY probing code.") commit1eefee901f
("phy: mdio-octeon: Refactor into two files/modules") commit379d7ac7ca
("phy: mdio-thunder: Add driver for Cavium Thunder SoC MDIO buses.") Had several problems. We try to fix them here. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
b4ab9d76b9
|
@ -35,7 +35,7 @@ config THUNDER_NIC_BGX
|
|||
tristate "Thunder MAC interface driver (BGX)"
|
||||
depends on 64BIT
|
||||
select PHYLIB
|
||||
select MDIO_OCTEON
|
||||
select MDIO_THUNDER
|
||||
---help---
|
||||
This driver supports programming and controlling of MAC
|
||||
interface from NIC physical function driver.
|
||||
|
|
|
@ -974,17 +974,18 @@ static int bgx_init_acpi_phy(struct bgx *bgx)
|
|||
static int bgx_init_of_phy(struct bgx *bgx)
|
||||
{
|
||||
struct fwnode_handle *fwn;
|
||||
struct device_node *node = NULL;
|
||||
u8 lmac = 0;
|
||||
const char *mac;
|
||||
|
||||
device_for_each_child_node(&bgx->pdev->dev, fwn) {
|
||||
struct phy_device *pd;
|
||||
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
|
||||
* cannot handle it, so exit the loop.
|
||||
*/
|
||||
node = to_of_node(fwn);
|
||||
if (!node)
|
||||
break;
|
||||
|
||||
|
@ -1005,17 +1006,30 @@ static int bgx_init_of_phy(struct bgx *bgx)
|
|||
/* Wait until the phy drivers are available */
|
||||
pd = of_phy_find_device(phy_np);
|
||||
if (!pd)
|
||||
return -EPROBE_DEFER;
|
||||
goto defer;
|
||||
bgx->lmac[lmac].phydev = pd;
|
||||
}
|
||||
|
||||
lmac++;
|
||||
if (lmac == MAX_LMAC_PER_BGX) {
|
||||
of_node_put(node);
|
||||
if (lmac == MAX_LMAC_PER_BGX)
|
||||
break;
|
||||
}
|
||||
}
|
||||
of_node_put(node);
|
||||
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
|
||||
|
|
|
@ -147,3 +147,7 @@ int cavium_mdiobus_write(struct mii_bus *bus, int phy_id, int regnum, u16 val)
|
|||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(cavium_mdiobus_write);
|
||||
|
||||
MODULE_DESCRIPTION("Common code for OCTEON and Thunder MDIO bus drivers");
|
||||
MODULE_AUTHOR("David Daney");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
Loading…
Reference in New Issue