#if IS_ENABLED(CONFIG_OF_MDIO) /* Set and/or override some configuration registers based on the * broadcom,c45-reg-init property stored in the of_node for the phydev. * * broadcom,c45-reg-init = <devid reg mask value>,...; * * There may be one or more sets of <devid reg mask value>: * * devid: which sub-device to use. * reg: the register. * mask: if non-zero, ANDed with existing register value. * value: ORed with the masked value and written to the regiser. *
*/ staticint bcm87xx_of_reg_init(struct phy_device *phydev)
{ const __be32 *paddr; const __be32 *paddr_end; int len, ret;
if (!phydev->mdio.dev.of_node) return 0;
paddr = of_get_property(phydev->mdio.dev.of_node, "broadcom,c45-reg-init", &len); if (!paddr) return 0;
paddr_end = paddr + (len /= sizeof(*paddr));
ret = 0;
while (paddr + 3 < paddr_end) {
u16 devid = be32_to_cpup(paddr++);
u16 reg = be32_to_cpup(paddr++);
u16 mask = be32_to_cpup(paddr++);
u16 val_bits = be32_to_cpup(paddr++); int val = 0;
if (mask) {
val = phy_read_mmd(phydev, devid, reg); if (val < 0) {
ret = val; goto err;
}
val &= mask;
}
val |= val_bits;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.