[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