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: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
35b237a51f
|
@ -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)
|
||||||
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 >= 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)
|
||||||
|
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue