]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/iommu/amd_iommu_init.c
Merge branches 'pm-core', 'pm-qos', 'pm-domains' and 'pm-opp'
[linux.git] / drivers / iommu / amd_iommu_init.c
index 971154cbbb03eb36efc7fb60608afe23d48f38a2..04cdac7ab3e34bbcc3a4cba19fbb57d44129549b 100644 (file)
@@ -94,6 +94,8 @@
  * out of it.
  */
 
+extern const struct iommu_ops amd_iommu_ops;
+
 /*
  * structure describing one IOMMU in the ACPI table. Typically followed by one
  * or more ivhd_entrys.
@@ -1635,9 +1637,10 @@ static int iommu_init_pci(struct amd_iommu *iommu)
        amd_iommu_erratum_746_workaround(iommu);
        amd_iommu_ats_write_check_workaround(iommu);
 
-       iommu->iommu_dev = iommu_device_create(&iommu->dev->dev, iommu,
-                                              amd_iommu_groups, "ivhd%d",
-                                              iommu->index);
+       iommu_device_sysfs_add(&iommu->iommu, &iommu->dev->dev,
+                              amd_iommu_groups, "ivhd%d", iommu->index);
+       iommu_device_set_ops(&iommu->iommu, &amd_iommu_ops);
+       iommu_device_register(&iommu->iommu);
 
        return pci_enable_device(iommu->dev);
 }
@@ -2209,14 +2212,13 @@ static void __init free_dma_resources(void)
 static int __init early_amd_iommu_init(void)
 {
        struct acpi_table_header *ivrs_base;
-       acpi_size ivrs_size;
        acpi_status status;
        int i, remap_cache_sz, ret = 0;
 
        if (!amd_iommu_detected)
                return -ENODEV;
 
-       status = acpi_get_table_with_size("IVRS", 0, &ivrs_base, &ivrs_size);
+       status = acpi_get_table("IVRS", 0, &ivrs_base);
        if (status == AE_NOT_FOUND)
                return -ENODEV;
        else if (ACPI_FAILURE(status)) {
@@ -2231,7 +2233,7 @@ static int __init early_amd_iommu_init(void)
         */
        ret = check_ivrs_checksum(ivrs_base);
        if (ret)
-               return ret;
+               goto out;
 
        amd_iommu_target_ivhd_type = get_highest_supported_ivhd_type(ivrs_base);
        DUMP_printk("Using IVHD type %#x\n", amd_iommu_target_ivhd_type);
@@ -2338,7 +2340,7 @@ static int __init early_amd_iommu_init(void)
 
 out:
        /* Don't leak any ACPI memory */
-       early_acpi_os_unmap_memory((char __iomem *)ivrs_base, ivrs_size);
+       acpi_put_table(ivrs_base);
        ivrs_base = NULL;
 
        return ret;
@@ -2362,10 +2364,9 @@ static int amd_iommu_enable_interrupts(void)
 static bool detect_ivrs(void)
 {
        struct acpi_table_header *ivrs_base;
-       acpi_size ivrs_size;
        acpi_status status;
 
-       status = acpi_get_table_with_size("IVRS", 0, &ivrs_base, &ivrs_size);
+       status = acpi_get_table("IVRS", 0, &ivrs_base);
        if (status == AE_NOT_FOUND)
                return false;
        else if (ACPI_FAILURE(status)) {
@@ -2374,7 +2375,7 @@ static bool detect_ivrs(void)
                return false;
        }
 
-       early_acpi_os_unmap_memory((char __iomem *)ivrs_base, ivrs_size);
+       acpi_put_table(ivrs_base);
 
        /* Make sure ACS will be enabled during PCI probe */
        pci_request_acs();