Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

For background I have just built a new machine with modern hardware including:

  • AMD FX-8350
  • Gigabyte GA-990FXA-UD3 motherboard
  • 16GB RAM
  • NVidia GTX 650 Ti
  • Kingston SSD

Given that, I tried to install various versions of Linux on the SSD and was met with failure almost every time. I tried installing Arch, Debian stable, Debian sid, and Ubuntu 12.10 from a USB thumb drive but while the BIOS saw the USB drive and started to boot from it, as soon as the OS attempted to enumerate the USB devices I lost all USB functionality (including the boot device).

Eventually I burned a DVD and installed Ubuntu 12.10 onto the SSD. It should be noted that my USB keyboard (and mouse) work fine while in the American Megatrends UEFI/BIOS. Even when I'm in the pre-installation menus on the Live Ubuntu DVD the keyboard works fine.

As soon as Linux is booted (either Live DVD or from the SSD) I lose all USB functionality and can only navigate the OS using a PS/2 keyboard.

What I see in the dmesg/syslog is a few lines about "failed to load microcode amd_ucode/microcode_amd_fam15h.bin" and I can see USB devices failing to initialize.

If I do an lsusb I can see all the USB host controllers but none of the devices. Doing an lspci shows me all the hardware I'd expect. And doing an lsmod I do not see any usb modules loaded (usb_ehci for example).

I tried passing noapic to the kernel boot string and it had no effect on this problem.

The motherboard supports USB 3.0 but all the devices I have plugged into normal USB 2.0 ports.

I'm rather baffled at what could be killing/preventing USB (and my on-board network card) from working in Linux. There doesn't seem to be any problem with any of these devices working in BIOS and I do not have a Windows installation available to test and see if it works.

