Re: [PATCH] Clears the Warm Reset Change and Port Reset Change bit in PORTSC.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 05, 2010 at 05:30:05PM -0700, John Youn wrote:
> These bits will be set after we do a HC Reset and need to be cleared.
> (XHCI 14.19.1.2.3).

How about doing this in xhci_reset()?  Or make a function in xhci-hub.c that
xhci_reset() can call?

Out of curiosity, why did your HC get reset?  I've actually never seen
the USB core reset the host controller, and I suspect the xHCI event
ring handler isn't properly letting the core know when something
catastrophic has happened (like getting events that don't match with
where the enqueue pointer is).

Sarah Sharp

> Signed-off-by: John Youn <johnyoun@xxxxxxxxxxxx>
> 
> ---
>  drivers/usb/host/xhci-hub.c |   17 +++++++++++++++++
>  1 files changed, 17 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
> index eac5b53..c75065d 100644
> --- a/drivers/usb/host/xhci-hub.c
> +++ b/drivers/usb/host/xhci-hub.c
> @@ -272,6 +272,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
>  {
>  	unsigned long flags;
>  	u32 temp, status;
> +	u32 clear;
>  	int i, retval;
>  	struct xhci_hcd	*xhci = hcd_to_xhci(hcd);
>  	int ports;
> @@ -302,6 +303,22 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
>  				buf[1] |= 1 << (i - 7);
>  			status = 1;
>  		}
> +		/* FIXME: These are not supported yet in usbcore
> +		 * however they need to be cleared somewhere because
> +		 * they will be set when we do a HC Reset
> +		 * (XHCI 14.19.1.2.3). */
> +		if (temp & (PORT_WRC | PORT_RC)) {
> +			clear = xhci_port_state_to_neutral(temp);
> +			if (temp & PORT_WRC) {
> +				clear |= PORT_WRC;
> +				xhci_dbg(xhci, "Clearing PORT_WRC\n");
> +			}
> +			if (temp & PORT_RC) {
> +				clear |= PORT_RC;
> +				xhci_dbg(xhci, "Clearing PORT_RC\n");
> +			}
> +			xhci_writel(xhci, clear, addr);
> +		}
>  	}
>  	spin_unlock_irqrestore(&xhci->lock, flags);
>  	return status ? retval : 0;
> -- 
> 1.6.2.5
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux