Hi all,

I am currently involved in porting the USB stack (linux 2.6.11.11
kernel) on ARM 10 architecture. I have two separate ports on the Root
Hub (one EHCI and one OHCI). The Host Controller implements all the
standard EHCI and OHCI registers. The only difference is that the
stack has been ported onto the AMBA bus directly and does not
interface through the PCI as in most cases.

I have managed to port the basic stack, though there were some issues
regarding the enumeration of an external USB 2.0 hub. Though the hub
is getting enumerated, it is unable to detect any devices connected on
it. I understand that the linux kernel creates a USB hub deamon
(khubd) that manages various devices connected to the ports. There are
two distinct issues I am facing.

1.) A device is connected to the hub prior to plugging it into the
Root Hub. In this case, once the hub has been detected and the hub
scans each of the ports for any device presence by issuing the
GET_PORT_STATUS command in the hub_events() routine. I noticed that
when a device is detected, the hub issues consecutive GET_PORT_STATUS
commands for the hub_debounce period of 100ms (once after each 25ms
period for transient removals). In my case the second time I call the
GET_PORT_STATUS command, the urb is submitted ( message.c), but it
never completes. The code calls wait_for_completion in
usb_start_wait_urb() call.

I am not understanding why the hub fails to respond. I have checked
the submission of the urb till the HCD layer and have confirmed that
the ASE bit is set in the EHCI Operation USBCMD register. I believe
that the hub responds and the stack recognizes the command through
ehci_irq->ehci_work->scan_async->qh_completions->ehci_urb_done->usb_hcd_giveback_urb->complete
call stack. But no interrupt is getting raised.

2.) In the second case, when no device is connected on the hub, after
the hub enumeration completes, the hub thread (khubd) issues constant
IN transactions to check device connection on the hub. Again I have
traced the sumission of the Interrupt In URB till the setting of the
PSE bit in the USBCMD register. But as expected, I am not receiving
the NAK response from the device. Hence not device detection is
happening.

Could some please suggest any possible reasons for the failure of
device detection on the external hub? The stack works successfully for
other 2.0 devices such as memory sticks, keyboards, and other mass
storage devices.

With regards,

Kaustubh


-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.  Get Certified Today
Register for a JBoss Training Course.  Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_idv28&alloc_id845&op=click
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to