All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rajendra Nayak <rnayak@ti.com>
To: t-kristo@ti.com
Cc: linux-omap@vger.kernel.org, khilman@ti.com,
	linux-arm-kernel@lists.infradead.org,
	Vishwanath BS <vishwanath.bs@ti.com>,
	"Dhavlikar, Nilesh" <dnilesh@ti.com>
Subject: Re: [PATCHv3 2/6] ARM: OMAP3 PM: Move IO Daisychain function to omap3 prm file
Date: Thu, 01 Mar 2012 14:13:27 +0530	[thread overview]
Message-ID: <4F4F36AF.5010000@ti.com> (raw)
In-Reply-To: <1330590484.2116.76.camel@sokoban>

On Thursday 01 March 2012 01:58 PM, Tero Kristo wrote:
> On Thu, 2012-03-01 at 12:19 +0530, Rajendra Nayak wrote:
>> On Wednesday 29 February 2012 07:56 PM, Tero Kristo wrote:
>>> From: Vishwanath BS<vishwanath.bs@ti.com>
>>>
>>> Since IO Daisychain modifies only PRM registers, it makes sense to move
>>> it to PRM File.
>>>
>>> Signed-off-by: Vishwanath BS<vishwanath.bs@ti.com>
>>> Tested-by: Govindraj.R<govindraj.raja@ti.com>
>>> Signed-off-by: Tero Kristo<t-kristo@ti.com>
>>> ---
>>>    arch/arm/mach-omap2/pm34xx.c       |   30 +-----------------------------
>>>    arch/arm/mach-omap2/prm2xxx_3xxx.c |   32 ++++++++++++++++++++++++++++++++
>>>    arch/arm/mach-omap2/prm2xxx_3xxx.h |   14 ++++++++++++++
>>>    3 files changed, 47 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
>>> index b0821a8..e97ec3f 100644
>>> --- a/arch/arm/mach-omap2/pm34xx.c
>>> +++ b/arch/arm/mach-omap2/pm34xx.c
>>> @@ -85,34 +85,6 @@ static inline void omap3_per_restore_context(void)
>>>    	omap_gpio_restore_context();
>>>    }
>>>
>>> -static void omap3_enable_io_chain(void)
>>> -{
>>> -	int timeout = 0;
>>> -
>>> -	omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> -				   PM_WKEN);
>>> -	/* Do a readback to assure write has been done */
>>> -	omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN);
>>> -
>>> -	while (!(omap2_prm_read_mod_reg(WKUP_MOD, PM_WKST)&
>>> -		 OMAP3430_ST_IO_CHAIN_MASK)) {
>>> -		timeout++;
>>> -		if (timeout>   1000) {
>>> -			pr_err("Wake up daisy chain activation failed.\n");
>>> -			return;
>>> -		}
>>> -	}
>>> -	omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> -			PM_WKEN);
>>> -
>>> -}
>>> -
>>> -static void omap3_disable_io_chain(void)
>>> -{
>>> -	omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> -				     PM_WKEN);
>>> -}
>>> -
>>>    static void omap3_core_save_context(void)
>>>    {
>>>    	omap3_ctrl_save_padconf();
>>> @@ -324,7 +296,7 @@ void omap_sram_idle(void)
>>>    	     core_next_state<   PWRDM_POWER_ON)) {
>>>    		omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN);
>>>    		if (omap3_has_io_chain_ctrl())
>>> -			omap3_enable_io_chain();
>>> +			omap3_trigger_io_chain();
>>>    	}
>>>
>>>    	pwrdm_pre_transition();
>>> diff --git a/arch/arm/mach-omap2/prm2xxx_3xxx.c b/arch/arm/mach-omap2/prm2xxx_3xxx.c
>>> index 9ce7654..fc98781 100644
>>> --- a/arch/arm/mach-omap2/prm2xxx_3xxx.c
>>> +++ b/arch/arm/mach-omap2/prm2xxx_3xxx.c
>>> @@ -301,6 +301,38 @@ void omap3xxx_prm_restore_irqen(u32 *saved_mask)
>>>    				OMAP3_PRM_IRQENABLE_MPU_OFFSET);
>>>    }
>>>
>>> +/**
>>> + * Maximum time(us) it takes to output the signal WUCLKOUT of the last pad of
>>> + * the I/O ring after asserting WUCLKIN high
>>> + */
>>> +#define MAX_IOPAD_LATCH_TIME 1000
>>
>> Since we are changing the implementation to use omap_test_timeout()
>> in this patch, it makes sense to make this 100 so we have a max 100us
>> delay, similar to what we did on OMAP4.
>
> I didn't change this timeout as I wasn't quite sure what is a safe value
> for it. Do you know if 100us is safe for omap3 also in all possible
> scenarios?

The IO daisy implementation is essentially the same on OMAP3 and OMAP4.
I looped in Nilesh again who can shout if it isn't.

