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:
Коммит
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)
|
||||
{
|
||||
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 >= 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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче