Hi Arno,

Arno Steffen wrote:
> Changing my OMAP EVM board to newest uboot 2009-11 I do have a problem
> with ethernet.
> Although the kernel could be loaded via tftp perfectly, the upcoming
> kernel complains about invalid MAC.
> 
> Kernel command line: mem=128M console=ttyS0,115200n8
> root=/dev/mtdblock8 rw rootfstype=jffs2 ip=dhcp
> ...
On ARM, I solved that problem as follows:

1. Add "ethaddr=$(ethaddr)" to your kernel command line. e.g.:
   mem=128M console=ttyS0,115200n8 ethaddr=$(ethaddr)

2. Apply this patch on linux kernel (approved on v2.6.31):

diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index 92fe36d..cddf67a 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -14,6 +14,7 @@
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/slab.h>
+#include <linux/string.h>
 #include <linux/init.h>
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h>
@@ -81,9 +82,14 @@ static void __init macb_get_hwaddr(struct macb *bp)
        u32 bottom;
        u16 top;
        u8 addr[6];
+       char *ptr = NULL;
+       char *ptr_end;
+       char ethaddr[17];
+       int i;

        bottom = macb_readl(bp, SA1B);
        top = macb_readl(bp, SA1T);
+       ptr = strstr(boot_command_line, "ethaddr=");

        addr[0] = bottom & 0xff;
        addr[1] = (bottom >> 8) & 0xff;
@@ -94,6 +100,16 @@ static void __init macb_get_hwaddr(struct macb *bp)

        if (is_valid_ether_addr(addr)) {
                memcpy(bp->dev->dev_addr, addr, sizeof(addr));
+       } else if (ptr) {
+               memcpy(ethaddr, ptr + 8, 17 * sizeof(char));
+               printk(KERN_NOTICE "ethaddr parsed from commandline: %s\n", 
ethaddr);
+               ptr_end = ethaddr;
+               for (i = 0; i <= 5; i++) {
+                       addr[i] = simple_strtol(ptr_end, &ptr_end, 16) |
+                                       simple_strtol(ptr_end, &ptr_end, 16) << 
4;
+                       ptr_end++; /* skip ":" in  ethaddr */
+               }
+               memcpy(bp->dev->dev_addr, addr, sizeof(addr));
        } else {
                dev_info(&bp->pdev->dev, "invalid hw address, using random\n");
                random_ether_addr(bp->dev->dev_addr);

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to