Author: emaste
Date: Wed Apr 17 17:19:19 2019
New Revision: 346325
URL: https://svnweb.freebsd.org/changeset/base/346325

Log:
  MFC r345855: cpsw: use `phy-handle` in FDT to find PHY address
  
  In r337703 DTS files were updated to Linux 4.18, including Linux commit
  4d8b032d3c03f4e9788a18bbb51b10e6c9e8a56b which removed the `phy_id`
  property from am335x-bone-common (as the property was deprecated).
  
  Use `phy-handle` via fdt_get_phyaddr, keeping the existing code as a
  fallback for old DTBs.
  
  PR:           236624
  Submitted by: manu, Gerald Aryeetey <aryeeteygerald_rogers.com>
  Reported by:  Gerald Aryeetey
  Reviewed by:  manu
  Sponsored by: The FreeBSD Foundation

Modified:
  stable/12/sys/arm/ti/cpsw/if_cpsw.c
  stable/12/sys/dev/fdt/fdt_common.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/arm/ti/cpsw/if_cpsw.c
==============================================================================
--- stable/12/sys/arm/ti/cpsw/if_cpsw.c Wed Apr 17 17:18:43 2019        
(r346324)
+++ stable/12/sys/arm/ti/cpsw/if_cpsw.c Wed Apr 17 17:19:19 2019        
(r346325)
@@ -82,6 +82,8 @@ __FBSDID("$FreeBSD$");
 
 #include <dev/ofw/ofw_bus.h>
 #include <dev/ofw/ofw_bus_subr.h>
+
+#include <dev/fdt/fdt_common.h>
  
 #ifdef CPSW_ETHERSWITCH
 #include <dev/etherswitch/etherswitch.h>
@@ -742,7 +744,7 @@ cpsw_get_fdt_data(struct cpsw_softc *sc, int port)
        phandle_t child;
        unsigned long mdio_child_addr;
 
-       /* Find any slave with phy_id */
+       /* Find any slave with phy-handle/phy_id */
        phy = -1;
        vlan = -1;
        for (child = OF_child(sc->node); child != 0; child = OF_peer(child)) {
@@ -756,11 +758,15 @@ cpsw_get_fdt_data(struct cpsw_softc *sc, int port)
                if (mdio_child_addr != slave_mdio_addr[port])
                        continue;
 
-               len = OF_getproplen(child, "phy_id");
-               if (len / sizeof(pcell_t) == 2) {
-                       /* Get phy address from fdt */
-                       if (OF_getencprop(child, "phy_id", phy_id, len) > 0)
-                               phy = phy_id[1];
+               if (fdt_get_phyaddr(child, NULL, &phy, NULL) != 0){
+                       /* Users with old DTB will have phy_id instead */
+                       phy = -1;
+                       len = OF_getproplen(child, "phy_id");
+                       if (len / sizeof(pcell_t) == 2) {
+                               /* Get phy address from fdt */
+                               if (OF_getencprop(child, "phy_id", phy_id, len) 
> 0)
+                                       phy = phy_id[1];
+                       }
                }
 
                len = OF_getproplen(child, "dual_emac_res_vlan");

Modified: stable/12/sys/dev/fdt/fdt_common.c
==============================================================================
--- stable/12/sys/dev/fdt/fdt_common.c  Wed Apr 17 17:18:43 2019        
(r346324)
+++ stable/12/sys/dev/fdt/fdt_common.c  Wed Apr 17 17:19:19 2019        
(r346325)
@@ -399,6 +399,9 @@ fdt_get_phyaddr(phandle_t node, device_t dev, int *phy
 
        *phy_addr = phy_reg;
 
+       if (phy_sc == NULL)
+               return (0);
+
        /*
         * Search for softc used to communicate with phy.
         */
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to