From owner-p4-projects@FreeBSD.ORG Tue Mar 11 16:24:20 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E0F711065676; Tue, 11 Mar 2008 16:24:19 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A07531065671 for ; Tue, 11 Mar 2008 16:24:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 777038FC16 for ; Tue, 11 Mar 2008 16:24:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m2BGOJ2i076875 for ; Tue, 11 Mar 2008 16:24:19 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m2BGOJeI076873 for perforce@freebsd.org; Tue, 11 Mar 2008 16:24:19 GMT (envelope-from hselasky@FreeBSD.org) Date: Tue, 11 Mar 2008 16:24:19 GMT Message-Id: <200803111624.m2BGOJeI076873@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 137412 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Mar 2008 16:24:20 -0000 http://perforce.freebsd.org/chv.cgi?CH=137412 Change 137412 by hselasky@hselasky_laptop001 on 2008/03/11 16:23:57 EHCI workarounds for what looks like a BIOS or SMI bug. Reported by John Baldwin. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/ehci_pci.c#31 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/ehci_pci.c#31 (text+ko) ==== @@ -85,7 +85,6 @@ #define PCI_EHCI_BASE_REG 0x10 -static void ehci_pci_givecontroller(device_t self); static void ehci_pci_takecontroller(device_t self); static device_probe_t ehci_pci_probe; @@ -131,7 +130,6 @@ if (err) return (err); ehci_shutdown(sc); - ehci_pci_givecontroller(self); return (0); } @@ -435,8 +433,13 @@ continue; } legsup = eec; - pci_write_config(self, eecp, legsup | EHCI_LEGSUP_OSOWNED, 4); if (legsup & EHCI_LEGSUP_BIOSOWNED) { + /* + * Only set the "OSOWNED" bit if the + * "BIOSOWNED" bit is set: + */ + pci_write_config(self, eecp, + legsup | EHCI_LEGSUP_OSOWNED, 4); device_printf(sc->sc_bus.bdev, "waiting for BIOS " "to give up control\n"); @@ -454,25 +457,6 @@ } } -static void -ehci_pci_givecontroller(device_t self) -{ - ehci_softc_t *sc = device_get_softc(self); - uint32_t cparams, eec, legsup; - int eecp; - - cparams = EREAD4(sc, EHCI_HCCPARAMS); - for (eecp = EHCI_HCC_EECP(cparams); eecp != 0; - eecp = EHCI_EECP_NEXT(eec)) { - eec = pci_read_config(self, eecp, 4); - if (EHCI_EECP_ID(eec) != EHCI_EC_LEGSUP) { - continue; - } - legsup = eec; - pci_write_config(self, eecp, legsup & ~EHCI_LEGSUP_OSOWNED, 4); - } -} - static driver_t ehci_driver = { .name = "ehci",