|
@@ -311,68 +311,6 @@ void xhci_debug_trb(struct xhci_hcd *xhci, union xhci_trb *trb)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * Debug a segment with an xHCI ring.
|
|
|
- *
|
|
|
- * @return The Link TRB of the segment, or NULL if there is no Link TRB
|
|
|
- * (which is a bug, since all segments must have a Link TRB).
|
|
|
- *
|
|
|
- * Prints out all TRBs in the segment, even those after the Link TRB.
|
|
|
- *
|
|
|
- * XXX: should we print out TRBs that the HC owns? As long as we don't
|
|
|
- * write, that should be fine... We shouldn't expect that the memory pointed to
|
|
|
- * by the TRB is valid at all. Do we care about ones the HC owns? Probably,
|
|
|
- * for HC debugging.
|
|
|
- */
|
|
|
-void xhci_debug_segment(struct xhci_hcd *xhci, struct xhci_segment *seg)
|
|
|
-{
|
|
|
- int i;
|
|
|
- u64 addr = seg->dma;
|
|
|
- union xhci_trb *trb = seg->trbs;
|
|
|
-
|
|
|
- for (i = 0; i < TRBS_PER_SEGMENT; i++) {
|
|
|
- trb = &seg->trbs[i];
|
|
|
- xhci_dbg(xhci, "@%016llx %08x %08x %08x %08x\n", addr,
|
|
|
- lower_32_bits(le64_to_cpu(trb->link.segment_ptr)),
|
|
|
- upper_32_bits(le64_to_cpu(trb->link.segment_ptr)),
|
|
|
- le32_to_cpu(trb->link.intr_target),
|
|
|
- le32_to_cpu(trb->link.control));
|
|
|
- addr += sizeof(*trb);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void xhci_dbg_ring_ptrs(struct xhci_hcd *xhci, struct xhci_ring *ring)
|
|
|
-{
|
|
|
- xhci_dbg(xhci, "Ring deq = %p (virt), 0x%llx (dma)\n",
|
|
|
- ring->dequeue,
|
|
|
- (unsigned long long)xhci_trb_virt_to_dma(ring->deq_seg,
|
|
|
- ring->dequeue));
|
|
|
- xhci_dbg(xhci, "Ring enq = %p (virt), 0x%llx (dma)\n",
|
|
|
- ring->enqueue,
|
|
|
- (unsigned long long)xhci_trb_virt_to_dma(ring->enq_seg,
|
|
|
- ring->enqueue));
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * Debugging for an xHCI ring, which is a queue broken into multiple segments.
|
|
|
- *
|
|
|
- * Print out each segment in the ring. Check that the DMA address in
|
|
|
- * each link segment actually matches the segment's stored DMA address.
|
|
|
- * Check that the link end bit is only set at the end of the ring.
|
|
|
- * Check that the dequeue and enqueue pointers point to real data in this ring
|
|
|
- * (not some other ring).
|
|
|
- */
|
|
|
-void xhci_debug_ring(struct xhci_hcd *xhci, struct xhci_ring *ring)
|
|
|
-{
|
|
|
- /* FIXME: Throw an error if any segment doesn't have a Link TRB */
|
|
|
- struct xhci_segment *seg;
|
|
|
- struct xhci_segment *first_seg = ring->first_seg;
|
|
|
- xhci_debug_segment(xhci, first_seg);
|
|
|
-
|
|
|
- for (seg = first_seg->next; seg != first_seg; seg = seg->next)
|
|
|
- xhci_debug_segment(xhci, seg);
|
|
|
-}
|
|
|
-
|
|
|
void xhci_dbg_erst(struct xhci_hcd *xhci, struct xhci_erst *erst)
|
|
|
{
|
|
|
u64 addr = erst->erst_dma_addr;
|