2019-06-05 04:57:26

by Yoshihiro Shimoda

[permalink] [raw]
Subject: [PATCH] phy: renesas: rcar-gen3-usb2: fix imbalance powered flag

The powered flag should be set for any other phys anyway. Otherwise,
after we have revised the device tree for the usb phy, the following
warning happened during a second system suspend. So, this patch fixes
the issue.

[ 56.026531] unbalanced disables for USB20_VBUS0
[ 56.031108] WARNING: CPU: 3 PID: 513 at drivers/regulator/core.c:2593 _regula
tor_disable+0xe0/0x1c0
[ 56.040146] Modules linked in: rcar_du_drm rcar_lvds drm_kms_helper drm drm_p
anel_orientation_quirks vsp1 videobuf2_vmalloc videobuf2_dma_contig videobuf2_me
mops videobuf2_v4l2 videobuf2_common videodev snd_soc_rcar renesas_usbhs snd_soc
_audio_graph_card media snd_soc_simple_card_utils crct10dif_ce renesas_usb3 snd_
soc_ak4613 rcar_fcp pwm_rcar usb_dmac phy_rcar_gen3_usb3 pwm_bl ipv6
[ 56.074047] CPU: 3 PID: 513 Comm: kworker/u16:19 Not tainted 5.2.0-rc3-00001-
g5f20a19 #6
[ 56.082129] Hardware name: Renesas Salvator-X board based on r8a7795 ES2.0+ (
DT)
[ 56.089524] Workqueue: events_unbound async_run_entry_fn
[ 56.094832] pstate: 40000005 (nZcv daif -PAN -UAO)
[ 56.099617] pc : _regulator_disable+0xe0/0x1c0
[ 56.104054] lr : _regulator_disable+0xe0/0x1c0
[ 56.108489] sp : ffff0000121c3ae0
[ 56.111796] x29: ffff0000121c3ae0 x28: 0000000000000000
[ 56.117102] x27: 0000000000000000 x26: ffff000010fe0e60
[ 56.122407] x25: 0000000000000002 x24: 0000000000000001
[ 56.127712] x23: 0000000000000002 x22: ffff8006f99d4000
[ 56.133017] x21: ffff8006f99cc000 x20: ffff8006f9846800
[ 56.138322] x19: ffff8006f9846800 x18: ffffffffffffffff
[ 56.143626] x17: 0000000000000000 x16: 0000000000000000
[ 56.148931] x15: ffff0000112f96c8 x14: ffff0000921c37f7
[ 56.154235] x13: ffff0000121c3805 x12: ffff000011312000
[ 56.159540] x11: 0000000005f5e0ff x10: ffff0000112f9f20
[ 56.164844] x9 : ffff0000112d3018 x8 : 00000000000001ad
[ 56.170149] x7 : 00000000ffffffcc x6 : ffff8006ff768180
[ 56.175453] x5 : ffff8006ff768180 x4 : 0000000000000000
[ 56.180758] x3 : ffff8006ff76ef10 x2 : ffff8006ff768180
[ 56.186062] x1 : 3d2eccbaead8fb00 x0 : 0000000000000000
[ 56.191367] Call trace:
[ 56.193808] _regulator_disable+0xe0/0x1c0
[ 56.197899] regulator_disable+0x40/0x78
[ 56.201820] rcar_gen3_phy_usb2_power_off+0x3c/0x50
[ 56.206692] phy_power_off+0x48/0xd8
[ 56.210263] usb_phy_roothub_power_off+0x30/0x50
[ 56.214873] usb_phy_roothub_suspend+0x1c/0x50
[ 56.219311] hcd_bus_suspend+0x13c/0x168
[ 56.223226] generic_suspend+0x4c/0x58
[ 56.226969] usb_suspend_both+0x1ac/0x238
[ 56.230972] usb_suspend+0xcc/0x170
[ 56.234455] usb_dev_suspend+0x10/0x18
[ 56.238199] dpm_run_callback.isra.6+0x20/0x68
[ 56.242635] __device_suspend+0x110/0x308
[ 56.246637] async_suspend+0x24/0xa8
[ 56.250205] async_run_entry_fn+0x40/0xf8
[ 56.254210] process_one_work+0x1e0/0x320
[ 56.258211] worker_thread+0x40/0x450
[ 56.261867] kthread+0x124/0x128
[ 56.265094] ret_from_fork+0x10/0x18
[ 56.268661] ---[ end trace 86d7ec5de5c517af ]---
[ 56.273290] phy phy-ee080200.usb-phy.10: phy poweroff failed --> -5

Reported-by: Geert Uytterhoeven <[email protected]>
Fixes: 549b6b55b005 ("phy: renesas: rcar-gen3-usb2: enable/disable independent irqs")
Signed-off-by: Yoshihiro Shimoda <[email protected]>
---
drivers/phy/renesas/phy-rcar-gen3-usb2.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
index 1322185..dd2d7290 100644
--- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
+++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
@@ -437,15 +437,15 @@ static int rcar_gen3_phy_usb2_power_on(struct phy *p)
struct rcar_gen3_chan *channel = rphy->ch;
void __iomem *usb2_base = channel->base;
u32 val;
- int ret;
+ int ret = 0;

