Commit 35b237a5 authored by Jakub Kicinski's avatar Jakub Kicinski

Merge branch 'net-dsa-bcm_sf2-Ensure-MDIO-diversion-is-used'

Florian Fainelli says:

====================
net: dsa: bcm_sf2: Ensure MDIO diversion is used

Changes in v2:

- export of_update_property() to permit building bcm_sf2 as a module
- provided a better explanation of the problem being solved after
  explaining it to Andrew during the v1 review
====================
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 447a851b 771089c2
......@@ -489,9 +489,11 @@ static void bcm_sf2_identify_ports(struct bcm_sf2_priv *priv,
static int bcm_sf2_mdio_register(struct dsa_switch *ds)
{
struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds);
struct device_node *dn;
struct device_node *dn, *child;
struct phy_device *phydev;
struct property *prop;
static int index;
int err;
int err, reg;
/* Find our integrated MDIO bus node */
dn = of_find_compatible_node(NULL, NULL, "brcm,unimac-mdio");
......@@ -534,6 +536,31 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds)
priv->slave_mii_bus->parent = ds->dev->parent;
priv->slave_mii_bus->phy_mask = ~priv->indir_phy_mask;
/* We need to make sure that of_phy_connect() will not work by
* removing the 'phandle' and 'linux,phandle' properties and
* unregister the existing PHY device that was already registered.
*/
for_each_available_child_of_node(dn, child) {
if (of_property_read_u32(child, "reg", &reg) ||
reg >= PHY_MAX_ADDR)
continue;
if (!(priv->indir_phy_mask & BIT(reg)))
continue;
prop = of_find_property(child, "phandle", NULL);
if (prop)
of_remove_property(child, prop);
prop = of_find_property(child, "linux,phandle", NULL);
if (prop)
of_remove_property(child, prop);
phydev = of_phy_find_device(child);
if (phydev)
phy_device_remove(phydev);
}
err = mdiobus_register(priv->slave_mii_bus);
if (err && dn)
of_node_put(dn);
......
......@@ -1869,6 +1869,7 @@ int of_remove_property(struct device_node *np, struct property *prop)
return rc;
}
EXPORT_SYMBOL_GPL(of_remove_property);
int __of_update_property(struct device_node *np, struct property *newprop,
struct property **oldpropp)
......
......@@ -929,6 +929,11 @@ static inline int of_machine_is_compatible(const char *compat)
return 0;
}
static inline int of_remove_property(struct device_node *np, struct property *prop)
{
return 0;
}
static inline bool of_console_check(const struct device_node *dn, const char *name, int index)
{
return false;
......
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