lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Wed, 24 Jun 2015 12:29:49 +0100
From:	Lee Jones <lee.jones@...aro.org>
To:	Charles Keepax <ckeepax@...nsource.wolfsonmicro.com>
Cc:	sameo@...ux.intel.com, patches@...nsource.wolfsonmicro.com,
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH 2/2] mfd: arizona: Fix initialisation of the PM runtime

On Sun, 14 Jun 2015, Charles Keepax wrote:

> The PM runtime core by default assumes a chip is suspended when runtime
> PM is enabled. Currently the arizona driver enables runtime PM when the
> chip is fully active and then disables the DCVDD regulator at the end of
> arizona_dev_init. This however has several problems, firstly the if we
> reach the end of arizona_dev_init, we did not properly follow all the
> proceedures for shutting down the chip, and most notably we never marked
> the chip as cache only so any writes occurring between then and the next
> PM runtime resume will be lost. Secondly, if we are already resumed when
> we reach the end of dev_init, then at best we get unbalanced regulator
> enable/disables at work we lose DCVDD whilst we need it.
> 
> Additionally, since the commit 4f0216409f7c ("mfd: arizona: Add better
> support for system suspend"), the PM runtime operations may
> disable/enable the IRQ, so the IRQs must now be enabled before we call
> any PM operations.
> 
> This patch adds a call to pm_runtime_set_active to inform the PM core
> that the device is starting up active and moves the PM enabling to
> around the IRQ initialisation to avoid any PM callbacks happening until
> the IRQs are initialised.
> 
> Signed-off-by: Charles Keepax <ckeepax@...nsource.wolfsonmicro.com>
> ---
>  drivers/mfd/arizona-core.c |   14 ++++++--------
>  1 files changed, 6 insertions(+), 8 deletions(-)

Applied, thanks.

> diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
> index e60bcd9..a72ddb2 100644
> --- a/drivers/mfd/arizona-core.c
> +++ b/drivers/mfd/arizona-core.c
> @@ -1141,10 +1141,6 @@ int arizona_dev_init(struct arizona *arizona)
>  			     arizona->pdata.gpio_defaults[i]);
>  	}
>  
> -	pm_runtime_set_autosuspend_delay(arizona->dev, 100);
> -	pm_runtime_use_autosuspend(arizona->dev);
> -	pm_runtime_enable(arizona->dev);
> -
>  	/* Chip default */
>  	if (!arizona->pdata.clk32k_src)
>  		arizona->pdata.clk32k_src = ARIZONA_32KZ_MCLK2;
> @@ -1245,11 +1241,17 @@ int arizona_dev_init(struct arizona *arizona)
>  					   arizona->pdata.spk_fmt[i]);
>  	}
>  
> +	pm_runtime_set_active(arizona->dev);
> +	pm_runtime_enable(arizona->dev);
> +
>  	/* Set up for interrupts */
>  	ret = arizona_irq_init(arizona);
>  	if (ret != 0)
>  		goto err_reset;
>  
> +	pm_runtime_set_autosuspend_delay(arizona->dev, 100);
> +	pm_runtime_use_autosuspend(arizona->dev);
> +
>  	arizona_request_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, "CLKGEN error",
>  			    arizona_clkgen_err, arizona);
>  	arizona_request_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, "Overclocked",
> @@ -1278,10 +1280,6 @@ int arizona_dev_init(struct arizona *arizona)
>  		goto err_irq;
>  	}
>  
> -#ifdef CONFIG_PM
> -	regulator_disable(arizona->dcvdd);
> -#endif
> -
>  	return 0;
>  
>  err_irq:

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists