I did have to add this after the request irq in the dm9000.c driver.  If 
/proc/interrupts shows no interrupts for irq 45 then this is most likely the 
problem.

#ifdef CONFIG_ARCH_DAVINCI
    /* set irq type to rising edge */
    davinci_writel(1 << 1, DAVINCI_GPIO_BASE + 0x24);
#endif




-----Original Message-----
From: Narnakaje, Snehaprabha [mailto:[email protected]]
Sent: Thu 4/30/2009 8:39 PM
To: Tom Wheeler; David Brownell
Cc: [email protected]
Subject: RE: DM355 and DM9000 Ethernet
 
Tom,

Are you sure there are no other changes you needed to do to get dm9000 ethernet 
working?

After doing these changes, I do not even get the link.

Thanks
Sneha

________________________________
From: [email protected] 
[mailto:[email protected]] On Behalf Of 
Tom Wheeler
Sent: Thursday, April 09, 2009 6:21 PM
To: David Brownell
Cc: [email protected]
Subject: RE: DM355 and DM9000 Ethernet


Enabling LOCKDEP and applying the dm9000 IRQ handler bugfix were insufficient 
to correct the problems that I was seeing.  This is a patch against the 2.6.28 
rc8 kernel which configures the "direct" GPIO IRQ for use with the dm9000.  The 
dm9000 driver did not need any changes.  /proc/interrupts shows irq 45, AINTC, 
eth0.

diff -uNrp mach-davinci.orig/board-dm355-evm.c mach-davinci/board-dm355-evm.c
--- mach-davinci.orig/board-dm355-evm.c 2009-04-09 16:01:53.000000000 -0600
+++ mach-davinci/board-dm355-evm.c  2009-04-09 16:08:47.000000000 -0600
@@ -19,6 +19,7 @@
 #include <linux/mtd/onenand_regs.h>
 #include <linux/i2c.h>
 #include <linux/io.h>
+#include <linux/irq.h>
 #include <linux/gpio.h>

 #include <asm/setup.h>
@@ -32,7 +33,9 @@
 #include <mach/common.h>
 #include <mach/board.h>
 #include <mach/emac.h>
+#include <mach/gpio.h>
 #include <mach/i2c.h>
+#include <mach/irqs.h>
 #include <mach/serial.h>

 #define DAVINCI_ASYNC_EMIF_CONTROL_BASE        0x01e10000
@@ -149,6 +152,8 @@ static struct resource dm355evm_dm9000_r
        .end    = 0x04014003,
        .flags  = IORESOURCE_MEM,
    }, {
+       .start  = IRQ_DM355_GPIO1,
+       .end    = IRQ_DM355_GPIO1,
        .flags  = IORESOURCE_IRQ
            | IORESOURCE_IRQ_HIGHEDGE /* rising (active high) */,
    },
@@ -204,10 +209,11 @@ static struct davinci_mmc_config dm355ev
 static __init void dm355_evm_init(void)
 {
    davinci_psc_init();
+   davinci_gpio_init();

    gpio_request(1, "dm9000");
    gpio_direction_input(1);
-   dm355evm_dm9000_rsrc[2].start = gpio_to_irq(1);
+   set_irq_type(gpio_to_irq(1), IRQ_TYPE_EDGE_RISING);

    platform_add_devices(davinci_evm_devices,
                 ARRAY_SIZE(davinci_evm_devices));
diff -uNrp mach-davinci.orig/gpio.c mach-davinci/gpio.c
--- mach-davinci.orig/gpio.c    2009-04-09 16:02:02.000000000 -0600
+++ mach-davinci/gpio.c 2009-04-09 16:06:00.000000000 -0600
@@ -325,4 +325,9 @@ static int __init davinci_gpio_irq_setup

    return 0;
 }
-arch_initcall(davinci_gpio_irq_setup);
+
+void davinci_gpio_init(void)
+{
+   davinci_gpio_irq_setup();
+}
+
diff -uNrp mach-davinci.orig/include/mach/gpio.h 
mach-davinci/include/mach/gpio.h
--- mach-davinci.orig/include/mach/gpio.h   2009-04-09 16:07:42.000000000 -0600
+++ mach-davinci/include/mach/gpio.h    2009-04-09 16:06:23.000000000 -0600
@@ -18,6 +18,8 @@

 #define DAVINCI_GPIO_BASE 0x01C67000

+extern void davinci_gpio_init(void)
+
 /*
  * basic gpio routines
  *



-----Original Message-----
From: David Brownell [mailto:[email protected]]
Sent: Thu 4/9/2009 3:43 PM
To: Tom Wheeler
Cc: [email protected]
Subject: Re: DM355 and DM9000 Ethernet

On Thursday 09 April 2009, Tom Wheeler wrote:
> I have had problems getting the dm9000 mac/phy working properly with the
> DM355 EVM.  I have seen a number of posts indicating problems with the
> dm9000 and the DM355.

In my case, enabling LOCKDEP is sufficient to make all of those
problems vanish ... a dm9000 IRQ handler bugfix made *some* of
the problems go away.  (e3162d381fc359ebe5c98a3e216888a7cb200051
is in 2.6.29 and thus DaVinci GIT.)


>                The 2.6.18 kernel requests the individual
> interrupt for GPIO1 (IRQ 45) where the 2.6.28 kernel uses the gpio
> controller interrupt (IRQ 65) which is chained to the bank interrupt.
> By changing the 2.6.28 kernel to reflect what I saw in the 2.6.18 kernel
> this seemed to solve the problems I was seeing.

How did you get the "direct" GPIO IRQ to work?  Did you have
to disable its bank IRQ or anything?  Last time I tried to
use those "direct" IRQs, they didn't work at all.


> Are there known issues with the DM355 gpio controller interrupt handling
> where it chains the individual interrupts to the bank interrupt?

So far as I know, the DM355 EVM is the first DaVinci board to
make heavy use of GPIO IRQs.  So it's plausible that there be
some kind of load-dependent bug there.  There's no confirmation
of such a bug in IRQ handling, though.

I'm moderately convinced there *is* a timing bug affecting that
EVM, but whether it's EMIF bus timings or some IRQ handling race
is an open question.

- Dave


_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to