]> git.itanic.dy.fi Git - linux-stable/commitdiff
xhci: Clean up ERST_PTR_MASK inversion
authorLukas Wunner <lukas@wunner.de>
Thu, 19 Oct 2023 10:29:14 +0000 (13:29 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 21 Oct 2023 10:38:53 +0000 (12:38 +0200)
Mathias notes that the ERST_PTR_MASK macro is named as if it's masking
the Event Ring Dequeue Pointer in the ERDP register, but in actuality
it's masking the inverse.

Invert the macro's value for clarity.

Migrate it to the modern GENMASK_ULL() syntax to avoid u64 casts.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20231019102924.2797346-10-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-mem.c
drivers/usb/host/xhci-ring.c
drivers/usb/host/xhci.c
drivers/usb/host/xhci.h

index d4123e6f2549c59deeee8038798b800db208162b..b133817ad180c0a2fb89f0d740fd2b61ff6e9fda 100644 (file)
@@ -1952,8 +1952,7 @@ static void xhci_set_hc_event_deq(struct xhci_hcd *xhci, struct xhci_interrupter
         */
        xhci_dbg_trace(xhci, trace_xhci_dbg_init,
                       "// Write event ring dequeue pointer, preserving EHB bit");
-       xhci_write_64(xhci, ((u64) deq & (u64) ~ERST_PTR_MASK),
-                       &ir->ir_set->erst_dequeue);
+       xhci_write_64(xhci, deq & ERST_PTR_MASK, &ir->ir_set->erst_dequeue);
 }
 
 static void xhci_add_in_port(struct xhci_hcd *xhci, unsigned int num_ports,
index 173c2068eb6474de8ad089e2c4487d5cd5104bc1..17404b14d1bf0197aa35cfc12427c5523c8bc25a 100644 (file)
@@ -3013,13 +3013,12 @@ static void xhci_update_erst_dequeue(struct xhci_hcd *xhci,
                 * Per 4.9.4, Software writes to the ERDP register shall
                 * always advance the Event Ring Dequeue Pointer value.
                 */
-               if ((temp_64 & (u64) ~ERST_PTR_MASK) ==
-                               ((u64) deq & (u64) ~ERST_PTR_MASK))
+               if ((temp_64 & ERST_PTR_MASK) == (deq & ERST_PTR_MASK))
                        return;
 
                /* Update HC event ring dequeue pointer */
                temp_64 = ir->event_ring->deq_seg->num & ERST_DESI_MASK;
-               temp_64 |= ((u64) deq & (u64) ~ERST_PTR_MASK);
+               temp_64 |= deq & ERST_PTR_MASK;
        }
 
        /* Clear the event handler busy flag (RW1C) */
index e1b1b64a07232996d7e91b5fab1ba06fb48304b6..68920cb960443a0da6967aa084fe5fcd563d1d03 100644 (file)
@@ -520,7 +520,7 @@ int xhci_run(struct usb_hcd *hcd)
        xhci_dbg_trace(xhci, trace_xhci_dbg_init, "xhci_run");
 
        temp_64 = xhci_read_64(xhci, &ir->ir_set->erst_dequeue);
-       temp_64 &= ~ERST_PTR_MASK;
+       temp_64 &= ERST_PTR_MASK;
        xhci_dbg_trace(xhci, trace_xhci_dbg_init,
                        "ERST deq = 64'h%0lx", (long unsigned int) temp_64);
 
index 41820fd97c00b15b1a89fc9daa92779b6b4684e0..f97896740c3fd28ad669d2fdff306a7bacdecb3f 100644 (file)
@@ -525,7 +525,7 @@ struct xhci_intr_reg {
  * a work queue (or delayed service routine)?
  */
 #define ERST_EHB               (1 << 3)
-#define ERST_PTR_MASK          (0xf)
+#define ERST_PTR_MASK          (GENMASK_ULL(63, 4))
 
 /**
  * struct xhci_run_regs