[U-Boot] [PATCH 14/17] net: tsec: Use priv->tbiaddr to initialize TBI PHY address

Bin Meng bmeng.cn at gmail.com
Tue Jan 12 07:41:25 CET 2016


Add a new member 'tbiaddr' to tsec_private struct. For non-DM driver,
it is initialized as CONFIG_SYS_TBIPA_VALUE, but for DM driver, we
can get this from device tree. Update the bindings doc as well.

Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
---

 doc/device-tree-bindings/net/fsl-tsec-phy.txt | 21 +++++++++++++++++++++
 drivers/net/tsec.c                            | 13 ++++++++++++-
 include/tsec.h                                |  1 +
 3 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/doc/device-tree-bindings/net/fsl-tsec-phy.txt b/doc/device-tree-bindings/net/fsl-tsec-phy.txt
index dbe91aa..c5bf48c 100644
--- a/doc/device-tree-bindings/net/fsl-tsec-phy.txt
+++ b/doc/device-tree-bindings/net/fsl-tsec-phy.txt
@@ -41,3 +41,24 @@ Example:
 			reg = <0>;
 		};
 	};
+
+* TBI Internal MDIO bus
+
+As of this writing, every tsec is associated with an internal TBI PHY.
+This PHY is accessed through the local MDIO bus.  These buses are defined
+similarly to the mdio buses.  The TBI PHYs underneath them are similar to
+normal PHYs, but the reg property is considered instructive, rather than
+descriptive.  The reg property should be chosen so it doesn't interfere
+with other PHYs on the bus.  The TBI PHYs are referred to by a "tbi-handle"
+property under the tsec node, which has a similar meaning of "phy-handle".
+
+Example:
+	ethernet at 24000 {
+		phy-handle = <&tbi1>;
+	};
+
+	mdio at 24520 {
+		tbi1: tbi-phy at 1f {
+			reg = <0x1f>;
+		};
+	};
diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c
index 18b44f6..025e7a7 100644
--- a/drivers/net/tsec.c
+++ b/drivers/net/tsec.c
@@ -658,7 +658,7 @@ static int init_phy(struct tsec_private *priv)
 		supported |= SUPPORTED_1000baseT_Full;
 
 	/* Assign a Physical address to the TBI */
-	out_be32(&regs->tbipa, CONFIG_SYS_TBIPA_VALUE);
+	out_be32(&regs->tbipa, priv->tbiaddr);
 
 	priv->interface = tsec_get_interface(priv);
 
@@ -707,6 +707,7 @@ static int tsec_initialize(bd_t *bis, struct tsec_info_struct *tsec_info)
 	priv->phyregs_sgmii = tsec_info->miiregs_sgmii;
 
 	priv->phyaddr = tsec_info->phyaddr;
+	priv->tbiaddr = CONFIG_SYS_TBIPA_VALUE;
 	priv->flags = tsec_info->flags;
 
 	sprintf(dev->name, tsec_info->devname);
@@ -801,6 +802,16 @@ int tsec_probe(struct udevice *dev)
 		return -ENOENT;
 	}
 
+	offset = fdtdec_lookup_phandle(gd->fdt_blob, dev->of_offset,
+				       "tbi-handle");
+	if (offset > 0) {
+		reg = fdtdec_get_int(gd->fdt_blob, offset, "reg",
+				     CONFIG_SYS_TBIPA_VALUE);
+		priv->tbiaddr = reg;
+	} else {
+		priv->tbiaddr = CONFIG_SYS_TBIPA_VALUE;
+	}
+
 	phy_mode = fdt_getprop(gd->fdt_blob, dev->of_offset,
 			       "phy-connection-type", NULL);
 	if (phy_mode)
diff --git a/include/tsec.h b/include/tsec.h
index 88ce964..fb27edf 100644
--- a/include/tsec.h
+++ b/include/tsec.h
@@ -402,6 +402,7 @@ struct tsec_private {
 	phy_interface_t interface;
 	struct mii_dev *bus;
 	uint phyaddr;
+	uint tbiaddr;
 	char mii_devname[16];
 	u32 flags;
 	uint rx_idx;	/* index of the current RX buffer */
-- 
1.8.2.1



More information about the U-Boot mailing list