This config option (DMAR_FLPY_WA) sets up 1:1 mapping for the floppy device so that the floppy device which does not use DMA api's will continue to work. Signed-off-by: Anil S Keshavamurthy --- arch/x86_64/Kconfig | 10 ++++++++++ drivers/pci/intel-iommu.c | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+) Index: linux-2.6.22-rc3/arch/x86_64/Kconfig =================================================================== --- linux-2.6.22-rc3.orig/arch/x86_64/Kconfig 2007-06-04 12:41:11.000000000 -0700 +++ linux-2.6.22-rc3/arch/x86_64/Kconfig 2007-06-04 12:41:23.000000000 -0700 @@ -738,6 +738,16 @@ all the OS visible memory. Hence the driver can continue to use physical addresses for DMA. +config DMAR_FLPY_WA + bool "Support for Floppy disk workaround" + depends on DMAR + default y + help + Floppy disk drivers are know to by pass dma api calls + their by failing to work when IOMMU is enabled. This + work around will setup a 1 to 1 mappings for the first + 16M to make floppy(isa device) work. + source "drivers/pci/pcie/Kconfig" source "drivers/pci/Kconfig" Index: linux-2.6.22-rc3/drivers/pci/intel-iommu.c =================================================================== --- linux-2.6.22-rc3.orig/drivers/pci/intel-iommu.c 2007-06-04 12:41:11.000000000 -0700 +++ linux-2.6.22-rc3/drivers/pci/intel-iommu.c 2007-06-04 12:41:23.000000000 -0700 @@ -1584,6 +1584,25 @@ } #endif +#ifdef CONFIG_DMAR_FLPY_WA +static void iommu_prepare_isa(void) +{ + struct pci_dev *pdev = NULL; + int ret; + + pdev = pci_get_class (PCI_CLASS_BRIDGE_ISA << 8, NULL); + if (!pdev) + return; + + printk (KERN_INFO "IOMMU: Prepare 0-16M unity mapping for LPC\n"); + ret = iommu_prepare_identity_map(pdev, 0, 16*1024*1024); + + if (ret) + printk ("IOMMU: Failed to create 0-64M identity map, Floppy might not work\n"); + +} +#endif + int __init init_dmars(void) { struct dmar_drhd_unit *drhd; @@ -1643,6 +1662,10 @@ iommu_prepare_gfx_mapping(); #endif +#ifdef CONFIG_DMAR_FLPY_WA + iommu_prepare_isa(); +#endif + /* * for each drhd * enable fault log -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/