iommu/arm-smmu: Play nice on non-ARM/SMMU systems
Currently the driver registers IOMMU bus operations for all busses even if no ARM SMMU is present on a system. Depending on the driver probing order this prevents the driver for the real IOMMU to register itself as the bus-wide IOMMU. Signed-off-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
This commit is contained in:
parent
cfdeec22e4
commit
0e7d37adbe
|
@ -2075,8 +2075,20 @@ static struct platform_driver arm_smmu_driver = {
|
||||||
|
|
||||||
static int __init arm_smmu_init(void)
|
static int __init arm_smmu_init(void)
|
||||||
{
|
{
|
||||||
|
struct device_node *np;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Play nice with systems that don't have an ARM SMMU by checking that
|
||||||
|
* an ARM SMMU exists in the system before proceeding with the driver
|
||||||
|
* and IOMMU bus operation registration.
|
||||||
|
*/
|
||||||
|
np = of_find_matching_node(NULL, arm_smmu_of_match);
|
||||||
|
if (!np)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
of_node_put(np);
|
||||||
|
|
||||||
ret = platform_driver_register(&arm_smmu_driver);
|
ret = platform_driver_register(&arm_smmu_driver);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue