Message ID | 1559710142-29161-1-git-send-email-yoshihiro.shimoda.uh@renesas.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | phy: renesas: rcar-gen3-usb2: fix imbalance powered flag | expand |
Hi Shimoda-san, On Wed, Jun 5, 2019 at 6:54 AM Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> 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 <geert+renesas@glider.be> > Fixes: 549b6b55b005 ("phy: renesas: rcar-gen3-usb2: enable/disable independent irqs") > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Thank you, this seems to fix the warning, so Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> 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 -- geert@linux-m68k.org 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
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 <geert+renesas@glider.be> 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
Hi Shimoda-san, On Wed, Jun 5, 2019 at 2:12 PM Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> 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 <geert+renesas@glider.be> > > 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
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 <geert+renesas@glider.be> > > > > 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
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;
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 <geert+renesas@glider.be> Fixes: 549b6b55b005 ("phy: renesas: rcar-gen3-usb2: enable/disable independent irqs") Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> --- drivers/phy/renesas/phy-rcar-gen3-usb2.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)