drm/i915/gen11: Program the chroma upsampler for HDR planes.

We configure the chroma upsampler with the same chroma siting as
used by the scaler for consistency, the chroma upsampler is used
instead of the scaler for YUV 4:2:0 on ICL's HDR planes.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181018115134.9061-7-maarten.lankhorst@linux.intel.com
This commit is contained in:
Maarten Lankhorst
2018-10-18 13:51:32 +02:00
parent b1554e23cc
commit cb2458baf8
2 changed files with 44 additions and 0 deletions

View File

@@ -380,6 +380,7 @@ skl_update_plane(struct intel_plane *plane,
uint32_t y = plane_state->color_plane[0].y;
uint32_t src_w = drm_rect_width(&plane_state->base.src) >> 16;
uint32_t src_h = drm_rect_height(&plane_state->base.src) >> 16;
struct intel_plane *linked = plane_state->linked_plane;
unsigned long irqflags;
u32 keymsk = 0, keymax = 0;
@@ -417,6 +418,27 @@ skl_update_plane(struct intel_plane *plane,
(plane_state->color_plane[1].y << 16) |
plane_state->color_plane[1].x);
if (icl_is_hdr_plane(plane)) {
u32 cus_ctl = 0;
if (linked) {
/* Enable and use MPEG-2 chroma siting */
cus_ctl = PLANE_CUS_ENABLE |
PLANE_CUS_HPHASE_0 |
PLANE_CUS_VPHASE_SIGN_NEGATIVE |
PLANE_CUS_VPHASE_0_25;
if (linked->id == PLANE_SPRITE5)
cus_ctl |= PLANE_CUS_PLANE_7;
else if (linked->id == PLANE_SPRITE4)
cus_ctl |= PLANE_CUS_PLANE_6;
else
MISSING_CASE(linked->id);
}
I915_WRITE_FW(PLANE_CUS_CTL(pipe, plane_id), cus_ctl);
}
/* program plane scaler */
if (plane_state->scaler_id >= 0) {
skl_program_scaler(dev_priv, plane, crtc_state, plane_state);