Skip to content

Commit 0b0201f

Browse files
bijudasgeertu
authored andcommitted
clk: renesas: rzg2l: 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-2-biju.das.jz@bp.renesas.com Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
1 parent cda6a5d commit 0b0201f

1 file changed

Lines changed: 5 additions & 4 deletions

File tree

drivers/clk/renesas/rzg2l-cpg.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,6 +1647,7 @@ static int __rzg2l_cpg_assert(struct reset_controller_dev *rcdev,
16471647
u32 mask = BIT(info->resets[id].bit);
16481648
s8 monbit = info->resets[id].monbit;
16491649
u32 value = mask << 16;
1650+
u32 mon;
16501651
int ret;
16511652

16521653
dev_dbg(rcdev->dev, "%s id:%ld offset:0x%x\n",
@@ -1667,10 +1668,10 @@ static int __rzg2l_cpg_assert(struct reset_controller_dev *rcdev,
16671668
return 0;
16681669
}
16691670

1670-
ret = readl_poll_timeout_atomic(priv->base + reg, value,
1671-
assert == !!(value & mask), 10, 200);
1672-
if (ret && !assert) {
1673-
value = mask << 16;
1671+
ret = readl_poll_timeout_atomic(priv->base + reg, mon,
1672+
assert == !!(mon & mask), 10, 200);
1673+
if (ret) {
1674+
value ^= mask;
16741675
writel(value, priv->base + CLK_RST_R(info->resets[id].off));
16751676
}
16761677

0 commit comments

Comments
 (0)