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, ...@@ -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) static int bcm_sf2_mdio_register(struct dsa_switch *ds)
{ {
struct bcm_sf2_priv *priv = bcm_sf2_to_priv(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; static int index;
int err; int err, reg;
/* Find our integrated MDIO bus node */ /* Find our integrated MDIO bus node */
dn = of_find_compatible_node(NULL, NULL, "brcm,unimac-mdio"); dn = of_find_compatible_node(NULL, NULL, "brcm,unimac-mdio");
...@@ -534,6 +536,31 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds) ...@@ -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->parent = ds->dev->parent;
priv->slave_mii_bus->phy_mask = ~priv->indir_phy_mask; 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); err = mdiobus_register(priv->slave_mii_bus);
if (err && dn) if (err && dn)
of_node_put(dn); of_node_put(dn);
......
...@@ -1869,6 +1869,7 @@ int of_remove_property(struct device_node *np, struct property *prop) ...@@ -1869,6 +1869,7 @@ int of_remove_property(struct device_node *np, struct property *prop)
return rc; return rc;
} }
EXPORT_SYMBOL_GPL(of_remove_property);
int __of_update_property(struct device_node *np, struct property *newprop, int __of_update_property(struct device_node *np, struct property *newprop,
struct property **oldpropp) struct property **oldpropp)
......
...@@ -929,6 +929,11 @@ static inline int of_machine_is_compatible(const char *compat) ...@@ -929,6 +929,11 @@ static inline int of_machine_is_compatible(const char *compat)
return 0; 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) static inline bool of_console_check(const struct device_node *dn, const char *name, int index)
{ {
return false; 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