diff mbox

[RFC,3/9] OMAP4460: HWMOD: DO not reset GPIO1 during HWMOD init

Message ID 1306375016-707-4-git-send-email-nm@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Nishanth Menon May 26, 2011, 1:56 a.m. UTC
From: Moiz Sonasath <m-sonasath@ti.com>

For OMAP4460, GPIO-7 of bank1 is used for controling
the TPS modes, hence GPIO1 should not be reset
during init as reset will cause the TPS voltage to
drop to 0.9 V.

Originally from:
http://git.omapzoom.org/?p=kernel/omap.git;a=commitdiff;h=52ae4f0de03b17c064d9ce90a580230f1a596ec1

[nm@ti.com: upstream version]
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Moiz Sonasath <m-sonasath@ti.com>
---
 arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)

Comments

Sanjeev Premi May 26, 2011, 8:36 a.m. UTC | #1
> -----Original Message-----
> From: linux-omap-owner@vger.kernel.org 
> [mailto:linux-omap-owner@vger.kernel.org] On Behalf Of Menon, Nishanth
> Sent: Thursday, May 26, 2011 7:27 AM
> To: linux-omap
> Cc: Sonasath, Moiz; Menon, Nishanth
> Subject: [RFC][PATCH 3/9] OMAP4460: HWMOD: DO not reset GPIO1 
> during HWMOD init

[sp] typo in the subject. "DO" -> "Do"

     Another nit: Are 2 HWMODs required in the subject?

~sanjeev

> 
> From: Moiz Sonasath <m-sonasath@ti.com>
> 
> For OMAP4460, GPIO-7 of bank1 is used for controling
> the TPS modes, hence GPIO1 should not be reset
> during init as reset will cause the TPS voltage to
> drop to 0.9 V.
> 
> Originally from:
> http://git.omapzoom.org/?p=kernel/omap.git;a=commitdiff;h=52ae
> 4f0de03b17c064d9ce90a580230f1a596ec1
> 
> [nm@ti.com: upstream version]
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Moiz Sonasath <m-sonasath@ti.com>
> ---
>  arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   27 
> ++++++++++++++++++++++++---
>  1 files changed, 24 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c 
> b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> index 2f51a5a..27319c4 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> @@ -1745,7 +1745,7 @@ static struct omap_hwmod_opt_clk 
> gpio1_opt_clks[] = {
>  	{ .role = "dbclk", .clk = "gpio1_dbclk" },
>  };
>  
> -static struct omap_hwmod omap44xx_gpio1_hwmod = {
> +static struct omap_hwmod omap443x_gpio1_hwmod = {
>  	.name		= "gpio1",
>  	.class		= &omap44xx_gpio_hwmod_class,
>  	.mpu_irqs	= omap44xx_gpio1_irqs,
> @@ -1761,7 +1761,27 @@ static struct omap_hwmod 
> omap44xx_gpio1_hwmod = {
>  	.dev_attr	= &gpio_dev_attr,
>  	.slaves		= omap44xx_gpio1_slaves,
>  	.slaves_cnt	= ARRAY_SIZE(omap44xx_gpio1_slaves),
> -	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP44XX),
> +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
> +};
> +
> +static struct omap_hwmod omap446x_gpio1_hwmod = {
> +	.name		= "gpio1",
> +	.class		= &omap44xx_gpio_hwmod_class,
> +	.flags          = HWMOD_INIT_NO_RESET,
> +	.mpu_irqs	= omap44xx_gpio1_irqs,
> +	.mpu_irqs_cnt	= ARRAY_SIZE(omap44xx_gpio1_irqs),
> +	.main_clk	= "gpio1_ick",
> +	.prcm = {
> +		.omap4 = {
> +			.clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
> +		},
> +	},
> +	.opt_clks	= gpio1_opt_clks,
> +	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
> +	.dev_attr	= &gpio_dev_attr,
> +	.slaves		= omap44xx_gpio1_slaves,
> +	.slaves_cnt	= ARRAY_SIZE(omap44xx_gpio1_slaves),
> +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP4460),
>  };
>  
>  /* gpio2 */
> @@ -5079,7 +5099,8 @@ static __initdata struct omap_hwmod 
> *omap44xx_hwmods[] = {
>  	&omap44xx_dss_venc_hwmod,
>  
>  	/* gpio class */
> -	&omap44xx_gpio1_hwmod,
> +	&omap443x_gpio1_hwmod,
> +	&omap446x_gpio1_hwmod,
>  	&omap44xx_gpio2_hwmod,
>  	&omap44xx_gpio3_hwmod,
>  	&omap44xx_gpio4_hwmod,
> -- 
> 1.7.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe 
> linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Nishanth Menon May 26, 2011, 2:28 p.m. UTC | #2
On 14:06-20110526, Premi, Sanjeev wrote:
> > -----Original Message-----
> > From: linux-omap-owner@vger.kernel.org 
> > [mailto:linux-omap-owner@vger.kernel.org] On Behalf Of Menon, Nishanth
> > Sent: Thursday, May 26, 2011 7:27 AM
> > To: linux-omap
> > Cc: Sonasath, Moiz; Menon, Nishanth
> > Subject: [RFC][PATCH 3/9] OMAP4460: HWMOD: DO not reset GPIO1 
> > during HWMOD init
> 
> [sp] typo in the subject. "DO" -> "Do"
> 
>      Another nit: Are 2 HWMODs required in the subject?
:) thanks. will fix.
Kevin Hilman May 26, 2011, 11:24 p.m. UTC | #3
Nishanth Menon <nm@ti.com> writes:

