aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0034-xhci-don-t-re-enable-IE-constantly.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0034-xhci-don-t-re-enable-IE-constantly.patch')
-rw-r--r--recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0034-xhci-don-t-re-enable-IE-constantly.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0034-xhci-don-t-re-enable-IE-constantly.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0034-xhci-don-t-re-enable-IE-constantly.patch
new file mode 100644
index 00000000..590fa5ba
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0034-xhci-don-t-re-enable-IE-constantly.patch
@@ -0,0 +1,58 @@
+From 4baf16baa7693c3ef1083347dfc02d92050ee34b Mon Sep 17 00:00:00 2001
+From: Felipe Balbi <balbi@ti.com>
+Date: Thu, 15 Mar 2012 16:37:08 +0200
+Subject: [PATCH 34/68] xhci: don't re-enable IE constantly
+
+commit 4e833c0b87a30798e67f06120cecebef6ee9644c upstream.
+
+While we're at that, define IMAN bitfield to aid readability.
+
+The interrupt enable bit should be set once on driver init, and we
+shouldn't need to continually re-enable it. Commit c21599a3 introduced
+a read of the irq_pending register, and that allows us to preserve the
+state of the IE bit. Before that commit, we were blindly writing 0x3 to
+the register.
+
+This patch should be backported to kernels as old as 2.6.36, or ones
+that contain the commit c21599a36165dbc78b380846b254017a548b9de5 "USB:
+xhci: Reduce reads and writes of interrupter registers".
+
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/host/xhci-ring.c | 2 +-
+ drivers/usb/host/xhci.h | 4 ++++
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
+index ae92dc4..43b3447 100644
+--- a/drivers/usb/host/xhci-ring.c
++++ b/drivers/usb/host/xhci-ring.c
+@@ -2343,7 +2343,7 @@ hw_died:
+ u32 irq_pending;
+ /* Acknowledge the PCI interrupt */
+ irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending);
+- irq_pending |= 0x3;
++ irq_pending |= IMAN_IP;
+ xhci_writel(xhci, irq_pending, &xhci->ir_set->irq_pending);
+ }
+
+diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
+index 09eda3a..4850c4d 100644
+--- a/drivers/usb/host/xhci.h
++++ b/drivers/usb/host/xhci.h
+@@ -205,6 +205,10 @@ struct xhci_op_regs {
+ #define CMD_PM_INDEX (1 << 11)
+ /* bits 12:31 are reserved (and should be preserved on writes). */
+
++/* IMAN - Interrupt Management Register */
++#define IMAN_IP (1 << 1)
++#define IMAN_IE (1 << 0)
++
+ /* USBSTS - USB status - status bitmasks */
+ /* HC not running - set to 1 when run/stop bit is cleared. */
+ #define STS_HALT XHCI_STS_HALT
+--
+1.7.10
+