Re: [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Kevin,

one quick comment.

On Mon, 1 Dec 2008, Kevin Hilman wrote:

> Signed-off-by: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx>
> ---
>  arch/arm/mach-omap2/pm34xx.c              |   55 +++++++++++++++++++++++++++++
>  arch/arm/plat-omap/include/mach/control.h |    5 +++
>  2 files changed, 60 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
> index bd74183..6ff6449 100644
> --- a/arch/arm/mach-omap2/pm34xx.c
> +++ b/arch/arm/mach-omap2/pm34xx.c
> @@ -29,6 +29,7 @@
>  #include <mach/pm.h>
>  #include <mach/clockdomain.h>
>  #include <mach/powerdomain.h>
> +#include <mach/control.h>
>  
>  #include "cm.h"
>  #include "cm-regbits-34xx.h"
> @@ -363,6 +364,58 @@ static struct platform_suspend_ops omap_pm_ops = {
>  	.valid		= suspend_valid_only_mem,
>  };
>  
> +
> +/**
> + * omap3_iva_idle(): ensure IVA is in idle so it can be put into
> + *                   retention
> + *
> + * In cases where IVA2 is activated by bootcode, it may prevent
> + * full-chip retention or off-mode because it is not idle.  This
> + * function forces the IVA2 into idle state so it can go
> + * into retention/off and thus allow full-chip retention/off.
> + *
> + **/
> +static void __init omap3_iva_idle(void)
> +{
> +	struct clk *iva2_ck;
> +
> +	iva2_ck = clk_get(NULL, "iva2_fclk");

This should be "iva2_fck", right?

> +	if (!iva2_ck) {
> +		pr_err("Unable to get IVA2 fclk: cannot force idle.\n");
> +		return;
> +	}
> +
> +	/* Disable IVA2 clock */
> +	clk_disable(iva2_ck);
> +
> +	/* Reset IVA2 */
> +	prm_write_mod_reg(OMAP3430_RST1_IVA2 |
> +			  OMAP3430_RST2_IVA2 |
> +			  OMAP3430_RST3_IVA2,
> +			  OMAP3430_IVA2_MOD, RM_RSTCTRL);
> +
> +	/* Enable IVA2 clock */
> +	clk_enable(iva2_ck);
> +
> +	/* Set IVA2 boot mode to 'idle' */
> +	omap_ctrl_writel(OMAP3_IVA2_BOOTMOD_IDLE,
> +			 OMAP343X_CONTROL_IVA2_BOOTMOD);
> +
> +	/* Un-reset IVA2 */
> +	prm_write_mod_reg(0, OMAP3430_IVA2_MOD, RM_RSTCTRL);
> +
> +	/* Disable IVA2 clocks */
> +	clk_disable(iva2_ck);
> +
> +	/* Reset IVA2 */
> +	prm_write_mod_reg(OMAP3430_RST1_IVA2 |
> +			  OMAP3430_RST2_IVA2 |
> +			  OMAP3430_RST3_IVA2,
> +			  OMAP3430_IVA2_MOD, RM_RSTCTRL);
> +
> +	clk_put(iva2_ck);
> +}
> +
>  static void __init prcm_setup_regs(void)
>  {
>  	/* XXX Reset all wkdeps. This should be done when initializing
> @@ -514,6 +567,8 @@ static void __init prcm_setup_regs(void)
>  	 * it is selected to mpu wakeup goup */
>  	prm_write_mod_reg(OMAP3430_IO_EN | OMAP3430_WKUP_EN,
>  			OCP_MOD, OMAP2_PRM_IRQENABLE_MPU_OFFSET);
> +
> +	omap3_iva_idle();
>  }
>  
>  static int __init pwrdms_setup(struct powerdomain *pwrdm)
> diff --git a/arch/arm/plat-omap/include/mach/control.h b/arch/arm/plat-omap/include/mach/control.h
> index ee3c39e..b51f7fd 100644
> --- a/arch/arm/plat-omap/include/mach/control.h
> +++ b/arch/arm/plat-omap/include/mach/control.h
> @@ -208,6 +208,11 @@
>  #define OMAP2_PBIASLITEPWRDNZ0		(1 << 1)
>  #define OMAP2_PBIASLITEVMODE0		(1 << 0)
>  
> +/* CONTROL_IVA2_BOOTMOD bits */
> +#define OMAP3_IVA2_BOOTMOD_SHIFT	0
> +#define OMAP3_IVA2_BOOTMOD_MASK		(0xf << 0)
> +#define OMAP3_IVA2_BOOTMOD_IDLE		(0x1 << 0)
> +
>  #ifndef __ASSEMBLY__
>  #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>  extern void __iomem *omap_ctrl_base_get(void);
> -- 
> 1.6.0.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


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

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux