ARM: OMAP: serial: Fix the ocp smart idlemode handling bug
Subsystems (3)
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.
--- arch/arm/mach-omap2/serial.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/serial.c +7 -1
@@ -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
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.
Signed-off-by Santosh Shilimkar <[email protected]>Cc Govindraj.R <[email protected]>
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@@ -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
PATCH 1/1 ARM: OMAP: serial: Fix the ocp smart idlemode handling bug
In reply to Santosh ShilimkarQuoted 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.
Signed-off-by Santosh Shilimkar <[email protected]>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
PATCH 1/1 ARM: OMAP: serial: Fix the ocp smart idlemode handling bug
In reply to Santosh ShilimkarQuoted 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.
Signed-off-by Santosh Shilimkar <[email protected]>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@@ -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