2013-08-25, 14:32
(2013-08-25, 14:08)popcornmix Wrote: Looks like this issue:
https://github.com/raspberrypi/linux/issues/241
Seems it should have been fixed. Can you check if all the dwc_otg commits are present in your linux tree?
If you do and you are still getting that error then opening a linux issue may be best.
I seem to have the following dwc related patches in OE master:
Quote:Subject: [PATCH 002/112] Add dwc_otg driver
Subject: [PATCH 030/112] Add FIQ patch to dwc_otg driver. Enable with dwc_otg.fiq_fix_enable=1. Should give about 10% more ARM performance. Thanks
to Gordon and Costas
Subject: [PATCH 054/112] Default to dwc_otp.lpm_enable=0
Subject: [PATCH 057/112] dwc_otg: fix bug in dwc_otg_hcd.c resulting in silent kernel memory corruption, escalating to OOPS under high USB load.
Subject: [PATCH 063/112] dwc_otg: Fix unsafe access of QTD during URB enqueue
Subject: [PATCH 064/112] dwc_otg: Fix incorrect URB allocation error handling
Subject: [PATCH 067/112] dwc_otg: fix potential use-after-free case in interrupt handler
Subject: [PATCH 068/112] dwc_otg: add handling of SPLIT transaction data toggle errors
Subject: [PATCH 071/112] dwc_otg: implement tasklet for returning URBs to usbcore hcd layer
Subject: [PATCH 074/112] dwc_otg: fix NAK holdoff and allow on split transaction only
Subject: [PATCH 087/112] dwc_otg: Call usb_hcd_unlink_urb_from_ep with lock held in completion handler
Subject: [PATCH 089/112] dwc_otg: fix device attributes and avoid kernel warnings on boot
Subject: [PATCH 095/112] dwc_otg: mask correct interrupts after transaction error recovery
Subject: [PATCH 096/112] dwc_otg: fiq: prevent FIQ thrash and incorrect state passing to IRQ
Subject: [PATCH 098/112] dwc_otg: whitespace cleanup in dwc_otg_urb_enqueue
Subject: [PATCH 099/112] dwc_otg: prevent OOPSes during device disconnects
Subject: [PATCH 100/112] dwc_otg: prevent BUG() in TT allocation if hub address is > 16
Subject: [PATCH 103/112] dwc_otg: make channel halts with unknown state less damaging
Subject: [PATCH 104/112] dwc_otg: fiq_split: use TTs with more granularity
Subject: [PATCH 107/112] dwc_otg: fix potential sleep while atomic during urb enqueue
Subject: [PATCH 108/112] dwc_otg: make fiq_split_enable imply fiq_fix_enable
Subject: [PATCH 109/112] dwc_otg: prevent crashes on host port disconnects
Subject: [PATCH 110/112] dwc_otg: prevent leaking URBs during enqueue
It looks like I have the patch mentioned in issue 241 (highlighted in above list) - I assume the patch hasn't changed, this is what I have:
Code:
1.8.1.6
From ffb30ec872c1434dda30f3364710e6bb47e98fb1 Mon Sep 17 00:00:00 2001
From: P33M <[email protected]>
Date: Sun, 3 Mar 2013 14:45:53 +0000
Subject: [PATCH 068/112] dwc_otg: add handling of SPLIT transaction data
toggle errors
Previously a data toggle error on packets from a USB1.1 device behind
a TT would result in the Pi locking up as the driver never handled
the associated interrupt. Patch adds basic retry mechanism and
interrupt acknowledgement to cater for either a chance toggle error or
for devices that have a broken initial toggle state (FT8U232/FT232BM).
---
drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
index 0c81a64..16e8c6c 100644
--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
@@ -1921,13 +1921,20 @@ static int32_t handle_hc_datatglerr_intr(dwc_otg_hcd_t * hcd,
dwc_otg_qtd_t * qtd)
{
DWC_DEBUGPL(DBG_HCDI, "--Host Channel %d Interrupt: "
- "Data Toggle Error--\n", hc->hc_num);
+ "Data Toggle Error on %s transfer--\n",
+ hc->hc_num, (hc->ep_is_in ? "IN" : "OUT"));
- if (hc->ep_is_in) {
+ /* Data toggles on split transactions cause the hc to halt.
+ * restart transfer */
+ if(hc->qh->do_split)
+ {
+ qtd->error_count++;
+ dwc_otg_hcd_save_data_toggle(hc, hc_regs, qtd);
+ update_urb_state_xfer_intr(hc, hc_regs,
+ qtd->urb, qtd, DWC_OTG_HC_XFER_XACT_ERR);
+ halt_channel(hcd, hc, qtd, DWC_OTG_HC_XFER_XACT_ERR);
+ } else if (hc->ep_is_in) {
qtd->error_count = 0;
- } else {
- DWC_ERROR("Data Toggle Error on OUT transfer,"
- "channel %d\n", hc->hc_num);
}
disable_hc_int(hc_regs, datatglerr);
@@ -2080,6 +2087,8 @@ static void handle_hc_chhltd_intr_dma(dwc_otg_hcd_t * hcd,
handle_hc_babble_intr(hcd, hc, hc_regs, qtd);
} else if (hcint.b.frmovrun) {
handle_hc_frmovrun_intr(hcd, hc, hc_regs, qtd);
+ } else if (hcint.b.datatglerr) {
+ handle_hc_datatglerr_intr(hcd, hc, hc_regs, qtd);
} else if (!out_nak_enh) {
if (hcint.b.nyet) {
I've only seen the ERROR just the once, but if I continue to see it I'll open a new issue.
My Pi is connected to a keyboard - though not in use - and IR dongle, which may account for the USB 1.1 activity. Other than the message appearing, all seems fine with the Pi and XBMC.