Legacy USB <-> IOMMU conflict in openSUSE-11.4-x86_64

I recently built a new machine w/ an ASUS M5A99XEVO mobo and an AMD PhenomII x6 1100T CPU. One of the “features” of this mobo is that there’s only one PS/2 port for KB or mouse (I tried using a Y-connector for an old laptop, but the BIOS couldn’t find the KB). So I went with a PS/2 KB & USB mouse. Unfortunately, openSUSE doesn’t respond to the mouse when IOMMU is enabled in the BIOS, although it does see it when IOMMU is disabled. The UEFI BIOS responds to the mouse regardless of the IOMMU setting.

The 32-bit variant of openSUSE 11.4 also responds to the mouse regardless of the IOMMU setting.

Fedora 15 (x86_64) acts exactly the same as openSUSE.

The mobo had the original (0402) BIOS version, so I tried the 2 newer versions from the ASUS web site. It didn’t help.

I’m willing to accept that it’s a BIOS issue if someone can explain to me why openSUSE 11.4 i586 doesn’t have this issue.

If it is a BIOS issue, I need help gathering the appropriate data to prove it to ASUS. Like, where in memory do I need to look to see what the BIOS is reporting vis-a-vis registered I/O, memory, and storage devices.

If I’m reading the docs correctly, I need to have IOMMU enabled to run KVM virtualization on x86_64, so disabling IOMMU is NOT a viable option.

TIA for any help,
ron

I got to thinking about some of the other issues I had trying to do the initial install, so I tried a couple of additional tests. I find that the only I/O that works when IOMMU is enabled are the video, SATA (rotating media), and the PS/2 keyboard.

The system doesn’t recognize a USB thumb drive. It doesn’t matter if it’s present at boot time (the BIOS does find it) or if it’s inserted after the system comes up. The lsusb command only reports the usb host controllers and “ls -l /dev/disk/by-label” only shows labeled partitions of the SATA HD drive.

Ethernet doesn’t work. It won’t get an IPv4 address via DHCP so I went into YAST and configured a static address with appropriate netmask, gateway and DNS entries. When I try pinging an IPv4 address (192.168.0.x) there’s no visible network activity (no LEDS flash) and all packets re reported as lost.

As soon as I disable IOMMU in the BIOS, everything works as expected. There is, however an entry in dmesg stating that I need to enable IOMMU.

I’m open to suggestions.

ron

Executive summary:
It’s a bad BIOS, fixed in version 0813.

The IVRS (I/o Virtualiztion Reporting Structure) Table in the ACPI table was apparently malformed and the kernel couldn’t parse it, so it just ignored it. I’ve very little doubt that this is what’s also afflicting folks with the Crosshair V Formula and Sabertooth 990FX series motherboards.

Unfortunately, there’s still at least one more BIOS issue which I describe in /t/dmesg-acpi-error-ae-not-found-should-i-be-concerned/74325/1.

I hope this helps someone out there.

ron

Sorry to bump this but I have to mention that this is effecting the Sabertooth 990FX and the M5A97EVO and is still present in it’s latest BIOS’s and still effects openSUSE 12.1.

Sorry to hear that. I took my Asus board back (an advantage of buying from a local retailer) and bought a Gigabyte GA-990FX-UD5 after seeing posts indicating that Gigabyte has done it right. They haven’t. The Gigabyte board doesn’t have the USB/network issue, but the AMD-Vi IOMMU still doesn’t work.

I recall seeing a message (which I can’t find again right now) stating that the BIOS had to “enable the IOMMU or have an IVRS ACPI table” in order to get the IOMMU to function. Based on my reading of the kernel sources, I believe that “or” needs to be “and”. That is, both an IVRS table AND an enabled IOMMU have to occur before the IOMMU will function correctly.

Rampant speculation follows
The mobo vendors believe they are doing it correctly, but they aren’t. And short of some intervention by the kernel dev folks at AMD, the BIOS issues won’t be corrected.
End rampant speculation

You are correct WRT 11.4 vs. 12.1 of openSUSE. The AMD-Vi functionality has been in the kernel since 2.6.29rc1, but there have been subsequent patches for bugfixes. These patches have all been applied prior to the 2.6.28 or 3.1 kernels in openSUSE 11.4 & 12.1.

ron

An obvious typo. That should be the 2.6.38 kernel. sorry

Another reason for my belief that the IOMMU must be enabled AND an IVRS table must be present is due to the fact that the 0813 BIOS for the M5A99X EVO had a sub-menu item in the “Enable IOMMU” menu also called (IIRC) “Enable IOMMU”. It wasn’t until both menu items were enabled that the USB/NIC i/o functioned correctly.

I didn’t know enough at the time to check for the existence of the file /sys/firmware/acpi/tables/IVRS. This is a small binary file with root-only access permissions which is a copy of the IVRS table passed to the kernel by the BIOS. If you want to examine it, I recommend making a copy in your home directory and doing a chown(1) so you can examine it with a hex editor or od(1). That file exists on my Gigabyte system, does it exist on your (deanjo13) ASUS boards?