usb/139142: [regression] ehci drivers (NVIDIA nForce4 USB 2.0 controller ) not working with 8.0-RC1

Hans Petter Selasky hselasky at c2i.net
Sat Sep 26 08:20:06 UTC 2009


The following reply was made to PR usb/139142; it has been noted by GNATS.

From: Hans Petter Selasky <hselasky at c2i.net>
To: freebsd-usb at freebsd.org
Cc: "Olivier Cochard-Labbe" <olivier at cochard.me>,
 freebsd-gnats-submit at freebsd.org
Subject: Re: usb/139142: [regression] ehci drivers (NVIDIA nForce4 USB 2.0 controller ) not working with 8.0-RC1
Date: Sat, 26 Sep 2009 09:16:43 +0200

 On Friday 25 September 2009 22:38:14 Olivier Cochard-Labbe wrote:
 > >Number:         139142
 > >Category:       usb
 > >Synopsis:       [regression] ehci drivers (NVIDIA nForce4 USB 2.0
 > > controller ) not working with 8.0-RC1 Confidential:   no
 > >Severity:       serious
 > >Priority:       low
 > >Responsible:    freebsd-usb
 > >State:          open
 > >Quarter:
 > >Keywords:
 > >Date-Required:
 > >Class:          sw-bug
 > >Submitter-Id:   current-users
 > >Arrival-Date:   Fri Sep 25 20:40:02 UTC 2009
 > >Closed-Date:
 > >Last-Modified:
 > >Originator:     Olivier Cochard-Labbe
 > >Release:        8.0 RC1
 > >Organization:
 >
 > FreeNAS/BSDRP
 >
 > >Environment:
 > >Description:
 >
 > I meet a problem since 8.0 Beta1 to 8.0-RC1 (amd64 and i386) on an Asus
 > K8N4-E Deluxe motherboard:
 >
 > During the kernel load, my system hang (no dump, no error message).
 > The last messages are (hand copy) in verbose mode:
 >
 > ohci0: <OHCI (generic) USB controller> irq 21 at device 2.0 on pci0
 > ohci0: Lazy allocation of 0x1000 bytes rid 0x10 type 3 at 0x80000000
 > ohci0: Reserved 0x1000 bytes for rid 0x10 type 3 at 0x80000000
 > ioapic0: routing intpin 21 (PCI IRQ 21) to lapic 0 vector 49
 > ohci0: [MPSAFE]
 > ohci0: [ITHREAD]
 > usbus0: SMM does not respond, resetting
 > usbus0: reset timeout
 > ohci0: USB init failed
 > device_attach: ohci0 attach returned 6
 > ehci0: <NVIDIA nForce4 USB 2.0 controller> irq 22 at device 2.1 on pci0
 > ehci0: Lazy allocation of 0x4000 bytes rid 0x10 type 3 at 0x80000000
 > ehci0: Reserved 0x4000 bytes for rid 0x10 type 3 at 0x80000000
 > ioapci0: routing intpin 22 (PCI IRQ 22) to lapic 0 vector 49
 > ehci0: [MPSAFE]
 > ehci0: [ITHREAD]
 >
 > If I disable the USB 2.0 controller in the BIOS: The system can
 > continue to load the kernel.
 >
 > The ehci drivers works great with FreeBSD 7.2: The file attached include
 > the dmesg and pciconf -lv under FreeBSD 7.2.
 >
 > Thanks,
 >
 > >How-To-Repeat:
 >
 > Using 8.0-RC1 on an Asus K8N4-E Delux motherboard
 >
 > >Fix:
 >
 > Disable USB 2.0 controller in the BIOS.
 >
 > Patch attached with submission follows:
 >
 > [olivier at dev64]~>dmesg
 > Copyright (c) 1992-2009 The FreeBSD Project.
 > Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
 > 	The Regents of the University of California. All rights reserved.
 > FreeBSD is a registered trademark of The FreeBSD Foundation.
 > FreeBSD 7.2-RELEASE-p2 #0: Wed Jun 24 00:14:35 UTC 2009
 >     root at amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC
 > Timecounter "i8254" frequency 1193182 Hz quality 0
 > CPU: AMD Athlon(tm) 64 Processor 3000+ (2010.31-MHz K8-class CPU)
 >   Origin = "AuthenticAMD"  Id = 0x20fc2  Stepping = 2
 >  
 > Features=0x78bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA
 >,CMOV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2> Features2=0x1<SSE3>
 >   AMD Features=0xe2500800<SYSCALL,NX,MMX+,FFXSR,LM,3DNow!+,3DNow!>
 >   AMD Features2=0x1<LAHF>
 > usable memory = 2134417408 (2035 MB)
 > avail memory  = 2058027008 (1962 MB)
 > ACPI APIC Table: <Nvidia AWRDACPI>
 > ioapic0 <Version 1.1> irqs 0-23 on motherboard
 > kbd1 at kbdmux0
 > acpi0: <Nvidia AWRDACPI> on motherboard
 > acpi0: [ITHREAD]
 > acpi0: Power Button (fixed)
 > acpi0: reservation of 0, a0000 (3) failed
 > acpi0: reservation of 100000, 7fef0000 (3) failed
 > Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
 > acpi_timer0: <24-bit timer at 3.579545MHz> port 0x4008-0x400b on acpi0
 > acpi_button0: <Power Button> on acpi0
 > pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
 > pci0: <ACPI PCI bus> on pcib0
 > pci0: <memory> at device 0.0 (no driver attached)
 > isab0: <PCI-ISA bridge> at device 1.0 on pci0
 > isa0: <ISA bus> on isab0
 > pci0: <serial bus, SMBus> at device 1.1 (no driver attached)
 > ohci0: <OHCI (generic) USB controller> mem 0xd3003000-0xd3003fff irq 21 at
 > device 2.0 on pci0 ohci0: [GIANT-LOCKED]
 > ohci0: [ITHREAD]
 > usb0: OHCI version 1.0, legacy support
 > usb0: SMM does not respond, resetting
 > usb0: <OHCI (generic) USB controller> on ohci0
 > usb0: USB revision 1.0
 > uhub0: <nVidia OHCI root hub, class 9/0, rev 1.00/1.00, addr 1> on usb0
 > uhub0: 10 ports with 10 removable, self powered
 > atapci0: <nVidia nForce CK804 UDMA133 controller> port
 > 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xf000-0xf00f at device 6.0 on pci0
 > ata0: <ATA channel 0> on atapci0
 > ata0: [ITHREAD]
 > ata1: <ATA channel 1> on atapci0
 > ata1: [ITHREAD]
 > atapci1: <nVidia nForce CK804 SATA300 controller> port
 > 0x9f0-0x9f7,0xbf0-0xbf3,0x970-0x977,0xb70-0xb73,0xd800-0xd80f mem
 > 0xd3002000-0xd3002fff irq 22 at device 7.0 on pci0 atapci1: [ITHREAD]
 > ata2: <ATA channel 0> on atapci1
 > ata2: [ITHREAD]
 > ata3: <ATA channel 1> on atapci1
 > ata3: [ITHREAD]
 > atapci2: <nVidia nForce CK804 SATA300 controller> port
 > 0x9e0-0x9e7,0xbe0-0xbe3,0x960-0x967,0xb60-0xb63,0xc400-0xc40f mem
 > 0xd3001000-0xd3001fff irq 23 at device 8.0 on pci0 atapci2: [ITHREAD]
 > ata4: <ATA channel 0> on atapci2
 > ata4: [ITHREAD]
 > ata5: <ATA channel 1> on atapci2
 > ata5: [ITHREAD]
 > pcib1: <ACPI PCI-PCI bridge> at device 9.0 on pci0
 > pci5: <ACPI PCI bus> on pcib1
 > nfe0: <NVIDIA nForce4 CK804 MCP9 Networking Adapter> port 0xb000-0xb007 mem
 > 0xd3000000-0xd3000fff irq 21 at device 10.0 on pci0 miibus0: <MII bus> on
 > nfe0
 > e1000phy0: <Marvell 88E1111 Gigabit PHY> PHY 15 on miibus0
 > e1000phy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseTX-FDX,
 > auto nfe0: Ethernet address: 00:13:d4:d6:3a:7b
 > nfe0: [FILTER]
 > pcib2: <ACPI PCI-PCI bridge> at device 11.0 on pci0
 > pci4: <ACPI PCI bus> on pcib2
 > pcib3: <ACPI PCI-PCI bridge> at device 12.0 on pci0
 > pci3: <ACPI PCI bus> on pcib3
 > pcib4: <ACPI PCI-PCI bridge> at device 13.0 on pci0
 > pci2: <ACPI PCI bus> on pcib4
 > pcib5: <ACPI PCI-PCI bridge> at device 14.0 on pci0
 > pci1: <ACPI PCI bus> on pcib5
 > vgapci0: <VGA-compatible display> mem
 > 0xd0000000-0xd0ffffff,0xc0000000-0xcfffffff,0xd1000000-0xd1ffffff irq 18 at
 > device 0.0 on pci1 acpi_tz0: <Thermal Zone> on acpi0
 > sio0: configured irq 4 not in bitmap of probed irqs 0
 > sio0: port may not be enabled
 > sio0: configured irq 4 not in bitmap of probed irqs 0
 > sio0: port may not be enabled
 > sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on
 > acpi0 sio0: type 16550A
 > sio0: [FILTER]
 > cpu0: <ACPI CPU> on acpi0
 > acpi_throttle0: <ACPI CPU Throttling> on cpu0
 > powernow0: <Cool`n'Quiet K8> on cpu0
 > orm0: <ISA Option ROM> at iomem 0xd0000-0xd3fff on isa0
 > atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0
 > atkbd0: <AT Keyboard> irq 1 on atkbdc0
 > kbd0 at atkbd0
 > atkbd0: [GIANT-LOCKED]
 > atkbd0: [ITHREAD]
 > ppc0: cannot reserve I/O port range
 > sc0: <System console> at flags 0x100 on isa0
 > sc0: VGA <16 virtual consoles, flags=0x300>
 > sio1: configured irq 3 not in bitmap of probed irqs 0
 > sio1: port may not be enabled
 > vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
 > uhub1: <BTC USB Keyboard, class 9/0, rev 1.10/0.03, addr 2> on uhub0
 > uhub1: 2 ports with 1 removable, bus powered
 > ukbd0: <BTC USB Keyboard, class 0/0, rev 1.10/0.03, addr 3> on uhub1
 > kbd2 at ukbd0
 > uhid0: <BTC USB Keyboard, class 0/0, rev 1.10/0.03, addr 3> on uhub1
 > ums0: <vendor 0x04b3 USB Optical Mouse, class 0/0, rev 2.00/2.00, addr 4>
 > on uhub1 ums0: 3 buttons and Z dir.
 > Timecounter "TSC" frequency 2010312369 Hz quality 800
 > Timecounters tick every 1.000 msec
 > ad0: 286168MB <SAMSUNG HD300LD WK100-12> at ata0-master UDMA100
 > ad8: 953869MB <SAMSUNG HD103UJ 1AA01113> at ata4-master SATA150
 > GEOM: ad0: the secondary GPT table is corrupt or invalid.
 > GEOM: ad0: using the primary only -- recovery suggested.
 > GEOM_LABEL: Label for provider ad0p1 is ufsid/477f45096d16161b.
 > GEOM_LABEL: Label for provider ad0p1 is ufs/Disque1.
 > GEOM_LABEL: Label for provider ad0s1a is ufsid/4a675b954a5764b7.
 > GEOM_LABEL: Label for provider ad8p1 is ufsid/499c8ec590cbe4cd.
 > GEOM_LABEL: Label for provider ad8p1 is ufs/1TB3.
 > Trying to mount root from ufs:/dev/ad0s1a
 > GEOM_LABEL: Label ufs/Disque1 removed.
 > GEOM_LABEL: Label ufsid/477f45096d16161b removed.
 > GEOM_LABEL: Label ufsid/4a675b954a5764b7 removed.
 > GEOM_LABEL: Label for provider ad0s1a is ufsid/4a675b954a5764b7.
 > GEOM_LABEL: Label ufsid/4a675b954a5764b7 removed.
 > GEOM_LABEL: Label ufsid/499c8ec590cbe4cd removed.
 > WARNING: /mnt was not properly dismounted
 > kqemu version 0x00010400
 > kqemu: KQEMU installed, max_locked_mem=1042196kB.
 > [olivier at dev64]~>pciconf -lv
 > none0 at pci0:0:0:0:	class=0x058000 card=0x815a1043 chip=0x005e10de rev=0xa3
 > hdr=0x00 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 Memory Controller'
 >     class      = memory
 > isab0 at pci0:0:1:0:	class=0x060100 card=0x815a1043 chip=0x005010de rev=0xa3
 > hdr=0x00 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 PCI to ISA Bridge'
 >     class      = bridge
 >     subclass   = PCI-ISA
 > none1 at pci0:0:1:1:	class=0x0c0500 card=0x815a1043 chip=0x005210de rev=0xa2
 > hdr=0x00 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 SMBus'
 >     class      = serial bus
 >     subclass   = SMBus
 > ohci0 at pci0:0:2:0:	class=0x0c0310 card=0x815a1043 chip=0x005a10de rev=0xa2
 > hdr=0x00 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 USB Controller'
 >     class      = serial bus
 >     subclass   = USB
 > atapci0 at pci0:0:6:0:	class=0x01018a card=0x815a1043 chip=0x005310de rev=0xf2
 > hdr=0x00 vendor     = 'Nvidia Corp'
 >     device     = 'NVidia nForce 4 SLI IDE Controller'
 >     class      = mass storage
 >     subclass   = ATA
 > atapci1 at pci0:0:7:0:	class=0x010185 card=0x815a1043 chip=0x005410de rev=0xf3
 > hdr=0x00 vendor     = 'Nvidia Corp'
 >     device     = 'NVidia nForce 4 SLI IDE Controller'
 >     class      = mass storage
 >     subclass   = ATA
 > atapci2 at pci0:0:8:0:	class=0x010185 card=0x815a1043 chip=0x005510de rev=0xf3
 > hdr=0x00 vendor     = 'Nvidia Corp'
 >     device     = 'NVidia nForce 4 SLI IDE Controller'
 >     class      = mass storage
 >     subclass   = ATA
 > pcib1 at pci0:0:9:0:	class=0x060401 card=0x00000000 chip=0x005c10de rev=0xa2
 > hdr=0x01 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 PCI Bridge'
 >     class      = bridge
 >     subclass   = PCI-PCI
 > nfe0 at pci0:0:10:0:	class=0x068000 card=0x81411043 chip=0x005710de rev=0xa3
 > hdr=0x00 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 Ultra NVidia Network Bus Enumerator'
 >     class      = bridge
 > pcib2 at pci0:0:11:0:	class=0x060400 card=0x00000000 chip=0x005d10de rev=0xa3
 > hdr=0x01 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 PCIe Bridge'
 >     class      = bridge
 >     subclass   = PCI-PCI
 > pcib3 at pci0:0:12:0:	class=0x060400 card=0x00000000 chip=0x005d10de rev=0xa3
 > hdr=0x01 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 PCIe Bridge'
 >     class      = bridge
 >     subclass   = PCI-PCI
 > pcib4 at pci0:0:13:0:	class=0x060400 card=0x00000000 chip=0x005d10de rev=0xa3
 > hdr=0x01 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 PCIe Bridge'
 >     class      = bridge
 >     subclass   = PCI-PCI
 > pcib5 at pci0:0:14:0:	class=0x060400 card=0x00000000 chip=0x005d10de rev=0xa3
 > hdr=0x01 vendor     = 'Nvidia Corp'
 >     device     = 'nForce4 PCIe Bridge'
 >     class      = bridge
 >     subclass   = PCI-PCI
 > hostb0 at pci0:0:24:0:	class=0x060000 card=0x00000000 chip=0x11001022 rev=0x00
 > hdr=0x00 vendor     = 'Advanced Micro Devices (AMD)'
 >     device     = '(K8) Athlon 64/Opteron HyperTransport Technology
 > Configuration' class      = bridge
 >     subclass   = HOST-PCI
 > hostb1 at pci0:0:24:1:	class=0x060000 card=0x00000000 chip=0x11011022 rev=0x00
 > hdr=0x00 vendor     = 'Advanced Micro Devices (AMD)'
 >     device     = '(K8) Athlon 64/Opteron Address Map'
 >     class      = bridge
 >     subclass   = HOST-PCI
 > hostb2 at pci0:0:24:2:	class=0x060000 card=0x00000000 chip=0x11021022 rev=0x00
 > hdr=0x00 vendor     = 'Advanced Micro Devices (AMD)'
 >     device     = '(K8) Athlon 64/Opteron DRAM Controller'
 >     class      = bridge
 >     subclass   = HOST-PCI
 > hostb3 at pci0:0:24:3:	class=0x060000 card=0x00000000 chip=0x11031022 rev=0x00
 > hdr=0x00 vendor     = 'Advanced Micro Devices (AMD)'
 >     device     = '(K8) Athlon 64/Opteron Miscellaneous Control'
 >     class      = bridge
 >     subclass   = HOST-PCI
 > vgapci0 at pci0:1:0:0:	class=0x030000 card=0x00000000 chip=0x01d310de rev=0xa1
 > hdr=0x00 vendor     = 'Nvidia Corp'
 >     device     = 'GeForce 7300 SE'
 >     class      = display
 >     subclass   = VGA
 >
 > >Release-Note:
 > >Audit-Trail:
 > >Unformatted:
 
 Have you tried only disabling USB Legacy support?
 
 There is another USB related thread going on:
 
 "sb600/sb700 ohci experimental patch" on -current.
 
 Have you tried any patches from there?
 
 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;
 +       }
 
 --HPS
 


More information about the freebsd-usb mailing list