Merge remote-tracking branch 'quic/display-kernel.lnx.5.10' into display-kernel.lnx.5.15
* quic/display-kernel.lnx.5.10: disp: msm: sde: avoid error during fal10_veto override enablement disp: msm: update copyright description disp: msm: sde: configure dest_scaler op_mode for two independent displays disp: msm: dp: updated copyright set for 4nm target Revert "disp: msm: sde: consider max of actual and default prefill lines" disp: msm: sde: Reset backlight scale when HWC is stopped disp: msm: dp: avoid duplicate read of link status disp: msm: dsi: update vreg_ctrl settings for cape disp: msm: fail commit if drm_gem_obj was found attached to a sec CB disp: msm: dp: updated register values for 4nm target disp: msm: sde: update framedata event handling disp: msm: dsi: Add new phy comaptible string for cape disp: msm: sde: software override for fal10 in cwb enable disp: msm: update cleanup during bind failure in msm_drm_component_init disp: msm: sde: dump user input_fence info on spec fence timeout disp: msm: sde: add null pointer check for encoder current master disp: msm: dsi: enable DMA start window scheduling for broadcast commands disp: msm: sde: avoid alignment checks for linear formats disp: msm: reset thread priority work on every new run disp: msm: sde: send power on event for cont. splash disp: msm: sde: always set CTL_x_UIDLE_ACTIVE register to "1" disp: msm: use vzalloc for large allocations disp: msm: sde: Add support to limit DSC size to 10k disp: msm: sde: add tx wait during DMS for sim panel disp: msm: dsi: add check for any queued DSI CMDs before clock force update disp: msm: sde: correct pp block allocation during dcwb dither programming disp: msm: sde: avoid setting of max vblank count disp: msm: sde: add cached lut flag in sde plane disp: msm: sde: avoid use after free in msm_lastclose disp: msm: sde: update TEAR_SYNC_WRCOUNT register before vsync counter disp: msm: dsi: Support uncompressed rgb101010 format disp: msm: sde: update idle_pc_enabled flag for all encoders disp: msm: sde: flush esd work before disabling the encoder disp: msm: sde: allow qsync update along with modeset disp: msm: dp: avoid dp sw reset on disconnect path disp: msm: sde: consider max of actual and default prefill lines disp: msm: ensure vbif debugbus not in use is disabled disp: msm: sde: update cached encoder mask if required disp: msm: sde: while timing engine enabling poll for active region disp: msm: enable cache flag for dumb buffer disp: msm: sde: disable ot limit for cwb disp: msm: sde: avoid race condition at vm release disp: msm: dsi: set qsync min fps list length to zero disp: msm: sde: reset mixers in crtc when ctl datapath switches disp: msm: sde: update vm state atomic check for non-primary usecases disp: msm: sde: reset CTL_UIDLE_ACTIVE register only if uidle is disabled Change-Id: If480e7f33743eb4788549f853ba05e744ecb38d3 Signed-off-by: Narendra Muppalla <quic_nmuppall@quicinc.com>
This commit is contained in:
@@ -107,6 +107,7 @@ struct sde_plane {
|
||||
struct sde_csc_cfg *csc_usr_ptr;
|
||||
struct sde_csc_cfg *csc_ptr;
|
||||
|
||||
uint32_t cached_lut_flag;
|
||||
struct sde_hw_scaler3_cfg scaler3_cfg;
|
||||
struct sde_hw_pixel_ext pixel_ext;
|
||||
|
||||
@@ -1992,7 +1993,9 @@ static int sde_plane_prepare_fb(struct drm_plane *plane,
|
||||
ret = msm_framebuffer_prepare(fb,
|
||||
pstate->aspace);
|
||||
if (ret) {
|
||||
SDE_ERROR("failed to prepare framebuffer\n");
|
||||
SDE_ERROR("failed to prepare framebuffer fb:%d plane:%d pipe:%d ret:%d\n",
|
||||
fb->base.id, plane->base.id, psde->pipe, ret);
|
||||
SDE_EVT32(fb->base.id, plane->base.id, psde->pipe, ret, SDE_EVTLOG_ERROR);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@@ -3266,6 +3269,20 @@ static void _sde_plane_update_properties(struct drm_plane *plane,
|
||||
pstate->dirty = 0x0;
|
||||
}
|
||||
|
||||
static void _sde_plane_check_lut_dirty(struct sde_plane *psde,
|
||||
struct sde_plane_state *pstate)
|
||||
{
|
||||
/**
|
||||
* Valid configuration if scaler is not enabled or
|
||||
* lut flag is set
|
||||
*/
|
||||
if (pstate->scaler3_cfg.lut_flag || !pstate->scaler3_cfg.enable)
|
||||
return;
|
||||
|
||||
pstate->scaler3_cfg.lut_flag = psde->cached_lut_flag;
|
||||
SDE_EVT32(DRMID(&psde->base), pstate->scaler3_cfg.lut_flag, SDE_EVTLOG_ERROR);
|
||||
}
|
||||
|
||||
static int sde_plane_sspp_atomic_update(struct drm_plane *plane,
|
||||
struct drm_plane_state *old_state)
|
||||
{
|
||||
@@ -3317,10 +3334,15 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane,
|
||||
state->crtc_w, state->crtc_h,
|
||||
state->crtc_x, state->crtc_y);
|
||||
|
||||
/* Caching the valid lut flag in sde plane */
|
||||
if (pstate->scaler3_cfg.enable && pstate->scaler3_cfg.lut_flag)
|
||||
psde->cached_lut_flag = pstate->scaler3_cfg.lut_flag;
|
||||
|
||||
/* force reprogramming of all the parameters, if the flag is set */
|
||||
if (psde->revalidate) {
|
||||
SDE_DEBUG("plane:%d - reconfigure all the parameters\n",
|
||||
plane->base.id);
|
||||
_sde_plane_check_lut_dirty(psde, pstate);
|
||||
pstate->dirty = SDE_PLANE_DIRTY_ALL | SDE_PLANE_DIRTY_CP;
|
||||
psde->revalidate = false;
|
||||
}
|
||||
@@ -3845,7 +3867,7 @@ static void _sde_plane_install_properties(struct drm_plane *plane,
|
||||
psde->catalog = catalog;
|
||||
is_master = !psde->is_virtual;
|
||||
|
||||
info = kzalloc(sizeof(struct sde_kms_info), GFP_KERNEL);
|
||||
info = vzalloc(sizeof(struct sde_kms_info));
|
||||
if (!info) {
|
||||
SDE_ERROR("failed to allocate info memory\n");
|
||||
return;
|
||||
@@ -3927,7 +3949,7 @@ static void _sde_plane_install_properties(struct drm_plane *plane,
|
||||
if (psde->pipe_hw->ops.set_ubwc_stats_roi)
|
||||
msm_property_install_range(&psde->property_info, "ubwc_stats_roi",
|
||||
0, 0, 0xFFFFFFFF, 0, PLANE_PROP_UBWC_STATS_ROI);
|
||||
kfree(info);
|
||||
vfree(info);
|
||||
}
|
||||
|
||||
static inline void _sde_plane_set_csc_v1(struct sde_plane *psde,
|
||||
@@ -4143,27 +4165,34 @@ static void _sde_plane_set_excl_rect_v1(struct sde_plane *psde,
|
||||
}
|
||||
|
||||
static void _sde_plane_set_ubwc_stats_roi(struct sde_plane *psde,
|
||||
struct sde_plane_state *pstate, uint64_t roi)
|
||||
struct sde_plane_state *pstate, void __user *usr_ptr)
|
||||
{
|
||||
uint16_t y0, y1;
|
||||
struct sde_drm_ubwc_stats_roi roi = {0};
|
||||
|
||||
if (!psde || !pstate) {
|
||||
SDE_ERROR("invalid argument(s)\n");
|
||||
return;
|
||||
}
|
||||
|
||||
y0 = roi & 0xFFFF;
|
||||
y1 = (roi >> 0x10) & 0xFFFF;
|
||||
|
||||
if (y0 > psde->pipe_cfg.src_rect.h || y1 > psde->pipe_cfg.src_rect.h) {
|
||||
SDE_ERROR_PLANE(psde, "invalid ubwc roi y0 0x%x, y1 0x%x, src height 0x%x",
|
||||
y0, y1, psde->pipe_cfg.src_rect.h);
|
||||
y0 = 0;
|
||||
y1 = 0;
|
||||
if (!usr_ptr) {
|
||||
SDE_DEBUG_PLANE(psde, "ubwc roi disabled");
|
||||
goto end;
|
||||
}
|
||||
|
||||
pstate->ubwc_stats_roi.y_coord0 = y0;
|
||||
pstate->ubwc_stats_roi.y_coord1 = y1;
|
||||
if (copy_from_user(&roi, usr_ptr, sizeof(roi))) {
|
||||
SDE_ERROR_PLANE(psde, "failed to copy ubwc stats roi");
|
||||
return;
|
||||
}
|
||||
|
||||
if (roi.y_coord0 > psde->pipe_cfg.src_rect.h || roi.y_coord1 > psde->pipe_cfg.src_rect.h) {
|
||||
SDE_ERROR_PLANE(psde, "invalid ubwc roi y0 0x%x, y1 0x%x, src height 0x%x",
|
||||
roi.y_coord0, roi.y_coord1, psde->pipe_cfg.src_rect.h);
|
||||
memset(&roi, 0, sizeof(roi));
|
||||
}
|
||||
|
||||
end:
|
||||
SDE_EVT32(psde, roi.y_coord0, roi.y_coord1);
|
||||
memcpy(&pstate->ubwc_stats_roi, &roi, sizeof(struct sde_drm_ubwc_stats_roi));
|
||||
}
|
||||
|
||||
static int sde_plane_atomic_set_property(struct drm_plane *plane,
|
||||
@@ -4208,7 +4237,8 @@ static int sde_plane_atomic_set_property(struct drm_plane *plane,
|
||||
(void *)(uintptr_t)val);
|
||||
break;
|
||||
case PLANE_PROP_UBWC_STATS_ROI:
|
||||
_sde_plane_set_ubwc_stats_roi(psde, pstate, val);
|
||||
_sde_plane_set_ubwc_stats_roi(psde, pstate,
|
||||
(void __user *)(uintptr_t)val);
|
||||
break;
|
||||
default:
|
||||
/* nothing to do */
|
||||
|
Reference in New Issue
Block a user