> From: Moiz Sonasath <m-sonasath@ti.com>
>
> For OMAP4460, GPIO-7 of bank1 is used for controling
> the TPS modes, hence GPIO1 should not be reset
> during init as reset will cause the TPS voltage to
> drop to 0.9 V.

ouch.  I knew one of these days something like this was going to happen
with GPIO resets.

Re: $SUBJECT, hwmod is not an acronym.  Please use lower case.

> Originally from:
> http://git.omapzoom.org/?p=kernel/omap.git;a=commitdiff;h=52ae4f0de03b17c064d9ce90a580230f1a596ec1
>
> [nm@ti.com: upstream version]
> Signed-off-by: Nishanth Menon <nm@ti.com>
> Signed-off-by: Moiz Sonasath <m-sonasath@ti.com>
> ---
>  arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   27 ++++++++++++++++++++++++---
>  1 files changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> index 2f51a5a..27319c4 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> @@ -1745,7 +1745,7 @@ static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
>  	{ .role = "dbclk", .clk = "gpio1_dbclk" },
>  };
>  
> -static struct omap_hwmod omap44xx_gpio1_hwmod = {
> +static struct omap_hwmod omap443x_gpio1_hwmod = {
>  	.name		= "gpio1",
>  	.class		= &omap44xx_gpio_hwmod_class,
>  	.mpu_irqs	= omap44xx_gpio1_irqs,
> @@ -1761,7 +1761,27 @@ static struct omap_hwmod omap44xx_gpio1_hwmod = {
>  	.dev_attr	= &gpio_dev_attr,
>  	.slaves		= omap44xx_gpio1_slaves,
>  	.slaves_cnt	= ARRAY_SIZE(omap44xx_gpio1_slaves),
> -	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP44XX),
> +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
> +};
> +
> +static struct omap_hwmod omap446x_gpio1_hwmod = {
> +	.name		= "gpio1",
> +	.class		= &omap44xx_gpio_hwmod_class,
> +	.flags          = HWMOD_INIT_NO_RESET,
> +	.mpu_irqs	= omap44xx_gpio1_irqs,
> +	.mpu_irqs_cnt	= ARRAY_SIZE(omap44xx_gpio1_irqs),
> +	.main_clk	= "gpio1_ick",
> +	.prcm = {
> +		.omap4 = {
> +			.clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
> +		},
> +	},
> +	.opt_clks	= gpio1_opt_clks,
> +	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
> +	.dev_attr	= &gpio_dev_attr,
> +	.slaves		= omap44xx_gpio1_slaves,
> +	.slaves_cnt	= ARRAY_SIZE(omap44xx_gpio1_slaves),
> +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP4460),
>  };

This is a board-specific problem that you've "fixed" in a way that
affects every 4460-based device.

Rather than setting the flag in the hwmod data, you need to fix this
in a board-specific way.

The hwmod layer provides an API for this: omap_hwmod_no_setup_reset()
which should be called by board-specific code.

Kevin

>  /* gpio2 */
> @@ -5079,7 +5099,8 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
>  	&omap44xx_dss_venc_hwmod,
>  
>  	/* gpio class */
> -	&omap44xx_gpio1_hwmod,
> +	&omap443x_gpio1_hwmod,
> +	&omap446x_gpio1_hwmod,
>  	&omap44xx_gpio2_hwmod,
>  	&omap44xx_gpio3_hwmod,
>  	&omap44xx_gpio4_hwmod,
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Nishanth Menon May 26, 2011, 11:37 p.m. UTC | #4
On Thu, May 26, 2011 at 16:24, Kevin Hilman <khilman@ti.com> wrote:
> Nishanth Menon <nm@ti.com> writes:
>
>> From: Moiz Sonasath <m-sonasath@ti.com>
>>
>> For OMAP4460, GPIO-7 of bank1 is used for controling
>> the TPS modes, hence GPIO1 should not be reset
>> during init as reset will cause the TPS voltage to
>> drop to 0.9 V.
>
> ouch.  I knew one of these days something like this was going to happen
> with GPIO resets.
>
> Re: $SUBJECT, hwmod is not an acronym.  Please use lower case.
>
>> Originally from:
>> http://git.omapzoom.org/?p=kernel/omap.git;a=commitdiff;h=52ae4f0de03b17c064d9ce90a580230f1a596ec1
>>
>> [nm@ti.com: upstream version]
>> Signed-off-by: Nishanth Menon <nm@ti.com>
>> Signed-off-by: Moiz Sonasath <m-sonasath@ti.com>
>> ---
>>  arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   27 ++++++++++++++++++++++++---
>>  1 files changed, 24 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
>> index 2f51a5a..27319c4 100644
>> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
>> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
>> @@ -1745,7 +1745,7 @@ static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
>>       { .role = "dbclk", .clk = "gpio1_dbclk" },
>>  };
>>
>> -static struct omap_hwmod omap44xx_gpio1_hwmod = {
>> +static struct omap_hwmod omap443x_gpio1_hwmod = {
>>       .name           = "gpio1",
>>       .class          = &omap44xx_gpio_hwmod_class,
>>       .mpu_irqs       = omap44xx_gpio1_irqs,
>> @@ -1761,7 +1761,27 @@ static struct omap_hwmod omap44xx_gpio1_hwmod = {
>>       .dev_attr       = &gpio_dev_attr,
>>       .slaves         = omap44xx_gpio1_slaves,
>>       .slaves_cnt     = ARRAY_SIZE(omap44xx_gpio1_slaves),
>> -     .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP44XX),
>> +     .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
>> +};
>> +
>> +static struct omap_hwmod omap446x_gpio1_hwmod = {
>> +     .name           = "gpio1",
>> +     .class          = &omap44xx_gpio_hwmod_class,
>> +     .flags          = HWMOD_INIT_NO_RESET,
>> +     .mpu_irqs       = omap44xx_gpio1_irqs,
>> +     .mpu_irqs_cnt   = ARRAY_SIZE(omap44xx_gpio1_irqs),
>> +     .main_clk       = "gpio1_ick",
>> +     .prcm = {
>> +             .omap4 = {
>> +                     .clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
>> +             },
>> +     },
>> +     .opt_clks       = gpio1_opt_clks,
>> +     .opt_clks_cnt   = ARRAY_SIZE(gpio1_opt_clks),
>> +     .dev_attr       = &gpio_dev_attr,
>> +     .slaves         = omap44xx_gpio1_slaves,
>> +     .slaves_cnt     = ARRAY_SIZE(omap44xx_gpio1_slaves),
>> +     .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4460),
>>  };
>
> This is a board-specific problem that you've "fixed" in a way that
> affects every 4460-based device.
>
> Rather than setting the flag in the hwmod data, you need to fix this
> in a board-specific way.
>
> The hwmod layer provides an API for this: omap_hwmod_no_setup_reset()
> which should be called by board-specific code.
>

