Re: [linux-pm] ehci_hcd related S3 lockup on ASUS laptops, again

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

 



On Mon, Apr 23, 2012 at 04:11:48PM -0400, Alan Stern wrote:

   [snip]

> Anyway, this patch is reasonably close to being a final version, and it
> should work on both machines.  You should be able to suspend and resume
> with no problems, without using the script.
> 
> Alan Stern
> 

What happend to this patch? I saw it posted on bugzilla for a while
then I lost track of it.

> 
> Index: usb-3.4/include/linux/usb/hcd.h
> ===================================================================
> --- usb-3.4.orig/include/linux/usb/hcd.h
> +++ usb-3.4/include/linux/usb/hcd.h
> @@ -126,6 +126,8 @@ struct usb_hcd {
>  	unsigned		wireless:1;	/* Wireless USB HCD */
>  	unsigned		authorized_default:1;
>  	unsigned		has_tt:1;	/* Integrated TT in root hub */
> +	unsigned		broken_pci_sleep:1;	/* Don't put the
> +			controller in PCI-D3 for system sleep */
>  
>  	unsigned int		irq;		/* irq allocated */
>  	void __iomem		*regs;		/* device memory/io */
> Index: usb-3.4/drivers/usb/core/hcd-pci.c
> ===================================================================
> --- usb-3.4.orig/drivers/usb/core/hcd-pci.c
> +++ usb-3.4/drivers/usb/core/hcd-pci.c
> @@ -493,6 +493,15 @@ static int hcd_pci_suspend_noirq(struct
>  
>  	pci_save_state(pci_dev);
>  
> +	/*
> +	 * Some systems crash if an EHCI controller is in D3 during
> +	 * a sleep transition.  We have to leave such controllers in D0.
> +	 */
> +	if (hcd->broken_pci_sleep) {
> +		dev_dbg(dev, "Staying in PCI D0\n");
> +		return retval;
> +	}
> +
>  	/* If the root hub is dead rather than suspended, disallow remote
>  	 * wakeup.  usb_hc_died() should ensure that both hosts are marked as
>  	 * dying, so we only need to check the primary roothub.
> Index: usb-3.4/drivers/usb/host/ehci-pci.c
> ===================================================================
> --- usb-3.4.orig/drivers/usb/host/ehci-pci.c
> +++ usb-3.4/drivers/usb/host/ehci-pci.c
> @@ -144,6 +144,13 @@ static int ehci_pci_setup(struct usb_hcd
>  			hcd->has_tt = 1;
>  			tdi_reset(ehci);
>  		}
> +		if (pdev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK) {
> +			/* EHCI #1 or #2 on 6 Series/C200 Series chipset */
> +			if (pdev->device == 0x1c26 || pdev->device == 0x1c2d) {
> +				ehci_info(ehci, "broken D3 during system sleep on ASUS\n");
> +				hcd->broken_pci_sleep = 1;
> +			}
> +		}
>  		break;
>  	case PCI_VENDOR_ID_TDI:
>  		if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) {
> 
--
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