Skip to content

Commit 879e9fc

Browse files
bijudasgeertu
authored andcommitted
clk: renesas: rzv2h: Deassert reset on assert timeout
If the assert() fails due to timeout error, set the reset register bit back to deasserted state. This change is needed especially for handling assert error in suspend() callback that expect the device to be in operational state in case of failure. Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Link: https://patch.msgid.link/20260108123433.104464-3-biju.das.jz@bp.renesas.com Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
1 parent 0b0201f commit 879e9fc

1 file changed

Lines changed: 5 additions & 4 deletions

File tree

drivers/clk/renesas/rzv2h-cpg.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,6 +1352,7 @@ static int __rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
13521352
u32 mask = BIT(priv->resets[id].reset_bit);
13531353
u8 monbit = priv->resets[id].mon_bit;
13541354
u32 value = mask << 16;
1355+
u32 mon;
13551356
int ret;
13561357

13571358
dev_dbg(rcdev->dev, "%s id:%ld offset:0x%x\n",
@@ -1364,10 +1365,10 @@ static int __rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
13641365
reg = GET_RST_MON_OFFSET(priv->resets[id].mon_index);
13651366
mask = BIT(monbit);
13661367

1367-
ret = readl_poll_timeout_atomic(priv->base + reg, value,
1368-
assert == !!(value & mask), 10, 200);
1369-
if (ret && !assert) {
1370-
value = mask << 16;
1368+
ret = readl_poll_timeout_atomic(priv->base + reg, mon,
1369+
assert == !!(mon & mask), 10, 200);
1370+
if (ret) {
1371+
value ^= mask;
13711372
writel(value, priv->base + GET_RST_OFFSET(priv->resets[id].reset_index));
13721373
}
13731374

0 commit comments

Comments
 (0)