All of lore.kernel.org
 help / color / mirror / Atom feed
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 11/12] OMAP: Serial: Use resume call from prcm to enable uart
Date: Wed, 04 May 2011 17:11:45 -0700	[thread overview]
Message-ID: <87pqnym2f2.fsf@ti.com> (raw)
In-Reply-To: <1304080796-625-12-git-send-email-govindraj.raja@ti.com> (Govindraj R.'s message of "Fri, 29 Apr 2011 18:09:55 +0530")

"Govindraj.R" <govindraj.raja@ti.com> writes:

> Use resume idle call from prcm_irq to enable uart_port from low power states.
> Add api to check pad wakeup status which will we used from uart_resume func.
> to enable back uart port if a wakeup event occurred.
>
> UART_Resume func. can be removed once we have irq_chaining functionality
> available.
>
> Signed-off-by: Govindraj.R <govindraj.raja@ti.com>

The part adding a new hwmod API needs to be separated out into a
separate patch which is not dependent on the rest of this series.

> ---
>  arch/arm/mach-omap2/mux.c                     |   23 +++++++++++++++++++++++
>  arch/arm/mach-omap2/mux.h                     |   13 +++++++++++++
>  arch/arm/mach-omap2/omap_hwmod.c              |   13 +++++++++++++
>  arch/arm/mach-omap2/pm24xx.c                  |    2 ++
>  arch/arm/mach-omap2/pm34xx.c                  |    2 ++
>  arch/arm/mach-omap2/serial.c                  |   23 +++++++++++++++++++++++
>  arch/arm/plat-omap/include/plat/omap-serial.h |    2 ++
>  arch/arm/plat-omap/include/plat/omap_hwmod.h  |    1 +
>  arch/arm/plat-omap/include/plat/serial.h      |    1 +
>  drivers/tty/serial/omap-serial.c              |   23 +++++++++++++++++++++++
>  10 files changed, 103 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
> index a4ab1e3..7149671 100644
> --- a/arch/arm/mach-omap2/mux.c
> +++ b/arch/arm/mach-omap2/mux.c
> @@ -348,6 +348,29 @@ err1:
>  	return NULL;
>  }
>  
> +/* Gets the wakeup status of given pad from omap-hwmod.
> + * Returns the wake_up status bit of available pad mux pin
> + */

fix multi-line comment style

> +bool omap_hwmod_mux_wakeup(struct omap_hwmod_mux_info *hmux)

The name here should be more descriptive: like _get_wake_status or
something.

> +{
> +	int i;
> +	unsigned int val;
> +	u8 ret = 0;
> +
> +	for (i = 0; i < hmux->nr_pads; i++) {
> +		struct omap_device_pad *pad = &hmux->pads[i];
> +
> +		val = omap_mux_read(pad->partition,
> +					pad->mux->reg_offset);
> +		if (val & OMAP_WAKEUP_EVENT) {
> +			ret = 1;
> +			break;
> +		}
> +	}
> +
> +	return ret;
> +}
> +
>  /* Assumes the calling function takes care of locking */
>  void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
>  {
> diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
> index 137f321..379fb6e 100644
> --- a/arch/arm/mach-omap2/mux.h
> +++ b/arch/arm/mach-omap2/mux.h
> @@ -225,8 +225,21 @@ omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads);
>   */
>  void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state);
>  
> +
> +/**
> + * omap_hwmod_mux_wakeup - omap hwmod check given pad had wakeup event
> + * @hmux:		Pads for a hwmod
> + *
> + * Called only from omap_hwmod.c, do not use.
> + */

Please put the kerneldoc comments in the C file instead of the header.

