Commit 2cf52a8b authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

[PATCH] USB: Set QH bit in UHCI framelist entries

This patch fixes the error in the UHCI driver found by Stuart Hayes.  It
adds the UHCI_PTR_QH bit into the initial entries stored in the hardware
framelist.  It's not entirely clear how the driver ever managed to work
with these bits not set; apparently by coincidence the QH entries
resembled TD entries sufficiently closely to fool the hardware.


On Tue, 10 Aug 2004 Stuart_Hayes@Dell.com wrote:

> Never mind, I figured it out.  It looks like the uhci-hcd driver
> doesn't add a "| UHCI_PTR_QH" to the pointers that it puts
> in the frame list.  This causes the ICH to think that the frame list
> is pointing to a bunch of TDs instead of QHs for purposes of
> checking for TD errors.  I can only assume that the ICH
> is actually treating the frame list entries as QH pointers in spite
> of that bit not being set when it is actually executing the
> schedule, or else I don't think it would work generally.
>
> I guess the high addresses were just making the QH look like an
> invalid TD instead of a valid TD... not sure exactly what the ICH
> is checking for!
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent 5e3d5283
......@@ -2254,7 +2254,8 @@ static int uhci_start(struct usb_hcd *hcd)
irq = 7;
/* Only place we don't use the frame list routines */
uhci->fl->frame[i] = cpu_to_le32(uhci->skelqh[irq]->dma_handle);
uhci->fl->frame[i] = UHCI_PTR_QH |
cpu_to_le32(uhci->skelqh[irq]->dma_handle);
}
/*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment