net: phy: micrel: Find Micrel PHY node correctly
authorJames Byrne <james.byrne@origamienergy.com>
Mon, 4 Mar 2019 17:40:34 +0000 (17:40 +0000)
committerJoe Hershberger <joe.hershberger@ni.com>
Wed, 8 May 2019 22:27:01 +0000 (17:27 -0500)
In some of the device trees that specify skew values for KSZ90x1 PHYs
the values are stored (incorrectly) in the MAC node, whereas in others
it is in an 'ethernet-phy' subnode. Previously the code would fail to
find and program these skew values, so this commit changes it to look
for an "ethernet-phy" subnode first, and revert to looking in the MAC
node if there isn't one.

The device trees affected (where the skew values are in a subnode) are
imx6qdl-icore-rqs.dtsi, r8a77970-eagle.dts, r8a77990-ebisu.dts,
r8a77995-draak.dts, salvator-common.dtsi, sama5d3xcm.dtsi,
sama5d3xcm_cmp.dtsi, socfpga_cyclone5_vining_fpga.dts,
socfpga_stratix10_socdk.dts and ulcb.dtsi. Before this change the skew
values in these device trees would be ignored.

The device trees where the skew values are in the MAC node are
socfpga_arria10_socdk.dtsi, socfpga_arria5_socdk.dts,
socfpga_cyclone5_de0_nano_soc.dts, socfpga_cyclone5_de10_nano.dts,
socfpga_cyclone5_de1_soc.dts, socfpga_cyclone5_is1.dts,
socfpga_cyclone5_socdk.dts, socfpga_cyclone5_sockit.dts. These should be
unaffected by this change.

The changes were tested on a sama5d3xcm.

Signed-off-by: James Byrne <james.byrne@origamienergy.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/phy/micrel_ksz90x1.c

index 1f8d86a..8dec9f2 100644 (file)
@@ -114,12 +114,20 @@ static int ksz90x1_of_config_group(struct phy_device *phydev,
        int val[4];
        int i, changed = 0, offset, max;
        u16 regval = 0;
+       ofnode node;
 
        if (!drv || !drv->writeext)
                return -EOPNOTSUPP;
 
+       /* Look for a PHY node under the Ethernet node */
+       node = dev_read_subnode(dev, "ethernet-phy");
+       if (!ofnode_valid(node)) {
+               /* No node found, look in the Ethernet node */
+               node = dev_ofnode(dev);
+       }
+
        for (i = 0; i < ofcfg->grpsz; i++) {
-               val[i] = dev_read_u32_default(dev, ofcfg->grp[i].name, ~0);
+               val[i] = ofnode_read_u32_default(node, ofcfg->grp[i].name, ~0);
                offset = ofcfg->grp[i].off;
                if (val[i] == -1) {
                        /* Default register value for KSZ9021 */