diff mbox series

[PATCHv2,2/3] net: tsec: Access eTSEC registers using virtual address

Message ID 20200503144843.36949-3-Zhiqiang.Hou@nxp.com
State New
Headers show
Series net: tsec: Fix issues of DM driver | expand

Commit Message

Zhiqiang Hou May 3, 2020, 2:48 p.m. UTC
From: Hou Zhiqiang <Zhiqiang.Hou at nxp.com>

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 at nxp.com>
Reviewed-by: Vladimir Oltean <vladimir.oltean at nxp.com>
Tested-by: Vladimir Oltean <vladimir.oltean at nxp.com>
---
V2:
 - Added error message for getting the external PHY MII reg.

 drivers/net/tsec.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c
index f85cdcb97e..541f964d2e 100644
--- a/drivers/net/tsec.c
+++ b/drivers/net/tsec.c
@@ -798,7 +798,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)) {
@@ -817,8 +817,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);