[PATCH] ARM: S3C64xx: Power gate unused domains

Kukjin Kim kgene.kim at samsung.com
Sat Dec 3 06:08:10 EST 2011


Mark Brown wrote:
> 
> The S3C64xx CPUs have power gating support with a series of software
> controllable power domains in the SoC. To take full advantage of these
> we should implement runtime PM support but since several of the IP blocks
> have no in tree drivers (and at this point aren't likely to acquire such
> drivers) we can get some benefit from the hardware much more easily if
> we just turn those blocks off unconditionally. This will cut down on the
> leakage these domains generate without interfering with active usage.
> 
> Do this for:
>  - Domain G: 3D acceleration
>  - Domain V: MFC
>  - Domain I: JPEG and camera interface
>  - Domain P: 2D acceleration, TV encoder and scaler
> 
> This is easy to reverse if any of these devices do acquire drivers in the
> future or as part of out of tree patches for them.
> 
> Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
> ---
>  arch/arm/mach-s3c64xx/pm.c |   15 +++++++++++++++
>  1 files changed, 15 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-s3c64xx/pm.c b/arch/arm/mach-s3c64xx/pm.c
> index b375cd5..0868d13 100644
> --- a/arch/arm/mach-s3c64xx/pm.c
> +++ b/arch/arm/mach-s3c64xx/pm.c
> @@ -89,6 +89,8 @@ static struct sleep_save misc_save[] = {
> 
>  	SAVE_ITEM(S3C64XX_SDMA_SEL),
>  	SAVE_ITEM(S3C64XX_MODEM_MIFPCON),
> +
> +	SAVE_ITEM(S3C64XX_NORMAL_CFG),
>  };
> 
>  void s3c_pm_configure_extint(void)
> @@ -181,10 +183,23 @@ static void s3c64xx_pm_prepare(void)
> 
>  static int s3c64xx_pm_init(void)
>  {
> +	u32 val;
> +
>  	pm_cpu_prep = s3c64xx_pm_prepare;
>  	pm_cpu_sleep = s3c64xx_cpu_suspend;
>  	pm_uart_udivslot = 1;
> 
> +	/*
> +	 * Unconditionally disable power domains that contain only
> +	 * blocks which have no mainline driver support.
> +	 */
> +	val = __raw_readl(S3C64XX_NORMAL_CFG);
> +	val &= ~(S3C64XX_NORMALCFG_DOMAIN_G_ON |
> +		 S3C64XX_NORMALCFG_DOMAIN_V_ON |
> +		 S3C64XX_NORMALCFG_DOMAIN_I_ON |
> +		 S3C64XX_NORMALCFG_DOMAIN_P_ON);
> +	__raw_writel(val, S3C64XX_NORMAL_CFG);
> +
>  #ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK
>  	gpio_request(S3C64XX_GPN(12), "DEBUG_LED0");
>  	gpio_request(S3C64XX_GPN(13), "DEBUG_LED1");
> --
> 1.7.7.3

Looks ok to me, will apply.
Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim at samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.




More information about the linux-arm-kernel mailing list