RE: [PATCH v6 00/13] OMAP: GPIO: Implement GPIO in hwmod way

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Kevin,

> -----Original Message-----
> From: Kevin Hilman [mailto:khilman@xxxxxxxxxxxxxxxxxxx]
> 
> >> "Varadarajan, Charulatha" <charu@xxxxxx> writes:

<<snip>>

> >>>> Hi Charu,
> >>>>
> >>>> I haven't been fully through the series, but here's some quick
> feedback
> >>>> based on what I tried today.
> >>>>
> >>>> Basically, I got stuck because the first board I tried it on was the
> >>>> 35xx-based OMAP3EVM platform, which uses a GPIO-based interrupt for
> the
> >>>> network.  My setup uses DHCP + nfsroot, so the GPIO IRQ must be
> working
> >>>> during boot.
> >>>>
> >>>> The first thing I noticed, is that GPIO interrupts are not firing
> during
> >>>> boot, so neither the DHCP or the nfsroot works during boot.  I
> haven't
> >>>> been able to fully debug this, but the 3430SDP should have the same
> >>>> issue for its smc91x if you set it up for DHCP + nfsroot.  This is
> >>>> working fine on my pm-wip/idle-reorg branch which has the
> prerequisites
> >>>> you mentioned, but didn't work when I applied the clk_alias patch
> plus
> >>>> this series.
> >>>
> >>> I tested this GPIO series in pm-wip/idle-reorg branch with clock
> >>> add alias patch and I did not see any issues. I tested with DHCP +
> nfsroot
> >>> on SDP3430. Please provide me some more info on this.
> >>
> >> Hmm, I don't have many more details yet.  All I can see is that the
> GPIO
> >> bank that has the smc91x interrupt (GPIO6) is loosing interrupts, and
> >> thus preventing DHCP and nfsroot from working.
> >>

The root cause of this issue is that during OMAP3EVM board init, the
Ethernet controller (smsc911x) is not reset and it relies on the uboot configurations for it's operations. The reset GPIO pin used for this
purpose is not even reserved.

With GPIO hwmod series, gpio module reset happens during init and hence
the uboot settings are modified which makes the Ethernet controller to fail.

Patch [1] below if applied on top of gpio hwmod series would make the
evm board work with DHCP and nfsroot.

Rather, patch [2] below would be a better fix for this. I am not getting deeper into the minor details of Ethernet controller initialization for
OMAP3 EVM board. This patch would suffice for now. But my observation
is that omap3evm_init_smsc911x() needs to be fixed including CS
configuration and other required settings for Ethernet controller.

[1]

diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index 43ed2ab..b137e0a 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -373,6 +373,7 @@ static struct omap_hwmod omap3xxx_gpio1_hwmod = {
        .class          = &omap3xxx_gpio_hwmod_class,
        .dev_attr       = &gpio_dev_attr,
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+       .flags          = HWMOD_INIT_NO_RESET,
 };


[2]

>From b191662eca02450bbeaf29370916bca8811bb752 Mon Sep 17 00:00:00 2001
From: Varadarajan, Charulatha <charu@xxxxxx>
Date: Fri, 24 Sep 2010 20:00:06 +0530
Subject: [PATCH] Fix: OMAP3EVM: Ethernet controller smsc911x reset

Do reset of Ethernet controller smsc911x using OMAP gpio7
while initializing the Ethernet controller.

Signed-off-by: Charulatha V <charu@xxxxxx>
---
 arch/arm/mach-omap2/board-omap3evm.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index f76d9c0..3ee87d0 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -55,6 +55,7 @@
 #define OMAP3EVM_ETHR_SIZE	1024
 #define OMAP3EVM_ETHR_ID_REV	0x50
 #define OMAP3EVM_ETHR_GPIO_IRQ	176
+#define OMAP3EVM_ETHR_GPIO_RST  7
 #define OMAP3EVM_SMSC911X_CS	5
 
 static u8 omap3_evm_version;
@@ -134,6 +135,14 @@ static inline void __init omap3evm_init_smsc911x(void)
 	else
 		rate = clk_get_rate(l3ck);
 
+	gpio_direction_output(OMAP3EVM_ETHR_GPIO_RST, 1);
+
+	/* reset pulse to ethernet controller*/
+	gpio_set_value(OMAP3EVM_ETHR_GPIO_RST, 0);
+	usleep_range(150, 220);
+	gpio_set_value(OMAP3EVM_ETHR_GPIO_RST, 1);
+	usleep_range(1, 2);
+
 	if (gpio_request(OMAP3EVM_ETHR_GPIO_IRQ, "SMSC911x irq") < 0) {
 		printk(KERN_ERR "Failed to request GPIO%d for smsc911x IRQ\n",
 			OMAP3EVM_ETHR_GPIO_IRQ);
@@ -141,6 +150,13 @@ static inline void __init omap3evm_init_smsc911x(void)
 	}
 
 	gpio_direction_input(OMAP3EVM_ETHR_GPIO_IRQ);
+
+	/* Configure ethernet controller reset gpio */
+	if (gpio_request(OMAP3EVM_ETHR_GPIO_RST, "SMSC911x gpio") < 0) {
+		pr_err(KERN_ERR "Failed to request GPIO8 for smsc911x gpio\n");
+		return;
+	}
+
 	platform_device_register(&omap3evm_smsc911x_device);
 }
 
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux