mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
drm/i915/pfit: Prevent negative coordinates in center mode
When the pipe_src width or height are greater than adjusted_mode hdisplay and vdisplay, computed x and y offsets for center mode can be negative. Writing negative values into the pch_fit registers result in a state error. Add a check to clamp these values so that they are never negative. v2: Compare in terms of pipe_src width and height.[Ville] v3: Change width/height to pipe_src_w/h in logging. [Ville] Signed-off-by: Nemesa Garg <nemesa.garg@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patch.msgid.link/20260402061310.111073-1-nemesa.garg@intel.com
This commit is contained in:
parent
ff1b43b7db
commit
28f60e912c
|
|
@ -186,6 +186,7 @@ static int pch_panel_fitting(struct intel_crtc_state *crtc_state,
|
|||
const struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(crtc_state);
|
||||
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
||||
const struct drm_display_mode *adjusted_mode =
|
||||
&crtc_state->hw.adjusted_mode;
|
||||
int pipe_src_w = drm_rect_width(&crtc_state->pipe_src);
|
||||
|
|
@ -200,6 +201,16 @@ static int pch_panel_fitting(struct intel_crtc_state *crtc_state,
|
|||
|
||||
switch (conn_state->scaling_mode) {
|
||||
case DRM_MODE_SCALE_CENTER:
|
||||
if (adjusted_mode->crtc_hdisplay < pipe_src_w ||
|
||||
adjusted_mode->crtc_vdisplay < pipe_src_h) {
|
||||
drm_dbg_kms(display->drm,
|
||||
"[CRTC:%d:%s] pfit center mode source (%dx%d) exceeds display (%dx%d)\n",
|
||||
crtc->base.base.id, crtc->base.name,
|
||||
pipe_src_w, pipe_src_h,
|
||||
adjusted_mode->crtc_hdisplay,
|
||||
adjusted_mode->crtc_vdisplay);
|
||||
return -EINVAL;
|
||||
}
|
||||
width = pipe_src_w;
|
||||
height = pipe_src_h;
|
||||
x = (adjusted_mode->crtc_hdisplay - width + 1)/2;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user