From 3ca35cae354305003bcc5d14549a247247726e61 Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Thu, 14 Jun 2012 13:27:39 +0200 Subject: libpayload: Add dummy queue heads to EHCI interrupt frame list This introduces a dummy queue head in the interrupt frame list of the EHCI host controller. It's a workaround for broken controllers which follow pointers from this list even if the terminate bit is set. Fortunately, they do honor the bit in queue heads and having an empty QH in the list doesn't violate the standard. The linux kernel has a similar workaround for AMD SB700, SB800, and Hudson-2/3 platforms. We observed this bug with an AMD SB600. Change-Id: Ibbb66dea5fddc89c7995a24d746bedf6bfa887be Signed-off-by: Nico Huber Reviewed-on: http://review.coreboot.org/1124 Reviewed-by: Stefan Reinauer Tested-by: build bot (Jenkins) --- payloads/libpayload/drivers/usb/ehci_private.h | 1 + 1 file changed, 1 insertion(+) (limited to 'payloads/libpayload/drivers/usb/ehci_private.h') diff --git a/payloads/libpayload/drivers/usb/ehci_private.h b/payloads/libpayload/drivers/usb/ehci_private.h index a97336b492..3276e23edc 100644 --- a/payloads/libpayload/drivers/usb/ehci_private.h +++ b/payloads/libpayload/drivers/usb/ehci_private.h @@ -132,6 +132,7 @@ typedef volatile struct { typedef struct ehci { hc_cap_t *capabilities; hc_op_t *operation; + ehci_qh_t *dummy_qh; } ehci_t; #define PS_TERMINATE 1 -- cgit v1.2.3