diff options
| author | Joerg Roedel <joerg.roedel@amd.com> | 2012-06-12 12:09:35 +0200 | 
|---|---|---|
| committer | Joerg Roedel <joerg.roedel@amd.com> | 2012-07-17 12:14:58 +0200 | 
| commit | 643511b37eb72d831646bacafaeace1eeadf5a54 (patch) | |
| tree | b541b53f37fe8a49b4edccd96c924099dfaee201 /drivers/iommu/amd_iommu_init.c | |
| parent | 4d121c3256edc66fe8a8e7f975eba72add120a26 (diff) | |
| download | olio-linux-3.10-643511b37eb72d831646bacafaeace1eeadf5a54.tar.xz olio-linux-3.10-643511b37eb72d831646bacafaeace1eeadf5a54.zip  | |
iommu/amd: Introduce early_amd_iommu_init routine
Split out the code to parse the ACPI table and setup
relevant data structures into a new function.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Diffstat (limited to 'drivers/iommu/amd_iommu_init.c')
| -rw-r--r-- | drivers/iommu/amd_iommu_init.c | 38 | 
1 files changed, 23 insertions, 15 deletions
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index b18034a8fdb..a5dbefb8e26 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -1491,17 +1491,14 @@ static void __init free_on_init_error(void)   * After everything is set up the IOMMUs are enabled and the necessary   * hotplug and suspend notifiers are registered.   */ -int __init amd_iommu_init_hardware(void) +static int __init early_amd_iommu_init(void)  {  	struct acpi_table_header *ivrs_base;  	acpi_size ivrs_size;  	acpi_status status;  	int i, ret = 0; -	if (no_iommu || (iommu_detected && !gart_iommu_aperture)) -		return -ENODEV; - -	if (amd_iommu_disabled || !amd_iommu_detected) +	if (!amd_iommu_detected)  		return -ENODEV;  	if (amd_iommu_dev_table != NULL) { @@ -1588,16 +1585,6 @@ int __init amd_iommu_init_hardware(void)  	if (ret)  		goto free; -	ret = amd_iommu_init_pci(); -	if (ret) -		goto free; - -	enable_iommus(); - -	amd_iommu_init_notifier(); - -	register_syscore_ops(&amd_iommu_syscore_ops); -  out:  	/* Don't leak any ACPI memory */  	early_acpi_os_unmap_memory((char __iomem *)ivrs_base, ivrs_size); @@ -1611,6 +1598,27 @@ free:  	goto out;  } +int __init amd_iommu_init_hardware(void) +{ +	int ret = 0; + +	ret = early_amd_iommu_init(); +	if (ret) +		return ret; + +	ret = amd_iommu_init_pci(); +	if (ret) +		return ret; + +	enable_iommus(); + +	amd_iommu_init_notifier(); + +	register_syscore_ops(&amd_iommu_syscore_ops); + +	return ret; +} +  static int amd_iommu_enable_interrupts(void)  {  	struct amd_iommu *iommu;  |