Hello All,
    I am currently working on a proprietary MIPS based platform
running ported 2.6.11.11 Kernel. I'm testing the EHCI Split
Isochronous functionality with a Yamaha USB Speaker connected to the
board and am seeing a couple of issues:

a. The Kernel used to crash in the function tt_no_collision()
(ehci-sched.c) while dumping raw data to the dsp device file
(/dev/dsp) and I'd patched the same. I see that this bug has been
fixed in the latest kernel sources (2.6.14).

b. When I try to dump raw data onto the dsp device file, the Host
Controller issues a FATAL. This problem is easily reproduced by
dumping a very large file onto the dsp device file.

   All the EHCI configurations were found to be correct and the
Interrupt threshold (log2_irq_thresh) was unchanged to raise
interrupts at 125 us precision. The Host Controller has the capability
to cache a single uframe. The length of the periodic schedule is 1024.

While looking into the sources, I found a couple of issues and have
fixed the same. I would like to confirm the changes before submission.

i. In the scan_periodic() (ehci-sched.c) the ISO caching is not taken
into consideration and in case of periodically scheduled SITD's with
IOC set, the interrupt is raised with the precision as configured by
log2_irq_thresh parameter (ehci-hcd.c). When the IOC is raised, the
periodic schedule is altered.

ii. With the Interrupt threshold configured for 125 us and the SITD
completing early in the frame, the Interrupt is raised and the
schedule altered, while the Host Controller is still in the same
frame. Some Host Controllers (including the one I'm working on) report
a fatal in these circumstances, in spite of "live" checks in the
scan_periodic logic.

In my opinion, we should refrain from scanning the live frame which
the Host Controller is currently reading and read only till the end of
previous frame. But this logic with Interrupt threshold less than 1 ms
precision will break the Isochronous behaviour 'coz it will not read
the last completed packet descriptor. I've configured the Interrupt
threshold to be 1ms and have tested the logic and it is working fine.

c. The function tt_no_collision() (ehci-sched.c) called from
sitd_slot_ok(), is passed wrong period. tt_no_collision() expects the
period in terms of frames.

d. In the function sitd_slot_ok(), we are scanning from the first
frame till the end, and tt_no_collision() also scans every frame in
the schedule, is it not sufficient to call tt_no_collision() only once
instead of calling it in a loop in sitd_slot_ok() ??

Kernel supports EHCI completely including the EXPERIMENTAL Split ISO.
The functionality was tested with the ALSA USB audio driver with full
ALSA support and the standalone USB audio class driver. The Host
controller on the board does not sit over the PCI and sits over a
proprietary bus and a glue logic had been added to the same.

Please let me know your comments on the above changes/suggestions.

Regards,
/Manjunath B.S.


-------------------------------------------------------
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
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to