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]
Message-ID: <20250626131213.GD10134@google.com>
Date: Thu, 26 Jun 2025 14:12:13 +0100
From: Lee Jones <lee@...nel.org>
To: Quentin Schulz <foss+kernel@...il.net>
Cc: Rob Herring <robh@...nel.org>, Krzysztof Kozlowski <krzk+dt@...nel.org>,
	Conor Dooley <conor+dt@...nel.org>,
	Heiko Stuebner <heiko@...ech.de>,
	Sebastian Reichel <sebastian.reichel@...labora.com>,
	Lukasz Czechowski <lukasz.czechowski@...umatec.com>,
	Daniel Semkowicz <dse@...umatec.com>,
	Nicolas Frattaroli <nicolas.frattaroli@...labora.com>,
	devicetree@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
	linux-rockchip@...ts.infradead.org, linux-kernel@...r.kernel.org,
	Quentin Schulz <quentin.schulz@...rry.de>
Subject: Re: [PATCH v3 2/5] mfd: rk8xx-core: allow to customize RK806 reset
 mode

On Wed, 18 Jun 2025, Quentin Schulz wrote:

> From: Quentin Schulz <quentin.schulz@...rry.de>
> 
> The RK806 PMIC has a bitfield for configuring the restart/reset behavior
> (which I assume Rockchip calls "function") whenever the PMIC is reset
> either programmatically (c.f. DEV_RST in the datasheet) or via PWRCTRL
> or RESETB pins.
> 
> For RK806, the following values are possible for RST_FUN:
> 
> 0b00 means "restart PMU"

"Restart PMU"

> 0b01 means "Reset all the power off reset registers, forcing
> 	the state to switch to ACTIVE mode"
> 0b10 means "Reset all the power off reset registers, forcing
> 	the state to switch to ACTIVE mode, and simultaneously
> 	pull down the RESETB PIN for 5mS before releasing"
> 0b11 means the same as for 0b10 just above.
> 
> This adds the appropriate logic in the driver to parse the new
> rockchip,reset-mode DT property to pass this information. It just
> happens that the values in the binding match the values to write in the
> bitfield so no mapping is necessary.
> 
> If it is missing, the register is left untouched and relies either on
> the silicon default or on whatever was set earlier in the boot stages
> (e.g. the bootloader).
> 
> Signed-off-by: Quentin Schulz <quentin.schulz@...rry.de>
> ---
>  drivers/mfd/rk8xx-core.c  | 15 +++++++++++++++
>  include/linux/mfd/rk808.h |  2 ++
>  2 files changed, 17 insertions(+)
> 
> diff --git a/drivers/mfd/rk8xx-core.c b/drivers/mfd/rk8xx-core.c
> index 71c2b80a4678d627e86cfbec8135f08e262559d3..23ff92f89f3357e3f47c5dd0e9f80cca453f22c0 100644
> --- a/drivers/mfd/rk8xx-core.c
> +++ b/drivers/mfd/rk8xx-core.c
> @@ -10,6 +10,7 @@
>   * Author: Wadim Egorov <w.egorov@...tec.de>
>   */
>  
> +#include <linux/bitfield.h>
>  #include <linux/interrupt.h>
>  #include <linux/mfd/rk808.h>
>  #include <linux/mfd/core.h>
> @@ -699,6 +700,7 @@ int rk8xx_probe(struct device *dev, int variant, unsigned int irq, struct regmap
>  	const struct mfd_cell *cells;
>  	int dual_support = 0;
>  	int nr_pre_init_regs;
> +	u32 rst_fun = 0;
>  	int nr_cells;
>  	int ret;
>  	int i;
> @@ -726,6 +728,19 @@ int rk8xx_probe(struct device *dev, int variant, unsigned int irq, struct regmap
>  		cells = rk806s;
>  		nr_cells = ARRAY_SIZE(rk806s);
>  		dual_support = IRQF_SHARED;
> +
> +		ret = device_property_read_u32(dev, "rockchip,reset-mode", &rst_fun);
> +		if (ret) {
> +			dev_dbg(dev,
> +				"rockchip,reset-mode property missing, not setting RST_FUN\n");

I suggest that this debug message is not that useful and can be removed.

> +			break;
> +		}
> +
> +		ret = regmap_update_bits(rk808->regmap, RK806_SYS_CFG3,
> +					 RK806_RST_FUN_MSK,

Place on the line above?

> +					 FIELD_PREP(RK806_RST_FUN_MSK, rst_fun));
> +		if (ret)
> +			return dev_err_probe(dev, ret, "RST_FUN write err\n");

Failed to configure requested restart/reset behavior"

>  		break;
>  	case RK808_ID:
>  		rk808->regmap_irq_chip = &rk808_irq_chip;
> diff --git a/include/linux/mfd/rk808.h b/include/linux/mfd/rk808.h
> index 69cbea78b430b562a23d995263369d475daa6287..28170ee08898ca59c76a741a1d42763a42b72380 100644
> --- a/include/linux/mfd/rk808.h
> +++ b/include/linux/mfd/rk808.h
> @@ -812,6 +812,8 @@ enum rk806_pin_dr_sel {
>  #define RK806_INT_POL_H			BIT(1)
>  #define RK806_INT_POL_L			0
>  
> +/* SYS_CFG3 */
> +#define RK806_RST_FUN_MSK		GENMASK(7, 6)
>  #define RK806_SLAVE_RESTART_FUN_MSK	BIT(1)
>  #define RK806_SLAVE_RESTART_FUN_EN	BIT(1)
>  #define RK806_SLAVE_RESTART_FUN_OFF	0
> 
> -- 
> 2.49.0
> 

-- 
Lee Jones [李琼斯]

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