> +bool omap_hwmod_mux_wakeup(struct omap_hwmod_mux_info *hmux);
>  #else
>  
> +static inline bool omap_hwmod_mux_wakeup(struct omap_hwmod_mux_info *hmux)
> +{
> +	return 0;
> +}
> +
>  static inline int omap_mux_init_gpio(int gpio, int val)
>  {
>  	return 0;
> diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
> index 4a12336..86cb8c4 100644
> --- a/arch/arm/mach-omap2/omap_hwmod.c
> +++ b/arch/arm/mach-omap2/omap_hwmod.c
> @@ -2403,3 +2403,16 @@ int omap_hwmod_enable_ioring_wakeup(struct omap_hwmod *oh, bool enable)
>  
>  	return ret;
>  }
> +
> +/**
> + * omap_hwmod_pad_wakeup_status - get pad wakeup status if mux is available.

How about _get_pad_wakeup_status()

> + * @oh: struct omap_hwmod *
> + *
> + * Returns the wake_up status bit of available pad mux pin.

or on error... ?

> + */
> +int omap_hmwod_pad_wakeup_status(struct omap_hwmod *oh)
> +{
> +	if (oh->mux)
> +		return omap_hwmod_mux_wakeup(oh->mux);
> +	return -EINVAL;
> +}
> diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c
> index c405bda..ba58a1d 100644
> --- a/arch/arm/mach-omap2/pm24xx.c
> +++ b/arch/arm/mach-omap2/pm24xx.c
> @@ -137,6 +137,8 @@ static void omap2_enter_full_retention(void)
>  			   OMAP_SDRC_REGADDR(SDRC_DLLA_CTRL),
>  			   OMAP_SDRC_REGADDR(SDRC_POWER));
>  
> +	omap_uart_resume_idle();
> +
>  no_sleep:
>  	if (omap2_pm_debug) {
>  		unsigned long long tmp;
> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
> index ce0ecdc..3960330 100644
> --- a/arch/arm/mach-omap2/pm34xx.c
> +++ b/arch/arm/mach-omap2/pm34xx.c
> @@ -216,6 +216,8 @@ static int prcm_clear_mod_irqs(s16 module, u8 regs)
>  
>  	wkst = omap2_prm_read_mod_reg(module, wkst_off);
>  	wkst &= omap2_prm_read_mod_reg(module, grpsel_off);
> +
> +	c += omap_uart_resume_idle();

No...

[...]

> diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
> index 9ed993c..eea478c 100644
> --- a/drivers/tty/serial/omap-serial.c
> +++ b/drivers/tty/serial/omap-serial.c
> @@ -43,6 +43,7 @@
>  #include <plat/dmtimer.h>
>  #include <plat/omap-serial.h>
>  #include <plat/omap_device.h>
> +#include <plat/serial.h>
>  
>  static struct uart_omap_port *ui[OMAP_MAX_HSUART_PORTS];
>  
> @@ -108,6 +109,27 @@ static inline void serial_omap_port_enable(struct uart_omap_port *up)
>  	pm_runtime_get_sync(&up->pdev->dev);
>  }
>  
> +/* TBD: Should be removed once we irq-chaining mechanism in place */

...indeed...

> +u32 omap_uart_resume_idle()
> +{
> +	int i;
> +	u32 ret = 0;
> +
> +	for (i = 0; i < OMAP_MAX_HSUART_PORTS; i++) {
> +		struct uart_omap_port *up = ui[i];
> +
> +		if (!up)
> +			continue;
> +
> +		if (up->chk_wakeup(up->pdev)) {
> +			serial_omap_port_enable(up);
> +			serial_omap_port_disable(up);
> +			ret++;
> +		}
> +	}
> +	return ret;
> +}

... this is just putting back basically the same thing that was removed in
patch 1.  IOW, this is now being checked for *every* PRCM wakeup, which
is no different than having it in the idle path.

I thought I understood that you had the SW IRQ triggering working, so
this part should not be necessary.  

Kevin

WARNING: multiple messages have this Message-ID (diff)
From: khilman@ti.com (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 11/12] OMAP: Serial: Use resume call from prcm to enable uart
Date: Wed, 04 May 2011 17:11:45 -0700	[thread overview]
Message-ID: <87pqnym2f2.fsf@ti.com> (raw)
In-Reply-To: <1304080796-625-12-git-send-email-govindraj.raja@ti.com> (Govindraj R.'s message of "Fri, 29 Apr 2011 18:09:55 +0530")

"Govindraj.R" <govindraj.raja@ti.com> writes:

> Use resume idle call from prcm_irq to enable uart_port from low power states.
> Add api to check pad wakeup status which will we used from uart_resume func.
> to enable back uart port if a wakeup event occurred.
>
> UART_Resume func. can be removed once we have irq_chaining functionality
> available.
>
> Signed-off-by: Govindraj.R <govindraj.raja@ti.com>

The part adding a new hwmod API needs to be separated out into a
separate patch which is not dependent on the rest of this series.

> ---
>  arch/arm/mach-omap2/mux.c                     |   23 +++++++++++++++++++++++
>  arch/arm/mach-omap2/mux.h                     |   13 +++++++++++++
>  arch/arm/mach-omap2/omap_hwmod.c              |   13 +++++++++++++
>  arch/arm/mach-omap2/pm24xx.c                  |    2 ++
>  arch/arm/mach-omap2/pm34xx.c                  |    2 ++
>  arch/arm/mach-omap2/serial.c                  |   23 +++++++++++++++++++++++
>  arch/arm/plat-omap/include/plat/omap-serial.h |    2 ++
>  arch/arm/plat-omap/include/plat/omap_hwmod.h  |    1 +
>  arch/arm/plat-omap/include/plat/serial.h      |    1 +
>  drivers/tty/serial/omap-serial.c              |   23 +++++++++++++++++++++++
>  10 files changed, 103 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
> index a4ab1e3..7149671 100644
> --- a/arch/arm/mach-omap2/mux.c
> +++ b/arch/arm/mach-omap2/mux.c
> @@ -348,6 +348,29 @@ err1:
>  	return NULL;
>  }
>  
> +/* Gets the wakeup status of given pad from omap-hwmod.
> + * Returns the wake_up status bit of available pad mux pin
> + */

fix multi-line comment style

> +bool omap_hwmod_mux_wakeup(struct omap_hwmod_mux_info *hmux)

The name here should be more descriptive: like _get_wake_status or
something.