Besides the previous implementation was just a loop of 1000  (not using
omap_test_timeout() which internally does udelay(1)) and that should be
always less than 100us even with MPU at the lowest OPP on OMAP3.

>
>>
>>> +
>>> +/* OMAP3 Daisychain enable sequence */
>>> +void omap3_trigger_io_chain(void)
>>> +{
>>> +	int i = 0;
>>> +
>>> +	omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> +				   PM_WKEN);
>>> +	/* Do a readback to assure write has been done */
>>> +	omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN);
>>> +
>>> +	omap_test_timeout(((omap2_prm_read_mod_reg(WKUP_MOD, PM_WKST)&
>>> +			    OMAP3430_ST_IO_CHAIN_MASK) == 1),
>>> +			  MAX_IOPAD_LATCH_TIME, i);
>>> +
>>> +	omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> +				     PM_WKEN);
>>
>> The comment from Djamil should hold good here too. We should wait for
>> IO chain status to show 0 here.
>
> Hmm okay, I'll address this also for next version.
>
> -Tero
>
>
>>
>>> +}
>>> +
>>
>> regards,
>> Rajendra
>
>


WARNING: multiple messages have this Message-ID (diff)
From: rnayak@ti.com (Rajendra Nayak)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv3 2/6] ARM: OMAP3 PM: Move IO Daisychain function to omap3 prm file
Date: Thu, 01 Mar 2012 14:13:27 +0530	[thread overview]
Message-ID: <4F4F36AF.5010000@ti.com> (raw)
In-Reply-To: <1330590484.2116.76.camel@sokoban>

On Thursday 01 March 2012 01:58 PM, Tero Kristo wrote:
> On Thu, 2012-03-01 at 12:19 +0530, Rajendra Nayak wrote:
>> On Wednesday 29 February 2012 07:56 PM, Tero Kristo wrote:
>>> From: Vishwanath BS<vishwanath.bs@ti.com>
>>>
>>> Since IO Daisychain modifies only PRM registers, it makes sense to move
>>> it to PRM File.
>>>
>>> Signed-off-by: Vishwanath BS<vishwanath.bs@ti.com>
>>> Tested-by: Govindraj.R<govindraj.raja@ti.com>
>>> Signed-off-by: Tero Kristo<t-kristo@ti.com>
>>> ---
>>>    arch/arm/mach-omap2/pm34xx.c       |   30 +-----------------------------
>>>    arch/arm/mach-omap2/prm2xxx_3xxx.c |   32 ++++++++++++++++++++++++++++++++
>>>    arch/arm/mach-omap2/prm2xxx_3xxx.h |   14 ++++++++++++++
>>>    3 files changed, 47 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
>>> index b0821a8..e97ec3f 100644
>>> --- a/arch/arm/mach-omap2/pm34xx.c
>>> +++ b/arch/arm/mach-omap2/pm34xx.c
>>> @@ -85,34 +85,6 @@ static inline void omap3_per_restore_context(void)
>>>    	omap_gpio_restore_context();
>>>    }
>>>
>>> -static void omap3_enable_io_chain(void)
>>> -{
>>> -	int timeout = 0;
>>> -
>>> -	omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> -				   PM_WKEN);
>>> -	/* Do a readback to assure write has been done */
>>> -	omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN);
>>> -
>>> -	while (!(omap2_prm_read_mod_reg(WKUP_MOD, PM_WKST)&
>>> -		 OMAP3430_ST_IO_CHAIN_MASK)) {
>>> -		timeout++;
>>> -		if (timeout>   1000) {
>>> -			pr_err("Wake up daisy chain activation failed.\n");
>>> -			return;
>>> -		}
>>> -	}
>>> -	omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> -			PM_WKEN);
>>> -
>>> -}
>>> -
>>> -static void omap3_disable_io_chain(void)
>>> -{
>>> -	omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> -				     PM_WKEN);
>>> -}
>>> -
>>>    static void omap3_core_save_context(void)
>>>    {
>>>    	omap3_ctrl_save_padconf();
>>> @@ -324,7 +296,7 @@ void omap_sram_idle(void)
>>>    	     core_next_state<   PWRDM_POWER_ON)) {
>>>    		omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN);
>>>    		if (omap3_has_io_chain_ctrl())
>>> -			omap3_enable_io_chain();
>>> +			omap3_trigger_io_chain();
>>>    	}
>>>
>>>    	pwrdm_pre_transition();
>>> diff --git a/arch/arm/mach-omap2/prm2xxx_3xxx.c b/arch/arm/mach-omap2/prm2xxx_3xxx.c
>>> index 9ce7654..fc98781 100644
>>> --- a/arch/arm/mach-omap2/prm2xxx_3xxx.c
>>> +++ b/arch/arm/mach-omap2/prm2xxx_3xxx.c
>>> @@ -301,6 +301,38 @@ void omap3xxx_prm_restore_irqen(u32 *saved_mask)
>>>    				OMAP3_PRM_IRQENABLE_MPU_OFFSET);
>>>    }
>>>
>>> +/**
>>> + * Maximum time(us) it takes to output the signal WUCLKOUT of the last pad of
>>> + * the I/O ring after asserting WUCLKIN high
>>> + */
>>> +#define MAX_IOPAD_LATCH_TIME 1000
>>
>> Since we are changing the implementation to use omap_test_timeout()
>> in this patch, it makes sense to make this 100 so we have a max 100us
>> delay, similar to what we did on OMAP4.
>
> I didn't change this timeout as I wasn't quite sure what is a safe value
> for it. Do you know if 100us is safe for omap3 also in all possible
> scenarios?

