Skip to contentSkip to conversation

ARM: OMAP: serial: Fix the ocp smart idlemode handling bug

PATCH New Santosh Shilimkar 4 participants 4 messages Apr 13, 2012 – Apr 17, 2012

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARM: OMAP: serial: Fix the ocp smart idlemode handling bug

The current serial UART code, while fidling with ocp idlemode bits, forget about the smart idle wakeup bit even if it is supported by UART IP block. This will lead to missing the module wakeup on OMAP's where the smart idle wakeup is supported.

This was the root cause of the console sluggishness issue, I have been observing on OMAP4 devices and also can be potential reason for some other UART wakeup issues.

Cc Govindraj.R <[email protected]>
Cc Kevin Hilman <[email protected]>
Cc Paul Walmsley <[email protected]>
---
 arch/arm/mach-omap2/serial.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/serial.c +7 -1
index c9503a7..b28aae1 100644
@@ -108,8 +108,14 @@ static void omap_uart_set_noidle(struct platform_device *pdev)
 static void omap_uart_set_smartidle(struct platform_device *pdev)
 {
 	struct omap_device *od = to_omap_device(pdev);
+	u8 idlemode;
 
-	omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_SMART);
+	if (od->hwmods[0]->class->sysc->idlemodes & SIDLE_SMART_WKUP)
+		idlemode = HWMOD_IDLEMODE_SMART_WKUP;
+	else
+		idlemode = HWMOD_IDLEMODE_SMART;
+
+	omap_hwmod_set_slave_idlemode(od->hwmods[0], idlemode);
 }
 
 #else
Signature · 1 line
1.7.5.4
#1 lore raw

PATCH 1/1 ARM: OMAP: serial: Fix the ocp smart idlemode handling bug

Quoted 11 lines · Santosh Shilimkar

The current serial UART code, while fidling with ocp idlemode bits, forget about the smart idle wakeup bit even if it is supported by UART IP block. This will lead to missing the module wakeup on OMAP's where the smart idle wakeup is supported.

This was the root cause of the console sluggishness issue, I have been observing on OMAP4 devices and also can be potential reason for some other UART wakeup issues.

Adding to git://gitorious.org/linux-3-x/omap-serial.git for_3.4/uart_fixes

Quoted 29 lines
Cc Kevin Hilman <[email protected]>
Cc Paul Walmsley <[email protected]>

---
?arch/arm/mach-omap2/serial.c | ? ?8 +++++++-
?1 files changed, 7 insertions(+), 1 deletions(-)

arch/arm/mach-omap2/serial.c +7 -1
index c9503a7..b28aae1 100644
@@ -108,8 +108,14 @@ static void omap_uart_set_noidle(struct platform_device *pdev)
 ?static void omap_uart_set_smartidle(struct platform_device *pdev)
 ?{
 ? ? ? ?struct omap_device *od = to_omap_device(pdev);
+ ? ? ? u8 idlemode;
 
- ? ? ? omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_SMART);
+ ? ? ? if (od->hwmods[0]->class->sysc->idlemodes & SIDLE_SMART_WKUP)
+ ? ? ? ? ? ? ? idlemode = HWMOD_IDLEMODE_SMART_WKUP;
+ ? ? ? else
+ ? ? ? ? ? ? ? idlemode = HWMOD_IDLEMODE_SMART;
+
+ ? ? ? omap_hwmod_set_slave_idlemode(od->hwmods[0], idlemode);
 ?}
 

?#else
--
1.7.5.4

#2 lore raw

PATCH 1/1 ARM: OMAP: serial: Fix the ocp smart idlemode handling bug

In reply to Santosh Shilimkar
Quoted 5 lines · Santosh Shilimkar

The current serial UART code, while fidling with ocp idlemode bits, forget about the smart idle wakeup bit even if it is supported by UART IP block. This will lead to missing the module wakeup on OMAP's where the smart idle wakeup is supported.

Quoted 8 lines

This was the root cause of the console sluggishness issue, I have been observing on OMAP4 devices and also can be potential reason for some other UART wakeup issues.

Cc Govindraj.R <[email protected]>
Cc Kevin Hilman <[email protected]>
Cc Paul Walmsley <[email protected]>

Of course, in the long term, these idlemode tweaking functions need to go through some kind of omap_bus/omap_device abstraction, since platform_data function pointers are going away with the DT conversion. But since a decent omap_bus/omap_device is still a ways off, this is an important interim step.

- Paul

#3 lore raw

PATCH 1/1 ARM: OMAP: serial: Fix the ocp smart idlemode handling bug

In reply to Santosh Shilimkar
Quoted 5 lines · Santosh Shilimkar

The current serial UART code, while fidling with ocp idlemode bits, forget about the smart idle wakeup bit even if it is supported by UART IP block. This will lead to missing the module wakeup on OMAP's where the smart idle wakeup is supported.

Quoted 8 lines

This was the root cause of the console sluggishness issue, I have been observing on OMAP4 devices and also can be potential reason for some other UART wakeup issues.

Cc Govindraj.R <[email protected]>
Cc Kevin Hilman <[email protected]>
Cc Paul Walmsley <[email protected]>
Quoted 24 lines
---
 arch/arm/mach-omap2/serial.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/serial.c +7 -1
index c9503a7..b28aae1 100644
@@ -108,8 +108,14 @@ static void omap_uart_set_noidle(struct platform_device *pdev)
 static void omap_uart_set_smartidle(struct platform_device *pdev)
 {
 	struct omap_device *od = to_omap_device(pdev);
+	u8 idlemode;
 
-	omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_SMART);
+	if (od->hwmods[0]->class->sysc->idlemodes & SIDLE_SMART_WKUP)
+		idlemode = HWMOD_IDLEMODE_SMART_WKUP;
+	else
+		idlemode = HWMOD_IDLEMODE_SMART;
+
+	omap_hwmod_set_slave_idlemode(od->hwmods[0], idlemode);
 }
 
 #else