From: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com> To: Stefan Wahren <stefan.wahren@i2se.com>, Minas Harutyunyan <Minas.Harutyunyan@synopsys.com> Cc: Grigor Tovmasyan <Grigor.Tovmasyan@synopsys.com>, Doug Anderson <dianders@chromium.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, "linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org> Subject: Re: [PATCH RFC] usb: dwc2: power off during shutdown Date: Wed, 5 Sep 2018 08:37:03 +0000 [thread overview] Message-ID: <410670D7E743164D87FA6160E7907A56013A761B2B@am04wembxa.internal.synopsys.com> (raw) In-Reply-To: 1535795683-3788-1-git-send-email-stefan.wahren@i2se.com Hi Stefan, On 9/1/2018 1:55 PM, Stefan Wahren wrote: > Currently USB consumes a lot of power after shutting down a Raspberry Pi 3 > (example setup with Ethernet and a keyboard connected). So power off > USB on shutdown. > > Measured on Raspberry Pi 3B with 4.19rc1/multi_v7_defconfig (HDMI, Ethernet > and a keyboard connected) > > Before patch: 2.450 W > After patch: 2.090 W > Could you please elaborate. Power measurements done after shutdown? Why your setup continue consume power after shutdown? Maybe its sleep/hibernation mode? dwc2 core in your platform which type of power optimization supports: partial power down, hibernation or extended hibernation? Please provide me GHWCFG4 register value of your core. Thanks, Minas > Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> > --- > drivers/usb/dwc2/platform.c | 31 +++++++++++-------------------- > 1 file changed, 11 insertions(+), 20 deletions(-) > > diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c > index 9a53a58..eeba40a 100644 > --- a/drivers/usb/dwc2/platform.c > +++ b/drivers/usb/dwc2/platform.c > @@ -304,17 +304,11 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) > } > > /** > - * dwc2_driver_remove() - Called when the DWC_otg core is unregistered with the > - * DWC_otg driver > + * dwc2_driver_shutdown() - Called on device shutdown > * > * @dev: Platform device > - * > - * This routine is called, for example, when the rmmod command is executed. The > - * device may or may not be electrically present. If it is present, the driver > - * stops device processing. Any resources used on behalf of this device are > - * freed. > */ > -static int dwc2_driver_remove(struct platform_device *dev) > +static void dwc2_driver_shutdown(struct platform_device *dev) > { > struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); > > @@ -329,27 +323,24 @@ static int dwc2_driver_remove(struct platform_device *dev) > > reset_control_assert(hsotg->reset); > reset_control_assert(hsotg->reset_ecc); > - > - return 0; > } > > /** > - * dwc2_driver_shutdown() - Called on device shutdown > + * dwc2_driver_remove() - Called when the DWC_otg core is unregistered with the > + * DWC_otg driver > * > * @dev: Platform device > * > - * In specific conditions (involving usb hubs) dwc2 devices can create a > - * lot of interrupts, even to the point of overwhelming devices running > - * at low frequencies. Some devices need to do special clock handling > - * at shutdown-time which may bring the system clock below the threshold > - * of being able to handle the dwc2 interrupts. Disabling dwc2-irqs > - * prevents reboots/poweroffs from getting stuck in such cases. > + * This routine is called, for example, when the rmmod command is executed. The > + * device may or may not be electrically present. If it is present, the driver > + * stops device processing. Any resources used on behalf of this device are > + * freed. > */ > -static void dwc2_driver_shutdown(struct platform_device *dev) > +static int dwc2_driver_remove(struct platform_device *dev) > { > - struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); > + dwc2_driver_shutdown(dev); > > - disable_irq(hsotg->irq); > + return 0; > } > > /** >
WARNING: multiple messages have this Message-ID (diff)
From: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com> To: Stefan Wahren <stefan.wahren@i2se.com>, Minas Harutyunyan <Minas.Harutyunyan@synopsys.com> Cc: Grigor Tovmasyan <Grigor.Tovmasyan@synopsys.com>, Doug Anderson <dianders@chromium.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, "linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org> Subject: [RFC] usb: dwc2: power off during shutdown Date: Wed, 5 Sep 2018 08:37:03 +0000 [thread overview] Message-ID: <410670D7E743164D87FA6160E7907A56013A761B2B@am04wembxa.internal.synopsys.com> (raw) Hi Stefan, On 9/1/2018 1:55 PM, Stefan Wahren wrote: > Currently USB consumes a lot of power after shutting down a Raspberry Pi 3 > (example setup with Ethernet and a keyboard connected). So power off > USB on shutdown. > > Measured on Raspberry Pi 3B with 4.19rc1/multi_v7_defconfig (HDMI, Ethernet > and a keyboard connected) > > Before patch: 2.450 W > After patch: 2.090 W > Could you please elaborate. Power measurements done after shutdown? Why your setup continue consume power after shutdown? Maybe its sleep/hibernation mode? dwc2 core in your platform which type of power optimization supports: partial power down, hibernation or extended hibernation? Please provide me GHWCFG4 register value of your core. Thanks, Minas > Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> > --- > drivers/usb/dwc2/platform.c | 31 +++++++++++-------------------- > 1 file changed, 11 insertions(+), 20 deletions(-) > > diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c > index 9a53a58..eeba40a 100644 > --- a/drivers/usb/dwc2/platform.c > +++ b/drivers/usb/dwc2/platform.c > @@ -304,17 +304,11 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) > } > > /** > - * dwc2_driver_remove() - Called when the DWC_otg core is unregistered with the > - * DWC_otg driver > + * dwc2_driver_shutdown() - Called on device shutdown > * > * @dev: Platform device > - * > - * This routine is called, for example, when the rmmod command is executed. The > - * device may or may not be electrically present. If it is present, the driver > - * stops device processing. Any resources used on behalf of this device are > - * freed. > */ > -static int dwc2_driver_remove(struct platform_device *dev) > +static void dwc2_driver_shutdown(struct platform_device *dev) > { > struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); > > @@ -329,27 +323,24 @@ static int dwc2_driver_remove(struct platform_device *dev) > > reset_control_assert(hsotg->reset); > reset_control_assert(hsotg->reset_ecc); > - > - return 0; > } > > /** > - * dwc2_driver_shutdown() - Called on device shutdown > + * dwc2_driver_remove() - Called when the DWC_otg core is unregistered with the > + * DWC_otg driver > * > * @dev: Platform device > * > - * In specific conditions (involving usb hubs) dwc2 devices can create a > - * lot of interrupts, even to the point of overwhelming devices running > - * at low frequencies. Some devices need to do special clock handling > - * at shutdown-time which may bring the system clock below the threshold > - * of being able to handle the dwc2 interrupts. Disabling dwc2-irqs > - * prevents reboots/poweroffs from getting stuck in such cases. > + * This routine is called, for example, when the rmmod command is executed. The > + * device may or may not be electrically present. If it is present, the driver > + * stops device processing. Any resources used on behalf of this device are > + * freed. > */ > -static void dwc2_driver_shutdown(struct platform_device *dev) > +static int dwc2_driver_remove(struct platform_device *dev) > { > - struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); > + dwc2_driver_shutdown(dev); > > - disable_irq(hsotg->irq); > + return 0; > } > > /** >
next prev parent reply other threads:[~2018-09-05 8:37 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-09-01 9:54 [PATCH RFC] usb: dwc2: power off during shutdown Stefan Wahren 2018-09-01 9:54 ` [RFC] " Stefan Wahren 2018-09-05 8:37 ` Minas Harutyunyan [this message] 2018-09-05 8:37 ` Minas Harutyunyan 2018-09-05 18:42 ` [PATCH RFC] " Stefan Wahren 2018-09-05 18:42 ` [RFC] " Stefan Wahren 2018-09-06 6:33 ` [PATCH RFC] " Minas Harutyunyan 2018-09-06 6:33 ` [RFC] " Minas Harutyunyan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=410670D7E743164D87FA6160E7907A56013A761B2B@am04wembxa.internal.synopsys.com \ --to=minas.harutyunyan@synopsys.com \ --cc=Grigor.Tovmasyan@synopsys.com \ --cc=dianders@chromium.org \ --cc=gregkh@linuxfoundation.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-usb@vger.kernel.org \ --cc=stefan.wahren@i2se.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.