aah - a better solution.. thanks.

Regards,
Nishanth Menon
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Benoit Cousson May 27, 2011, 7:10 a.m. UTC | #5
On 5/27/2011 1:24 AM, Hilman, Kevin wrote:
> Nishanth Menon<nm@ti.com>  writes:
>
>> From: Moiz Sonasath<m-sonasath@ti.com>
>>
>> For OMAP4460, GPIO-7 of bank1 is used for controling
>> the TPS modes, hence GPIO1 should not be reset
>> during init as reset will cause the TPS voltage to
>> drop to 0.9 V.
>
> ouch.  I knew one of these days something like this was going to happen
> with GPIO resets.

BTW, don't we have the same kind of issue with the debug UART? I 
remember that you had to do some hacks at some point to change these 
hwmod flags in the UART code.

In general we do not want to reset nor idle an IP that was potentially 
already properly configured by bootloader or early Linux boot code.

Regards,
Benoit

>
> Re: $SUBJECT, hwmod is not an acronym.  Please use lower case.
>
>> Originally from:
>> http://git.omapzoom.org/?p=kernel/omap.git;a=commitdiff;h=52ae4f0de03b17c064d9ce90a580230f1a596ec1
>>
>> [nm@ti.com: upstream version]
>> Signed-off-by: Nishanth Menon<nm@ti.com>
>> Signed-off-by: Moiz Sonasath<m-sonasath@ti.com>
>> ---
>>   arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   27 ++++++++++++++++++++++++---
>>   1 files changed, 24 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
>> index 2f51a5a..27319c4 100644
>> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
>> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
>> @@ -1745,7 +1745,7 @@ static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
>>   	{ .role = "dbclk", .clk = "gpio1_dbclk" },
>>   };
>>
>> -static struct omap_hwmod omap44xx_gpio1_hwmod = {
>> +static struct omap_hwmod omap443x_gpio1_hwmod = {
>>   	.name		= "gpio1",
>>   	.class		=&omap44xx_gpio_hwmod_class,
>>   	.mpu_irqs	= omap44xx_gpio1_irqs,
>> @@ -1761,7 +1761,27 @@ static struct omap_hwmod omap44xx_gpio1_hwmod = {
>>   	.dev_attr	=&gpio_dev_attr,
>>   	.slaves		= omap44xx_gpio1_slaves,
>>   	.slaves_cnt	= ARRAY_SIZE(omap44xx_gpio1_slaves),
>> -	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP44XX),
>> +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
>> +};
>> +
>> +static struct omap_hwmod omap446x_gpio1_hwmod = {
>> +	.name		= "gpio1",
>> +	.class		=&omap44xx_gpio_hwmod_class,
>> +	.flags          = HWMOD_INIT_NO_RESET,
>> +	.mpu_irqs	= omap44xx_gpio1_irqs,
>> +	.mpu_irqs_cnt	= ARRAY_SIZE(omap44xx_gpio1_irqs),
>> +	.main_clk	= "gpio1_ick",
>> +	.prcm = {
>> +		.omap4 = {
>> +			.clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
>> +		},
>> +	},
>> +	.opt_clks	= gpio1_opt_clks,
>> +	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
>> +	.dev_attr	=&gpio_dev_attr,
>> +	.slaves		= omap44xx_gpio1_slaves,
>> +	.slaves_cnt	= ARRAY_SIZE(omap44xx_gpio1_slaves),
>> +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP4460),
>>   };
>
> This is a board-specific problem that you've "fixed" in a way that
> affects every 4460-based device.
>
> Rather than setting the flag in the hwmod data, you need to fix this
> in a board-specific way.
>
> The hwmod layer provides an API for this: omap_hwmod_no_setup_reset()
> which should be called by board-specific code.
>
> Kevin
>
>>   /* gpio2 */
>> @@ -5079,7 +5099,8 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
>>   	&omap44xx_dss_venc_hwmod,
>>
>>   	/* gpio class */
>> -	&omap44xx_gpio1_hwmod,
>> +	&omap443x_gpio1_hwmod,
>> +	&omap446x_gpio1_hwmod,
>>   	&omap44xx_gpio2_hwmod,
>>   	&omap44xx_gpio3_hwmod,
>>   	&omap44xx_gpio4_hwmod,
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Benoit Cousson May 27, 2011, 12:16 p.m. UTC | #6
On 5/27/2011 9:26 AM, Govindraj wrote:
>
> On Fri, May 27, 2011 at 12:40 PM, Cousson, Benoit <b-cousson@ti.com
> <mailto:b-cousson@ti.com>> wrote:
>
>     On 5/27/2011 1:24 AM, Hilman, Kevin wrote:
>
>         Nishanth Menon<nm@ti.com <mailto:nm@ti.com>>  writes:
>
>             From: Moiz Sonasath<m-sonasath@ti.com
>             <mailto:m-sonasath@ti.com>>
>
>             For OMAP4460, GPIO-7 of bank1 is used for controling
>             the TPS modes, hence GPIO1 should not be reset
>             during init as reset will cause the TPS voltage to
>             drop to 0.9 V.
>
>
>         ouch.  I knew one of these days something like this was going to
>         happen
>         with GPIO resets.
>
>
>     BTW, don't we have the same kind of issue with the debug UART? I
>     remember that you had to do some hacks at some point to change these
>     hwmod flags in the UART code.
>
>
> Yes. we use below flags.
>
> uart->oh->flags |= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET;

