mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-11 15:14:03 +08:00
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)"
|
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)
|
|||||||
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)
|
|||||||
/* 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)
|
|||||||
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");
|
||||||
|
Loading…
Reference in New Issue
Block a user