All of lore.kernel.org
 help / color / mirror / Atom feed
* OMAP3503, SMC911x: mac address issue
@ 2011-09-12  9:54 A.Schallenberg
  2011-09-12 10:22 ` Russell King - ARM Linux
  0 siblings, 1 reply; 2+ messages in thread
From: A.Schallenberg @ 2011-09-12  9:54 UTC (permalink / raw)
  To: linux-arm-kernel

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* OMAP3503, SMC911x: mac address issue
  2011-09-12  9:54 OMAP3503, SMC911x: mac address issue A.Schallenberg
@ 2011-09-12 10:22 ` Russell King - ARM Linux
  0 siblings, 0 replies; 2+ messages in thread
From: Russell King - ARM Linux @ 2011-09-12 10:22 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, Sep 12, 2011 at 11:54:17AM +0200, A.Schallenberg wrote:
> 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

There is no such kernel parameter called 'ethaddr='.  That sounds like
a vendor specific hack somewhere along the lines.

> [    1.958099] eth0: Invalid ethernet MAC address ff:ff:ff:ff:ff:ff. Please
set using ifconfig.

Normally, the MAC address is available either from the device registers,
which the device will load from the attached EEPROM.  It sounds like you
don't have an EEPROM attached, and nothing is programming the registers.
This isn't a combination supported by the driver.

Hence the driver is telling you in the above message how to fix it in
userspace.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-09-12 10:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-12  9:54 OMAP3503, SMC911x: mac address issue A.Schallenberg
2011-09-12 10:22 ` Russell King - ARM Linux

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.