Merge "disp: msm: sde: add additional WB roi checks"
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

commit
bb9ced8cb4
@@ -1217,6 +1217,24 @@ static inline int sde_connector_state_get_compression_info(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool sde_connector_is_3d_merge_enabled(struct drm_connector *conn)
|
||||||
|
{
|
||||||
|
enum sde_rm_topology_name topology;
|
||||||
|
|
||||||
|
if (!conn)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
topology = sde_connector_get_topology_name(conn);
|
||||||
|
if ((topology == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE)
|
||||||
|
|| (topology == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC)
|
||||||
|
|| (topology == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE_VDC)
|
||||||
|
|| (topology == SDE_RM_TOPOLOGY_QUADPIPE_3DMERGE)
|
||||||
|
|| (topology == SDE_RM_TOPOLOGY_QUADPIPE_3DMERGE_DSC))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sde_connector_set_msm_mode - set msm_mode for connector state
|
* sde_connector_set_msm_mode - set msm_mode for connector state
|
||||||
* @conn_state: Pointer to drm connector state structure
|
* @conn_state: Pointer to drm connector state structure
|
||||||
|
@@ -1402,6 +1402,13 @@ static int _sde_crtc_check_rois(struct drm_crtc *crtc,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sde_connector_is_3d_merge_enabled(conn) && (mixer_width % 2)) {
|
||||||
|
SDE_ERROR(
|
||||||
|
"%s: invalid width w/ 3d-merge - mixer_w:%d, crtc_w:%d, num_mixers:%d\n",
|
||||||
|
sde_crtc->name, crtc_width, mixer_width, sde_crtc->num_mixers);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
if (!mode_info.roi_caps.enabled)
|
if (!mode_info.roi_caps.enabled)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@@ -794,16 +794,20 @@ static int _sde_enc_phys_wb_validate_dnsc_blur_ds(struct drm_crtc_state *crtc_st
|
|||||||
struct sde_rect *wb_roi)
|
struct sde_rect *wb_roi)
|
||||||
{
|
{
|
||||||
struct sde_crtc_state *cstate = to_sde_crtc_state(crtc_state);
|
struct sde_crtc_state *cstate = to_sde_crtc_state(crtc_state);
|
||||||
|
const struct drm_display_mode *mode = &crtc_state->mode;
|
||||||
struct sde_io_res ds_res = {0, }, dnsc_blur_res = {0, };
|
struct sde_io_res ds_res = {0, }, dnsc_blur_res = {0, };
|
||||||
u32 ds_tap_pt = sde_crtc_get_property(cstate, CRTC_PROP_CAPTURE_OUTPUT);
|
u32 ds_tap_pt = sde_crtc_get_property(cstate, CRTC_PROP_CAPTURE_OUTPUT);
|
||||||
|
|
||||||
sde_crtc_get_ds_io_res(crtc_state, &ds_res);
|
sde_crtc_get_ds_io_res(crtc_state, &ds_res);
|
||||||
sde_connector_get_dnsc_blur_io_res(conn_state, &dnsc_blur_res);
|
sde_connector_get_dnsc_blur_io_res(conn_state, &dnsc_blur_res);
|
||||||
|
|
||||||
if ((ds_res.enabled && (!ds_res.src_w || !ds_res.src_h
|
/* wb_roi should match with mode w/h if none of these features are enabled */
|
||||||
|| !ds_res.dst_w || !ds_res.dst_h))) {
|
if ((!ds_res.enabled && !dnsc_blur_res.enabled && !cstate->cwb_enc_mask)
|
||||||
SDE_ERROR("invalid ds cfg src:%ux%u dst:%ux%u\n",
|
&& ((wb_roi->w && (wb_roi->w != mode->hdisplay))
|
||||||
ds_res.src_w, ds_res.src_h, ds_res.dst_w, ds_res.dst_h);
|
|| (wb_roi->h && (wb_roi->h != mode->vdisplay)))) {
|
||||||
|
SDE_ERROR("invalid wb-roi {%u,%u,%u,%u} mode:%ux%u\n",
|
||||||
|
wb_roi->x, wb_roi->y, wb_roi->w, wb_roi->h,
|
||||||
|
mode->hdisplay, mode->vdisplay);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1426,6 +1430,13 @@ static void _sde_encoder_phys_wb_setup_dnsc_blur(struct sde_encoder_phys *phys_e
|
|||||||
sde_conn = to_sde_connector(wb_dev->connector);
|
sde_conn = to_sde_connector(wb_dev->connector);
|
||||||
sde_conn_state = to_sde_connector_state(wb_dev->connector->state);
|
sde_conn_state = to_sde_connector_state(wb_dev->connector->state);
|
||||||
|
|
||||||
|
if (sde_conn_state->dnsc_blur_count && !hw_dnsc_blur) {
|
||||||
|
SDE_ERROR("[enc:%d wb:%d] invalid config - dnsc_blur block not reserved\n",
|
||||||
|
DRMID(phys_enc->parent), WBID(wb_enc));
|
||||||
|
sde_kms->catalog->dnsc_blur_count = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* swap between 0 & 1 lut idx on each config change for gaussian lut */
|
/* swap between 0 & 1 lut idx on each config change for gaussian lut */
|
||||||
sde_conn_state->dnsc_blur_lut = 1 - sde_conn_state->dnsc_blur_lut;
|
sde_conn_state->dnsc_blur_lut = 1 - sde_conn_state->dnsc_blur_lut;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user