mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 03:35:32 -04:00
i3c: renesas: Restore STDBR and EXTBR registers on resume
The Renesas RZ/G3S supports a power saving state where power to the most
SoC componentes (including I3C) is lost.
The STDBR and EXTBR are configured in initialization phase though the
struct i3c_master_controller_ops::bus_init. Set them on resume function
as well to keep the same state of the controller after a suspend with
power loss and a similar initialization sequence as in bus_init.
Fixes: e721898631 ("i3c: renesas: Add suspend/resume support")
Cc: stable@vger.kernel.org
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Tested-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Link: https://patch.msgid.link/20260713130545.568657-3-claudiu.beznea+renesas@tuxon.dev
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
committed by
Alexandre Belloni
parent
5f1a76ecfe
commit
21cded44e6
@@ -260,6 +260,7 @@ struct renesas_i3c {
|
||||
u32 dyn_addr;
|
||||
u32 i2c_STDBR;
|
||||
u32 i3c_STDBR;
|
||||
u32 extbr;
|
||||
unsigned long rate;
|
||||
u8 addrs[RENESAS_I3C_MAX_DEVS];
|
||||
struct renesas_i3c_xferqueue xferqueue;
|
||||
@@ -622,10 +623,9 @@ static int renesas_i3c_bus_init(struct i3c_master_controller *m)
|
||||
renesas_writel(i3c->regs, STDBR, i3c->i3c_STDBR);
|
||||
|
||||
/* Extended Bit Rate setting */
|
||||
renesas_writel(i3c->regs, EXTBR, EXTBR_EBRLO(od_low_ticks) |
|
||||
EXTBR_EBRHO(od_high_ticks) |
|
||||
EXTBR_EBRLP(pp_low_ticks) |
|
||||
EXTBR_EBRHP(pp_high_ticks));
|
||||
i3c->extbr = EXTBR_EBRLO(od_low_ticks) | EXTBR_EBRHO(od_high_ticks) |
|
||||
EXTBR_EBRLP(pp_low_ticks) | EXTBR_EBRHP(pp_high_ticks);
|
||||
renesas_writel(i3c->regs, EXTBR, i3c->extbr);
|
||||
|
||||
renesas_writel(i3c->regs, REFCKCTL, REFCKCTL_IREFCKS(cks));
|
||||
i3c->refclk_div = cks;
|
||||
@@ -1476,6 +1476,8 @@ static int renesas_i3c_resume_noirq(struct device *dev)
|
||||
goto err_tresetn;
|
||||
|
||||
/* Re-store I3C registers value. */
|
||||
renesas_writel(i3c->regs, STDBR, i3c->i3c_STDBR);
|
||||
renesas_writel(i3c->regs, EXTBR, i3c->extbr);
|
||||
renesas_writel(i3c->regs, REFCKCTL,
|
||||
REFCKCTL_IREFCKS(i3c->refclk_div));
|
||||
renesas_writel(i3c->regs, MSDVAD, MSDVAD_MDYADV |
|
||||
|
||||
Reference in New Issue
Block a user