> +{
> +	int i;
> +	unsigned int val;
> +	u8 ret = 0;
> +
> +	for (i = 0; i < hmux->nr_pads; i++) {
> +		struct omap_device_pad *pad = &hmux->pads[i];
> +
> +		val = omap_mux_read(pad->partition,
> +					pad->mux->reg_offset);
> +		if (val & OMAP_WAKEUP_EVENT) {
> +			ret = 1;
> +			break;
> +		}
> +	}
> +
> +	return ret;
> +}
> +
>  /* Assumes the calling function takes care of locking */
>  void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
>  {
> diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
> index 137f321..379fb6e 100644
> --- a/arch/arm/mach-omap2/mux.h
> +++ b/arch/arm/mach-omap2/mux.h
> @@ -225,8 +225,21 @@ omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads);
>   */
>  void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state);
>  
> +
> +/**
> + * omap_hwmod_mux_wakeup - omap hwmod check given pad had wakeup event
> + * @hmux:		Pads for a hwmod
> + *
> + * Called only from omap_hwmod.c, do not use.
> + */

Please put the kerneldoc comments in the C file instead of the header.

> +bool omap_hwmod_mux_wakeup(struct omap_hwmod_mux_info *hmux);
>  #else
>  
> +static inline bool omap_hwmod_mux_wakeup(struct omap_hwmod_mux_info *hmux)
> +{
> +	return 0;
> +}
> +
>  static inline int omap_mux_init_gpio(int gpio, int val)
>  {
>  	return 0;
> diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
> index 4a12336..86cb8c4 100644
> --- a/arch/arm/mach-omap2/omap_hwmod.c
> +++ b/arch/arm/mach-omap2/omap_hwmod.c
> @@ -2403,3 +2403,16 @@ int omap_hwmod_enable_ioring_wakeup(struct omap_hwmod *oh, bool enable)
>  
>  	return ret;
>  }
> +
> +/**
> + * omap_hwmod_pad_wakeup_status - get pad wakeup status if mux is available.

How about _get_pad_wakeup_status()

> + * @oh: struct omap_hwmod *
> + *
> + * Returns the wake_up status bit of available pad mux pin.

or on error... ?

> + */
> +int omap_hmwod_pad_wakeup_status(struct omap_hwmod *oh)
> +{
> +	if (oh->mux)
> +		return omap_hwmod_mux_wakeup(oh->mux);
> +	return -EINVAL;
> +}
> diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c
> index c405bda..ba58a1d 100644
> --- a/arch/arm/mach-omap2/pm24xx.c
> +++ b/arch/arm/mach-omap2/pm24xx.c
> @@ -137,6 +137,8 @@ static void omap2_enter_full_retention(void)
>  			   OMAP_SDRC_REGADDR(SDRC_DLLA_CTRL),
>  			   OMAP_SDRC_REGADDR(SDRC_POWER));
>  
> +	omap_uart_resume_idle();
> +
>  no_sleep:
>  	if (omap2_pm_debug) {
>  		unsigned long long tmp;
> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
> index ce0ecdc..3960330 100644
> --- a/arch/arm/mach-omap2/pm34xx.c
> +++ b/arch/arm/mach-omap2/pm34xx.c
> @@ -216,6 +216,8 @@ static int prcm_clear_mod_irqs(s16 module, u8 regs)
>  
>  	wkst = omap2_prm_read_mod_reg(module, wkst_off);
>  	wkst &= omap2_prm_read_mod_reg(module, grpsel_off);
> +
> +	c += omap_uart_resume_idle();

No...

[...]

> diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
> index 9ed993c..eea478c 100644
> --- a/drivers/tty/serial/omap-serial.c
> +++ b/drivers/tty/serial/omap-serial.c
> @@ -43,6 +43,7 @@
>  #include <plat/dmtimer.h>
>  #include <plat/omap-serial.h>
>  #include <plat/omap_device.h>
> +#include <plat/serial.h>
>  
>  static struct uart_omap_port *ui[OMAP_MAX_HSUART_PORTS];
>  
> @@ -108,6 +109,27 @@ static inline void serial_omap_port_enable(struct uart_omap_port *up)
>  	pm_runtime_get_sync(&up->pdev->dev);
>  }
>  
> +/* TBD: Should be removed once we irq-chaining mechanism in place */

...indeed...

> +u32 omap_uart_resume_idle()
> +{
> +	int i;
> +	u32 ret = 0;
> +
> +	for (i = 0; i < OMAP_MAX_HSUART_PORTS; i++) {
> +		struct uart_omap_port *up = ui[i];
> +
> +		if (!up)
> +			continue;
> +
> +		if (up->chk_wakeup(up->pdev)) {
> +			serial_omap_port_enable(up);
> +			serial_omap_port_disable(up);
> +			ret++;
> +		}
> +	}
> +	return ret;
> +}

... this is just putting back basically the same thing that was removed in
patch 1.  IOW, this is now being checked for *every* PRCM wakeup, which
is no different than having it in the idle path.

I thought I understood that you had the SW IRQ triggering working, so
this part should not be necessary.  

Kevin

  reply	other threads:[~2011-05-05  0:11 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 [this message]
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
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=87pqnym2f2.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.