diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2018-06-29 12:04:15 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-06-29 12:04:15 -0700 |
| commit | 0c110c0c259860040d40a54d13f70ba12431c1d9 (patch) | |
| tree | aeec2ce4556dbe4ba78ccb86e976b9e1c6a7a36d | |
| parent | fac70d73d2950c7461557aff0e0237963a46ec47 (diff) | |
| parent | e7d10511017daa1caab3dab11cce91e2bf48a976 (diff) | |
Merge "drm: msm: sde: move S1 smmu enablement earlier"
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_kms.c | 15 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_splash.c | 27 |
2 files changed, 16 insertions, 26 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_kms.c b/drivers/gpu/drm/msm/sde/sde_kms.c index 436f61ffaaa6..987da50f54ca 100644 --- a/drivers/gpu/drm/msm/sde/sde_kms.c +++ b/drivers/gpu/drm/msm/sde/sde_kms.c @@ -1128,6 +1128,7 @@ static int _sde_kms_mmu_init(struct sde_kms *sde_kms) { struct msm_mmu *mmu; int i, ret; + int data = 0; for (i = 0; i < MSM_SMMU_DOMAIN_MAX; i++) { struct msm_gem_address_space *aspace; @@ -1188,6 +1189,20 @@ static int _sde_kms_mmu_init(struct sde_kms *sde_kms) msm_gem_address_space_put(aspace); goto fail; } + + /* + * Enable stage 1 smmu after user has finished early + * mapping of splash memory. + */ + ret = mmu->funcs->set_property(mmu, + DOMAIN_ATTR_EARLY_MAP, + &data); + if (ret) { + SDE_ERROR("failed to set map att(%d): %d\n", + data, ret); + msm_gem_address_space_put(aspace); + goto fail; + } } } diff --git a/drivers/gpu/drm/msm/sde/sde_splash.c b/drivers/gpu/drm/msm/sde/sde_splash.c index f7e302ecc412..388075235246 100644 --- a/drivers/gpu/drm/msm/sde/sde_splash.c +++ b/drivers/gpu/drm/msm/sde/sde_splash.c @@ -856,16 +856,12 @@ int sde_splash_free_resource(struct msm_kms *kms, } /* - * In below function, it will - * 1. Notify LK to stop display splash. - * 2. Set DOMAIN_ATTR_EARLY_MAP to 1 to enable stage 1 translation in iommu. + * Below function will notify LK to stop display splash. */ int sde_splash_lk_stop_splash(struct msm_kms *kms) { struct sde_splash_info *sinfo; - struct msm_mmu *mmu; struct sde_kms *sde_kms = to_sde_kms(kms); - int ret; sinfo = &sde_kms->splash_info; @@ -884,26 +880,5 @@ int sde_splash_lk_stop_splash(struct msm_kms *kms) } mutex_unlock(&sde_splash_lock); - if (!sde_kms->aspace[0] || !sde_kms->aspace[0]->mmu) { - /* We do not return fault value here, to ensure - * flag "lk_is_exited" is set. - */ - SDE_ERROR("invalid mmu\n"); - WARN_ON(1); - } else { - mmu = sde_kms->aspace[0]->mmu; - /* After LK has exited, set early domain map attribute - * to 1 to enable stage 1 translation in iommu driver. - */ - if (mmu->funcs && mmu->funcs->set_property) { - ret = mmu->funcs->set_property(mmu, - DOMAIN_ATTR_EARLY_MAP, - &sinfo->display_splash_enabled); - - if (ret) - SDE_ERROR("set_property failed\n"); - } - } - return 0; } |
