Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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.
+20 −6
Original line number Diff line number Diff line
@@ -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
+4 −0
Original line number Diff line number Diff line
@@ -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");