OMAP3503, SMC911x: mac address issue

A.Schallenberg embedded at gmx.net
Mon Sep 12 05:54:17 EDT 2011


Hello,

I am adding support for a custom board to the 3.0 kernel.
The board is very similar to the beagle board, so I took this
as my starting point. I also have an older (v2.6.32) kernel
with its beagle board support modified to support this custom
board instead.

Using the same boot paramaters passed by U-Boot (only the ttyS2
to ttyO2 change was made) the new kernel has issues with eth0.

The kernel driver is added to the board support, compiled and
successfully probed. I verified this by adding some "printk" lines:

...
[    1.939361] SMC911x: init()
[    1.942382] SMC911x: drv_probe()
[    1.945831] SMC911x: probe()
[    1.952484] eth0: LAN9115 (rev 2) at 0x2c000000 IRQ 225
[    1.958099] eth0: Invalid ethernet MAC address ff:ff:ff:ff:ff:ff. Please 
set using ifconfig.
[    1.967071] eth0: External PHY 0xffffffff
[    1.971313] eth0: probe() succeeded
...

Later on, I get:
...
[    2.087951] IP-Config: Failed to open eth0
[    2.093109] IP-Config: Device `eth0' not found.
[    2.098419] Root-NFS: no NFS server address
...


This is ic_open_devs() (from ipconfig.c) calling
dev_change_flags(dev, oflags | IFF_UP). This ultimately
leads to a call to eth_validate_addr() in eth.c
which fails and returns -EADDRNOTAVAIL.
So the MAC address is not correctly passed on to the driver.

The kernel boot parameters are:
[    0.000000] Kernel command line: console=ttyO2,115200n8 
video=omapfb:vram:2M,vram:4M,mode:1024x768 at 60,vxres=1024,vyres=768 
ip=10.100.100.28:10.100.10.69:10.100.0.1:255.255.0.0:3flex:eth0:none 
ethaddr=00:E0:18:1B:21:55 root=/dev/nfs rootfstype=nfs

Here is how I do the initialization in the board file now.
The code is directly taken from the v2.6.32 kernel. 

------------------------------------------------------------

#define OMAP3_BOARD_ETHR_START     0x2c000000
#define OMAP3_BOARD_ETHR_SIZE      1024
#define OMAP3_BOARD_ETHR_GPIO_IRQ  65      // Sos
#define OMAP3_BOARD_SMC911X_CS     5

static struct resource omap3_board_smc911x_resources[] = {
        [0] =   {
                .start  = OMAP3_BOARD_ETHR_START,
                .end    = (OMAP3_BOARD_ETHR_START + OMAP3_BOARD_ETHR_SIZE - 
1),
                .flags  = IORESOURCE_MEM,
        },
        [1] =   {
                .start  = OMAP_GPIO_IRQ(OMAP3_BOARD_ETHR_GPIO_IRQ),
                .end    = OMAP_GPIO_IRQ(OMAP3_BOARD_ETHR_GPIO_IRQ),
                .flags  = IORESOURCE_IRQ,
        },
};

static struct platform_device omap3_board_smc911x_device = {
        .name           = "smc911x",
        .id             = -1,
        .num_resources  = ARRAY_SIZE(omap3_board_smc911x_resources),
        .resource       = &omap3_board_smc911x_resources [0],
};


static inline void __init omap3_board_init_smc911x(void)
{
        int eth_cs;
        struct clk *l3ck;
        unsigned int rate;


        eth_cs = OMAP3_BOARD_SMC911X_CS;


        l3ck = clk_get(NULL, "l3_ck");
        if (IS_ERR(l3ck))
                rate = 100000000;
        else
                rate = clk_get_rate(l3ck);

        if (gpio_request(OMAP3_BOARD_ETHR_GPIO_IRQ, "SMC911x irq") < 0) {
                printk(KERN_ERR "Failed to request GPIO%d for smc911x IRQ\n",
                        OMAP3_BOARD_ETHR_GPIO_IRQ);
                return;
        }

        gpio_direction_input(OMAP3_BOARD_ETHR_GPIO_IRQ);
        platform_device_register(&omap3_board_smc911x_device);
        printk(KERN_INFO "BOARD: Registered SMC911x\n");
}

------------------------------------------------------------------------------

What am I doing wrong here?

I am aware of the thread "Linux Kernel without Ethernet (missed MAC)"
( http://www.mail-archive.com/u-boot@lists.denx.de/msg27711.html )
and also tried the patch by Daniel Gorsulowski but that didn't help.
It should be some different issue here since I am using "ethaddr"
to pass the MAC.


If this is the wrong mailing list for this question,
please point me to a more appropriate one.

Best,
Andreas Schallenberg



More information about the linux-arm-kernel mailing list