[PATCH 1/2] pmic: pca9450: Make warm reset on WDOG_B assertion

Peng Fan peng.fan at oss.nxp.com
Tue Dec 13 08:44:26 CET 2022



On 12/10/2022 3:35 AM, Marek Vasut wrote:
> The default configuration of the PMIC behavior makes the PMIC
> power cycle most regulators on WDOG_B assertion. This power
> cycling causes the memory contents of OCRAM to be lost.
> Some systems neeeds some memory that survives reset and
> reboot, therefore this patch is created.
> 
> The implementation is taken almost verbatim from Linux commit
> 2364a64d0673f ("regulator: pca9450: Make warm reset on WDOG_B assertion")
> 
> Signed-off-by: Marek Vasut <marex at denx.de>
> ---
> Cc: "NXP i.MX U-Boot Team" <uboot-imx at nxp.com>
> Cc: "Ying-Chun Liu (PaulLiu)" <paul.liu at linaro.org>
> Cc: Fabio Estevam <festevam at denx.de>
> Cc: Fabio Estevam <festevam at gmail.com>
> Cc: Frieder Schrempf <frieder.schrempf at kontron.de>
> Cc: Manoj Sai <abbaraju.manojsai at amarulasolutions.com>
> Cc: Marcel Ziswiler <marcel.ziswiler at toradex.com>
> Cc: Matteo Lisi <matteo.lisi at engicam.com>
> Cc: Peng Fan <peng.fan at nxp.com>
> Cc: Rickard x Andersson <rickaran at axis.com>
> Cc: Stefano Babic <sbabic at denx.de>
> Cc: Tim Harvey <tharvey at gateworks.com>
> ---
>   drivers/power/pmic/pca9450.c | 11 ++++++++++-
>   include/power/pca9450.h      |  4 ++++
>   2 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/power/pmic/pca9450.c b/drivers/power/pmic/pca9450.c
> index a186edc08da..2427abfb7a5 100644
> --- a/drivers/power/pmic/pca9450.c
> +++ b/drivers/power/pmic/pca9450.c
> @@ -86,6 +86,7 @@ static int pca9450_bind(struct udevice *dev)
>   static int pca9450_probe(struct udevice *dev)
>   {
>   	struct pca9450_priv *priv = dev_get_priv(dev);
> +	unsigned int reset_ctrl;
>   	int ret = 0;
>   
>   	if (CONFIG_IS_ENABLED(DM_GPIO) && CONFIG_IS_ENABLED(DM_REGULATOR_PCA9450)) {
> @@ -95,10 +96,18 @@ static int pca9450_probe(struct udevice *dev)
>   		if (IS_ERR(priv->sd_vsel_gpio)) {
>   			ret = PTR_ERR(priv->sd_vsel_gpio);
>   			dev_err(dev, "Failed to request SD_VSEL GPIO: %d\n", ret);
> +			if (ret)
> +				return ret;
>   		}
>   	}
>   
> -	return ret;
> +	if (ofnode_read_bool(dev_ofnode(dev), "nxp,wdog_b-warm-reset"))
> +		reset_ctrl = PCA9450_PMIC_RESET_WDOG_B_CFG_WARM;
> +	else
> +		reset_ctrl = PCA9450_PMIC_RESET_WDOG_B_CFG_COLD_LDO12;
> +
> +	return pmic_clrsetbits(dev, PCA9450_RESET_CTRL,
> +			       PCA9450_PMIC_RESET_WDOG_B_CFG_MASK, reset_ctrl);
>   }
>   
>   static struct dm_pmic_ops pca9450_ops = {
> diff --git a/include/power/pca9450.h b/include/power/pca9450.h
> index fa0405fcb87..6efecee96c8 100644
> --- a/include/power/pca9450.h
> +++ b/include/power/pca9450.h
> @@ -67,4 +67,8 @@ enum {
>   #define PCA9450_LDO34_MASK		0x1f
>   #define PCA9450_LDO5_MASK		0x0f
>   
> +#define PCA9450_PMIC_RESET_WDOG_B_CFG_MASK		0xc0
> +#define PCA9450_PMIC_RESET_WDOG_B_CFG_WARM		0x40
> +#define PCA9450_PMIC_RESET_WDOG_B_CFG_COLD_LDO12	0x80
> +
>   #endif

Reviewed-by: Peng Fan <peng.fan at nxp.com>


More information about the U-Boot mailing list