if (!rcar_gen3_are_all_rphys_power_off(channel))
- return 0;
+ goto out;

if (channel->vbus) {
ret = regulator_enable(channel->vbus);
if (ret)
- return ret;
+ goto out;
}

val = readl(usb2_base + USB2_USBCTR);
@@ -454,6 +454,8 @@ static int rcar_gen3_phy_usb2_power_on(struct phy *p)
val &= ~USB2_USBCTR_PLL_RST;
writel(val, usb2_base + USB2_USBCTR);

+out:
+ /* The powered flag should be set for any other phys anyway */
rphy->powered = true;

return 0;
--
2.7.4


2019-06-05 09:26:41

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH] phy: renesas: rcar-gen3-usb2: fix imbalance powered flag

Hi Shimoda-san,

On Wed, Jun 5, 2019 at 6:54 AM Yoshihiro Shimoda
<[email protected]> wrote:
> The powered flag should be set for any other phys anyway. Otherwise,
> after we have revised the device tree for the usb phy, the following
> warning happened during a second system suspend. So, this patch fixes
> the issue.
>
> [ 56.026531] unbalanced disables for USB20_VBUS0
> [ 56.031108] WARNING: CPU: 3 PID: 513 at drivers/regulator/core.c:2593 _regula
> tor_disable+0xe0/0x1c0
> [ 56.040146] Modules linked in: rcar_du_drm rcar_lvds drm_kms_helper drm drm_p
> anel_orientation_quirks vsp1 videobuf2_vmalloc videobuf2_dma_contig videobuf2_me
> mops videobuf2_v4l2 videobuf2_common videodev snd_soc_rcar renesas_usbhs snd_soc
> _audio_graph_card media snd_soc_simple_card_utils crct10dif_ce renesas_usb3 snd_
> soc_ak4613 rcar_fcp pwm_rcar usb_dmac phy_rcar_gen3_usb3 pwm_bl ipv6
> [ 56.074047] CPU: 3 PID: 513 Comm: kworker/u16:19 Not tainted 5.2.0-rc3-00001-
> g5f20a19 #6
> [ 56.082129] Hardware name: Renesas Salvator-X board based on r8a7795 ES2.0+ (
> DT)
> [ 56.089524] Workqueue: events_unbound async_run_entry_fn
> [ 56.094832] pstate: 40000005 (nZcv daif -PAN -UAO)
> [ 56.099617] pc : _regulator_disable+0xe0/0x1c0
> [ 56.104054] lr : _regulator_disable+0xe0/0x1c0
> [ 56.108489] sp : ffff0000121c3ae0
> [ 56.111796] x29: ffff0000121c3ae0 x28: 0000000000000000
> [ 56.117102] x27: 0000000000000000 x26: ffff000010fe0e60
> [ 56.122407] x25: 0000000000000002 x24: 0000000000000001
> [ 56.127712] x23: 0000000000000002 x22: ffff8006f99d4000
> [ 56.133017] x21: ffff8006f99cc000 x20: ffff8006f9846800
> [ 56.138322] x19: ffff8006f9846800 x18: ffffffffffffffff
> [ 56.143626] x17: 0000000000000000 x16: 0000000000000000
> [ 56.148931] x15: ffff0000112f96c8 x14: ffff0000921c37f7
> [ 56.154235] x13: ffff0000121c3805 x12: ffff000011312000
> [ 56.159540] x11: 0000000005f5e0ff x10: ffff0000112f9f20
> [ 56.164844] x9 : ffff0000112d3018 x8 : 00000000000001ad
> [ 56.170149] x7 : 00000000ffffffcc x6 : ffff8006ff768180
> [ 56.175453] x5 : ffff8006ff768180 x4 : 0000000000000000
> [ 56.180758] x3 : ffff8006ff76ef10 x2 : ffff8006ff768180
> [ 56.186062] x1 : 3d2eccbaead8fb00 x0 : 0000000000000000
> [ 56.191367] Call trace:
> [ 56.193808] _regulator_disable+0xe0/0x1c0
> [ 56.197899] regulator_disable+0x40/0x78
> [ 56.201820] rcar_gen3_phy_usb2_power_off+0x3c/0x50
> [ 56.206692] phy_power_off+0x48/0xd8
> [ 56.210263] usb_phy_roothub_power_off+0x30/0x50
> [ 56.214873] usb_phy_roothub_suspend+0x1c/0x50
> [ 56.219311] hcd_bus_suspend+0x13c/0x168
> [ 56.223226] generic_suspend+0x4c/0x58
> [ 56.226969] usb_suspend_both+0x1ac/0x238
> [ 56.230972] usb_suspend+0xcc/0x170
> [ 56.234455] usb_dev_suspend+0x10/0x18
> [ 56.238199] dpm_run_callback.isra.6+0x20/0x68
> [ 56.242635] __device_suspend+0x110/0x308
> [ 56.246637] async_suspend+0x24/0xa8
> [ 56.250205] async_run_entry_fn+0x40/0xf8
> [ 56.254210] process_one_work+0x1e0/0x320
> [ 56.258211] worker_thread+0x40/0x450
> [ 56.261867] kthread+0x124/0x128
> [ 56.265094] ret_from_fork+0x10/0x18
> [ 56.268661] ---[ end trace 86d7ec5de5c517af ]---
> [ 56.273290] phy phy-ee080200.usb-phy.10: phy poweroff failed --> -5
>
> Reported-by: Geert Uytterhoeven <[email protected]>
> Fixes: 549b6b55b005 ("phy: renesas: rcar-gen3-usb2: enable/disable independent irqs")
> Signed-off-by: Yoshihiro Shimoda <[email protected]>

