[PATCH v2] watchdog: designware: make reset really optional

Sean Anderson seanga2 at gmail.com
Tue Nov 15 14:22:22 CET 2022


On 11/15/22 05:20, Quentin Schulz wrote:
> From: Quentin Schulz <quentin.schulz at theobroma-systems.com>
> 
> Checking for DM_RESET is not enough since not all watchdog
> implementations use a reset lane. Such is the case for Rockchip
> implementation for example. Since reset_assert_bulk will only succeed if
> the resets property exists in the watchdog DT node, it needs to be
> called only if a reset property is present.
> 
> This adds a condition on the resets property presence in the watchdog DT
> node before assuming a reset lane needs to be fetched with
> reset_assert_bulk, by calling ofnode_read_prop.
> 
> Cc: Quentin Schulz <foss+uboot at 0leil.net>
> Reviewed-by: Stefan Roese <sr at denx.de>
> Signed-off-by: Quentin Schulz <quentin.schulz at theobroma-systems.com>
> ---
> To: Stefan Roese <sr at denx.de>
> Cc: u-boot at lists.denx.de
> ---
> Changes in v2:
> - added Rb,
> - changed indentation from space to tabs while adding condition,
> - Link to v1: https://lore.kernel.org/r/20221114-dw-wdt-no-reset-v1-0-15a62faba4cc@theobroma-systems.com
> ---
>   drivers/watchdog/designware_wdt.c | 9 +++++----
>   1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/watchdog/designware_wdt.c b/drivers/watchdog/designware_wdt.c
> index cad756aeaf..f8df1916b5 100644
> --- a/drivers/watchdog/designware_wdt.c
> +++ b/drivers/watchdog/designware_wdt.c
> @@ -72,13 +72,13 @@ static int designware_wdt_reset(struct udevice *dev)
>   static int designware_wdt_stop(struct udevice *dev)
>   {
>   	struct designware_wdt_priv *priv = dev_get_priv(dev);
> +	__maybe_unused int ret;
>   
>   	designware_wdt_reset(dev);
>   	writel(0, priv->base + DW_WDT_CR);
>   
> -        if (CONFIG_IS_ENABLED(DM_RESET)) {
> -		int ret;
> -
> +	if (CONFIG_IS_ENABLED(DM_RESET) &&
> +	    ofnode_read_prop(dev_ofnode(dev), "resets", &ret)) {
>   		ret = reset_assert_bulk(&priv->resets);
>   		if (ret)
>   			return ret;
> @@ -135,7 +135,8 @@ static int designware_wdt_probe(struct udevice *dev)
>   	priv->clk_khz = CONFIG_DW_WDT_CLOCK_KHZ;
>   #endif
>   
> -	if (CONFIG_IS_ENABLED(DM_RESET)) {
> +	if (CONFIG_IS_ENABLED(DM_RESET) &&
> +	    ofnode_read_prop(dev_ofnode(dev), "resets", &ret)) {
>   		ret = reset_get_bulk(dev, &priv->resets);
>   		if (ret)

Can't we just check for -ENOENT here?

--Sean

>   			goto err;
> 
> ---
> base-commit: 0cbeed4f6648e0e4966475e3544280a69ecb59d3
> change-id: 20221114-dw-wdt-no-reset-2296a2bf37b3
> 
> Best regards,



More information about the U-Boot mailing list