VIA chipsets are broken and don't work with IOMMU enabled. For some mysterious
reason (the IOMMU logic is actually in the CPU) they manage to corrupt all
data going through the aperture to PCI devices.
There was a workaround previously that enabled the slower softmmu when VIA is
detected on the normal IOMMU path (when there is more than 3GB of memory). But
CONFIG_IOMMU_DEBUG took a short cut that was not handled, which ended up with
VIA systems not booting when this option is enabled.
This patch enables the workaround with CONFIG_IOMMU_DEBUG/iommu=force too
switch (vendor) {
case PCI_VENDOR_ID_VIA:
#ifdef CONFIG_GART_IOMMU
- if (end_pfn >= (0xffffffff>>PAGE_SHIFT) &&
+ if ((end_pfn >= (0xffffffff>>PAGE_SHIFT) ||
+ force_iommu) &&
!iommu_aperture_allowed) {
printk(KERN_INFO
"Looks like a VIA chipset. Disabling IOMMU. Overwrite with \"iommu=allowed\"\n");