All of lore.kernel.org
 help / color / mirror / Atom feed
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;
>   }
>   
>   /**
>

  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: link
Be 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.