From: Kevin Hilman <khilman@ti.com>
To: "Govindraj.R" <govindraj.raja@ti.com>
Cc: linux-omap@vger.kernel.org, linux-serial@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Tony Lindgren <tony@atomide.com>,
Benoit Cousson <b-cousson@ti.com>, Paul Walmsley <paul@pwsan.com>,
Rajendra Nayak <rnayak@ti.com>
Subject: Re: [PATCH v2 12/12] OMAP2: Serial: Add no async wake flag.
Date: Thu, 05 May 2011 10:32:49 -0700 [thread overview]
Message-ID: <87k4e5hx32.fsf@ti.com> (raw)
In-Reply-To: <1304080796-625-13-git-send-email-govindraj.raja@ti.com> (Govindraj R.'s message of "Fri, 29 Apr 2011 18:09:56 +0530")
"Govindraj.R" <govindraj.raja@ti.com> writes:
> For omap2 cpu_idle thread will not be available
Why not?
> and uart_clock cutting happens only in suspend path.
Aren't clocks also cut after runtime PM autosuspend?
> Prior to this patch the uart_clock was cut using prepare/resume
> calls since these funcs are no more available with runtime
> changes use no_async_wake flag to keep clock active during bootup
> otherwise uart port will disabled during boot-up and cannot be
> enabled back.
This doesn't just keep clock active during bootup, but it keeps clock
active always, except during suspend.
> Also based on this flag we can disable uart port during suspend
> and enable back during resume.
I think disabling UART port during suspend should already be part of an
earlier patch. This patch should then only make it conditional.
> Signed-off-by: Govindraj.R <govindraj.raja@ti.com>
> ---
> arch/arm/mach-omap2/serial.c | 7 +++++++
> arch/arm/plat-omap/include/plat/omap-serial.h | 3 +++
> drivers/tty/serial/omap-serial.c | 14 ++++++++++++++
> 3 files changed, 24 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
> index d4ef370..1af9fd5 100644
> --- a/arch/arm/mach-omap2/serial.c
> +++ b/arch/arm/mach-omap2/serial.c
> @@ -245,6 +245,12 @@ static void omap_uart_wakeup_enable(struct platform_device *pdev, bool enable)
> static void omap_uart_idle_init(struct omap_uart_port_info *uart,
> unsigned short num)
> {
> + /* On omap2 no cpu_idle and async wakeup from prcm_module.
Please remove comments about CPU idle, as the need for this has nothing
to do with CPU idle.
> + * This flag can be used to cut clocks only in suspend path.
> + * to avoid boot break due to aggressive clock cutting from
> + * omap-serial driver.
> + */
fix multi-line comment style throughout
> + uart->no_async_wake = true;
If needed (which I still don't think I understand), for readability sake
this flag should be called 'has_async_wake', and default to false. It
should then be set to true on available SoCs.
Kevin
> if (cpu_is_omap34xx()) {
> u32 mod = num > 1 ? OMAP3430_PER_MOD : CORE_MOD;
> u32 wk_mask = 0;
> @@ -266,6 +272,7 @@ static void omap_uart_idle_init(struct omap_uart_port_info *uart,
> break;
> }
> uart->wk_mask = wk_mask;
> + uart->no_async_wake = false;
> } else if (cpu_is_omap24xx()) {
> u32 wk_mask = 0;
> u32 wk_en = PM_WKEN1, wk_st = PM_WKST1;
> diff --git a/arch/arm/plat-omap/include/plat/omap-serial.h b/arch/arm/plat-omap/include/plat/omap-serial.h
> index b5117bd..1de5bc4 100644
> --- a/arch/arm/plat-omap/include/plat/omap-serial.h
> +++ b/arch/arm/plat-omap/include/plat/omap-serial.h
> @@ -79,6 +79,7 @@ struct omap_uart_port_info {
> void __iomem *wk_st;
> void __iomem *wk_en;
> u32 wk_mask;
> + bool no_async_wake;
> };
>
> struct uart_omap_dma {
> @@ -134,6 +135,8 @@ struct uart_omap_port {
> unsigned int errata;
> void (*enable_wakeup)(struct platform_device *, bool);
> bool (*chk_wakeup)(struct platform_device *);
> +
> + bool no_async_wake;
> };
>
> #endif /* __OMAP_SERIAL_H__ */
> diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
> index eea478c..59f548f 100644
> --- a/drivers/tty/serial/omap-serial.c
> +++ b/drivers/tty/serial/omap-serial.c
> @@ -1168,6 +1168,13 @@ static int serial_omap_suspend(struct device *dev)
> uart_suspend_port(&serial_omap_reg, &up->port);
> console_trylock();
> serial_omap_pm(&up->port, 3, 0);
> +
> + /* OMAP2 dont have cpu_idle thread and async wakeup from prcm.
> + * For such socs clocks will be kept active from probe and
> + * cut only in suspend path.
> + */
> + if (up->no_async_wake)
> + serial_omap_port_disable(up);
> }
> return 0;
> }
> @@ -1179,6 +1186,9 @@ static int serial_omap_resume(struct device *dev)
> if (up) {
> uart_resume_port(&serial_omap_reg, &up->port);
> console_unlock();
> +
> + if (up->no_async_wake)
> + serial_omap_port_enable(up);
> }
>
> return 0;
> @@ -1402,6 +1412,7 @@ static int serial_omap_probe(struct platform_device *pdev)
> up->errata = omap_up_info->errata;
> up->enable_wakeup = omap_up_info->enable_wakeup;
> up->chk_wakeup = omap_up_info->chk_wakeup;
> + up->no_async_wake = omap_up_info->no_async_wake;
>
> if (omap_up_info->dma_enabled) {
> up->uart_dma.uart_dma_tx = dma_tx->start;
> @@ -1430,6 +1441,9 @@ static int serial_omap_probe(struct platform_device *pdev)
> serial_omap_port_disable(up);
> }
>
> + if (up->no_async_wake)
> + serial_omap_port_enable(up);
> +
> ui[pdev->id] = up;
> serial_omap_add_console_port(up);
WARNING: multiple messages have this Message-ID (diff)
From: khilman@ti.com (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 12/12] OMAP2: Serial: Add no async wake flag.
Date: Thu, 05 May 2011 10:32:49 -0700 [thread overview]
Message-ID: <87k4e5hx32.fsf@ti.com> (raw)
In-Reply-To: <1304080796-625-13-git-send-email-govindraj.raja@ti.com> (Govindraj R.'s message of "Fri, 29 Apr 2011 18:09:56 +0530")
"Govindraj.R" <govindraj.raja@ti.com> writes:
> For omap2 cpu_idle thread will not be available
Why not?
> and uart_clock cutting happens only in suspend path.
Aren't clocks also cut after runtime PM autosuspend?
> Prior to this patch the uart_clock was cut using prepare/resume
> calls since these funcs are no more available with runtime
> changes use no_async_wake flag to keep clock active during bootup
> otherwise uart port will disabled during boot-up and cannot be
> enabled back.
This doesn't just keep clock active during bootup, but it keeps clock
active always, except during suspend.
> Also based on this flag we can disable uart port during suspend
> and enable back during resume.
I think disabling UART port during suspend should already be part of an
earlier patch. This patch should then only make it conditional.
> Signed-off-by: Govindraj.R <govindraj.raja@ti.com>
> ---
> arch/arm/mach-omap2/serial.c | 7 +++++++
> arch/arm/plat-omap/include/plat/omap-serial.h | 3 +++
> drivers/tty/serial/omap-serial.c | 14 ++++++++++++++
> 3 files changed, 24 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
> index d4ef370..1af9fd5 100644
> --- a/arch/arm/mach-omap2/serial.c
> +++ b/arch/arm/mach-omap2/serial.c
> @@ -245,6 +245,12 @@ static void omap_uart_wakeup_enable(struct platform_device *pdev, bool enable)
> static void omap_uart_idle_init(struct omap_uart_port_info *uart,
> unsigned short num)
> {
> + /* On omap2 no cpu_idle and async wakeup from prcm_module.
Please remove comments about CPU idle, as the need for this has nothing
to do with CPU idle.
> + * This flag can be used to cut clocks only in suspend path.
> + * to avoid boot break due to aggressive clock cutting from
> + * omap-serial driver.
> + */
fix multi-line comment style throughout
> + uart->no_async_wake = true;
If needed (which I still don't think I understand), for readability sake
this flag should be called 'has_async_wake', and default to false. It
should then be set to true on available SoCs.
Kevin
> if (cpu_is_omap34xx()) {
> u32 mod = num > 1 ? OMAP3430_PER_MOD : CORE_MOD;
> u32 wk_mask = 0;
> @@ -266,6 +272,7 @@ static void omap_uart_idle_init(struct omap_uart_port_info *uart,
> break;
> }
> uart->wk_mask = wk_mask;
> + uart->no_async_wake = false;
> } else if (cpu_is_omap24xx()) {
> u32 wk_mask = 0;
> u32 wk_en = PM_WKEN1, wk_st = PM_WKST1;
> diff --git a/arch/arm/plat-omap/include/plat/omap-serial.h b/arch/arm/plat-omap/include/plat/omap-serial.h
> index b5117bd..1de5bc4 100644
> --- a/arch/arm/plat-omap/include/plat/omap-serial.h
> +++ b/arch/arm/plat-omap/include/plat/omap-serial.h
> @@ -79,6 +79,7 @@ struct omap_uart_port_info {
> void __iomem *wk_st;
> void __iomem *wk_en;
> u32 wk_mask;
> + bool no_async_wake;
> };
>
> struct uart_omap_dma {
> @@ -134,6 +135,8 @@ struct uart_omap_port {
> unsigned int errata;
> void (*enable_wakeup)(struct platform_device *, bool);
> bool (*chk_wakeup)(struct platform_device *);
> +
> + bool no_async_wake;
> };
>
> #endif /* __OMAP_SERIAL_H__ */
> diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
> index eea478c..59f548f 100644
> --- a/drivers/tty/serial/omap-serial.c
> +++ b/drivers/tty/serial/omap-serial.c
> @@ -1168,6 +1168,13 @@ static int serial_omap_suspend(struct device *dev)
> uart_suspend_port(&serial_omap_reg, &up->port);
> console_trylock();
> serial_omap_pm(&up->port, 3, 0);
> +
> + /* OMAP2 dont have cpu_idle thread and async wakeup from prcm.
> + * For such socs clocks will be kept active from probe and
> + * cut only in suspend path.
> + */
> + if (up->no_async_wake)
> + serial_omap_port_disable(up);
> }
> return 0;
> }
> @@ -1179,6 +1186,9 @@ static int serial_omap_resume(struct device *dev)
> if (up) {
> uart_resume_port(&serial_omap_reg, &up->port);
> console_unlock();
> +
> + if (up->no_async_wake)
> + serial_omap_port_enable(up);
> }
>
> return 0;
> @@ -1402,6 +1412,7 @@ static int serial_omap_probe(struct platform_device *pdev)
> up->errata = omap_up_info->errata;
> up->enable_wakeup = omap_up_info->enable_wakeup;
> up->chk_wakeup = omap_up_info->chk_wakeup;
> + up->no_async_wake = omap_up_info->no_async_wake;
>
> if (omap_up_info->dma_enabled) {
> up->uart_dma.uart_dma_tx = dma_tx->start;
> @@ -1430,6 +1441,9 @@ static int serial_omap_probe(struct platform_device *pdev)
> serial_omap_port_disable(up);
> }
>
> + if (up->no_async_wake)
> + serial_omap_port_enable(up);
> +
> ui[pdev->id] = up;
> serial_omap_add_console_port(up);
next prev parent reply other threads:[~2011-05-05 17:32 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-29 12:39 [PATCH v2 00/12] OMAP2+: Serial: Runtime adaptation + cleanup Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-04-29 12:39 ` [PATCH v2 01/12] OMAP2+: UART: Remove certain uart calls from sram_idle Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-04-29 12:39 ` [PATCH v2 02/12] OMAP2+: UART: Remove uart clock handling code from serial.c Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-04-29 13:20 ` Alan Cox
2011-04-29 13:20 ` Alan Cox
2011-04-29 12:39 ` [PATCH v2 03/12] OMAP2+: Serial: Add default mux for all uarts Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-05-04 10:00 ` Tony Lindgren
2011-05-04 10:00 ` Tony Lindgren
2011-05-04 10:34 ` Govindraj
2011-05-04 10:34 ` Govindraj
2011-04-29 12:39 ` [PATCH v2 04/12] Serial: OMAP: Add runtime pm support for omap-serial driver Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-05-04 20:35 ` Kevin Hilman
2011-05-04 20:35 ` Kevin Hilman
2011-05-04 21:05 ` Paul Walmsley
2011-05-04 21:05 ` Paul Walmsley
2011-05-05 5:48 ` Raja, Govindraj
2011-05-05 5:48 ` Raja, Govindraj
2011-05-05 5:55 ` Govindraj
2011-05-05 5:55 ` Govindraj
2011-04-29 12:39 ` [PATCH v2 05/12] OMAP: Serial: Hold console lock for console usage Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-05-04 10:02 ` Tony Lindgren
2011-05-04 10:02 ` Tony Lindgren
2011-05-04 10:09 ` Russell King - ARM Linux
2011-05-04 10:09 ` Russell King - ARM Linux
2011-05-04 10:19 ` Govindraj
2011-05-04 10:19 ` Govindraj
2011-05-04 20:43 ` Kevin Hilman
2011-05-04 20:43 ` Kevin Hilman
2011-05-05 10:25 ` Govindraj
2011-05-05 10:25 ` Govindraj
2011-05-05 14:52 ` Kevin Hilman
2011-05-05 14:52 ` Kevin Hilman
2011-04-29 12:39 ` [PATCH v2 06/12] Serial: OMAP2+: Move erratum handling from serial.c Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-04-29 12:39 ` [PATCH v2 07/12] OMAP: Serial: Allow UART parameters to be configured from board file Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-05-04 9:55 ` Tony Lindgren
2011-05-04 9:55 ` Tony Lindgren
2011-05-04 10:06 ` Govindraj
2011-05-04 10:06 ` Govindraj
2011-05-04 10:25 ` Tony Lindgren
2011-05-04 10:25 ` Tony Lindgren
2011-05-04 10:39 ` Govindraj
2011-05-04 10:39 ` Govindraj
2011-04-29 12:39 ` [PATCH v2 08/12] Serial: OMAP2+: Make the RX_TIMEOUT for DMA configurable for each UART Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-04-29 12:39 ` [PATCH v2 09/12] OMAP3: Serial: Remove uart pads from 3430 board file Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-04-29 12:39 ` [PATCH v2 10/12] OMAP2+: hwmod: Add api to enable io_ring wakeup Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-05-04 23:59 ` Kevin Hilman
2011-05-04 23:59 ` Kevin Hilman
2011-05-05 5:58 ` Govindraj
2011-05-05 5:58 ` Govindraj
2011-04-29 12:39 ` [PATCH v2 11/12] OMAP: Serial: Use resume call from prcm to enable uart Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-05-05 0:11 ` Kevin Hilman
2011-05-05 0:11 ` Kevin Hilman
2011-05-05 11:46 ` Govindraj
2011-05-05 11:46 ` Govindraj
2011-05-05 14:58 ` Kevin Hilman
2011-05-05 14:58 ` Kevin Hilman
2011-05-06 9:16 ` Govindraj
2011-05-06 9:16 ` Govindraj
2011-05-06 15:55 ` Kevin Hilman
2011-05-06 15:55 ` Kevin Hilman
2011-05-09 12:23 ` Govindraj
2011-05-09 12:23 ` Govindraj
2011-04-29 12:39 ` [PATCH v2 12/12] OMAP2: Serial: Add no async wake flag Govindraj.R
2011-04-29 12:39 ` Govindraj.R
2011-05-05 17:32 ` Kevin Hilman [this message]
2011-05-05 17:32 ` Kevin Hilman
2011-05-06 9:34 ` Govindraj
2011-05-06 9:34 ` Govindraj
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87k4e5hx32.fsf@ti.com \
--to=khilman@ti.com \
--cc=b-cousson@ti.com \
--cc=govindraj.raja@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=paul@pwsan.com \
--cc=rnayak@ti.com \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.