aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Szyprowski <m.szyprowski@samsung.com>2016-02-18 09:12:54 -0500
committerJoerg Roedel <jroedel@suse.de>2016-02-25 09:32:10 -0500
commit83addecdb7c9a4a533205cf57cb4d5b5631a704b (patch)
tree9edad940181f201724860a747375746b4014bb43
parentd093fc7e8390c3e46294290c0d76de93422a601f (diff)
iommu/exynos: Refactor init config code
This patch rewrites sysmmu_init_config function to make it easier to read and understand. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
-rw-r--r--drivers/iommu/exynos-iommu.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
index 3a577a473f3c..15787a177a16 100644
--- a/drivers/iommu/exynos-iommu.c
+++ b/drivers/iommu/exynos-iommu.c
@@ -383,24 +383,17 @@ static bool __sysmmu_disable(struct sysmmu_drvdata *data)
383 383
384static void __sysmmu_init_config(struct sysmmu_drvdata *data) 384static void __sysmmu_init_config(struct sysmmu_drvdata *data)
385{ 385{
386 unsigned int cfg = CFG_LRU | CFG_QOS(15); 386 unsigned int cfg;
387 unsigned int ver; 387
388 388 data->version = MMU_RAW_VER(__raw_readl(data->sfrbase + REG_MMU_VERSION));
389 ver = MMU_RAW_VER(__raw_readl(data->sfrbase + REG_MMU_VERSION)); 389 if (data->version <= MAKE_MMU_VER(3, 1))
390 if (MMU_MAJ_VER(ver) == 3) { 390 cfg = CFG_LRU | CFG_QOS(15);
391 if (MMU_MIN_VER(ver) >= 2) { 391 else if (data->version <= MAKE_MMU_VER(3, 2))
392 cfg |= CFG_FLPDCACHE; 392 cfg = CFG_LRU | CFG_QOS(15) | CFG_FLPDCACHE | CFG_SYSSEL;
393 if (MMU_MIN_VER(ver) == 3) { 393 else
394 cfg |= CFG_ACGEN; 394 cfg = CFG_QOS(15) | CFG_FLPDCACHE | CFG_ACGEN;
395 cfg &= ~CFG_LRU;
396 } else {
397 cfg |= CFG_SYSSEL;
398 }
399 }
400 }
401 395
402 __raw_writel(cfg, data->sfrbase + REG_MMU_CFG); 396 __raw_writel(cfg, data->sfrbase + REG_MMU_CFG);
403 data->version = ver;
404} 397}
405 398
406static void __sysmmu_enable_nocount(struct sysmmu_drvdata *data) 399static void __sysmmu_enable_nocount(struct sysmmu_drvdata *data)