Skip to content

Commit 56b38b2

Browse files
vsyrjalapull[bot]
authored andcommitted
drm/i915: Sprinke a few sanity check WARNS during csc assignment
Make sure the csc enable bit(s) match the way we're about to fill the csc matrices. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230329135002.3096-8-ville.syrjala@linux.intel.com Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
1 parent e69daae commit 56b38b2

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

drivers/gpu/drm/i915/display/intel_color.c

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -373,10 +373,16 @@ static void ilk_assign_csc(struct intel_crtc_state *crtc_state)
373373
bool limited_color_range = ilk_csc_limited_range(crtc_state);
374374

375375
if (crtc_state->hw.ctm) {
376+
drm_WARN_ON(&i915->drm, !crtc_state->csc_enable);
377+
376378
ilk_csc_convert_ctm(crtc_state, &crtc_state->csc, limited_color_range);
377379
} else if (crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB) {
380+
drm_WARN_ON(&i915->drm, !crtc_state->csc_enable);
381+
378382
ilk_csc_copy(i915, &crtc_state->csc, &ilk_csc_matrix_rgb_to_ycbcr);
379383
} else if (limited_color_range) {
384+
drm_WARN_ON(&i915->drm, !crtc_state->csc_enable);
385+
380386
ilk_csc_copy(i915, &crtc_state->csc, &ilk_csc_matrix_limited_range);
381387
} else if (crtc_state->csc_enable) {
382388
/*
@@ -405,17 +411,29 @@ static void icl_assign_csc(struct intel_crtc_state *crtc_state)
405411
{
406412
struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
407413

408-
if (crtc_state->hw.ctm)
414+
if (crtc_state->hw.ctm) {
415+
drm_WARN_ON(&i915->drm, (crtc_state->csc_mode & ICL_CSC_ENABLE) == 0);
416+
409417
ilk_csc_convert_ctm(crtc_state, &crtc_state->csc, false);
410-
else
418+
} else {
419+
drm_WARN_ON(&i915->drm, (crtc_state->csc_mode & ICL_CSC_ENABLE) != 0);
420+
411421
intel_csc_clear(&crtc_state->csc);
422+
}
423+
424+
if (crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB) {
425+
drm_WARN_ON(&i915->drm, (crtc_state->csc_mode & ICL_OUTPUT_CSC_ENABLE) == 0);
412426

413-
if (crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB)
414427
ilk_csc_copy(i915, &crtc_state->output_csc, &ilk_csc_matrix_rgb_to_ycbcr);
415-
else if (crtc_state->limited_color_range)
428+
} else if (crtc_state->limited_color_range) {
429+
drm_WARN_ON(&i915->drm, (crtc_state->csc_mode & ICL_OUTPUT_CSC_ENABLE) == 0);
430+
416431
ilk_csc_copy(i915, &crtc_state->output_csc, &ilk_csc_matrix_limited_range);
417-
else
432+
} else {
433+
drm_WARN_ON(&i915->drm, (crtc_state->csc_mode & ICL_OUTPUT_CSC_ENABLE) != 0);
434+
418435
intel_csc_clear(&crtc_state->output_csc);
436+
}
419437
}
420438

421439
static void icl_load_csc_matrix(const struct intel_crtc_state *crtc_state)
@@ -474,10 +492,17 @@ static void chv_load_cgm_csc(struct intel_crtc *crtc,
474492

475493
static void chv_assign_csc(struct intel_crtc_state *crtc_state)
476494
{
477-
if (crtc_state->hw.ctm)
495+
struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
496+
497+
if (crtc_state->hw.ctm) {
498+
drm_WARN_ON(&i915->drm, (crtc_state->cgm_mode & CGM_PIPE_MODE_CSC) == 0);
499+
478500
chv_cgm_csc_convert_ctm(crtc_state, &crtc_state->csc);
479-
else
501+
} else {
502+
drm_WARN_ON(&i915->drm, (crtc_state->cgm_mode & CGM_PIPE_MODE_CSC) != 0);
503+
480504
intel_csc_clear(&crtc_state->csc);
505+
}
481506
}
482507

483508
/* convert hw value with given bit_precision to lut property val */

0 commit comments

Comments
 (0)