Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e833c0b authored by Felipe Balbi's avatar Felipe Balbi Committed by Sarah Sharp
Browse files

xhci: don't re-enable IE constantly



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 c21599a3 "USB:
xhci: Reduce reads and writes of interrupter registers".

Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: stable@vger.kernel.org
parent a46c46a1
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -2417,7 +2417,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd)
		u32 irq_pending;
		u32 irq_pending;
		/* Acknowledge the PCI interrupt */
		/* Acknowledge the PCI interrupt */
		irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending);
		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);
		xhci_writel(xhci, irq_pending, &xhci->ir_set->irq_pending);
	}
	}


+4 −0
Original line number Original line Diff line number Diff line
@@ -205,6 +205,10 @@ struct xhci_op_regs {
#define CMD_PM_INDEX	(1 << 11)
#define CMD_PM_INDEX	(1 << 11)
/* bits 12:31 are reserved (and should be preserved on writes). */
/* 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 */
/* USBSTS - USB status - status bitmasks */
/* HC not running - set to 1 when run/stop bit is cleared. */
/* HC not running - set to 1 when run/stop bit is cleared. */
#define STS_HALT	XHCI_STS_HALT
#define STS_HALT	XHCI_STS_HALT