From owner-freebsd-bugs@FreeBSD.ORG Tue Jul 13 16:40:24 2004 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9974B16A4E0 for ; Tue, 13 Jul 2004 16:40:24 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 391BD43D31 for ; Tue, 13 Jul 2004 16:40:24 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.11/8.12.11) with ESMTP id i6DGeO0k018520 for ; Tue, 13 Jul 2004 16:40:24 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.11/8.12.11/Submit) id i6DGeOGV018519; Tue, 13 Jul 2004 16:40:24 GMT (envelope-from gnats) Resent-Date: Tue, 13 Jul 2004 16:40:24 GMT Resent-Message-Id: <200407131640.i6DGeOGV018519@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Mark Derbyshire Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id BFC9416A4CE for ; Tue, 13 Jul 2004 16:33:08 +0000 (GMT) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id B269E43D1F for ; Tue, 13 Jul 2004 16:33:08 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.12.11/8.12.11) with ESMTP id i6DGX4ts080178 for ; Tue, 13 Jul 2004 16:33:04 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.12.11/8.12.11/Submit) id i6DGX4VO080177; Tue, 13 Jul 2004 16:33:04 GMT (envelope-from nobody) Message-Id: <200407131633.i6DGX4VO080177@www.freebsd.org> Date: Tue, 13 Jul 2004 16:33:04 GMT From: Mark Derbyshire To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Subject: kern/69006: [patch] Apple Cinema Display hangs USB ports X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Jul 2004 16:40:24 -0000 >Number: 69006 >Category: kern >Synopsis: [patch] Apple Cinema Display hangs USB ports >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Jul 13 16:40:23 GMT 2004 >Closed-Date: >Last-Modified: >Originator: Mark Derbyshire >Release: FreeBSD 5.2.1-RELEASE-p9 >Organization: >Environment: FreeBSD freebsd.taom.com 5.2.1-RELEASE-p9 FreeBSD 5.2.1-RELEASE-p9 #0: Tue Jul 13 02:20:06 MDT 2004 mark@freebsd.taom.com:/usr/obj/usr/src/sys/TAOM i386 Kernel is GENERIC built from RELENG_5_2 with: setenv DEBUG -DUSB_DEBUG Apple 23 inch Cinema Display through a CompuCable ADC/DVI KVM (provides a DVI & USB breakout) USB plugged into MB USB (VIA 83C572 USB controller) >Description: [Resubmittal of original sent 2004/03/17 with minor updates - I found no record that original was ever received - sorry] Plugging the USB breakout from an Apple Cinema Display into a USB port seems to either hang the USB controller and/or cause an endless loop in the kernel USB code. The Cinema Display has an internal USB hub and an internal USB device for controlling the display. When FreeBSD is probing internal USB device, there are several second delays and apparently problems reading descriptors (I am not a USB expert). Eventually the device fails attempts by uhid and ugen to discover it. After that nothing plugged into the USB controller works, including any devices plugged into the Cinema hub. If the Cinema is unplugged, nothing subsequently plugged into the USB controller is recognized until after a reboot. In the annotated logs shown below I have included the dmesg USB entries from a system boot without anything plugged into the USB ports. I then list the messages generated when I plug just the Cinema Display (nothing connected to its hub) into a port. I've also attached some kernel debug with hw.usb.debug=5 plugging in the display, unplugging the display and replugging the display. The debug output seems to show that FreeBSD gets caught in some endless loop after the display is plugged in, in spite of giving up on attaching the device. I made a hack shown in the the fix section to workaround this problem, although I don't see this as a realistic solution. It may help to identify the underlying problems, however. The first thing I noticed was that when uhid.c or ugen.c calls usbd_devinfo, the subsequent call to usbd_devinfo_vp tries to query the Cinema device for vendor/product strings. Once this occurs, the USB controller never will work again. I short-circuited these queries in the hack by adding a new type of usb_quirk to avoid making these queries for the Cinema. However this wasn't enough because when uhid.c & ugen.c would try to read descriptors from the device, the USB controller would still hang. In the end I lacked the time to understand what was causing the endless looping that resulted in either case and just used the quirk to ignore the device before usbd_probe_and_attach gets called. Since I doubt FreeBSD/XFree86 knows how to control the display anyway, this is good enough for me. Nevertheless a recalcitrant device like the Cinema probably shouldn't cause the USB controller/FreeBSD to stop using other devices on the port. Mac OS X, Windows XP and PowerPC Linux all handle this device without issue. --- annotated logs begin here --- [USB dmesg from system boot] uhci0: port 0xd800-0xd81f irq 11 at device 17.2 on pci0 usb0: on uhci0 usb0: USB revision 1.0 uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub0: 2 ports with 2 removable, self powered uhci1: port 0xdc00-0xdc1f irq 11 at device 17.3 on pci0 usb1: on uhci1 usb1: USB revision 1.0 uhub1: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub1: 2 ports with 2 removable, self powered uhci2: port 0xe000-0xe01f irq 11 at device 17.4 on pci0 usb2: on uhci2 usb2: USB revision 1.0 uhub2: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub2: 2 ports with 2 removable, self powered [plug in Cinema USB] Mar 17 11:09:35 freebsd kernel: uhub0: port error, restarting port 2 Mar 17 11:09:36 freebsd kernel: uhub3: Apple Computer product 0x9118, class 9/0, rev 1.10/1.10, addr 2 Mar 17 11:09:36 freebsd kernel: uhub3: 3 ports with 3 removable, self powered Mar 17 11:09:42 freebsd kernel: uhid0: Apple Computer product 0x9218, rev 1.00/1.0e, addr 3, iclass 3/0 Mar 17 11:09:47 freebsd kernel: uhid0: no report descriptor Mar 17 11:09:47 freebsd kernel: device_probe_and_attach: uhid0 attach returned 6 Mar 17 11:09:52 freebsd kernel: ugen0: Apple Computer product 0x9218, rev 1.00/1.0e, addr 3 Mar 17 11:09:57 freebsd kernel: ugen0: setting configuration index 0 failed Mar 17 11:09:57 freebsd kernel: device_probe_and_attach: ugen0 attach returned 6 Mar 17 11:17:08 freebsd kernel: uhub3: at uhub0 port 2 (addr 2) disconnected Mar 17 11:17:08 freebsd kernel: uhub3: detached [reboot & setup debugging messages] freebsd# sysctl hw.usb.debug=5 hw.usb.debug: 0 -> 5 [plug in Cinema USB] Mar 17 10:52:11 freebsd kernel: usb_event_thread: woke up Mar 17 10:52:11 freebsd kernel: usb_discover Mar 17 10:52:11 freebsd kernel: usb_event_thread: woke up Mar 17 10:52:11 freebsd kernel: usb_discover Mar 17 10:52:11 freebsd kernel: usb_event_thread: woke up Mar 17 10:52:11 freebsd kernel: usb_discover Mar 17 10:52:23 freebsd kernel: usb_needs_explore Mar 17 10:52:23 freebsd kernel: usb_event_thread: woke up Mar 17 10:52:23 freebsd kernel: usb_discover Mar 17 10:52:23 freebsd kernel: uhub0: port error, restarting port 2 Mar 17 10:52:24 freebsd kernel: usb_needs_explore Mar 17 10:52:24 freebsd kernel: usb_needs_explore Mar 17 10:52:24 freebsd kernel: usbd_reset_port: port 2 reset done, error=NORMAL_COMPLETION Mar 17 10:52:25 freebsd kernel: usbd_new_device bus=0xc47e7000 port=2 depth=1 speed=2 Mar 17 10:52:25 freebsd kernel: usbd_setup_pipe: dev=0xc4c5ad00 iface=0 ep=0xc4c5ad24 pipe=0xc4c5ad04 Mar 17 10:52:25 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:52:25 freebsd kernel: usbd_new_device: adding unit addr=2, rev=110, class=9, subclass=0, protocol=0, maxpacket=64, len=18, speed=2 Mar 17 10:52:25 freebsd kernel: usbd_get_device_desc: Mar 17 10:52:25 freebsd kernel: usbd_get_desc: type=1, index=0, len=18 Mar 17 10:52:25 freebsd kernel: usbd_new_device: new dev (addr 2), dev=0xc4c5ad00, parent=0xc47d2500 Mar 17 10:52:25 freebsd kernel: usbd_probe_and_attach: trying device specific drivers Mar 17 10:52:25 freebsd kernel: uhub3: Apple Computer product 0x9118, class 9/0, rev 1.10/1.10, addr 2 Mar 17 10:52:25 freebsd kernel: usbd_get_config_desc: confidx=0 Mar 17 10:52:25 freebsd kernel: usbd_get_desc: type=2, index=0, len=9 Mar 17 10:52:25 freebsd kernel: usbd_get_desc: type=2, index=0, len=25 Mar 17 10:52:25 freebsd kernel: usbd_set_config_index: status=0x0001, error=NORMAL_COMPLETION Mar 17 10:52:25 freebsd kernel: usbd_set_config_index: (addr 1) cno=2 attr=0xe0, selfpowered=1, power=500 Mar 17 10:52:25 freebsd kernel: usbd_set_config_index: set config 1 Mar 17 10:52:25 freebsd kernel: usbd_fill_iface_data: ifaceidx=0 altidx=0 Mar 17 10:52:25 freebsd kernel: usbd_find_idesc: idx=0(-1) altidx=0(0) len=9 type=2 Mar 17 10:52:25 freebsd kernel: usbd_find_idesc: idx=0(-1) altidx=0(0) len=9 type=4 Mar 17 10:52:25 freebsd kernel: usbd_fill_iface_data: found idesc nendpt=1 Mar 17 10:52:25 freebsd kernel: uhub3: 3 ports with 3 removable, self powered Mar 17 10:52:25 freebsd kernel: usbd_open_pipe_intr: address=0x81 flags=0x4 len=1 Mar 17 10:52:25 freebsd kernel: usbd_open_pipe: iface=0xc47efb80 address=0x81 flags=0x1 Mar 17 10:52:25 freebsd kernel: usbd_setup_pipe: dev=0xc4c5ad00 iface=0xc47efb80 ep=0xc48185d0 pipe=0xd8a46700 Mar 17 10:52:25 freebsd kernel: usb_needs_explore Mar 17 10:52:26 freebsd kernel: usbd_reset_port: port 3 reset done, error=NORMAL_COMPLETION Mar 17 10:52:26 freebsd kernel: usbd_new_device bus=0xc47e7000 port=3 depth=2 speed=1 Mar 17 10:52:26 freebsd kernel: usbd_setup_pipe: dev=0xc4c5a900 iface=0 ep=0xc4c5a924 pipe=0xc4c5a904 Mar 17 10:52:26 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:52:26 freebsd kernel: usbd_new_device: adding unit addr=3, rev=100, class=0, subclass=0, protocol=0, maxpacket=8, len=18, speed=1 Mar 17 10:52:26 freebsd kernel: usbd_get_device_desc: Mar 17 10:52:26 freebsd kernel: usbd_get_desc: type=1, index=0, len=18 Mar 17 10:52:26 freebsd kernel: usbd_new_device: new dev (addr 3), dev=0xc4c5a900, parent=0xc4c5ab80 Mar 17 10:52:26 freebsd kernel: usbd_probe_and_attach: trying device specific drivers Mar 17 10:52:26 freebsd kernel: usbd_probe_and_attach: no device specific driver found Mar 17 10:52:26 freebsd kernel: usbd_probe_and_attach: looping over 1 configurations Mar 17 10:52:26 freebsd kernel: usbd_probe_and_attach: trying config idx=0 Mar 17 10:52:26 freebsd kernel: usbd_get_config_desc: confidx=0 Mar 17 10:52:26 freebsd kernel: usbd_get_desc: type=2, index=0, len=9 Mar 17 10:52:26 freebsd kernel: usbd_get_desc: type=2, index=0, len=34 Mar 17 10:52:26 freebsd kernel: usbd_set_config_index: (addr 1) cno=3 attr=0x40, selfpowered=1, power=2 Mar 17 10:52:26 freebsd kernel: usbd_set_config_index: set config 1 Mar 17 10:52:26 freebsd kernel: usbd_fill_iface_data: ifaceidx=0 altidx=0 Mar 17 10:52:26 freebsd kernel: usbd_find_idesc: idx=0(-1) altidx=0(0) len=9 type=2 Mar 17 10:52:26 freebsd kernel: usbd_find_idesc: idx=0(-1) altidx=0(0) len=9 type=4 Mar 17 10:52:26 freebsd kernel: usbd_fill_iface_data: found idesc nendpt=1 Mar 17 10:52:26 freebsd kernel: usb_allocmem: large alloc 65 Mar 17 10:52:26 freebsd kernel: usb_freemem: large free Mar 17 10:52:31 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:52:31 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:52:31 freebsd kernel: uhid0: Apple Computer product 0x9218, rev 1.00/1.0e, addr 3, iclass 3/0 Mar 17 10:52:31 freebsd kernel: usb_allocmem: large alloc 65 Mar 17 10:52:36 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:52:36 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:52:36 freebsd kernel: usb_freemem: large free Mar 17 10:52:36 freebsd kernel: uhid0: no report descriptor Mar 17 10:52:36 freebsd kernel: device_probe_and_attach: uhid0 attach returned 6 Mar 17 10:52:36 freebsd kernel: usbd_probe_and_attach: no interface drivers found Mar 17 10:52:41 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:52:41 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:52:41 freebsd kernel: ugen0: Apple Computer product 0x9218, rev 1.00/1.0e, addr 3 Mar 17 10:52:41 freebsd kernel: usbd_set_config_index: free old config Mar 17 10:52:41 freebsd kernel: usbd_get_config_desc: confidx=0 Mar 17 10:52:41 freebsd kernel: usbd_get_desc: type=2, index=0, len=9 Mar 17 10:52:46 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:52:46 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:52:46 freebsd kernel: ugen0: setting configuration index 0 failed Mar 17 10:52:46 freebsd kernel: device_probe_and_attach: ugen0 attach returned 6 Mar 17 10:52:46 freebsd kernel: usbd_probe_and_attach: generic attach failed Mar 17 10:52:51 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:52:51 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:52:56 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:52:56 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:53:01 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:53:01 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:53:06 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:53:06 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:53:11 freebsd kernel: usb_event_thread: woke up Mar 17 10:53:11 freebsd kernel: usb_discover Mar 17 10:53:11 freebsd kernel: usb_event_thread: woke up Mar 17 10:53:11 freebsd kernel: usb_discover Mar 17 10:54:06 freebsd kernel: usb_event_thread: woke up Mar 17 10:54:06 freebsd kernel: usb_discover Mar 17 10:54:11 freebsd kernel: usb_event_thread: woke up Mar 17 10:54:11 freebsd kernel: usb_discover Mar 17 10:54:11 freebsd kernel: usb_event_thread: woke up Mar 17 10:54:11 freebsd kernel: usb_discover [unplug Cinema USB] Mar 17 10:54:19 freebsd kernel: usb_needs_explore Mar 17 10:54:19 freebsd kernel: usb_event_thread: woke up Mar 17 10:54:19 freebsd kernel: usb_discover Mar 17 10:54:19 freebsd kernel: uhub_disconnect: up=0xc47d24c0 dev=0xc4c5ad00 port=2 Mar 17 10:54:19 freebsd kernel: usb_disconnect_port: disconnect subdevs Mar 17 10:54:19 freebsd kernel: uhub3: at uhub0 port 2 (addr 2) disconnected Mar 17 10:54:19 freebsd kernel: usbd_ar_pipe: pipe=0xc4c5a980 Mar 17 10:54:19 freebsd kernel: usbd_ar_pipe: pipe=0xc4c5a980 xfer=0xc47cd100 (methods=0xc0894db0) Mar 17 10:54:20 freebsd kernel: uhub_disconnect: up=0xc4c5aa50 dev=0xc4c5a900 port=3 Mar 17 10:54:20 freebsd kernel: usbd_ar_pipe: pipe=0xc4c5a780 Mar 17 10:54:20 freebsd kernel: uhub3: detached Mar 17 10:54:20 freebsd kernel: usbd_ar_pipe: pipe=0xc4c5ac80 [replug Cinema USB] Mar 17 10:55:05 freebsd kernel: usb_needs_explore Mar 17 10:55:05 freebsd kernel: usb_event_thread: woke up Mar 17 10:55:05 freebsd kernel: usb_discover Mar 17 10:55:05 freebsd kernel: uhub0: port error, restarting port 2 Mar 17 10:55:05 freebsd kernel: usb_needs_explore Mar 17 10:55:05 freebsd kernel: usb_needs_explore Mar 17 10:55:05 freebsd kernel: usbd_reset_port: port 2 reset done, error=NORMAL_COMPLETION Mar 17 10:55:06 freebsd kernel: usbd_new_device bus=0xc47e7000 port=2 depth=1 speed=2 Mar 17 10:55:06 freebsd kernel: usbd_setup_pipe: dev=0xc4c5a480 iface=0 ep=0xc4c5a4a4 pipe=0xc4c5a484 Mar 17 10:55:06 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:11 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:11 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:55:11 freebsd kernel: usb_event_thread: woke up Mar 17 10:55:11 freebsd kernel: usb_discover Mar 17 10:55:11 freebsd kernel: usb_event_thread: woke up Mar 17 10:55:11 freebsd kernel: usb_discover Mar 17 10:55:11 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:16 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:16 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:55:16 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:21 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:21 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:55:21 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:26 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:26 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:55:27 freebsd kernel: usb_needs_explore Mar 17 10:55:27 freebsd kernel: usbd_reset_port: port 2 reset done, error=NORMAL_COMPLETION Mar 17 10:55:27 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:32 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:32 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:55:33 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:38 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:38 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:55:38 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:43 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:43 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:55:43 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:48 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:48 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:55:49 freebsd kernel: usb_needs_explore Mar 17 10:55:49 freebsd kernel: usb_needs_explore Mar 17 10:55:49 freebsd kernel: usbd_reset_port: port 2 reset done, error=NORMAL_COMPLETION Mar 17 10:55:49 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:54 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:54 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:55:54 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 Mar 17 10:55:59 freebsd kernel: usb_add_task: task=0xc4c10384 Mar 17 10:55:59 freebsd kernel: usb_task_thread: woke up task=0xc4c10384 Mar 17 10:56:00 freebsd kernel: usbd_get_desc: type=1, index=0, len=8 --- annotated logs end here --- >How-To-Repeat: Either boot the system with the Cinema USB breakout plugged in, or plug it in after the boot is done. Whether or not there are other USB devices plugged into the USB controller and whether or not there are USB devices plugged into the Cinema hub, no USB devices will subsequently work or be recognized, regardless of any further plugging/unplugging, until a reboot is done. >Fix: The hack shown below is sufficient to ignore the Cinema device and allows any other USB devices plugged into the system ports and/or the Cinema hub to work properly. As outlined in the description, it does not address the potential underlying problem of why FreeBSD seems to be caught in endless loops and/or the controller getting locked up. In limited testing I have seen XFree86 freeze into a CPU loop with this patch applied. --- patch-cinema begins here --- --- usb_quirks.c.orig Sun Aug 24 11:55:55 2003 +++ usb_quirks.c Wed Mar 17 11:11:31 2004 @@ -93,6 +93,7 @@ { USB_VENDOR_HP, USB_PRODUCT_HP_810C, ANY, { UQ_BROKEN_BIDIR }}, { USB_VENDOR_HP, USB_PRODUCT_HP_830C, ANY, { UQ_BROKEN_BIDIR }}, { USB_VENDOR_HP, USB_PRODUCT_HP_1220C, ANY, { UQ_BROKEN_BIDIR }}, + { USB_VENDOR_APPLE, USB_PRODUCT_APPLE_CINEMA_23, ANY, { UQ_IGNORE }}, /* YAMAHA router's ucdDevice is the version of farmware and often changes. */ { USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA54I, ANY, { UQ_ASSUME_CM_OVER_DATA }}, --- usb_quirks.h.orig Tue Mar 16 15:37:24 2004 +++ usb_quirks.h Wed Mar 17 11:11:39 2004 @@ -54,6 +54,7 @@ #define UQ_AU_INP_ASYNC 0x0800 /* input is async despite claim of adaptive */ #define UQ_ASSUME_CM_OVER_DATA 0x1000 /* modem device breaks on cm over data */ #define UQ_BROKEN_BIDIR 0x2000 /* printer has broken bidir mode */ +#define UQ_IGNORE 0x4000 /* ignore this screwed-up device */ }; extern const struct usbd_quirks usbd_no_quirk; --- usb_subr.c.orig Mon Sep 1 01:47:42 2003 +++ usb_subr.c Wed Mar 17 11:12:00 2004 @@ -304,7 +304,7 @@ char product[USB_MAX_STRING_LEN]; int bcdDevice, bcdUSB; - usbd_devinfo_vp(dev, vendor, product, 1); + usbd_devinfo_vp(dev, vendor, product, !(dev->quirks->uq_flags & UQ_IGNORE)); cp += sprintf(cp, "%s %s", vendor, product); if (showclass) cp += sprintf(cp, ", class %d/%d", @@ -1106,6 +1106,13 @@ DPRINTF(("usbd_new_device: new dev (addr %d), dev=%p, parent=%p\n", addr, dev, parent)); + + if (dev->quirks->uq_flags & UQ_IGNORE) { + char info[1024]; + usbd_devinfo(dev, 0, info); + printf("usb: %s, device ignored\n", info); + return (USBD_NORMAL_COMPLETION); + } err = usbd_probe_and_attach(parent, dev, port, addr); if (err) { --- usbdevs.orig Sun Nov 16 05:05:11 2003 +++ usbdevs Wed Mar 17 11:12:09 2004 @@ -466,6 +466,7 @@ /* Apple Computer products */ product APPLE OPTMOUSE 0x0302 Optical mouse product APPLE SPEAKERS 0x1101 Speakers +product APPLE CINEMA_23 0x9218 Cinema Display 23 inch /* Asahi Optical products */ product ASAHIOPTICAL OPTIO230 0x0004 Digital camera --- patch-cinema ends here --- >Release-Note: >Audit-Trail: >Unformatted: