All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] Board specific prm timings
@ 2009-02-10 16:04 Peter 'p2' De Schrijver
  2009-02-10 16:04 ` [PATCH 1/1] per board " Peter 'p2' De Schrijver
  0 siblings, 1 reply; 6+ messages in thread
From: Peter 'p2' De Schrijver @ 2009-02-10 16:04 UTC (permalink / raw)
  To: linux-omap; +Cc: Peter 'p2' De Schrijver

This is an updated version which removes a useless printk.

This patch allows for boardspecific prm timings such as voltage and clock
setup delays. By default it will use the very conservative timings which were
used previously.

Peter 'p2' De Schrijver (1):
  per board prm timings

 arch/arm/mach-omap2/pm.h     |    9 +++++++++
 arch/arm/mach-omap2/pm34xx.c |   31 +++++++++++++++++++++++++------
 2 files changed, 34 insertions(+), 6 deletions(-)


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/1] per board prm timings
  2009-02-10 16:04 [PATCH 0/1] Board specific prm timings Peter 'p2' De Schrijver
@ 2009-02-10 16:04 ` Peter 'p2' De Schrijver
  2009-02-12 17:47   ` Kevin Hilman
  0 siblings, 1 reply; 6+ messages in thread
From: Peter 'p2' De Schrijver @ 2009-02-10 16:04 UTC (permalink / raw)
  To: linux-omap; +Cc: Peter 'p2' De Schrijver

API definition to set prm setup times.

Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
---
 arch/arm/mach-omap2/pm.h     |    9 +++++++++
 arch/arm/mach-omap2/pm34xx.c |   31 +++++++++++++++++++++++++------
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
index 451f247..d79ea07 100644
--- a/arch/arm/mach-omap2/pm.h
+++ b/arch/arm/mach-omap2/pm.h
@@ -33,9 +33,18 @@ extern void *omap3_secure_ram_storage;
 extern void omap2_block_sleep(void);
 extern void omap2_allow_sleep(void);
 #ifdef CONFIG_ARCH_OMAP3
+struct prm_setup_times {
+	u16 clksetup;
+	u16 voltsetup_time1;
+	u16 voltsetup_time2;
+	u16 voltoffset;
+	u16 voltsetup2;
+};
+
 extern void omap3_pm_off_mode_enable(int);
 extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
 extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
+extern void omap3_set_prm_setup_times(struct prm_setup_times *setup_times);
 #else
 #define omap3_pm_off_mode_enable(int) do {} while (0);
 #define omap3_pm_get_suspend_state(pwrdm) do {} while (0);
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 44189a0..06aa382 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -85,6 +85,14 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm;
 static struct powerdomain *core_pwrdm, *per_pwrdm;
 static struct powerdomain *cam_pwrdm;
 
+static struct prm_setup_times prm_setup = {
+	.clksetup = 0xff,
+	.voltsetup_time1 = 0xfff,
+	.voltsetup_time2 = 0xfff,
+	.voltoffset = 0xff,
+	.voltsetup2 = 0xff,
+};
+
 static inline void omap3_per_save_context(void)
 {
 	omap3_gpio_save_context();
@@ -880,6 +888,15 @@ int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state)
 	return -EINVAL;
 }
 
+void omap3_set_prm_setup_times(struct prm_setup_times *setup_times)
+{
+	prm_setup.clksetup = setup_times->clksetup;
+	prm_setup.voltsetup_time1 = setup_times->voltsetup_time1;
+	prm_setup.voltsetup_time2 = setup_times->voltsetup_time2;
+	prm_setup.voltoffset = setup_times->voltoffset;
+	prm_setup.voltsetup2 = setup_times->voltsetup2;
+}
+
 static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
 {
 	struct power_state *pwrst;
@@ -1015,6 +1032,7 @@ err2:
 
 static void __init configure_vc(void)
 {
+
 	prm_write_mod_reg((R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA1_SHIFT) |
 			(R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA0_SHIFT),
 			OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_SA_OFFSET);
@@ -1044,21 +1062,22 @@ static void __init configure_vc(void)
 				OMAP3430_GR_MOD,
 				OMAP3_PRM_VC_I2C_CFG_OFFSET);
 
-	/* Setup voltctrl and other setup times */
+	/* Setup value for voltctrl */
 	prm_write_mod_reg(OMAP3430_AUTO_RET,
 			  OMAP3430_GR_MOD, OMAP3_PRM_VOLTCTRL_OFFSET);
 
-	prm_write_mod_reg(OMAP3430_CLKSETUP_DURATION, OMAP3430_GR_MOD,
+	/* Write setup times */
+	prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
 			OMAP3_PRM_CLKSETUP_OFFSET);
-	prm_write_mod_reg((OMAP3430_VOLTSETUP_TIME2 <<
+	prm_write_mod_reg((prm_setup.voltsetup_time2 <<
 			OMAP3430_SETUP_TIME2_SHIFT) |
-			(OMAP3430_VOLTSETUP_TIME1 <<
+			(prm_setup.voltsetup_time1 <<
 			OMAP3430_SETUP_TIME1_SHIFT),
 			OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
 
-	prm_write_mod_reg(OMAP3430_VOLTOFFSET_DURATION, OMAP3430_GR_MOD,
+	prm_write_mod_reg(prm_setup.voltoffset, OMAP3430_GR_MOD,
 			OMAP3_PRM_VOLTOFFSET_OFFSET);
-	prm_write_mod_reg(OMAP3430_VOLTSETUP2_DURATION, OMAP3430_GR_MOD,
+	prm_write_mod_reg(prm_setup.voltsetup2, OMAP3430_GR_MOD,
 			OMAP3_PRM_VOLTSETUP2_OFFSET);
 }
 
-- 
1.5.6.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/1] per board prm timings
  2009-02-10 16:04 ` [PATCH 1/1] per board " Peter 'p2' De Schrijver
