[Cbe-oss-dev] [PATCH 1/5 v3] usb: Fix PS3 EHCI suspend

Sergei Shtylyov sshtylyov at mvista.com
Thu Dec 8 22:36:03 EST 2011


Hello.

On 08-12-2011 4:05, Geoff Levand wrote:

> The EHCI USB controller of the Cell Super Companion Chip used in the PS3
> will stop the root hub after all root hub ports are suspended.  When in
> this condition the ehci-hcd handshake routine will return -ETIMEDOUT and
> the USB runtime suspend sequence will fail.  The STS_HLT bit will not be
> set, so inspection of the frame index is used to test for the condition.

> Add a new routine handshake_for_broken_root_hub() that is called after
> an unsuccessful -ETIMEDOUT handshake.  On PS3 handshake_for_broken_root_hub()
> will test for the condition, and if found will return success to allow the
> USB suspend to complete.  For all other platforms
> handshake_for_broken_root_hub() will return -ETIMEDOUT

> Signed-off-by: Geoff Levand<geoff at infradead.org>
> ---

> v2: - Put work-around in handshake_on_error_set_halt().
> v3: - Put fix into handshake_for_broken_root_hub().

>   drivers/usb/host/ehci-hcd.c |   50 +++++++++++++++++++++++++++++++++++++++++++
>   1 files changed, 50 insertions(+), 0 deletions(-)

> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
> index 46dccbf..e0ca995 100644
> --- a/drivers/usb/host/ehci-hcd.c
> +++ b/drivers/usb/host/ehci-hcd.c
[...]
> @@ -230,12 +234,58 @@ static int ehci_halt (struct ehci_hcd *ehci)
>    STS_HALT, STS_HALT, 16 * 125);
> }
>
> +#if defined(CONFIG_USB_SUSPEND)&&  defined(CONFIG_PPC_PS3)
> +
> +/*
> + * The EHCI controller of the Cell Super Companion Chip used in the
> + * PS3 will stop the root hub after all root hub ports are suspended.
> + * When in this condition handshake will return -ETIMEDOUT.  The
> + * STS_HLT bit will not be set, so inspection of the frame index is
> + * used here to test for the condition.  If the condition is found
> + * return success to allow the USB suspend to complete.
> + */
> +
> +static int handshake_for_broken_root_hub(struct ehci_hcd *ehci,
> + void __iomem *ptr, u32 mask, u32 done,
> + int usec)

    The patch is apparently whitespace-damaged.

WBR, Sergei


More information about the cbe-oss-dev mailing list