lkml.org 
[lkml]   [2007]   [Apr]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[Intel IOMMU][patch 7/8] Support for legacy ISA devices
    Floppy disk drivers dont work well with DMA remapping. Its possible to 
    extend the current use for x86_64, but the gain is very little. If someone
    feels compelled to clean this up, its up for grabs. Since these use 16M, we
    just provide a unity map for the ISA bridge device.

    Signed-off-by: Ashok Raj <ashok.raj@intel.com>
    Signed-off-by: Shaohua Li <shaohua.li@intel.com>
    ------------------------------------
    Index: linux-2.6.21-rc5/Documentation/kernel-parameters.txt
    ===================================================================
    --- linux-2.6.21-rc5.orig/Documentation/kernel-parameters.txt 2007-04-17 05:41:56.000000000 -0700
    +++ linux-2.6.21-rc5/Documentation/kernel-parameters.txt 2007-04-17 05:41:59.000000000 -0700
    @@ -730,6 +730,11 @@
    the IOMMU driver to set a unity map for all OS
    visible memory. Hence the driver can continue to use
    physical addresses for DMA.
    + noisamap
    + This option is required to setup identify map for
    + first 16M. The floppy disk could be modified to use
    + the DMA api's but thats a lot of pain for very small
    + gain. This option is turned on by default.
    io7= [HW] IO7 for Marvel based alpha systems
    See comment before marvel_specify_io7 in
    arch/alpha/kernel/core_marvel.c.
    Index: linux-2.6.21-rc5/drivers/pci/intel-iommu.c
    ===================================================================
    --- linux-2.6.21-rc5.orig/drivers/pci/intel-iommu.c 2007-04-17 05:41:53.000000000 -0700
    +++ linux-2.6.21-rc5/drivers/pci/intel-iommu.c 2007-04-17 05:41:59.000000000 -0700
    @@ -37,6 +37,8 @@
    #include "pci.h"

    #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
    +#define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
    +
    #define IOAPIC_RANGE_START (0xfee00000)
    #define IOAPIC_RANGE_END (0xfeefffff)
    #define IOAPIC_RANGE_SIZE (IOAPIC_RANGE_END - IOAPIC_RANGE_START + 1)
    @@ -87,6 +89,7 @@

    static int dmar_disabled, dmar_force_rw;
    static int dmar_map_gfx = 1, dmar_no_gfx_identity_map = 1;
    +static int dmar_fix_isa = 1;

    static char *get_fault_reason(u8 fault_reason)
    {
    @@ -113,6 +116,9 @@
    } else if (!strncmp(str, "gfx_workaround", 14)) {
    dmar_no_gfx_identity_map = 0;
    printk(KERN_INFO"Intel-IOMMU: do 1-1 mapping whole physical memory for GFX device\n");
    + } else if (!strncmp(str, "noisamap", 8)) {
    + dmar_fix_isa = 0;
    + printk (KERN_INFO"Intel-IOMMU: Turning off 16M unity map for LPC\n");
    }

    str += strcspn(str, ",");
    @@ -1582,6 +1588,25 @@
    }
    }

    +static void iommu_prepare_isa(void)
    +{
    + struct pci_dev *pdev = NULL;
    + int ret;
    +
    + if (!dmar_fix_isa)
    + return;
    +
    + 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");
    +
    +}
    int __init init_dmars(void)
    {
    struct dmar_drhd_unit *drhd;
    @@ -1638,6 +1663,7 @@
    end_for_each_rmrr_device(rmrr, pdev)

    iommu_prepare_gfx_mapping();
    + iommu_prepare_isa();

    /*
    * for each drhd
    --
    -
    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/

    \
     
     \ /
      Last update: 2007-04-24 17:15    [W:4.834 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site