[HACK] iommu/exynos: hold runtime pm during boot time
authorJanghyuck Kim <janghyuck.kim@samsung.com>
Tue, 12 Jun 2018 07:19:53 +0000 (16:19 +0900)
committerEunyoung Lee <ey470.lee@samsung.com>
Wed, 20 Jun 2018 00:21:08 +0000 (09:21 +0900)
Change-Id: I08997782bb36b9dec11834c4fdefda6a021327a7
Signed-off-by: Janghyuck Kim <janghyuck.kim@samsung.com>
drivers/iommu/exynos-iommu.c
drivers/iommu/exynos-iommu.h

index 0f1c081ebf9c1c5ad13a970863d1da5fca6f1c54..f76b1d1aefe021dd6f7f734586ee0d32a729009e 100644 (file)
@@ -463,6 +463,9 @@ static int __init sysmmu_parse_dt(struct device *sysmmu,
        if (of_property_read_bool(sysmmu->of_node, "sysmmu,no-suspend"))
                dev_pm_syscore_device(sysmmu, true);
 
+       if (of_property_read_bool(sysmmu->of_node, "sysmmu,hold-rpm-on-boot"))
+               drvdata->hold_rpm_on_boot = true;
+
        if (IS_TLB_WAY_TYPE(drvdata)) {
                ret = sysmmu_parse_tlb_way_dt(sysmmu, drvdata);
                if (ret)
@@ -567,6 +570,9 @@ static int __init exynos_sysmmu_probe(struct platform_device *pdev)
 
        pm_runtime_enable(dev);
 
+       if (data->hold_rpm_on_boot)
+               pm_runtime_get_sync(dev);
+
        dev_info(data->sysmmu, "is probed. Version %d.%d.%d\n",
                        MMU_MAJ_VER(data->version),
                        MMU_MIN_VER(data->version),
@@ -669,6 +675,10 @@ static int sysmmu_enable_from_master(struct device *master,
                        }
                        break;
                }
+               if (drvdata->hold_rpm_on_boot) {
+                       pm_runtime_put(drvdata->sysmmu);
+                       drvdata->hold_rpm_on_boot = false;
+               }
        }
        spin_unlock_irqrestore(&owner->lock, flags);
 
index f8bacc1154f1fc975b955609977655089198c75e..e0c3e2b510a769b03f216c7a317b261ae445a77f 100644 (file)
@@ -346,6 +346,7 @@ struct sysmmu_drvdata {
        struct atomic_notifier_head fault_notifiers;
        struct tlb_props tlb_props;
        bool is_suspended;
+       bool hold_rpm_on_boot;
        struct exynos_iommu_event_log log;
 };