From owner-freebsd-current@FreeBSD.ORG Sun Sep 27 13:10:28 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 DE6DE10656A4; Sun, 27 Sep 2009 13:10:28 +0000 (UTC) (envelope-from avg@freebsd.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id B4E8D8FC1F; Sun, 27 Sep 2009 13:10:27 +0000 (UTC) Received: from porto.topspin.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id QAA14924; Sun, 27 Sep 2009 16:10:25 +0300 (EEST) (envelope-from avg@freebsd.org) Received: from localhost.topspin.kiev.ua ([127.0.0.1]) by porto.topspin.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1MrtWC-0004l8-OQ; Sun, 27 Sep 2009 16:10:24 +0300 Message-ID: <4ABF643D.1080705@freebsd.org> Date: Sun, 27 Sep 2009 16:10:21 +0300 From: Andriy Gapon User-Agent: Thunderbird 2.0.0.23 (X11/20090823) MIME-Version: 1.0 To: Hans Petter Selasky References: <4ABA36B1.9070706@icyb.net.ua> <200909241651.47850.hselasky@c2i.net> <4ABC646D.4070604@icyb.net.ua> <200909250928.51515.hselasky@c2i.net> <4ABF57F5.1050106@icyb.net.ua> In-Reply-To: <4ABF57F5.1050106@icyb.net.ua> X-Enigmail-Version: 0.96.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: freebsd-current@freebsd.org, freebsd-usb@freebsd.org Subject: Re: 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: Sun, 27 Sep 2009 13:10:29 -0000 on 27/09/2009 15:17 Andriy Gapon said the following: > Another idea of working around this: > 1) in pci fixup code disable USB SMI for these chipsets > 2) (optional) in ohci code skip takeover step > Sounds messy. BTW, just for the sake of experiment I did exactly what I suggested. I've got the following messages: kernel: ohci_controller_init:195: SMM active, request owner change kernel: usbus0: SMM does not respond, resetting kernel: ohci_controller_init:195: SMM active, request owner change kernel: usbus1: SMM does not respond, resetting kernel: ohci_controller_init:195: SMM active, request owner change kernel: usbus3: SMM does not respond, resetting kernel: ohci_controller_init:195: SMM active, request owner change kernel: usbus4: SMM does not respond, resetting kernel: ohci_controller_init:195: SMM active, request owner change kernel: usbus6: SMM does not respond, resetting And the register value stayed intact after initial programming, so no re-programming was needed. Here is the (dirty) hack: diff --git a/sys/dev/pci/fixup_pci.c b/sys/dev/pci/fixup_pci.c index 566e503..1463c24 100644 --- a/sys/dev/pci/fixup_pci.c +++ b/sys/dev/pci/fixup_pci.c @@ -53,6 +53,7 @@ static int fixup_pci_probe(device_t dev); static void fixwsc_natoma(device_t dev); static void fixc1_nforce2(device_t dev); static void fixrtc_piix4(device_t dev); +static void fixsmi_usb(device_t dev); static device_method_t fixup_pci_methods[] = { /* Device interface */ @@ -84,6 +85,9 @@ fixup_pci_probe(device_t dev) case 0x01e010de: /* nVidia nForce2 */ fixc1_nforce2(dev); break; + case 0x96001022: /* AMD SB700 */ + fixsmi_usb(dev); + break; } return(ENXIO); } @@ -124,6 +128,21 @@ } +/* Disable USB SMI */ +static void +fixsmi_usb(device_t dev) +{ + uint32_t features; + + dev = pci_find_device(0x1002, 0x4385); + features = pci_read_config(dev, 0x64, 4); + if (features & (1 << 15)) { + printf("Disabling USB SMI on SB7xx\n"); + features &= ~(1 << 15); + pci_write_config(dev, 0x64, features, 4); + } +} + /* * Set the SYSTEM_IDLE_TIMEOUT to 80 ns on nForce2 systems to work * around a hang that is triggered when the CPU generates a very fast -- Andriy Gapon