From: Rafał Miłecki Some network devices (e.g. access points) come with BCM54210E PHY that requires being set into master mode to work properly. Add binding for BCM54210E as found in Luxul AP devices (600d:84a6) and the "brcm,master-mode" property. Signed-off-by: Rafał Miłecki --- .../devicetree/bindings/net/brcm,bcm54xx.yaml | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/brcm,bcm54xx.yaml diff --git a/Documentation/devicetree/bindings/net/brcm,bcm54xx.yaml b/Documentation/devicetree/bindings/net/brcm,bcm54xx.yaml new file mode 100644 index 000000000000..3ad226efe21d --- /dev/null +++ b/Documentation/devicetree/bindings/net/brcm,bcm54xx.yaml @@ -0,0 +1,37 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/brcm,bcm54xx.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Broadcom Ethernet PHYs + +maintainers: + - Rafał Miłecki + +allOf: + - $ref: ethernet-phy.yaml# + +properties: + compatible: + enum: + - ethernet-phy-id600d.84a6 + + brcm,master-mode: + description: PHY requires setting into master mode + type: boolean + +unevaluatedProperties: false + +examples: + - | + mdio { + #address-cells = <1>; + #size-cells = <0>; + + ethernet-phy@0 { + compatible = "ethernet-phy-id600d.84a6"; + reg = <0>; + brcm,master-mode; + }; + }; -- 2.51.0 From: Rafał Miłecki Specifying master mode as required is now possible using DT property which is a much nicer way. It allows clean per-device hardware description instead of runtime detection in specific Ethernet drivers. Signed-off-by: Rafał Miłecki --- drivers/net/phy/broadcom.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c index 3459a0e9d8b9..d66b79ea1c38 100644 --- a/drivers/net/phy/broadcom.c +++ b/drivers/net/phy/broadcom.c @@ -110,11 +110,13 @@ static int bcm54xx_config_clock_delay(struct phy_device *phydev) static int bcm54210e_config_init(struct phy_device *phydev) { + struct device_node *np = phydev->mdio.dev.of_node; int val; bcm54xx_config_clock_delay(phydev); - if (phydev->dev_flags & PHY_BRCM_EN_MASTER_MODE) { + if (of_property_read_bool(np, "brcm,master-mode") || + phydev->dev_flags & PHY_BRCM_EN_MASTER_MODE) { val = phy_read(phydev, MII_CTRL1000); val |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; phy_write(phydev, MII_CTRL1000, val); -- 2.51.0