if (last_ep < 31)
                last_ep_ctx = last_ep + 1;
        for (i = 0; i < last_ep_ctx; ++i) {
+               unsigned int epaddr = xhci_get_endpoint_address(i);
                struct xhci_ep_ctx *ep_ctx = xhci_get_ep_ctx(xhci, ctx, i);
                dma_addr_t dma = ctx->dma +
                        ((unsigned long)ep_ctx - (unsigned long)ctx->bytes);
 
-               xhci_dbg(xhci, "Endpoint %02d Context:\n", i);
+               xhci_dbg(xhci, "%s Endpoint %02d Context (ep_index %02d):\n",
+                               usb_endpoint_out(epaddr) ? "OUT" : "IN",
+                               epaddr & USB_ENDPOINT_NUMBER_MASK, i);
                xhci_dbg(xhci, "@%p (virt) @%08llx (dma) %#08x - ep_info\n",
                                &ep_ctx->ep_info,
                                (unsigned long long)dma, ep_ctx->ep_info);
 
        return index;
 }
 
+/* The reverse operation to xhci_get_endpoint_index. Calculate the USB endpoint
+ * address from the XHCI endpoint index.
+ */
+unsigned int xhci_get_endpoint_address(unsigned int ep_index)
+{
+       unsigned int number = DIV_ROUND_UP(ep_index, 2);
+       unsigned int direction = ep_index % 2 ? USB_DIR_OUT : USB_DIR_IN;
+       return direction | number;
+}
+
 /* Find the flag for this endpoint (for use in the control context).  Use the
  * endpoint index to create a bitmask.  The slot context is bit 0, endpoint 0 is
  * bit 1, etc.
 
 void xhci_copy_ep0_dequeue_into_input_ctx(struct xhci_hcd *xhci,
                struct usb_device *udev);
 unsigned int xhci_get_endpoint_index(struct usb_endpoint_descriptor *desc);
+unsigned int xhci_get_endpoint_address(unsigned int ep_index);
 unsigned int xhci_get_endpoint_flag(struct usb_endpoint_descriptor *desc);
 unsigned int xhci_get_endpoint_flag_from_index(unsigned int ep_index);
 unsigned int xhci_last_valid_endpoint(u32 added_ctxs);