diff options
author | Baruch Siach | 2018-11-21 13:05:33 +0200 |
---|---|---|
committer | Joe Hershberger | 2019-01-24 11:35:27 -0600 |
commit | acce753dfb6d297c9f779dd04bb24d0004e6bc64 (patch) | |
tree | e7d901ff7eb084528a9fe3cd224578d77498710d /drivers | |
parent | 7efb75b11480c46077b44df70aa30d375bf761be (diff) |
net: mvpp2: fix lookup of mdio registers base address
Current mdio base lookup code relies on a 'reg' property at the upper CP
node. There is no 'reg' property there in current DT files of Armada
CP110. Use ofnode_get_addr() instead since it provides proper DT address
translation.
Cc: Ken Ma <make@marvell.com>
Cc: Stefan Chulski <stefanc@marvell.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Reviewed-by: Stefan Roese <sr@denx.de>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/mvpp2.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c index 9b3ab25c195..23c4da8cebb 100644 --- a/drivers/net/mvpp2.c +++ b/drivers/net/mvpp2.c @@ -4705,21 +4705,22 @@ static int phy_info_parse(struct udevice *dev, struct mvpp2_port *port) { int port_node = dev_of_offset(dev); const char *phy_mode_str; - int phy_node, mdio_off, cp_node; + int phy_node; u32 id; u32 phyaddr = 0; int phy_mode = -1; - phys_addr_t mdio_addr; phy_node = fdtdec_lookup_phandle(gd->fdt_blob, port_node, "phy"); if (phy_node > 0) { + ofnode phy_ofnode; + fdt_addr_t phy_base; + phyaddr = fdtdec_get_int(gd->fdt_blob, phy_node, "reg", 0); if (phyaddr < 0) { dev_err(&pdev->dev, "could not find phy address\n"); return -1; } - mdio_off = fdt_parent_offset(gd->fdt_blob, phy_node); /* TODO: This WA for mdio issue. U-boot 2017 don't have * mdio driver and on MACHIATOBin board ports from CP1 @@ -4728,14 +4729,10 @@ static int phy_info_parse(struct udevice *dev, struct mvpp2_port *port) * base address. WA should be removed after * mdio driver implementation. */ - mdio_addr = fdtdec_get_uint(gd->fdt_blob, - mdio_off, "reg", 0); - - cp_node = fdt_parent_offset(gd->fdt_blob, mdio_off); - mdio_addr |= fdt_get_base_address((void *)gd->fdt_blob, - cp_node); - port->priv->mdio_base = (void *)mdio_addr; + phy_ofnode = ofnode_get_parent(offset_to_ofnode(phy_node)); + phy_base = ofnode_get_addr(phy_ofnode); + port->priv->mdio_base = (void *)phy_base; if (port->priv->mdio_base < 0) { dev_err(&pdev->dev, "could not find mdio base address\n"); |