Merge tag 'for-usb-next-2013-08-27' of git://git.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-next
Sarah writes: xhci: Bug fixes for 3.12. Hi Greg, Here's three low-priority bug fixes that should be queued for 3.12. They disable runtime PM for hosts that need the XHCI_RESET_ON_RESUME quirk, fix USB 2.0 Link PM on hosts that don't have BESL support, and prevent a bunch of log spam. Please pull into usb-next for 3.12. Sarah Sharp
This commit is contained in:
@@ -71,7 +71,7 @@
|
||||
|
||||
/* USB 2.0 xHCI 1.0 hardware LMP capability - section 7.2.2.1.3.2 */
|
||||
#define XHCI_HLC (1 << 19)
|
||||
#define XHCI_BLC (1 << 19)
|
||||
#define XHCI_BLC (1 << 20)
|
||||
|
||||
/* command register values to disable interrupts and halt the HC */
|
||||
/* start/stop HC execution - do not write unless HC is halted*/
|
||||
|
||||
@@ -3087,14 +3087,10 @@ int xhci_queue_intr_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
|
||||
* to set the polling interval (once the API is added).
|
||||
*/
|
||||
if (xhci_interval != ep_interval) {
|
||||
if (printk_ratelimit())
|
||||
dev_dbg(&urb->dev->dev, "Driver uses different interval"
|
||||
" (%d microframe%s) than xHCI "
|
||||
"(%d microframe%s)\n",
|
||||
ep_interval,
|
||||
ep_interval == 1 ? "" : "s",
|
||||
xhci_interval,
|
||||
xhci_interval == 1 ? "" : "s");
|
||||
dev_dbg_ratelimited(&urb->dev->dev,
|
||||
"Driver uses different interval (%d microframe%s) than xHCI (%d microframe%s)\n",
|
||||
ep_interval, ep_interval == 1 ? "" : "s",
|
||||
xhci_interval, xhci_interval == 1 ? "" : "s");
|
||||
urb->interval = xhci_interval;
|
||||
/* Convert back to frames for LS/FS devices */
|
||||
if (urb->dev->speed == USB_SPEED_LOW ||
|
||||
@@ -3876,14 +3872,10 @@ int xhci_queue_isoc_tx_prepare(struct xhci_hcd *xhci, gfp_t mem_flags,
|
||||
* to set the polling interval (once the API is added).
|
||||
*/
|
||||
if (xhci_interval != ep_interval) {
|
||||
if (printk_ratelimit())
|
||||
dev_dbg(&urb->dev->dev, "Driver uses different interval"
|
||||
" (%d microframe%s) than xHCI "
|
||||
"(%d microframe%s)\n",
|
||||
ep_interval,
|
||||
ep_interval == 1 ? "" : "s",
|
||||
xhci_interval,
|
||||
xhci_interval == 1 ? "" : "s");
|
||||
dev_dbg_ratelimited(&urb->dev->dev,
|
||||
"Driver uses different interval (%d microframe%s) than xHCI (%d microframe%s)\n",
|
||||
ep_interval, ep_interval == 1 ? "" : "s",
|
||||
xhci_interval, xhci_interval == 1 ? "" : "s");
|
||||
urb->interval = xhci_interval;
|
||||
/* Convert back to frames for LS/FS devices */
|
||||
if (urb->dev->speed == USB_SPEED_LOW ||
|
||||
|
||||
@@ -3557,10 +3557,21 @@ void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)
|
||||
{
|
||||
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||
struct xhci_virt_device *virt_dev;
|
||||
struct device *dev = hcd->self.controller;
|
||||
unsigned long flags;
|
||||
u32 state;
|
||||
int i, ret;
|
||||
|
||||
#ifndef CONFIG_USB_DEFAULT_PERSIST
|
||||
/*
|
||||
* We called pm_runtime_get_noresume when the device was attached.
|
||||
* Decrement the counter here to allow controller to runtime suspend
|
||||
* if no devices remain.
|
||||
*/
|
||||
if (xhci->quirks & XHCI_RESET_ON_RESUME)
|
||||
pm_runtime_put_noidle(dev);
|
||||
#endif
|
||||
|
||||
ret = xhci_check_args(hcd, udev, NULL, 0, true, __func__);
|
||||
/* If the host is halted due to driver unload, we still need to free the
|
||||
* device.
|
||||
@@ -3634,6 +3645,7 @@ static int xhci_reserve_host_control_ep_resources(struct xhci_hcd *xhci)
|
||||
int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)
|
||||
{
|
||||
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||
struct device *dev = hcd->self.controller;
|
||||
unsigned long flags;
|
||||
int timeleft;
|
||||
int ret;
|
||||
@@ -3686,6 +3698,16 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)
|
||||
goto disable_slot;
|
||||
}
|
||||
udev->slot_id = xhci->slot_id;
|
||||
|
||||
#ifndef CONFIG_USB_DEFAULT_PERSIST
|
||||
/*
|
||||
* If resetting upon resume, we can't put the controller into runtime
|
||||
* suspend if there is a device attached.
|
||||
*/
|
||||
if (xhci->quirks & XHCI_RESET_ON_RESUME)
|
||||
pm_runtime_get_noresume(dev);
|
||||
#endif
|
||||
|
||||
/* Is this a LS or FS device under a HS hub? */
|
||||
/* Hub or peripherial? */
|
||||
return 1;
|
||||
|
||||
Reference in New Issue
Block a user