Yeah, that's ugly... we do have to get rid of that as well using some 
board settings / API.

Benoit
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Kevin Hilman May 27, 2011, 2:59 p.m. UTC | #7
Govindraj <govindraj.ti@gmail.com> writes:

> On Fri, May 27, 2011 at 12:40 PM, Cousson, Benoit <b-cousson@ti.com> wrote:
>
>     On 5/27/2011 1:24 AM, Hilman, Kevin wrote:
>
>         Nishanth Menon<nm@ti.com>  writes:
>
>
>             From: Moiz Sonasath<m-sonasath@ti.com>
>
>             For OMAP4460, GPIO-7 of bank1 is used for controling
>             the TPS modes, hence GPIO1 should not be reset
>             during init as reset will cause the TPS voltage to
>             drop to 0.9 V.
>
>
>         ouch.  I knew one of these days something like this was going to happen
>         with GPIO resets.
>
>
>     BTW, don't we have the same kind of issue with the debug UART? I remember
>     that you had to do some hacks at some point to change these hwmod flags in
>     the UART code.
>
>
> Yes. we use below flags.
>
> uart->oh->flags |= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET;
>

This is a hack (written by me) because the UART driver is not runtime PM
adapted.  When UART driver is runtime PM adapted, this will not be
needed.

Kevin

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Benoit Cousson May 27, 2011, 3:06 p.m. UTC | #8
Hi Kevin,

On 5/27/2011 4:59 PM, Hilman, Kevin wrote:
> Govindraj<govindraj.ti@gmail.com>  writes:

[...]

