-
Notifications
You must be signed in to change notification settings - Fork 5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Revert "iommu/arm-smmu: Make arm-smmu explicitly non-modular"
This reverts commit addb672. Let's get the SMMU driver building as a module, which means putting back some dead code that we used to carry. Signed-off-by: Will Deacon <[email protected]> Tested-by: John Garry <[email protected]> # smmu v3 Reviewed-by: Greg Kroah-Hartman <[email protected]> Signed-off-by: Joerg Roedel <[email protected]>
- Loading branch information
1 parent
6e8fa74
commit b06c076
Showing
1 changed file
with
19 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -27,8 +27,7 @@ | |
#include <linux/interrupt.h> | ||
#include <linux/io.h> | ||
#include <linux/iopoll.h> | ||
#include <linux/init.h> | ||
#include <linux/moduleparam.h> | ||
#include <linux/module.h> | ||
#include <linux/of.h> | ||
#include <linux/of_address.h> | ||
#include <linux/of_device.h> | ||
|
@@ -60,10 +59,6 @@ | |
#define MSI_IOVA_LENGTH 0x100000 | ||
|
||
static int force_stage; | ||
/* | ||
* not really modular, but the easiest way to keep compat with existing | ||
* bootargs behaviour is to continue using module_param() here. | ||
*/ | ||
module_param(force_stage, int, S_IRUGO); | ||
MODULE_PARM_DESC(force_stage, | ||
"Force SMMU mappings to be installed at a particular stage of translation. A value of '1' or '2' forces the corresponding stage. All other values are ignored (i.e. no stage is forced). Note that selecting a specific stage will disable support for nested translation."); | ||
|
@@ -1911,6 +1906,7 @@ static const struct of_device_id arm_smmu_of_match[] = { | |
{ .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 }, | ||
{ }, | ||
}; | ||
MODULE_DEVICE_TABLE(of, arm_smmu_of_match); | ||
|
||
#ifdef CONFIG_ACPI | ||
static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu) | ||
|
@@ -2196,12 +2192,12 @@ static int arm_smmu_legacy_bus_init(void) | |
} | ||
device_initcall_sync(arm_smmu_legacy_bus_init); | ||
|
||
static void arm_smmu_device_shutdown(struct platform_device *pdev) | ||
static int arm_smmu_device_remove(struct platform_device *pdev) | ||
{ | ||
struct arm_smmu_device *smmu = platform_get_drvdata(pdev); | ||
|
||
if (!smmu) | ||
return; | ||
return -ENODEV; | ||
|
||
if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS)) | ||
dev_err(&pdev->dev, "removing device with active domains!\n"); | ||
|
@@ -2217,6 +2213,12 @@ static void arm_smmu_device_shutdown(struct platform_device *pdev) | |
clk_bulk_disable(smmu->num_clks, smmu->clks); | ||
|
||
clk_bulk_unprepare(smmu->num_clks, smmu->clks); | ||
return 0; | ||
} | ||
|
||
static void arm_smmu_device_shutdown(struct platform_device *pdev) | ||
{ | ||
arm_smmu_device_remove(pdev); | ||
} | ||
|
||
static int __maybe_unused arm_smmu_runtime_resume(struct device *dev) | ||
|
@@ -2266,12 +2268,16 @@ static const struct dev_pm_ops arm_smmu_pm_ops = { | |
|
||
static struct platform_driver arm_smmu_driver = { | ||
.driver = { | ||
.name = "arm-smmu", | ||
.of_match_table = of_match_ptr(arm_smmu_of_match), | ||
.pm = &arm_smmu_pm_ops, | ||
.suppress_bind_attrs = true, | ||
.name = "arm-smmu", | ||
.of_match_table = of_match_ptr(arm_smmu_of_match), | ||
.pm = &arm_smmu_pm_ops, | ||
}, | ||
.probe = arm_smmu_device_probe, | ||
.remove = arm_smmu_device_remove, | ||
.shutdown = arm_smmu_device_shutdown, | ||
}; | ||
builtin_platform_driver(arm_smmu_driver); | ||
module_platform_driver(arm_smmu_driver); | ||
|
||
MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations"); | ||
MODULE_AUTHOR("Will Deacon <[email protected]>"); | ||
MODULE_LICENSE("GPL v2"); |