Merge "disp: msm: sde: fix encoder parsing in atomic_check phase"

This commit is contained in:
qctecmdr
2019-06-04 06:15:13 -07:00
committed by Gerrit - the friendly Code Review server

View File

@@ -110,16 +110,6 @@ static inline struct sde_kms *_sde_crtc_get_kms(struct drm_crtc *crtc)
return to_sde_kms(priv->kms); return to_sde_kms(priv->kms);
} }
static inline struct drm_encoder *_sde_crtc_get_encoder(struct drm_crtc *crtc)
{
struct drm_encoder *enc;
drm_for_each_encoder_mask(enc, crtc->dev, crtc->state->encoder_mask)
return enc;
return NULL;
}
/** /**
* sde_crtc_calc_fps() - Calculates fps value. * sde_crtc_calc_fps() - Calculates fps value.
* @sde_crtc : CRTC structure * @sde_crtc : CRTC structure
@@ -3314,12 +3304,16 @@ static void sde_crtc_destroy_state(struct drm_crtc *crtc,
sde_crtc = to_sde_crtc(crtc); sde_crtc = to_sde_crtc(crtc);
cstate = to_sde_crtc_state(state); cstate = to_sde_crtc_state(state);
enc = _sde_crtc_get_encoder(crtc);
sde_kms = _sde_crtc_get_kms(crtc); sde_kms = _sde_crtc_get_kms(crtc);
if (!sde_kms) {
SDE_ERROR("invalid sde_kms\n");
return;
}
SDE_DEBUG("crtc%d\n", crtc->base.id); SDE_DEBUG("crtc%d\n", crtc->base.id);
if (sde_kms && enc) drm_for_each_encoder_mask(enc, crtc->dev, state->encoder_mask)
sde_rm_release(&sde_kms->rm, enc, true); sde_rm_release(&sde_kms->rm, enc, true);
__drm_atomic_helper_crtc_destroy_state(state); __drm_atomic_helper_crtc_destroy_state(state);
@@ -4248,18 +4242,18 @@ static int _sde_crtc_check_secure_blend_config(struct drm_crtc *crtc,
} }
static int _sde_crtc_check_secure_single_encoder(struct drm_crtc *crtc, static int _sde_crtc_check_secure_single_encoder(struct drm_crtc *crtc,
int fb_sec_dir) struct drm_crtc_state *state, int fb_sec_dir)
{ {
struct drm_encoder *encoder; struct drm_encoder *encoder;
int encoder_cnt = 0; int encoder_cnt = 0;
if (fb_sec_dir) { if (fb_sec_dir) {
drm_for_each_encoder_mask(encoder, crtc->dev, drm_for_each_encoder_mask(encoder, crtc->dev,
crtc->state->encoder_mask) state->encoder_mask)
encoder_cnt++; encoder_cnt++;
if (encoder_cnt > MAX_ALLOWED_ENCODER_CNT_PER_SECURE_CRTC) { if (encoder_cnt > MAX_ALLOWED_ENCODER_CNT_PER_SECURE_CRTC) {
SDE_ERROR("crtc%d, invalid virtual encoder crtc%d\n", SDE_ERROR("crtc:%d invalid number of encoders:%d\n",
DRMID(crtc), encoder_cnt); DRMID(crtc), encoder_cnt);
return -EINVAL; return -EINVAL;
} }
@@ -4275,11 +4269,9 @@ static int _sde_crtc_check_secure_state_smmu_translation(struct drm_crtc *crtc,
struct drm_encoder *encoder; struct drm_encoder *encoder;
int is_video_mode = false; int is_video_mode = false;
drm_for_each_encoder_mask(encoder, crtc->dev, drm_for_each_encoder_mask(encoder, crtc->dev, state->encoder_mask)
crtc->state->encoder_mask) {
is_video_mode |= sde_encoder_check_curr_mode(encoder, is_video_mode |= sde_encoder_check_curr_mode(encoder,
MSM_DISPLAY_VIDEO_MODE); MSM_DISPLAY_VIDEO_MODE);
}
/* /*
* In video mode check for null commit before transition * In video mode check for null commit before transition
@@ -4347,7 +4339,7 @@ static int _sde_crtc_check_secure_state(struct drm_crtc *crtc,
* secure_crtc is not allowed in a shared toppolgy * secure_crtc is not allowed in a shared toppolgy
* across different encoders. * across different encoders.
*/ */
rc = _sde_crtc_check_secure_single_encoder(crtc, fb_sec_dir); rc = _sde_crtc_check_secure_single_encoder(crtc, state, fb_sec_dir);
if (rc) if (rc)
return rc; return rc;