>> uart->oh->flags |= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET;
>>
>
> This is a hack (written by me) because the UART driver is not runtime PM
> adapted.  When UART driver is runtime PM adapted, this will not be
> needed.

The UART can support reset and idle? There is no assumption for the UART 
used during the early debug phase?
Don't we have to maintain its state?
It will be indeed better if we don't have to.

Regards,
Benoit
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Kevin Hilman May 27, 2011, 7:35 p.m. UTC | #9
"Cousson, Benoit" <b-cousson@ti.com> writes:

> Hi Kevin,
>
> On 5/27/2011 4:59 PM, Hilman, Kevin wrote:
>> Govindraj<govindraj.ti@gmail.com>  writes:
>
> [...]
>
>>> uart->oh->flags |= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET;
>>>
>>
>> This is a hack (written by me) because the UART driver is not runtime PM
>> adapted.  When UART driver is runtime PM adapted, this will not be
>> needed.
>
> The UART can support reset and idle? There is no assumption for the
> UART used during the early debug phase?

No.  As long as the UART driver is doing runtime PM properly, there are
no assumptions required.

Kevin

> Don't we have to maintain its state?
> It will be indeed better if we don't have to.
>
> Regards,
> Benoit
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Kevin Hilman May 27, 2011, 7:38 p.m. UTC | #10
"Cousson, Benoit" <b-cousson@ti.com> writes:

[...]

> In general we do not want to reset nor idle an IP that was potentially
> already properly configured by bootloader or early Linux boot code.

Actually, the opposite is true.

The kernel should not make any assumptions about what the bootloader has
or has not done.  We need to have a kernel that can boot from any
bootloader (or none, like using kexec) and be able to start from a known
hardware state.

Any use of HWMOD_INIT_NO_IDLE, HWMOD_INIT_NO_RESET should be a rare
exception and well documented.

Kevin
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index 2f51a5a..27319c4 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -1745,7 +1745,7 @@  static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
 	{ .role = "dbclk", .clk = "gpio1_dbclk" },
 };
 
-static struct omap_hwmod omap44xx_gpio1_hwmod = {
+static struct omap_hwmod omap443x_gpio1_hwmod = {
 	.name		= "gpio1",
 	.class		= &omap44xx_gpio_hwmod_class,
 	.mpu_irqs	= omap44xx_gpio1_irqs,
@@ -1761,7 +1761,27 @@  static struct omap_hwmod omap44xx_gpio1_hwmod = {
 	.dev_attr	= &gpio_dev_attr,
 	.slaves		= omap44xx_gpio1_slaves,
 	.slaves_cnt	= ARRAY_SIZE(omap44xx_gpio1_slaves),
-	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP44XX),
+	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
+
+static struct omap_hwmod omap446x_gpio1_hwmod = {
+	.name		= "gpio1",
+	.class		= &omap44xx_gpio_hwmod_class,
+	.flags          = HWMOD_INIT_NO_RESET,
+	.mpu_irqs	= omap44xx_gpio1_irqs,
+	.mpu_irqs_cnt	= ARRAY_SIZE(omap44xx_gpio1_irqs),
+	.main_clk	= "gpio1_ick",
+	.prcm = {
+		.omap4 = {
+			.clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
+		},
+	},
+	.opt_clks	= gpio1_opt_clks,
+	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
+	.dev_attr	= &gpio_dev_attr,
+	.slaves		= omap44xx_gpio1_slaves,
+	.slaves_cnt	= ARRAY_SIZE(omap44xx_gpio1_slaves),
+	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP4460),
 };
 
 /* gpio2 */
@@ -5079,7 +5099,8 @@  static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
 	&omap44xx_dss_venc_hwmod,
 
 	/* gpio class */
-	&omap44xx_gpio1_hwmod,
+	&omap443x_gpio1_hwmod,
+	&omap446x_gpio1_hwmod,
 	&omap44xx_gpio2_hwmod,
 	&omap44xx_gpio3_hwmod,
 	&omap44xx_gpio4_hwmod,