clk: renesas: rzv2h: Simplify rzv2h_cpg_assert()/rzv2h_cpg_deassert()
authorTommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Mon, 17 Mar 2025 08:32:11 +0000 (09:32 +0100)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Mon, 14 Apr 2025 08:09:59 +0000 (10:09 +0200)
rzv2h_cpg_assert() and rzv2h_cpg_deassert() functions are similar. Share
this code via __rzv2h_cpg_assert(). This avoid code duplication.

Reported-by: Pavel Machek <pavel@denx.de>
Closes: https://lore.kernel.org/cip-dev/Z9QA9rwuXCuVbOXp@duo.ucw.cz/
Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250317083213.371614-4-tommaso.merciai.xr@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
drivers/clk/renesas/rzv2h-cpg.c

index 1c09b92981ff492e1064e4c1e85bb6f0275909c3..81aed6ba763722e30f54832bdb840691405cca55 100644 (file)
@@ -709,8 +709,8 @@ fail:
                mod->name, PTR_ERR(clk));
 }
 
-static int rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
-                           unsigned long id)
+static int __rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
+                             unsigned long id, bool assert)
 {
        struct rzv2h_cpg_priv *priv = rcdev_to_priv(rcdev);
        unsigned int reg = GET_RST_OFFSET(priv->resets[id].reset_index);
@@ -718,35 +718,31 @@ static int rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
        u8 monbit = priv->resets[id].mon_bit;
        u32 value = mask << 16;
 
-       dev_dbg(rcdev->dev, "assert id:%ld offset:0x%x\n", id, reg);
+       dev_dbg(rcdev->dev, "%s id:%ld offset:0x%x\n",
+               assert ? "assert" : "deassert", id, reg);
 
+       if (!assert)
+               value |= mask;
        writel(value, priv->base + reg);
 
        reg = GET_RST_MON_OFFSET(priv->resets[id].mon_index);
        mask = BIT(monbit);
 
        return readl_poll_timeout_atomic(priv->base + reg, value,
-                                        value & mask, 10, 200);
+                                        assert ? (value & mask) : !(value & mask),
+                                        10, 200);
+}
+
+static int rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
+                           unsigned long id)
+{
+       return __rzv2h_cpg_assert(rcdev, id, true);
 }
 
 static int rzv2h_cpg_deassert(struct reset_controller_dev *rcdev,
                              unsigned long id)
 {
-       struct rzv2h_cpg_priv *priv = rcdev_to_priv(rcdev);
-       unsigned int reg = GET_RST_OFFSET(priv->resets[id].reset_index);
-       u32 mask = BIT(priv->resets[id].reset_bit);
-       u8 monbit = priv->resets[id].mon_bit;
-       u32 value = (mask << 16) | mask;
-
-       dev_dbg(rcdev->dev, "deassert id:%ld offset:0x%x\n", id, reg);
-
-       writel(value, priv->base + reg);
-
-       reg = GET_RST_MON_OFFSET(priv->resets[id].mon_index);
-       mask = BIT(monbit);
-
-       return readl_poll_timeout_atomic(priv->base + reg, value,
-                                        !(value & mask), 10, 200);
+       return __rzv2h_cpg_assert(rcdev, id, false);
 }
 
 static int rzv2h_cpg_reset(struct reset_controller_dev *rcdev,