Merge remote-tracking branch 'stable/linux-4.19.y' into rpi-4.19.y
[platform/kernel/linux-rpi.git] / drivers / usb / host / xhci-mem.c
index 82ce6d8..be1f9dd 100644 (file)
@@ -2495,9 +2495,11 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
         * Event ring setup: Allocate a normal ring, but also setup
         * the event ring segment table (ERST).  Section 4.9.3.
         */
+       val2 = 1 << HCS_ERST_MAX(xhci->hcs_params2);
+       val2 = min_t(unsigned int, ERST_MAX_SEGS, val2);
        xhci_dbg_trace(xhci, trace_xhci_dbg_init, "// Allocating event ring");
-       xhci->event_ring = xhci_ring_alloc(xhci, ERST_NUM_SEGS, 1, TYPE_EVENT,
-                                       0, flags);
+       xhci->event_ring = xhci_ring_alloc(xhci, val2, 1, TYPE_EVENT,
+                                          0, flags);
        if (!xhci->event_ring)
                goto fail;
        if (xhci_check_trb_in_td_math(xhci) < 0)
@@ -2510,7 +2512,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
        /* set ERST count with the number of entries in the segment table */
        val = readl(&xhci->ir_set->erst_size);
        val &= ERST_SIZE_MASK;
-       val |= ERST_NUM_SEGS;
+       val |= val2;
        xhci_dbg_trace(xhci, trace_xhci_dbg_init,
                        "// Write ERST size = %i to ir_set 0 (some bits preserved)",
                        val);