net: bcmgenet: communicate integrated PHY revision to PHY driver
The integrated BCM7xxx PHY contains no useful revision information in its MII_PHYSID2 bits 3:0, that information is instead contained in the GENET hardware block. We already read the GENET 32-bit revision register, so store the integrated PHY revision in the driver private structure, and then communicate this revision value to the PHY driver by overriding the phy_flags value. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
80780a54ec
commit
487320c541
@ -2432,6 +2432,13 @@ static void bcmgenet_set_hw_params(struct bcmgenet_priv *priv)
|
|||||||
dev_info(&priv->pdev->dev, "GENET " GENET_VER_FMT,
|
dev_info(&priv->pdev->dev, "GENET " GENET_VER_FMT,
|
||||||
major, (reg >> 16) & 0x0f, reg & 0xffff);
|
major, (reg >> 16) & 0x0f, reg & 0xffff);
|
||||||
|
|
||||||
|
/* Store the integrated PHY revision for the MDIO probing function
|
||||||
|
* to pass this information to the PHY driver. The PHY driver expects
|
||||||
|
* to find the PHY major revision in bits 15:8 while the GENET register
|
||||||
|
* stores that information in bits 7:0, account for that.
|
||||||
|
*/
|
||||||
|
priv->gphy_rev = (reg & 0xffff) << 8;
|
||||||
|
|
||||||
#ifdef CONFIG_PHYS_ADDR_T_64BIT
|
#ifdef CONFIG_PHYS_ADDR_T_64BIT
|
||||||
if (!(params->flags & GENET_HAS_40BITS))
|
if (!(params->flags & GENET_HAS_40BITS))
|
||||||
pr_warn("GENET does not support 40-bits PA\n");
|
pr_warn("GENET does not support 40-bits PA\n");
|
||||||
|
@ -545,6 +545,7 @@ struct bcmgenet_priv {
|
|||||||
struct phy_device *phydev;
|
struct phy_device *phydev;
|
||||||
struct device_node *phy_dn;
|
struct device_node *phy_dn;
|
||||||
struct mii_bus *mii_bus;
|
struct mii_bus *mii_bus;
|
||||||
|
u16 gphy_rev;
|
||||||
|
|
||||||
/* PHY device variables */
|
/* PHY device variables */
|
||||||
int old_duplex;
|
int old_duplex;
|
||||||
|
@ -296,6 +296,7 @@ static int bcmgenet_mii_probe(struct net_device *dev)
|
|||||||
struct bcmgenet_priv *priv = netdev_priv(dev);
|
struct bcmgenet_priv *priv = netdev_priv(dev);
|
||||||
struct device_node *dn = priv->pdev->dev.of_node;
|
struct device_node *dn = priv->pdev->dev.of_node;
|
||||||
struct phy_device *phydev;
|
struct phy_device *phydev;
|
||||||
|
u32 phy_flags;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (priv->phydev) {
|
if (priv->phydev) {
|
||||||
@ -314,8 +315,11 @@ static int bcmgenet_mii_probe(struct net_device *dev)
|
|||||||
priv->phy_dn = of_node_get(dn);
|
priv->phy_dn = of_node_get(dn);
|
||||||
}
|
}
|
||||||
|
|
||||||
phydev = of_phy_connect(dev, priv->phy_dn, bcmgenet_mii_setup, 0,
|
/* Communicate the integrated PHY revision */
|
||||||
priv->phy_interface);
|
phy_flags = priv->gphy_rev;
|
||||||
|
|
||||||
|
phydev = of_phy_connect(dev, priv->phy_dn, bcmgenet_mii_setup,
|
||||||
|
phy_flags, priv->phy_interface);
|
||||||
if (!phydev) {
|
if (!phydev) {
|
||||||
pr_err("could not attach to PHY\n");
|
pr_err("could not attach to PHY\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
Loading…
Reference in New Issue
Block a user