Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 3 Apr 2019 21:01:54 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r345855 - in head/sys: arm/ti/cpsw dev/fdt
Message-ID:  <201904032101.x33L1sAI084634@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: emaste
Date: Wed Apr  3 21:01:53 2019
New Revision: 345855
URL: https://svnweb.freebsd.org/changeset/base/345855

Log:
  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
  MFC after:	2 weeks
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D19814

Modified:
  head/sys/arm/ti/cpsw/if_cpsw.c
  head/sys/dev/fdt/fdt_common.c

Modified: head/sys/arm/ti/cpsw/if_cpsw.c
==============================================================================
--- head/sys/arm/ti/cpsw/if_cpsw.c	Wed Apr  3 20:57:43 2019	(r345854)
+++ head/sys/arm/ti/cpsw/if_cpsw.c	Wed Apr  3 21:01:53 2019	(r345855)
@@ -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: head/sys/dev/fdt/fdt_common.c
==============================================================================
--- head/sys/dev/fdt/fdt_common.c	Wed Apr  3 20:57:43 2019	(r345854)
+++ head/sys/dev/fdt/fdt_common.c	Wed Apr  3 21:01:53 2019	(r345855)
@@ -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.
 	 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201904032101.x33L1sAI084634>