dm: net: Fix DM for targets which use MANUAL_RELOC
authorMichal Simek <michal.simek@xilinx.com>
Tue, 8 Dec 2015 15:45:30 +0000 (16:45 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Fri, 18 Dec 2015 12:15:58 +0000 (13:15 +0100)
All ethernet operation needs to be updated for architectures which
requires MANUAL_RELOC.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
net/eth.c

index c542f4aa3b3b1e4f2e6fbb5db4c0ea579aefe45e..6cf3a353a347d7a91e1e344d204bd82a27ccc7b4 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -541,6 +541,34 @@ static int eth_post_probe(struct udevice *dev)
        struct eth_pdata *pdata = dev->platdata;
        unsigned char env_enetaddr[6];
 
+#if defined(CONFIG_NEEDS_MANUAL_RELOC)
+       struct eth_ops *ops = eth_get_ops(dev);
+       static int reloc_done;
+
+       if (!reloc_done) {
+               if (ops->start)
+                       ops->start += gd->reloc_off;
+               if (ops->send)
+                       ops->send += gd->reloc_off;
+               if (ops->recv)
+                       ops->recv += gd->reloc_off;
+               if (ops->free_pkt)
+                       ops->free_pkt += gd->reloc_off;
+               if (ops->stop)
+                       ops->stop += gd->reloc_off;
+#ifdef CONFIG_MCAST_TFTP
+               if (ops->mcast)
+                       ops->mcast += gd->reloc_off;
+#endif
+               if (ops->write_hwaddr)
+                       ops->write_hwaddr += gd->reloc_off;
+               if (ops->read_rom_hwaddr)
+                       ops->read_rom_hwaddr += gd->reloc_off;
+
+               reloc_done++;
+       }
+#endif
+
        priv->state = ETH_STATE_INIT;
 
        /* Check if the device has a MAC address in ROM */