I've already RMA'd the motherboard once but the second one has exactly the same behavior so I think I can safely rule out hardware failure (since the behavior is identical, I don't think the odd of me getting two identically defective boards are greater than the odds of this being a Linux problem).

What else can I try to get USB (and ideally my network, but we'll stick to USB for now) working?

Edit #1:

Since I have no networking I can only relate interesting bits from dmesg here.

Of interest in dmesg I can see I have 11 USB host controllers (OHCI, EHCI, and xHCI). It detects my USB devices and then fails immediately as follows:

usb 3-1: new high-speed USB device number 2 using ehci_hcd
usb 3-1: device descriptor read/64, error -32

That repeats several times incrementing the number and trying other USB Host controllers until it falls back to OHCI controllers which also fail but have an additional message:

usb 8-1: device not accepting address 4, error -32

I think my networking problems have to do with the fact that I don't have IPv6 enabled on my router and that seems to be a problem

eth1: no IPv6 routers present

Edit #2:

lspci -vvv shows that my network adapters (both onboard and expansion) are Realtek Semiconductor (no surprise); RTL8111/8168B and RTL8169/8110 respectively. My USB controllers are Etron Technology EJ168 (xHCI) and AMD nee ATI SB7x0/SB8x0/SB9x0 (EHCI & OHCI)

Now running Debian wheezy modprobe shows usb_common, usbcore, xhci_hcd, ehci_hcd, and ohci_hcd all loaded and functioning.

share|improve this question
    
The failure of loading microcode seems peculiar. I'm thinking about the motherboard not being supported yet or missing microcode package. –  TNW Apr 16 '13 at 13:59
    
It seems like that issue may be able to go away (butterflyofdream.wordpress.com/2012/09/10/…) as this CPU has been out for a while and there are packages that update the microcode. However, I'm wondering how that would prevent USB from working in Linux when USB works in BIOS without issue. Also, until I can figure out why the network device doesn't connect either I won't be able to apply the patch (though an add-in card may let me rule this out tonight). –  BrionS Apr 16 '13 at 14:13
    
I'd rather say that it would be weird the opposite way. BIOS which is supposed to support everything on the motherboard has to work. Linux kind of doesn't. BIOS often supports devices in a simplified way, for example VBE for graphics card - while you wouldn't like to use them instead or regular GPU drivers. –  TNW Apr 16 '13 at 14:24
    
So is there a way for me to force Linux to let the BIOS manage the devices for the USB and network controllers until such time as they are (better?) supported in the Linux kernel? –  BrionS Apr 16 '13 at 14:43
    
I don't think so. The days when all devices were accessed through BIOS are long gone. However, I can't assure you that the problem is due to the lack of drivers. Did you find anything interesting in dmesg, tried to modprobe USB related modules? –  TNW Apr 16 '13 at 15:01

5 Answers 5

up vote 5 down vote accepted

I found the answer from this thread (http://ubuntuforums.org/showthread.php?t=2114055) over at ubuntuforums.org.

It seems with newer Gigabyte mainboards (at least) there is a BIOS option called IOMMU Controller that is disabled by default and gives no clue or indication as to what it is for.

Enabling this setting and rebooting "magically" restores all my USB and networking problems in a 64-bit Linux OS (doesn't matter which one).

I'm am rather shocked and elated that it was such a long search for such a simple fix.

Thanks everyone for your help and suggestions. Hopefully others will find this helpful.

share|improve this answer

FYI, the technical reasons why Linux can't use devices "through" the BIOS: once the OS has transitioned to "protected mode" (32-bit) or "long mode" (64-bit), it can no longer send interrupts to the BIOS. In "real mode" (16-bit, at boot) it can call BIOS interrupts to have disks read, keyboard input, etc.

But it's also got downsides. For one, you don't even have a megabyte of addressable memory. So modern OS's switch out of real mode nearly first thing. (Actually, I believe grub switches to protected mode before it even loads the kernel).

More details: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode

share|improve this answer
    
Thanks @DimeCadmium! Good to know. –  BrionS Apr 17 '13 at 12:51

Oddly enough, even though I have an almost identical setup (same motherboard, FX8350 processor), enabling the IOMMU didn't make any difference for me. Still no USB, networking, etc.

What did help, though, was adding "iommu=soft" to the kernel command line. Now it all works fine (except that, for some strange reason, my Logitech Zone Touch Mouse doesn't work).

share|improve this answer
1  
They're never the same. Even just a few weeks difference in manufacturing dates could mean a new source for a common motherboard component and/or superio revision. Circuit board manufacture is the shady underbelly of computing. –  mikeserv Jun 16 at 4:36

I have the same FX8350 running on a Gigabyte 990FXA-UD3 using OpenSuse 13.1. The solution that worked for me was to edit the bootloader using YAST, the default selection (or the selection you are using to load OpenSuse 13.1 in my case), "iommu=pt" after "quiet showopts".

For example:

"resume=/dev/disk/by-id/ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash=silent quiet showopts iommu=pt"

Now all my USB ports 2.0 and 3.0 are working and my internet networking is working too!. Also make sure IOMMU is enabled in BIOS. I hope this helps someone else.

share|improve this answer

I've got the same proc (but 8-cores) the same MB (rev 3) the same amount of RAM (Kingston)

The tip with IOMMU helped a little - all ports can see a usb keyboard, a monitor usb-hub, and a usb (Realtek) wifi adapter, but no flash drive.

It seems, that this solution helped me:

cd /sys/bus/pci/drivers/ehci_hcd
ls

You will see a file with 0000:00:xx.x format. Execute the following command:

sudo sh -c 'echo -n "0000:00:xx.x" > unbind'

Replace the xx.x with the numbers displayed on your file. It should disable the ehci_hcd.

You can now use the following script to disable ehci_hcd.

cd /sys/bus/pci/drivers/ehci_hcd/
sudo sh -c 'find ./ -name "0000:00:*" -print| sed "s/\.\///">unbind'

http://www.geekdevs.com/2010/04/solved-unable-to-enumerate-usb-device-disabling-ehci_hcd/

share|improve this answer
2  
It would be more helpful if you provided a solution here in text, and only use links for background information and non-essential details. Without that, once your link becomes invalid your answer has no value. –  Anthon May 30 '13 at 10:34

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.