@ 2009-02-12 17:47   ` Kevin Hilman
  2009-02-13 10:24     ` Peter 'p2' De Schrijver
  0 siblings, 1 reply; 6+ messages in thread
From: Kevin Hilman @ 2009-02-12 17:47 UTC (permalink / raw)
  To: Peter 'p2' De Schrijver; +Cc: linux-omap

"Peter 'p2' De Schrijver" <peter.de-schrijver@nokia.com> writes:

> API definition to set prm setup times.
>
> Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>

Peter,

I like this approach much better than what we currently have.  Pushing
to PM branch.

The next thing I would like to see is all the register value defines
removed from prm-regbits-34xx.h.  That header is supposed to be for
the bitfield definitions, not for values.

Kevin

> ---
>  arch/arm/mach-omap2/pm.h     |    9 +++++++++
>  arch/arm/mach-omap2/pm34xx.c |   31 +++++++++++++++++++++++++------
>  2 files changed, 34 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
> index 451f247..d79ea07 100644
> --- a/arch/arm/mach-omap2/pm.h
> +++ b/arch/arm/mach-omap2/pm.h
> @@ -33,9 +33,18 @@ extern void *omap3_secure_ram_storage;
>  extern void omap2_block_sleep(void);
>  extern void omap2_allow_sleep(void);
>  #ifdef CONFIG_ARCH_OMAP3
> +struct prm_setup_times {
> +	u16 clksetup;
> +	u16 voltsetup_time1;
> +	u16 voltsetup_time2;
> +	u16 voltoffset;
> +	u16 voltsetup2;
> +};
> +
>  extern void omap3_pm_off_mode_enable(int);
>  extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
>  extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
> +extern void omap3_set_prm_setup_times(struct prm_setup_times *setup_times);
>  #else
>  #define omap3_pm_off_mode_enable(int) do {} while (0);
>  #define omap3_pm_get_suspend_state(pwrdm) do {} while (0);
> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
> index 44189a0..06aa382 100644
> --- a/arch/arm/mach-omap2/pm34xx.c
> +++ b/arch/arm/mach-omap2/pm34xx.c
> @@ -85,6 +85,14 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm;
>  static struct powerdomain *core_pwrdm, *per_pwrdm;
>  static struct powerdomain *cam_pwrdm;
>  
> +static struct prm_setup_times prm_setup = {
> +	.clksetup = 0xff,
> +	.voltsetup_time1 = 0xfff,
> +	.voltsetup_time2 = 0xfff,
> +	.voltoffset = 0xff,
> +	.voltsetup2 = 0xff,
> +};
> +
>  static inline void omap3_per_save_context(void)
>  {
>  	omap3_gpio_save_context();
> @@ -880,6 +888,15 @@ int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state)
>  	return -EINVAL;
>  }
>  
> +void omap3_set_prm_setup_times(struct prm_setup_times *setup_times)
> +{
> +	prm_setup.clksetup = setup_times->clksetup;
> +	prm_setup.voltsetup_time1 = setup_times->voltsetup_time1;
> +	prm_setup.voltsetup_time2 = setup_times->voltsetup_time2;
> +	prm_setup.voltoffset = setup_times->voltoffset;
> +	prm_setup.voltsetup2 = setup_times->voltsetup2;
> +}
> +
>  static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
>  {
>  	struct power_state *pwrst;
> @@ -1015,6 +1032,7 @@ err2:
>  
>  static void __init configure_vc(void)
>  {
> +
>  	prm_write_mod_reg((R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA1_SHIFT) |
>  			(R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA0_SHIFT),
>  			OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_SA_OFFSET);
> @@ -1044,21 +1062,22 @@ static void __init configure_vc(void)
>  				OMAP3430_GR_MOD,
>  				OMAP3_PRM_VC_I2C_CFG_OFFSET);
>  
> -	/* Setup voltctrl and other setup times */
> +	/* Setup value for voltctrl */
>  	prm_write_mod_reg(OMAP3430_AUTO_RET,
>  			  OMAP3430_GR_MOD, OMAP3_PRM_VOLTCTRL_OFFSET);
>  
> -	prm_write_mod_reg(OMAP3430_CLKSETUP_DURATION, OMAP3430_GR_MOD,
> +	/* Write setup times */
> +	prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
>  			OMAP3_PRM_CLKSETUP_OFFSET);
> -	prm_write_mod_reg((OMAP3430_VOLTSETUP_TIME2 <<
> +	prm_write_mod_reg((prm_setup.voltsetup_time2 <<
>  			OMAP3430_SETUP_TIME2_SHIFT) |
> -			(OMAP3430_VOLTSETUP_TIME1 <<
> +			(prm_setup.voltsetup_time1 <<
>  			OMAP3430_SETUP_TIME1_SHIFT),
>  			OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
>  
> -	prm_write_mod_reg(OMAP3430_VOLTOFFSET_DURATION, OMAP3430_GR_MOD,
> +	prm_write_mod_reg(prm_setup.voltoffset, OMAP3430_GR_MOD,
>  			OMAP3_PRM_VOLTOFFSET_OFFSET);
> -	prm_write_mod_reg(OMAP3430_VOLTSETUP2_DURATION, OMAP3430_GR_MOD,
> +	prm_write_mod_reg(prm_setup.voltsetup2, OMAP3430_GR_MOD,
>  			OMAP3_PRM_VOLTSETUP2_OFFSET);
>  }
>  
> -- 
> 1.5.6.3
>
> --
> 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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/1] per board prm timings
  2009-02-12 17:47   ` Kevin Hilman
@ 2009-02-13 10:24     ` Peter 'p2' De Schrijver
  2009-02-13 19:08       ` Kevin Hilman
  0 siblings, 1 reply; 6+ messages in thread
From: Peter 'p2' De Schrijver @ 2009-02-13 10:24 UTC (permalink / raw)
  To: ext Kevin Hilman; +Cc: linux-omap

Hi Kevin,

> Peter,
> 
> I like this approach much better than what we currently have.  Pushing
> to PM branch.
> 
> The next thing I would like to see is all the register value defines
> removed from prm-regbits-34xx.h.  That header is supposed to be for
> the bitfield definitions, not for values.
> 

True. If this patch goes in, there is no need for the register value
defines in prm-regbits-34xx.h any more.

Cheers,

Peter.

-- 
goa is a state of mind

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/1] per board prm timings
  2009-02-13 10:24     ` Peter 'p2' De Schrijver
@ 2009-02-13 19:08       ` Kevin Hilman
  0 siblings, 0 replies; 6+ messages in thread
From: Kevin Hilman @ 2009-02-13 19:08 UTC (permalink / raw)
  To: Peter 'p2' De Schrijver; +Cc: linux-omap

"Peter 'p2' De Schrijver" <peter.de-schrijver@nokia.com> writes:

> Hi Kevin,
>
>> Peter,
>> 
>> I like this approach much better than what we currently have.  Pushing
>> to PM branch.
>> 
>> The next thing I would like to see is all the register value defines
>> removed from prm-regbits-34xx.h.  That header is supposed to be for
>> the bitfield definitions, not for values.
>> 
>
> True. If this patch goes in, there is no need for the register value
> defines in prm-regbits-34xx.h any more.
>

OK, I pushed a patch which removes them from regbits.h and moved some of the
other value defines into pm34xx.c until a better place is found.

Kevin

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/1] per board prm timings
  2009-02-05 17:38 [PATCH 0/1] Board specific " Peter 'p2' De Schrijver
@ 2009-02-05 17:38 ` Peter 'p2' De Schrijver
  0 siblings, 0 replies; 6+ messages in thread
From: Peter 'p2' De Schrijver @ 2009-02-05 17:38 UTC (permalink / raw)
  To: linux-omap; +Cc: Peter 'p2' De Schrijver

API definition to set prm setup times

Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
---
 arch/arm/mach-omap2/pm.h     |    9 +++++++++
 arch/arm/mach-omap2/pm34xx.c |   39 +++++++++++++++++++++++++++++++++------
 2 files changed, 42 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
index 451f247..d79ea07 100644
--- a/arch/arm/mach-omap2/pm.h
+++ b/arch/arm/mach-omap2/pm.h
@@ -33,9 +33,18 @@ extern void *omap3_secure_ram_storage;
 extern void omap2_block_sleep(void);
 extern void omap2_allow_sleep(void);
 #ifdef CONFIG_ARCH_OMAP3
+struct prm_setup_times {
+	u16 clksetup;
+	u16 voltsetup_time1;
+	u16 voltsetup_time2;
+	u16 voltoffset;
+	u16 voltsetup2;
+};
+
 extern void omap3_pm_off_mode_enable(int);
 extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
 extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
+extern void omap3_set_prm_setup_times(struct prm_setup_times *setup_times);
 #else
 #define omap3_pm_off_mode_enable(int) do {} while (0);
 #define omap3_pm_get_suspend_state(pwrdm) do {} while (0);
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 44189a0..f531638 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -85,6 +85,14 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm;
 static struct powerdomain *core_pwrdm, *per_pwrdm;
 static struct powerdomain *cam_pwrdm;
 
+static struct prm_setup_times prm_setup = {
+	.clksetup = 0xff,
+	.voltsetup_time1 = 0xfff,
+	.voltsetup_time2 = 0xfff,
+	.voltoffset = 0xff,
+	.voltsetup2 = 0xff,
+};
+
 static inline void omap3_per_save_context(void)
 {
 	omap3_gpio_save_context();
@@ -880,6 +888,23 @@ int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state)
 	return -EINVAL;
 }
 
+void omap3_set_prm_setup_times(struct prm_setup_times *setup_times)
+{
+	prm_setup.clksetup = setup_times->clksetup;
+	prm_setup.voltsetup_time1 = setup_times->voltsetup_time1;
+	prm_setup.voltsetup_time2 = setup_times->voltsetup_time2;
+	prm_setup.voltoffset = setup_times->voltoffset;
+	prm_setup.voltsetup2 = setup_times->voltsetup2;
+
+	printk("omap3_set_prm_setup_times %04x, %04x, %04x, %04x, %04x\n",
+		prm_setup.clksetup,
+		prm_setup.voltsetup_time1,
+		prm_setup.voltsetup_time2,
+		prm_setup.voltoffset,
+		prm_setup.voltsetup2);
+
+}
+
 static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
 {
 	struct power_state *pwrst;
@@ -1015,6 +1040,7 @@ err2:
 
 static void __init configure_vc(void)
 {
+
 	prm_write_mod_reg((R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA1_SHIFT) |
 			(R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA0_SHIFT),
 			OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_SA_OFFSET);
@@ -1044,21 +1070,22 @@ static void __init configure_vc(void)
 				OMAP3430_GR_MOD,
 				OMAP3_PRM_VC_I2C_CFG_OFFSET);
 
-	/* Setup voltctrl and other setup times */
+	/* Setup value for voltctrl */
 	prm_write_mod_reg(OMAP3430_AUTO_RET,
 			  OMAP3430_GR_MOD, OMAP3_PRM_VOLTCTRL_OFFSET);
 
-	prm_write_mod_reg(OMAP3430_CLKSETUP_DURATION, OMAP3430_GR_MOD,
+	/* Write setup times */
+	prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
 			OMAP3_PRM_CLKSETUP_OFFSET);
-	prm_write_mod_reg((OMAP3430_VOLTSETUP_TIME2 <<
+	prm_write_mod_reg((prm_setup.voltsetup_time2 <<
 			OMAP3430_SETUP_TIME2_SHIFT) |
-			(OMAP3430_VOLTSETUP_TIME1 <<
+			(prm_setup.voltsetup_time1 <<
 			OMAP3430_SETUP_TIME1_SHIFT),
 			OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
 
-	prm_write_mod_reg(OMAP3430_VOLTOFFSET_DURATION, OMAP3430_GR_MOD,
+	prm_write_mod_reg(prm_setup.voltoffset, OMAP3430_GR_MOD,
 			OMAP3_PRM_VOLTOFFSET_OFFSET);
-	prm_write_mod_reg(OMAP3430_VOLTSETUP2_DURATION, OMAP3430_GR_MOD,
+	prm_write_mod_reg(prm_setup.voltsetup2, OMAP3430_GR_MOD,
 			OMAP3_PRM_VOLTSETUP2_OFFSET);
 }
 
-- 
1.5.6.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-02-13 19:08 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-10 16:04 [PATCH 0/1] Board specific prm timings Peter 'p2' De Schrijver
2009-02-10 16:04 ` [PATCH 1/1] per board " Peter 'p2' De Schrijver
2009-02-12 17:47   ` Kevin Hilman
2009-02-13 10:24     ` Peter 'p2' De Schrijver
2009-02-13 19:08       ` Kevin Hilman
  -- strict thread matches above, loose matches on Subject: below --
2009-02-05 17:38 [PATCH 0/1] Board specific " Peter 'p2' De Schrijver
2009-02-05 17:38 ` [PATCH 1/1] per board " Peter 'p2' De Schrijver

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.