|
@@ -106,6 +106,9 @@ int xhci_halt(struct xhci_hcd *xhci)
|
|
|
STS_HALT, STS_HALT, XHCI_MAX_HALT_USEC);
|
|
|
if (!ret)
|
|
|
xhci->xhc_state |= XHCI_STATE_HALTED;
|
|
|
+ else
|
|
|
+ xhci_warn(xhci, "Host not halted after %u microseconds.\n",
|
|
|
+ XHCI_MAX_HALT_USEC);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -664,11 +667,11 @@ static void xhci_save_registers(struct xhci_hcd *xhci)
|
|
|
xhci->s3.dev_nt = xhci_readl(xhci, &xhci->op_regs->dev_notification);
|
|
|
xhci->s3.dcbaa_ptr = xhci_read_64(xhci, &xhci->op_regs->dcbaa_ptr);
|
|
|
xhci->s3.config_reg = xhci_readl(xhci, &xhci->op_regs->config_reg);
|
|
|
- xhci->s3.irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending);
|
|
|
- xhci->s3.irq_control = xhci_readl(xhci, &xhci->ir_set->irq_control);
|
|
|
xhci->s3.erst_size = xhci_readl(xhci, &xhci->ir_set->erst_size);
|
|
|
xhci->s3.erst_base = xhci_read_64(xhci, &xhci->ir_set->erst_base);
|
|
|
xhci->s3.erst_dequeue = xhci_read_64(xhci, &xhci->ir_set->erst_dequeue);
|
|
|
+ xhci->s3.irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending);
|
|
|
+ xhci->s3.irq_control = xhci_readl(xhci, &xhci->ir_set->irq_control);
|
|
|
}
|
|
|
|
|
|
static void xhci_restore_registers(struct xhci_hcd *xhci)
|
|
@@ -677,10 +680,11 @@ static void xhci_restore_registers(struct xhci_hcd *xhci)
|
|
|
xhci_writel(xhci, xhci->s3.dev_nt, &xhci->op_regs->dev_notification);
|
|
|
xhci_write_64(xhci, xhci->s3.dcbaa_ptr, &xhci->op_regs->dcbaa_ptr);
|
|
|
xhci_writel(xhci, xhci->s3.config_reg, &xhci->op_regs->config_reg);
|
|
|
- xhci_writel(xhci, xhci->s3.irq_pending, &xhci->ir_set->irq_pending);
|
|
|
- xhci_writel(xhci, xhci->s3.irq_control, &xhci->ir_set->irq_control);
|
|
|
xhci_writel(xhci, xhci->s3.erst_size, &xhci->ir_set->erst_size);
|
|
|
xhci_write_64(xhci, xhci->s3.erst_base, &xhci->ir_set->erst_base);
|
|
|
+ xhci_write_64(xhci, xhci->s3.erst_dequeue, &xhci->ir_set->erst_dequeue);
|
|
|
+ xhci_writel(xhci, xhci->s3.irq_pending, &xhci->ir_set->irq_pending);
|
|
|
+ xhci_writel(xhci, xhci->s3.irq_control, &xhci->ir_set->irq_control);
|
|
|
}
|
|
|
|
|
|
static void xhci_set_cmd_ring_deq(struct xhci_hcd *xhci)
|