summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorEdward Shao <laface.tw@gmail.com>2010-02-10 19:37:30 (GMT)
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-02 22:55:02 (GMT)
commit05197921ff3dad52d99fd1647974c57d9c28d40e (patch)
tree733684b9d0acbcd43f6f3e95f3bbc2ca4c48e960 /drivers/usb
parentcceffe9348f93188d7811bda95924d4bd3040d0f (diff)
downloadlinux-fsl-qoriq-05197921ff3dad52d99fd1647974c57d9c28d40e.tar.xz
USB: xhci: Fix finding extended capabilities registers
According "5.3.6 Capability Parameters (HCCPARAMS)" of xHCI rev0.96 spec, value of xECP register indicates a relative offset, in 32-bit words, from Base to the beginning of the first extended capability. The wrong calculation will cause BIOS handoff fail (not handoff from BIOS) in some platform with BIOS USB legacy sup support. Signed-off-by: Edward Shao <laface.tw@gmail.com> Cc: Sarah Sharp <sarah.a.sharp@linux.intel.com> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/host/xhci-ext-caps.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/usb/host/xhci-ext-caps.h b/drivers/usb/host/xhci-ext-caps.h
index ecc131c..78c4eda 100644
--- a/drivers/usb/host/xhci-ext-caps.h
+++ b/drivers/usb/host/xhci-ext-caps.h
@@ -101,12 +101,15 @@ static inline int xhci_find_next_cap_offset(void __iomem *base, int ext_offset)
next = readl(base + ext_offset);
- if (ext_offset == XHCI_HCC_PARAMS_OFFSET)
+ if (ext_offset == XHCI_HCC_PARAMS_OFFSET) {
/* Find the first extended capability */
next = XHCI_HCC_EXT_CAPS(next);
- else
+ ext_offset = 0;
+ } else {
/* Find the next extended capability */
next = XHCI_EXT_CAPS_NEXT(next);
+ }
+
if (!next)
return 0;
/*