All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
To: Oliver Neukum <oliver@neukum.org>
Cc: linux-usb@vger.kernel.org, gregkh@linuxfoundation.org,
	Takashi Iwai <tiwai@suse.de>,
	trenn@suse.de, linux-pci@vger.kernel.org,
	Michal Marek <MMarek@suse.com>,
	Alan Stern <stern@rowland.harvard.edu>,
	Jesse Barnes <jbarnes@virtuousgeek.org>
Subject: Re: [RFC v2] USB: Fix handoff when BIOS disables host PCI device.
Date: Tue, 14 Feb 2012 12:33:11 -0800	[thread overview]
Message-ID: <20120214203311.GA8485@xanatos> (raw)
In-Reply-To: <20120209201354.GA6709@xanatos>

Hi Oliver,

Have you gotten a chance to test this patch on your test system?  I'd
like to get it out, but I want to make sure it fixes your problem.

Thanks,
Sarah Sharp

On Thu, Feb 09, 2012 at 12:13:54PM -0800, Sarah Sharp wrote:
> On some systems with an Intel Panther Point xHCI host controller, the
> BIOS disables the xHCI PCI device during boot, and switches the xHCI
> ports over to EHCI.  This allows the BIOS to access USB devices without
> having xHCI support.
> 
> The downside is that the xHCI BIOS handoff mechanism will fail because
> memory mapped I/O is not enabled for the disabled PCI device.
> Jesse Barnes says this is expected behavior.  The PCI core will enable
> BARs before quirks run, but it will leave it in an undefined state, and
> it may not have memory mapped I/O enabled.
> 
> Make the generic USB quirk handler call pci_enable_device() to re-enable
> MMIO, and call pci_disable_device() once the host-specific BIOS handoff
> is finished.  This will balance the ref counts in the PCI core.  When
> the PCI probe function is called, usb_hcd_pci_probe() will call
> pci_enable_device() again.
> 
> This should be backported to kernels as old as 2.6.32.  That was the
> first kernel with xHCI support, and no one has complained about BIOS
> handoffs failing due to memory mapped I/O being disabled on other hosts
> (EHCI, UHCI, or OHCI).
> 
> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
> Cc: Oliver Neukum <oneukum@suse.de>
> Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
> Cc: stable@kernel.org
> ---
>  drivers/usb/host/pci-quirks.c |   11 +++++++++++
>  1 files changed, 11 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index ac53a66..7732d69 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -872,7 +872,17 @@ static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev)
>  	 */
>  	if (pdev->vendor == 0x184e)	/* vendor Netlogic */
>  		return;
> +	if (pdev->class != PCI_CLASS_SERIAL_USB_UHCI &&
> +			pdev->class != PCI_CLASS_SERIAL_USB_OHCI &&
> +			pdev->class != PCI_CLASS_SERIAL_USB_EHCI &&
> +			pdev->class != PCI_CLASS_SERIAL_USB_XHCI)
> +		return;
>  
> +	if (pci_enable_device(pdev) < 0) {
> +		dev_warn(&pdev->dev, "Can't enable PCI device, "
> +				"BIOS handoff failed.\n");
> +		return;
> +	}
>  	if (pdev->class == PCI_CLASS_SERIAL_USB_UHCI)
>  		quirk_usb_handoff_uhci(pdev);
>  	else if (pdev->class == PCI_CLASS_SERIAL_USB_OHCI)
> @@ -881,5 +891,6 @@ static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev)
>  		quirk_usb_disable_ehci(pdev);
>  	else if (pdev->class == PCI_CLASS_SERIAL_USB_XHCI)
>  		quirk_usb_handoff_xhci(pdev);
> +	pci_disable_device(pdev);
>  }
>  DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff);
> -- 
> 1.7.9
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2012-02-14 20:33 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-03 11:22 [PATCH] USB:xhci: fix port switching on PantherPoint Oliver Neukum
2012-02-03 15:16 ` Alan Stern
2012-02-03 16:21   ` Oliver Neukum
2012-02-03 15:27 ` Sarah Sharp
2012-02-07 23:31   ` [RFC] xhci: Fix BIOS handoff failure on some Intel systems Sarah Sharp
2012-02-08 15:11     ` Oliver Neukum
2012-02-08 21:48       ` Sarah Sharp
2012-02-09  8:56         ` Oliver Neukum
2012-02-09 15:08           ` Sarah Sharp
2012-02-09 20:13             ` [RFC v2] USB: Fix handoff when BIOS disables host PCI device Sarah Sharp
2012-02-14 20:33               ` Sarah Sharp [this message]
2012-02-15  8:48                 ` Oliver Neukum
2012-02-15 16:38                   ` Sarah Sharp
2012-02-16 10:15                     ` Oliver Neukum
2012-02-16 14:33                       ` Sarah Sharp
2012-02-16 14:48                         ` Oliver Neukum
2012-02-16 16:54                           ` Sarah Sharp
2012-02-16 17:50                             ` Oliver Neukum

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=20120214203311.GA8485@xanatos \
    --to=sarah.a.sharp@linux.intel.com \
    --cc=MMarek@suse.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jbarnes@virtuousgeek.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=oliver@neukum.org \
    --cc=stern@rowland.harvard.edu \
    --cc=tiwai@suse.de \
    --cc=trenn@suse.de \
    /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.