diff options
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.patch | 58 |
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 + |