Message ID | 20250225105907.845347-5-claudiu.beznea.uj@bp.renesas.com |
---|---|
State | New |
Headers | show |
Series | phy: renesas: rcar-gen3-usb2: Fixes for Renesas RZ/G3S | expand |
On Tue, Feb 25, 2025 at 11:01 AM Claudiu <claudiu.beznea@tuxon.dev> wrote: > > From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> > > Assert PLL reset on PHY power off. This saves power. > > Fixes: f3b5a8d9b50d ("phy: rcar-gen3-usb2: Add R-Car Gen3 USB2 PHY driver") > Cc: stable@vger.kernel.org > Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> > --- > > Changes in v2: > - collected tags > - add an empty line after definition of val to get rid of > the checkpatch.pl warning > > drivers/phy/renesas/phy-rcar-gen3-usb2.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Cheers, Prabhakar > diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c > index 5c0ceba09b67..21cf14ea3437 100644 > --- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c > +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c > @@ -537,9 +537,17 @@ static int rcar_gen3_phy_usb2_power_off(struct phy *p) > struct rcar_gen3_chan *channel = rphy->ch; > int ret = 0; > > - scoped_guard(spinlock_irqsave, &channel->lock) > + scoped_guard(spinlock_irqsave, &channel->lock) { > rphy->powered = false; > > + if (rcar_gen3_are_all_rphys_power_off(channel)) { > + u32 val = readl(channel->base + USB2_USBCTR); > + > + val |= USB2_USBCTR_PLL_RST; > + writel(val, channel->base + USB2_USBCTR); > + } > + } > + > if (channel->vbus) > ret = regulator_disable(channel->vbus); > > -- > 2.43.0 > >
diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c index 5c0ceba09b67..21cf14ea3437 100644 --- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c @@ -537,9 +537,17 @@ static int rcar_gen3_phy_usb2_power_off(struct phy *p) struct rcar_gen3_chan *channel = rphy->ch; int ret = 0; - scoped_guard(spinlock_irqsave, &channel->lock) + scoped_guard(spinlock_irqsave, &channel->lock) { rphy->powered = false; + if (rcar_gen3_are_all_rphys_power_off(channel)) { + u32 val = readl(channel->base + USB2_USBCTR); + + val |= USB2_USBCTR_PLL_RST; + writel(val, channel->base + USB2_USBCTR); + } + } + if (channel->vbus) ret = regulator_disable(channel->vbus);