Thank you, this seems to fix the warning, so
Tested-by: Geert Uytterhoeven <[email protected]>

However, the other imbalance (phy-ee080200.usb-phy.6 enabling its
regulator during each system resume phase, but never touching it
otherwise) is still present.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2019-06-05 12:14:18

by Yoshihiro Shimoda

[permalink] [raw]
Subject: RE: [PATCH] phy: renesas: rcar-gen3-usb2: fix imbalance powered flag

Hi Geert-san,

> From: Geert Uytterhoeven, Sent: Wednesday, June 5, 2019 6:25 PM
<snip>
> Thank you, this seems to fix the warning, so
> Tested-by: Geert Uytterhoeven <[email protected]>

Thank you for the testing!

> However, the other imbalance (phy-ee080200.usb-phy.6 enabling its
> regulator during each system resume phase, but never touching it
> otherwise) is still present.

Umm, since I'd like to investigate this,
would you share your debug print patch?

Best regards,
Yoshihiro Shimoda

2019-06-05 13:10:33

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH] phy: renesas: rcar-gen3-usb2: fix imbalance powered flag

Hi Shimoda-san,

On Wed, Jun 5, 2019 at 2:12 PM Yoshihiro Shimoda
<[email protected]> wrote:
> > From: Geert Uytterhoeven, Sent: Wednesday, June 5, 2019 6:25 PM
> <snip>
> > Thank you, this seems to fix the warning, so
> > Tested-by: Geert Uytterhoeven <[email protected]>
>
> Thank you for the testing!
>
> > However, the other imbalance (phy-ee080200.usb-phy.6 enabling its
> > regulator during each system resume phase, but never touching it
> > otherwise) is still present.
>
> Umm, since I'd like to investigate this,
> would you share your debug print patch?

Attached.

Thanks!

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds


Attachments:
phy-rcar-gen3-usb2-debug.patch (1.05 kB)

2019-06-07 09:59:29

by Yoshihiro Shimoda

[permalink] [raw]
Subject: RE: [PATCH] phy: renesas: rcar-gen3-usb2: fix imbalance powered flag

Hi Geert-san,

> From: Geert Uytterhoeven, Sent: Wednesday, June 5, 2019 10:08 PM
<snip>
> > > From: Geert Uytterhoeven, Sent: Wednesday, June 5, 2019 6:25 PM
> > <snip>
> > > Thank you, this seems to fix the warning, so
> > > Tested-by: Geert Uytterhoeven <[email protected]>
> >
> > Thank you for the testing!
> >
> > > However, the other imbalance (phy-ee080200.usb-phy.6 enabling its
> > > regulator during each system resume phase, but never touching it
> > > otherwise) is still present.
> >
> > Umm, since I'd like to investigate this,
> > would you share your debug print patch?
>
> Attached.

Thank you for your patch. Finally, I found the other imbalance is caused by
rcar_gen3_phy_usb2_power_on(). rcar_gen3_phy_usb2_power_on() should have
own mutex lock to avoid a race condition between calls rcar_gen3_are_all_rphys_power_off()
and assign the ->powered. So, I'll submit v2 patch later.

Notes:
- Even if the driver has such an own mutex, sometimes the different phy number
enables the regulator. But the imbalance enabling the regulator issue disappears.

- One of the phy channel has 4 phy devices. And the phy channel has a regulator
so that enabling the regulator by one of the phy devices is enough.

--- Example (v5.2-rc3 on R-Car H3) ---
# ls /sys/class/phy/
phy-e65ee000.usb-phy.12 phy-ee0a0200.usb-phy.0 phy-ee0c0200.usb-phy.5
phy-ee080200.usb-phy.10 phy-ee0a0200.usb-phy.1 phy-ee0c0200.usb-phy.6
phy-ee080200.usb-phy.11 phy-ee0a0200.usb-phy.2 phy-ee0c0200.usb-phy.7
phy-ee080200.usb-phy.8 phy-ee0a0200.usb-phy.3
phy-ee080200.usb-phy.9 phy-ee0c0200.usb-phy.4

- phy-ee080200.usb-phy is one of the phy channel.
-- And the "phy-ee080200.usb-phy" phy channel has a regulator.
-- Other phy channels (phy-ee0[ac]0200.usb-phy) don't have their regulators.

- phy-ee080200.usb-phy.{8,9,10,11} are phy devices.
----

Best regards,
Yoshihiro Shimoda