diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index 83a7bbef28db..68975dd88056 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -4341,6 +4341,20 @@ static int _sde_crtc_check_secure_state_smmu_translation(struct drm_crtc *crtc, MSM_DISPLAY_VIDEO_MODE); } + /* + * Secure display to secure camera needs without direct + * transition is currently not allowed + */ + if (fb_sec_dir && secure == SDE_DRM_SEC_NON_SEC && + smmu_state->state != ATTACHED && + smmu_state->secure_level == SDE_DRM_SEC_ONLY) { + + SDE_EVT32(DRMID(crtc), fb_ns, fb_sec_dir, + smmu_state->state, smmu_state->secure_level, + secure); + goto sec_err; + } + /* * In video mode check for null commit before transition * from secure to non secure and vice versa @@ -4358,14 +4372,17 @@ static int _sde_crtc_check_secure_state_smmu_translation(struct drm_crtc *crtc, SDE_EVT32(DRMID(crtc), fb_ns, fb_sec_dir, smmu_state->state, smmu_state->secure_level, secure, crtc->state->plane_mask, state->plane_mask); - SDE_ERROR( - "crtc%d Invalid transition;sec%d state%d slvl%d ns%d sdir%d\n", - DRMID(crtc), secure, smmu_state->state, - smmu_state->secure_level, fb_ns, fb_sec_dir); - return -EINVAL; + goto sec_err; } return 0; + +sec_err: + SDE_ERROR( + "crtc%d Invalid transition;sec%d state%d slvl%d ns%d sdir%d\n", + DRMID(crtc), secure, smmu_state->state, + smmu_state->secure_level, fb_ns, fb_sec_dir); + return -EINVAL; } static int _sde_crtc_check_secure_conn(struct drm_crtc *crtc,