Hi, I'm working on an ARM-based SoC with an ARC USB block. It has 2 EHCI host controllers and an OTG controller. Everything worked fairly well on a 2.6.10+ kernel. However, after moving my code to 2.6.16.11, I'm having absoultely no luck talking to a device with any host controller. The device side doesn't work either, but later for that.
I've changed my driver_register() calls to platform_driver_register(), got all my pins/clocks/power stuff correrctly configured, and I'm fairly certain I've got all the other usually highly suspicious stuff done, but I'm clearly still missing something. I've turned on all the debugging stuff I can find, and added a few dbg_* calls as well, in both my 2.6.10 and 2.6.16 trees. I've attached dmesg output from both kernels. The 16 kernel appears to be failing on the first GET_DESCRIPTOR request, with ERR irq status. I've been looking at this for a couple of days, and I can't see what I'm doing wrong. If someone can take a look at the logs and make a suggestion about what I can look at next, I'd greatly appreciate it. Many thanks, --Duck
ehci_hcd_h2 ehci_hcd_h2: new USB bus registered, assigned bus number 1 ehci_hcd_h2 ehci_hcd_h2: reset hcs_params 0x10011 dbg=0 ind cc=0 pcc=0 ordered ports=1 ehci_hcd_h2 ehci_hcd_h2: reset hcc_params 0006 thresh 0 uframes 256/512/1024 park ehci_hcd_h2 ehci_hcd_h2: reset command 080b02 park=3 ithresh=8 period=1024 Reset HALT ehci_hcd_h2 ehci_hcd_h2: init command 010b09 park=3 ithresh=1 period=256 RUN ehci_hcd_h2 ehci_hcd_h2: USB 0.0 initialized, EHCI 1.00, driver 26 Oct 2004 usb usb1: new device strings: Mfr=3, Product=2, SerialNumber=1 usb usb1: default language 0x0409 usb usb1: Product: Freescale ARC_OTG usb usb1: Manufacturer: Linux 2.6.10_dev ehci_hcd usb usb1: SerialNumber: ehci_hcd_h2 usb usb1: hotplug usb usb1: adding 1-0:1.0 (config #1, interface 0) usb 1-0:1.0: hotplug hub 1-0:1.0: usb_probe_interface hub 1-0:1.0: usb_probe_interface - got id hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected hub 1-0:1.0: standalone hub hub 1-0:1.0: individual port power switching hub 1-0:1.0: individual port over-current protection hub 1-0:1.0: Single TT hub 1-0:1.0: TT requires at most 8 FS bit times hub 1-0:1.0: power on to power good time: 20ms hub 1-0:1.0: local power source is good hub 1-0:1.0: enabling power on all ports hub 1-0:1.0: state 5 ports 1 chg ffff evt ffff ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 8c001000 POWER sig=se0 hub 1-0:1.0: port 1, status 0100, change 0000, 12 Mb/s ehci_hcd_h2 ehci_hcd_h2: irq status 0004 PCD hub 1-0:1.0: state 5 ports 1 chg fffe evt 0002 ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001803 POWER sig=j CSC CONNECT hub 1-0:1.0: port 1, status 0101, change 0001, 12 Mb/s ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101 ehci_hcd_h2 ehci_hcd_h2: port 1 reset ehci_hcd_h2 ehci_hcd_h2: irq status 0004 PCD ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 88001205 POWER sig=se0 PE CONNECT usb 1-1: new high speed USB device using ehci_hcd_h2 and address 2 ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c0666b60 ep0in len 64, qtd ffc04060 [qh 00000000] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc04060 n858c40c0 00000001 t00080e80 p0=8064fd80 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n00000000 info 40406000 40000000 qtd 0 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n858c4180 00000001 t00000000 p0=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c0666b60 ep0in status 0 len 18/64 ehci_hcd_h2 ehci_hcd_h2: port 1 reset ehci_hcd_h2 ehci_hcd_h2: irq status 0020 IAA ehci_hcd_h2 ehci_hcd_h2: port 1 high speed ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 88001205 POWER sig=se0 PE CONNECT ehci_hcd_h2 ehci_hcd_h2: irq status 0004 PCD ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c0666b60 ep0out len 0, qtd ffc040c0 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc040c0 n858c4120 00000001 t00080e80 p0=8064fd80 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n858ff002 info 40406000 40000000 qtd 858c4120 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n858c4060 00000009 t00008c00 p0=00000000 ehci_hcd_h2 ehci_hcd_h2: p1=00000010 p2=00000016 p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c0666b60 ep0out status 0 len 0/0 ehci_hcd_h2 ehci_hcd_h2: irq status 0020 IAA ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c0666b60 ep0in len 18, qtd ffc04060 [qh 00000000] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc04060 n858c40c0 00000001 t00080e80 p0=865002c0 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n00000000 info 40406002 40000000 qtd 0 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n858c4180 00000001 t00000000 p0=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c0666b60 ep0in status 0 len 18/18 ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c0666b60 ep0in len 9, qtd ffc040c0 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc040c0 n858c4120 00000001 t00080e80 p0=8064fb20 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n858ff002 info 40406002 40000000 qtd 858c4120 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n858c4180 00000001 t80090d80 p0=865002c0 ehci_hcd_h2 ehci_hcd_h2: p1=00000040 p2=0000000a p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c0666b60 ep0in status 0 len 9/9 ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c0666b60 ep0in len 39, qtd ffc04060 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc04060 n858c4120 00000001 t00080e80 p0=8064fb20 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n858ff002 info 40406002 40000000 qtd 858c4180 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n858c4180 00000001 t80270d80 p0=85943820 ehci_hcd_h2 ehci_hcd_h2: p1=00000008 p2=0000000c p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c0666b60 ep0in status 0 len 39/39 usb 1-1: new device strings: Mfr=1, Product=2, SerialNumber=3 ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c0666b60 ep0in len 255, qtd ffc040c0 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc040c0 n858c4120 00000001 t00080e80 p0=865002c0 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n858ff002 info 40406002 40000000 qtd 858c4180 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n858c4180 00000001 t80ff0d80 p0=8065bca0 ehci_hcd_h2 ehci_hcd_h2: p1=00000020 p2=0000000e p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c0666b60 ep0in status 0 len 4/255 usb 1-1: default language 0x0409 ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c0666b60 ep0in len 255, qtd ffc04060 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc04060 n858c4120 00000001 t00080e80 p0=865002c0 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n858ff002 info 40406002 40000000 qtd 858c4180 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n858c4180 00000003 t80ff0d80 p0=8065bca0 ehci_hcd_h2 ehci_hcd_h2: p1=00000010 p2=0000000f p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c0666b60 ep0in status 0 len 34/255 usb 1-1: Product: USB DISK 25X ehci_hcd_h2 ehci_hcd_h2: irq status 0020 IAA ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c0666b60 ep0in len 255, qtd ffc040c0 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc040c0 n858c4120 00000001 t00080e80 p0=865002c0 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n858ff002 info 40406002 40000000 qtd 858c4180 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n858c4060 00000009 t00008c00 p0=00000000 ehci_hcd_h2 ehci_hcd_h2: p1=00000010 p2=00000011 p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c0666b60 ep0in status 0 len 18/255 usb 1-1: Manufacturer: ......
ehci_hcd_h2 ehci_hcd_h2: ARC EHCI Host Controller ehci_hcd_h2 ehci_hcd_h2: reset hcs_params 0x10011 dbg=0 ind cc=0 pcc=0 ordered ports=1 ehci_hcd_h2 ehci_hcd_h2: reset hcc_params 0006 thresh 0 uframes 256/512/1024 park ehci_arc_reset ehci->regs=0xd4088540 ehci_arc_reset config=0xc026c774 config->name=USBH2 ehci_arc_reset(): set USBH2 xcvr=0x80000000 usbmode=0xd40885a8 portsc1 at 0xd4088584 ehci_hcd_h2 ehci_hcd_h2: park 0 ehci_hcd_h2 ehci_hcd_h2: reset command 080b02 park=3 ithresh=8 period=1024 Reset HALT ehci_hcd_h2 ehci_hcd_h2: ...powerdown ports... drivers/usb/core/inode.c: creating file 'devices' drivers/usb/core/inode.c: creating file '001' ehci_hcd_h2 ehci_hcd_h2: new USB bus registered, assigned bus number 1 ehci_hcd_h2 ehci_hcd_h2: irq 36, io mem 0x00000000 ehci_hcd_h2 ehci_hcd_h2: reset command 080b02 park=3 ithresh=8 period=1024 Reset HALT ehci_hcd_h2 ehci_hcd_h2: init command 010009 (park)=0 ithresh=1 period=256 RUN ehci_hcd_h2 ehci_hcd_h2: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004 usb usb1: default language 0x0409 usb usb1: new device strings: Mfr=3, Product=2, SerialNumber=1 usb usb1: Product: ARC EHCI Host Controller usb usb1: Manufacturer: Linux 2.6.16.11 ehci_hcd usb usb1: SerialNumber: ehci_hcd_h2 usb usb1: uevent usb usb1: device is self-powered usb usb1: configuration #1 chosen from 1 choice usb usb1: adding 1-0:1.0 (config #1, interface 0) usb 1-0:1.0: uevent hub 1-0:1.0: usb_probe_interface hub 1-0:1.0: usb_probe_interface - got id hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected hub 1-0:1.0: standalone hub hub 1-0:1.0: individual port power switching hub 1-0:1.0: individual port over-current protection hub 1-0:1.0: Single TT hub 1-0:1.0: TT requires at most 8 FS bit times (666 ns) hub 1-0:1.0: power on to power good time: 20ms hub 1-0:1.0: local power source is good hub 1-0:1.0: enabling power on all ports hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0000 drivers/usb/core/inode.c: creating file '001' ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 8c001000 POWER sig=se0 ehci_hcd_h2 ehci_hcd_h2: irq status 0004 PCD hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002 ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001803 POWER sig=j CSC CONNECT hub 1-0:1.0: port 1, status 0101, change 0001, 12 Mb/s ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 80001801 POWER sig=j CONNECT hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101 ehci_hcd_h2 ehci_hcd_h2: port 1 reset ehci_hcd_h2 ehci_hcd_h2: irq status 0004 PCD ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 88001205 POWER sig=se0 PE CONNECT usb 1-1: new high speed USB device using ehci_hcd_h2 and address 2 ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c67467e0 ep0out len 64, qtd ffc04060 [qh 00000000] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc04060 n861120c0 00000001 t00080e80 p0=86745320 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n00000000 info 40406000 40000000 qtd 0 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n86112180 00000001 t00000000 p0=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0002 ERR ehci_hcd_h2 ehci_hcd_h2: dev0 ep0in qtd token 80400d40 --> status -32 ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c67467e0 ep0in status -32 len 0/64 ehci_hcd_h2 ehci_hcd_h2: irq status 0020 IAA ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c67467e0 ep0out len 64, qtd ffc040c0 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc040c0 n86112120 00000001 t00080e80 p0=86745320 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n867ee002 info 40406000 40000000 qtd 861120c0 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n86112120 00000007 t80400d40 p0=866853e0 ehci_hcd_h2 ehci_hcd_h2: p1=00000004 p2=0000000b p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0002 ERR ehci_hcd_h2 ehci_hcd_h2: dev0 ep0in qtd token 80400d40 --> status -32 ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c67467e0 ep0in status -32 len 0/64 ehci_hcd_h2 ehci_hcd_h2: irq status 0020 IAA ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c67467e0 ep0out len 64, qtd ffc04060 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc04060 n86112120 00000001 t00080e80 p0=86745320 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n867ee002 info 40406000 40000000 qtd 86112120 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n86112180 00000009 t80400d40 p0=866853e0 ehci_hcd_h2 ehci_hcd_h2: p1=00000040 p2=0000000b p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0002 ERR ehci_hcd_h2 ehci_hcd_h2: dev0 ep0in qtd token 80400d40 --> status -32 ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c67467e0 ep0in status -32 len 0/64 ehci_hcd_h2 ehci_hcd_h2: irq status 0020 IAA ehci_hcd_h2 ehci_hcd_h2: port 1 reset ehci_hcd_h2 ehci_hcd_h2: port 1 high speed ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 88001205 POWER sig=se0 PE CONNECT ehci_hcd_h2 ehci_hcd_h2: irq status 0004 PCD usb 1-1: device descriptor read/64, error -32 ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c67467e0 ep0out len 64, qtd ffc040c0 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc040c0 n86112120 00000001 t00080e80 p0=86745540 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n867ee002 info 40406000 40000000 qtd 86112120 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n86112180 00000009 t80400d40 p0=866853e0 ehci_hcd_h2 ehci_hcd_h2: p1=00000004 p2=0000000c p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0002 ERR ehci_hcd_h2 ehci_hcd_h2: dev0 ep0in qtd token 80400d40 --> status -32 ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c67467e0 ep0in status -32 len 0/64 ehci_hcd_h2 ehci_hcd_h2: irq status 0020 IAA ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c67467e0 ep0out len 64, qtd ffc04060 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc04060 n86112120 00000001 t00080e80 p0=86745540 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n867ee002 info 40406000 40000000 qtd 86112120 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n86112180 00000009 t80400d40 p0=861c5ee0 ehci_hcd_h2 ehci_hcd_h2: p1=00000008 p2=0000000b p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c67467e0 ep0in status 0 len 18/64 ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c67467e0 ep0out len 64, qtd ffc040c0 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc040c0 n86112120 00000001 t00080e80 p0=86745540 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n867ee002 info 40406000 40000000 qtd 86112180 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n86112180 00000003 t80400d80 p0=861c5ee0 ehci_hcd_h2 ehci_hcd_h2: p1=00000008 p2=0000000d p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0001 INT ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c67467e0 ep0in status 0 len 18/64 ehci_hcd_h2 ehci_hcd_h2: port 1 reset ehci_hcd_h2 ehci_hcd_h2: irq status 0020 IAA ehci_hcd_h2 ehci_hcd_h2: irq status 0004 PCD ehci_hcd_h2 ehci_hcd_h2: GetStatus port 1 status 88001205 POWER sig=se0 PE CONNECT ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c67467e0 ep0out len 0, qtd ffc04060 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc04060 n86112120 00000001 t00080e80 p0=86745320 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n867ee002 info 40406000 40000000 qtd 86112180 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n861120c0 00000009 t00008c00 p0=00000000 ehci_hcd_h2 ehci_hcd_h2: p1=00000010 p2=0000000e p3=00000000 p4=00000000 ehci_hcd_h2 ehci_hcd_h2: irq status 0003 ERR INT ehci_hcd_h2 ehci_hcd_h2: dev0 ep0out qtd token 80008d40 --> status -32 ehci_hcd_h2 ehci_hcd_h2: ehci_urb_done 1 urb c67467e0 ep0out status -32 len 0/0 ehci_hcd_h2 ehci_hcd_h2: irq status 0020 IAA ehci_hcd_h2 ehci_hcd_h2: submit_async 1 urb c67467e0 ep0out len 0, qtd ffc040c0 [qh ffc03080] ehci_hcd_h2 ehci_hcd_h2: before queue td ffc040c0 n86112120 00000001 t00080e80 p0=86745320 ehci_hcd_h2 ehci_hcd_h2: after queue qh ffc03080 n867ee002 info 40406000 40000000 qtd 86112120 ehci_hcd_h2 ehci_hcd_h2: overlay td ffc03090 n86112060 00000009 t80008d40 p0=00000000 .....
