Skip to content
/ linux Public

Commit 8d35f60

Browse files
bijudasSasha Levin
authored andcommitted
clk: renesas: rzg2l: Deassert reset on assert timeout
[ Upstream commit 0b0201f ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent f990244 commit 8d35f60

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

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)