I updated my desktop computer to Fedora 12 Beta, or maybe I should say Rawhide because there are already lots of updated packages after the Beta release.
The computer has the Intel DP35DP motherboard. When I tried to boot the Fedora 12 Beta kernel, which is 2.6.31.something, can’t remember the exact version anymore, the kernel printed lots of iommu and usb error messages on the screen and USB didn’t seem to work at all. The motherboard doesn’t have any PS/2 ports, so I would have needed USB support to use the keyboard and the mouse.
I downloaded the latest Fedora 12 and Fedora 11 kernels on my laptop from Koji, put the packages on a USB stick, booted the desktop computer with the Fedora 11 DVD in a rescue mode and installed the kernels to the system. Even the newest Fedora 12 kernel (188.8.131.52-rc1 based) had problems, but the newest Fedora 11 kernel (184.108.40.206-rc3 based) worked, which was a win.
Now I was able to read the logs written while the kernel failure happened, which included stuff like this:
kernel: DMAR:Host address width 36
kernel: DMAR:DRHD base: 0x000000feb00000 flags: 0x0
kernel: ------------[ cut here ]------------
kernel: WARNING: at drivers/pci/dmar.c:642 alloc_iommu+0x12c/0x286() (Not tainted)
kernel: Hardware name:
kernel: Your BIOS is broken; DMAR reported at address feb00000 returns all ones!
kernel: BIOS vendor: Intel Corp.; Ver: DPP3510J.86A.0293.2007.1002.1519; Product Version:
kernel: Modules linked in:
kernel: Pid: 1, comm: swapper Not tainted 220.127.116.11-56.fc12.x86_64 #1
kernel: Call Trace:
kernel:  warn_slowpath_common+0x95/0xc3
kernel:  warn_slowpath_fmt+0x50/0x66
kernel:  alloc_iommu+0x12c/0x286
kernel:  ? dmar_table_init+0x178/0x3d7
kernel:  dmar_table_init+0x1ee/0x3d7
kernel:  ? task_rq_unlock+0x24/0x3a
kernel:  enable_IR_x2apic+0x21/0x218
kernel:  native_smp_prepare_cpus+0x13c/0x384
kernel:  kernel_init+0x93/0x29b
kernel:  child_rip+0xa/0x20
kernel:  ? restore_args+0x0/0x30
kernel:  ? kernel_init+0x0/0x29b
kernel:  ? child_rip+0x0/0x20
kernel: ---[ end trace a7919e7f17c0a725 ]---
kernel: DMAR:parse DMAR table failure.
The rest of the log was filled with entries such as
kernel: nommu_map_single: overflow 1236419b0+8 of device mask ffffffff
kernel: usb 3-1: device not accepting address 5, error -32
kernel: hub 3-0:1.0: unable to enumerate USB device on port 1
At least the error message was clear, “Your BIOS is broken”. So I went to the motherboard’s product page and found out the BIOS on the motherboard was about two years old and the newest available BIOS is from July this year.
I tried updating the BIOS with Intel’s Windows tool (I also have a Windows installation), but that just shut down the system without performing the update. Next I tried their Linux-based BIOS update boot CD, but it had the same effect, the system shut down, no BIOS update.
With a bit of googling I found the instructions for doing a recovery BIOS update, which means removing the BIOS jumper from the motherboard and booting the computer with a FAT formatted USB stick containing the BIOS file attached. This finally succeeded and the motherboard now has the newest BIOS. With it, the new kernel boots just fine 🙂
After all this rambling, the main point I want to say is: If you have an Intel DP35DP motherboard and Fedora 12 has USB problems, update the BIOS. You may have to do that with the recovery method, if nothing else works.
Edit: As far as I can tell, bug 524808 is about the same issue. It seems like the developers are planning a workaround, but a BIOS which behaves this way is apparently really broken, so you probably should just update it anyway.
Edit 2: This was asked about in the comment section, the original BIOS my motherboard had was DPP3510J.86A.0293.2007.1002.1519 and the new one is DPP3510J.86A.0572.2009.0715.2346.
Edit 3: Chuck Ebbert mentions in the bug report that adding iommu=soft to the kernel parameters will disable the Intel IOMMU, which should work around this problem and let your system boot even with an older BIOS.