diff options
| author | Joerg Roedel <joerg.roedel@amd.com> | 2012-06-12 16:51:12 +0200 | 
|---|---|---|
| committer | Joerg Roedel <joerg.roedel@amd.com> | 2012-07-17 12:17:12 +0200 | 
| commit | b9b1ce707d81ec63c04e4fd8c34699ada950e6dc (patch) | |
| tree | 987bf73e990db4268325e25149cd7397de0dfea9 /drivers/iommu/amd_iommu_init.c | |
| parent | 62410eeb40ef355fa47f63886542f4dacef13ba9 (diff) | |
| download | olio-linux-3.10-b9b1ce707d81ec63c04e4fd8c34699ada950e6dc.tar.xz olio-linux-3.10-b9b1ce707d81ec63c04e4fd8c34699ada950e6dc.zip  | |
iommu/amd: Introduce amd_iommu_init_dma routine
This function will initialize everthing necessary so that
devices can do DMA. This includes dma_ops and iommu_ops.
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 | 27 | 
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index 966d8ac9e14..53828b61e9a 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -1627,8 +1627,6 @@ int __init amd_iommu_init_hardware(void)  	enable_iommus(); -	amd_iommu_init_notifier(); -  	register_syscore_ops(&amd_iommu_syscore_ops);  	return ret; @@ -1669,6 +1667,25 @@ static bool detect_ivrs(void)  	return true;  } +static int amd_iommu_init_dma(void) +{ +	int ret; + +	if (iommu_pass_through) +		ret = amd_iommu_init_passthrough(); +	else +		ret = amd_iommu_init_dma_ops(); + +	if (ret) +		return ret; + +	amd_iommu_init_api(); + +	amd_iommu_init_notifier(); + +	return 0; +} +  /*   * This is the core init function for AMD IOMMU hardware in the system.   * This function is called from the generic x86 DMA layer initialization @@ -1690,11 +1707,7 @@ static int __init amd_iommu_init(void)  	if (ret)  		goto free; -	if (iommu_pass_through) -		ret = amd_iommu_init_passthrough(); -	else -		ret = amd_iommu_init_dma_ops(); - +	ret = amd_iommu_init_dma();  	if (ret)  		goto free;  |