Skip to content

Commit a7b67cd

Browse files
thierryredingjoergroedel
authored andcommitted
iommu/exynos: Play nice in multi-platform builds
The Exynos System MMU driver unconditionally executes code and registers a struct iommu_ops with the platform bus irrespective of whether it runs on an Exynos SoC or not. This causes problems in multi-platform kernels where drivers for other SoCs will no longer be able to register their own struct iommu_ops or even try to use a struct iommu_ops for an IOMMU that obviously isn't there. The smallest fix I could think of is to check for the existence of any Exynos System MMU devices in the device tree and skip initialization otherwise. This fixes a problem on Tegra20 where the DRM driver will try to use the obviously non-existent Exynos System MMU. Reported-by: Nicolas Chauvet <[email protected]> Cc: Kukjin Kim <[email protected]> Signed-off-by: Thierry Reding <[email protected]> Signed-off-by: Joerg Roedel <[email protected]>
1 parent 367bd97 commit a7b67cd

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

drivers/iommu/exynos-iommu.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1186,8 +1186,15 @@ static const struct iommu_ops exynos_iommu_ops = {
11861186

11871187
static int __init exynos_iommu_init(void)
11881188
{
1189+
struct device_node *np;
11891190
int ret;
11901191

1192+
np = of_find_matching_node(NULL, sysmmu_of_match);
1193+
if (!np)
1194+
return 0;
1195+
1196+
of_node_put(np);
1197+
11911198
lv2table_kmem_cache = kmem_cache_create("exynos-iommu-lv2table",
11921199
LV2TABLE_SIZE, LV2TABLE_SIZE, 0, NULL);
11931200
if (!lv2table_kmem_cache) {

0 commit comments

Comments
 (0)