Commit a1c76c15 authored by Bin Meng's avatar Bin Meng Committed by Joe Hershberger

net: tsec: Use priv->tbiaddr to initialize TBI PHY address

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: default avatarBin Meng <bmeng.cn@gmail.com>
Acked-by: default avatarJoe Hershberger <joe.hershberger@ni.com>
parent 9a1d6af5
......@@ -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@24000 {
phy-handle = <&tbi1>;
};
mdio@24520 {
tbi1: tbi-phy@1f {
reg = <0x1f>;
};
};
......@@ -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)
......
......@@ -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 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment