diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2007-12-11 16:05:30 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-02-01 17:34:55 -0500 |
commit | 07d29b63ef6b39963ab37818653284d861cf55af (patch) | |
tree | 10460d9d13ad7284b644181af66ecdbf416cc5ba /drivers/usb/host/ehci-q.c | |
parent | 2e2eb83ffd1aeb92bf8793eea892b5bc05a993ea (diff) |
USB: EHCI: add separate IAA watchdog timer
This patch (as1028) was mostly written by David Brownell; I made only
a few changes (extra log info and a small bug fix -- which might
account for why David's version had to be reverted). It adds a new
watchdog timer to the ehci-hcd driver to be used exclusively for
detecting lost or missing IAA notifications.
Previously a shared timer had been used, which may have led to some
problems as reported by Christian Hoffmann.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/ehci-q.c')
-rw-r--r-- | drivers/usb/host/ehci-q.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c index b10f39c047e9..853e5e6396a5 100644 --- a/drivers/usb/host/ehci-q.c +++ b/drivers/usb/host/ehci-q.c | |||
@@ -973,7 +973,7 @@ static void end_unlink_async (struct ehci_hcd *ehci) | |||
973 | struct ehci_qh *qh = ehci->reclaim; | 973 | struct ehci_qh *qh = ehci->reclaim; |
974 | struct ehci_qh *next; | 974 | struct ehci_qh *next; |
975 | 975 | ||
976 | timer_action_done (ehci, TIMER_IAA_WATCHDOG); | 976 | iaa_watchdog_done(ehci); |
977 | 977 | ||
978 | // qh->hw_next = cpu_to_hc32(qh->qh_dma); | 978 | // qh->hw_next = cpu_to_hc32(qh->qh_dma); |
979 | qh->qh_state = QH_STATE_IDLE; | 979 | qh->qh_state = QH_STATE_IDLE; |
@@ -983,7 +983,6 @@ static void end_unlink_async (struct ehci_hcd *ehci) | |||
983 | /* other unlink(s) may be pending (in QH_STATE_UNLINK_WAIT) */ | 983 | /* other unlink(s) may be pending (in QH_STATE_UNLINK_WAIT) */ |
984 | next = qh->reclaim; | 984 | next = qh->reclaim; |
985 | ehci->reclaim = next; | 985 | ehci->reclaim = next; |
986 | ehci->reclaim_ready = 0; | ||
987 | qh->reclaim = NULL; | 986 | qh->reclaim = NULL; |
988 | 987 | ||
989 | qh_completions (ehci, qh); | 988 | qh_completions (ehci, qh); |
@@ -1059,11 +1058,10 @@ static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh) | |||
1059 | return; | 1058 | return; |
1060 | } | 1059 | } |
1061 | 1060 | ||
1062 | ehci->reclaim_ready = 0; | ||
1063 | cmd |= CMD_IAAD; | 1061 | cmd |= CMD_IAAD; |
1064 | ehci_writel(ehci, cmd, &ehci->regs->command); | 1062 | ehci_writel(ehci, cmd, &ehci->regs->command); |
1065 | (void)ehci_readl(ehci, &ehci->regs->command); | 1063 | (void)ehci_readl(ehci, &ehci->regs->command); |
1066 | timer_action (ehci, TIMER_IAA_WATCHDOG); | 1064 | iaa_watchdog_start(ehci); |
1067 | } | 1065 | } |
1068 | 1066 | ||
1069 | /*-------------------------------------------------------------------------*/ | 1067 | /*-------------------------------------------------------------------------*/ |