From owner-freebsd-current@FreeBSD.ORG Wed Sep 23 14:54:44 2009 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 40E751065676; Wed, 23 Sep 2009 14:54:44 +0000 (UTC) (envelope-from avg@icyb.net.ua) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 44F3B8FC16; Wed, 23 Sep 2009 14:54:42 +0000 (UTC) Received: from odyssey.starpoint.kiev.ua (alpha-e.starpoint.kiev.ua [212.40.38.101]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id RAA29906; Wed, 23 Sep 2009 17:54:41 +0300 (EEST) (envelope-from avg@icyb.net.ua) Message-ID: <4ABA36B1.9070706@icyb.net.ua> Date: Wed, 23 Sep 2009 17:54:41 +0300 From: Andriy Gapon User-Agent: Thunderbird 2.0.0.23 (X11/20090825) MIME-Version: 1.0 To: freebsd-usb@freebsd.org, freebsd-current@freebsd.org X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: Subject: sb600/sb700 ohci experimental patch X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Sep 2009 14:54:44 -0000 If you have a system with SB600, SB700, etc chipset and you have problems with low speed USB devices attached during boot (keyboard, mouse), could you please try the following experimental patch and report back? I am primarily interested in the first several lines produced during boot with printfs that are introduced by the patch. Preferably in the context of surrounding USB-related dmesg messages. No need to report subsequent same-looking ever-repeating messages (if any). WARNING: this is an experimental patch, it is probably not even close to what a real fix could be, it might not fix the problem (but perhaps it would), it might introduce instabilities into OHCI driver and it is noisy (unconditional printf). The primary purpose of this patch is to gather information necessary for a real fix. Thank you! diff --git a/sys/dev/usb/controller/ohci.c b/sys/dev/usb/controller/ohci.c index 30592c1..fb6ba34 100644 --- a/sys/dev/usb/controller/ohci.c +++ b/sys/dev/usb/controller/ohci.c @@ -247,8 +249,8 @@ reset: OWRITE4(sc, OHCI_INTERRUPT_ENABLE, sc->sc_eintrs | OHCI_MIE); /* switch on desired functional features */ ctl = OREAD4(sc, OHCI_CONTROL); - ctl &= ~(OHCI_CBSR_MASK | OHCI_LES | OHCI_HCFS_MASK | OHCI_IR); - ctl |= OHCI_PLE | OHCI_IE | OHCI_CLE | OHCI_BLE | + ctl &= ~(OHCI_CBSR_MASK | OHCI_LES | OHCI_HCFS_MASK | OHCI_IR | OHCI_CLE | OHCI_CLF); + ctl |= OHCI_PLE | OHCI_IE | /*OHCI_CLE |*/ OHCI_BLE | OHCI_RATIO_1_4 | OHCI_HCFS_OPERATIONAL; /* And finally start it! */ OWRITE4(sc, OHCI_CONTROL, ctl); @@ -2727,8 +2729,17 @@ ohci_set_hw_power(struct usb_bus *bus) temp = OREAD4(sc, OHCI_CONTROL); temp &= ~(OHCI_PLE | OHCI_IE | OHCI_CLE | OHCI_BLE); - if (flags & USB_HW_POWER_CONTROL) + if (flags & USB_HW_POWER_CONTROL) { + struct usb_page_search buf_res; + + buf_res.physaddr = OREAD4(sc, OHCI_CONTROL_HEAD_ED); + printf("(hw power) control head <= %p\n", (void*)buf_res.physaddr); + usbd_get_page(&sc->sc_hw.ctrl_start_pc, 0, &buf_res); + printf("(hw power) control head => %p\n", (void*)buf_res.physaddr); + OWRITE4(sc, OHCI_CONTROL_HEAD_ED, buf_res.physaddr); + temp |= OHCI_CLE; + } if (flags & USB_HW_POWER_BULK) temp |= OHCI_BLE; -- Andriy Gapon