mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 22:52:19 +02:00
usb: xhci: guarantee that IMAN register is flushed
Add read call to guarantee that the write to the IMAN register has been flushed. xHCI specification 1.2, section 5.5.2.1, Note: "Most systems have write buffers that minimize overhead, but this may require a read operation to guarantee that the write has been flushed from the posted buffer." Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://lore.kernel.org/r/20250515135621.335595-17-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9f7f74735a
commit
f5bce30ad2
|
|
@ -3087,6 +3087,9 @@ static void xhci_clear_interrupt_pending(struct xhci_interrupter *ir)
|
|||
irq_pending = readl(&ir->ir_set->irq_pending);
|
||||
irq_pending |= IMAN_IP;
|
||||
writel(irq_pending, &ir->ir_set->irq_pending);
|
||||
|
||||
/* Read operation to guarantee the write has been flushed from posted buffers */
|
||||
readl(&ir->ir_set->irq_pending);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -335,6 +335,8 @@ int xhci_enable_interrupter(struct xhci_interrupter *ir)
|
|||
iman |= IMAN_IE;
|
||||
writel(iman, &ir->ir_set->irq_pending);
|
||||
|
||||
/* Read operation to guarantee the write has been flushed from posted buffers */
|
||||
readl(&ir->ir_set->irq_pending);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -350,6 +352,7 @@ int xhci_disable_interrupter(struct xhci_interrupter *ir)
|
|||
iman &= ~IMAN_IE;
|
||||
writel(iman, &ir->ir_set->irq_pending);
|
||||
|
||||
readl(&ir->ir_set->irq_pending);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user