The IO daisy implementation is essentially the same on OMAP3 and OMAP4.
I looped in Nilesh again who can shout if it isn't.

Besides the previous implementation was just a loop of 1000  (not using
omap_test_timeout() which internally does udelay(1)) and that should be
always less than 100us even with MPU at the lowest OPP on OMAP3.

>
>>
>>> +
>>> +/* OMAP3 Daisychain enable sequence */
>>> +void omap3_trigger_io_chain(void)
>>> +{
>>> +	int i = 0;
>>> +
>>> +	omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> +				   PM_WKEN);
>>> +	/* Do a readback to assure write has been done */
>>> +	omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN);
>>> +
>>> +	omap_test_timeout(((omap2_prm_read_mod_reg(WKUP_MOD, PM_WKST)&
>>> +			    OMAP3430_ST_IO_CHAIN_MASK) == 1),
>>> +			  MAX_IOPAD_LATCH_TIME, i);
>>> +
>>> +	omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
>>> +				     PM_WKEN);
>>
>> The comment from Djamil should hold good here too. We should wait for
>> IO chain status to show 0 here.
>
> Hmm okay, I'll address this also for next version.
>
> -Tero
>
>
>>
>>> +}
>>> +
>>
>> regards,
>> Rajendra
>
>

  reply	other threads:[~2012-03-01  8:43 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-29 14:26 [PATCHv3 0/6] ARM: OMAP3PLUS: IO daisychain support fixes Tero Kristo
2012-02-29 14:26 ` Tero Kristo
2012-02-29 14:26 ` [PATCHv3 1/6] ARM: OMAP3 PM: correct enable/disable of daisy io chain Tero Kristo
2012-02-29 14:26   ` Tero Kristo
2012-02-29 14:26 ` [PATCHv3 2/6] ARM: OMAP3 PM: Move IO Daisychain function to omap3 prm file Tero Kristo
2012-02-29 14:26   ` Tero Kristo
2012-03-01  6:49   ` Rajendra Nayak
2012-03-01  6:49     ` Rajendra Nayak
2012-03-01  8:28     ` Tero Kristo
2012-03-01  8:28       ` Tero Kristo
2012-03-01  8:43       ` Rajendra Nayak [this message]
2012-03-01  8:43         ` Rajendra Nayak
2012-02-29 14:26 ` [PATCHv3 3/6] ARM: OMAP4 PM: Add IO Daisychain support Tero Kristo
2012-02-29 14:26   ` Tero Kristo
2012-02-29 14:26 ` [PATCHv3 4/6] ARM: OMAP3 PM: Enable IO Wake up Tero Kristo
2012-02-29 14:26   ` Tero Kristo
2012-02-29 17:22   ` Paul Walmsley
2012-02-29 17:22     ` Paul Walmsley
2012-03-01  6:52   ` Rajendra Nayak
2012-03-01  6:52     ` Rajendra Nayak
2012-03-01  8:25     ` Tero Kristo
2012-03-01  8:25       ` Tero Kristo
2012-03-01 22:37     ` Kevin Hilman
2012-03-01 22:37       ` Kevin Hilman
2012-03-02  9:19       ` Tero Kristo
2012-03-02  9:19         ` Tero Kristo
2012-03-02  9:23         ` Rajendra Nayak
2012-03-02  9:23           ` Rajendra Nayak
2012-02-29 14:27 ` [PATCHv3 5/6] ARM: OMAP3PLUS PM: Add IO Daisychain support via hwmod mux Tero Kristo
2012-02-29 14:27   ` Tero Kristo
2012-02-29 14:27 ` [PATCHv3 6/6] ARM: OMAP3 PM: Remove IO Daisychain control from cpuidle Tero Kristo
2012-02-29 14:27   ` Tero Kristo
2012-03-06  0:32 ` [PATCHv3 0/6] ARM: OMAP3PLUS: IO daisychain support fixes Kevin Hilman
2012-03-06  0:32   ` Kevin Hilman

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=4F4F36AF.5010000@ti.com \
    --to=rnayak@ti.com \
    --cc=dnilesh@ti.com \
    --cc=khilman@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=t-kristo@ti.com \
    --cc=vishwanath.bs@ti.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.