The mtrr type mismatch messages are relatively harmless by itself -- they happen even on perfectly working machines. In particular uncachable->write combing is a standard transition that happens often -- the BIOS left a uncachable memory region and the X server or the frame buffer decides to turn it WC for better performance.
3) How do I get the system to put the IOMMU somewhere in the range it stole under 4G (so Linux can use it)? Can Linux move this on its own accord?
The IOMMU should work, you just lose 128MB of memory because its aperture will be mapped over memory as fallback. I don't think that is your problem.
Linux can move this on it's own accord, but until you fix the MTRRs (which Linux can't currently do),
What Linux can't do is to fix it up automatically. But it should be possible to do it manually after boot (although the interface is a bit weird). See /usr/src/linux/Documentation/mtrr.txt The MTRR driver should be able to change any MTRRs using this.
reg00: base=0xc0000000 (3072MB), size=1024MB: uncachable, count=1 reg01: base=0x00000000 ( 0MB), size=4096MB: write-back, count=1
Looking at your log it might be enough to change reg01 to end at 3072MB
it isn't going to help.
If you're feeling adventurous, you check to see if there are any patches available to enable PAT. I know Andi was/is working on them, but I'm not sure how far along he is.
PAT is still work in progress, I'm sorry. Even after it's done I'm not sure it would help in this particular case -- at least not without patching the X server. Norm Another option to get the machine working quickly might be to take out 1 or 2GB of memory. Most of these problems only happen because many BIOS are not very good at handling memory bumping into the PCI hole. -Andi