Skip to content

Commit 30247fc

Browse files
bijudasgeertu
authored andcommitted
pinctrl: renesas: rzg2l: Fix OEN resume
Writing to the PFC_OEN register is controlled by the write protect register (PWPR). Currently the OEN register write in resume() is done without enabling write access in PWPR leading to incorrect operation. Fixes: cd39805 ("pinctrl: renesas: rzg2l: Unify OEN handling across RZ/{G2L,V2H,V2N}") Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> [geert: Move spin_*lock*() calls inside if-statements] Link: https://lore.kernel.org/20250817143024.165471-2-biju.das.jz@bp.renesas.com Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
1 parent d1d31e2 commit 30247fc

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

drivers/pinctrl/renesas/pinctrl-rzg2l.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3165,6 +3165,8 @@ static int rzg2l_pinctrl_resume_noirq(struct device *dev)
31653165
const struct rzg2l_hwcfg *hwcfg = pctrl->data->hwcfg;
31663166
const struct rzg2l_register_offsets *regs = &hwcfg->regs;
31673167
struct rzg2l_pinctrl_reg_cache *cache = pctrl->cache;
3168+
unsigned long flags;
3169+
u8 pwpr;
31683170
int ret;
31693171

31703172
if (!atomic_read(&pctrl->wakeup_path)) {
@@ -3174,7 +3176,16 @@ static int rzg2l_pinctrl_resume_noirq(struct device *dev)
31743176
}
31753177

31763178
writeb(cache->qspi, pctrl->base + QSPI);
3179+
if (pctrl->data->hwcfg->oen_pwpr_lock) {
3180+
spin_lock_irqsave(&pctrl->lock, flags);
3181+
pwpr = readb(pctrl->base + regs->pwpr);
3182+
writeb(pwpr | PWPR_REGWE_B, pctrl->base + regs->pwpr);
3183+
}
31773184
writeb(cache->oen, pctrl->base + pctrl->data->hwcfg->regs.oen);
3185+
if (pctrl->data->hwcfg->oen_pwpr_lock) {
3186+
writeb(pwpr & ~PWPR_REGWE_B, pctrl->base + regs->pwpr);
3187+
spin_unlock_irqrestore(&pctrl->lock, flags);
3188+
}
31783189
for (u8 i = 0; i < 2; i++) {
31793190
if (regs->sd_ch)
31803191
writeb(cache->sd_ch[i], pctrl->base + SD_CH(regs->sd_ch, i));

0 commit comments

Comments
 (0)