summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorHou Zhiqiang <Zhiqiang.Hou@nxp.com>2020-05-03 22:48:42 +0800
committerPriyanka Jain <priyanka.jain@nxp.com>2020-06-04 18:53:20 +0530
commitbf67eb325bea748577f98fd5bb5f10348b223c2a (patch)
tree2b80ec82ba50a4b3c51f314ba4add877de71e548 /drivers
parenta139ac58a7aad3110a4188ed1770ceb0f70f37d8 (diff)
net: tsec: Access eTSEC registers using virtual address
The current code accesses eTSEC registers using physical address directly, it's not correct, though no problem on current platforms. It won't work on platforms, which does not support 1:1 virtual-physical address map. Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/tsec.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c
index c2e755f2b1e..611cb040dc5 100644
--- a/drivers/net/tsec.c
+++ b/drivers/net/tsec.c
@@ -800,7 +800,7 @@ int tsec_probe(struct udevice *dev)
int ret;
pdata->iobase = (phys_addr_t)dev_read_addr(dev);
- priv->regs = (struct tsec *)pdata->iobase;
+ priv->regs = dev_remap_addr(dev);
if (dev_read_phandle_with_args(dev, "phy-handle", NULL, 0, 0,
&phandle_args)) {
@@ -819,8 +819,13 @@ int tsec_probe(struct udevice *dev)
}
reg = ofnode_get_addr_index(parent, 0);
- priv->phyregs_sgmii = (struct tsec_mii_mng *)
- (reg + TSEC_MDIO_REGS_OFFSET);
+ if (reg == FDT_ADDR_T_NONE) {
+ printf("No 'reg' property of MII for external PHY\n");
+ return -ENOENT;
+ }
+
+ priv->phyregs_sgmii = map_physmem(reg + TSEC_MDIO_REGS_OFFSET, 0,
+ MAP_NOCACHE);
ret = dev_read_phandle_with_args(dev, "tbi-handle", NULL, 0, 0,
&phandle_args);