Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'drm-intel-fixes-2022-09-01' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes

- Fix for a null pointer dereference (Lukasz)
- HDMI related quirk for ECS Liva Q2 with GLK graphics (Diego)
- Skip wm/ddb readout for disabled pipes (Ville)

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/YxC3GmSOpDiZTdIJ@intel.com

+19 -8
+9 -7
drivers/gpu/drm/i915/display/intel_bw.c
··· 404 404 int clpchgroup; 405 405 int j; 406 406 407 - if (i < num_groups - 1) 408 - bi_next = &dev_priv->max_bw[i + 1]; 409 - 410 407 clpchgroup = (sa->deburst * qi.deinterleave / num_channels) << i; 411 408 412 - if (i < num_groups - 1 && clpchgroup < clperchgroup) 413 - bi_next->num_planes = (ipqdepth - clpchgroup) / clpchgroup + 1; 414 - else 415 - bi_next->num_planes = 0; 409 + if (i < num_groups - 1) { 410 + bi_next = &dev_priv->max_bw[i + 1]; 411 + 412 + if (clpchgroup < clperchgroup) 413 + bi_next->num_planes = (ipqdepth - clpchgroup) / 414 + clpchgroup + 1; 415 + else 416 + bi_next->num_planes = 0; 417 + } 416 418 417 419 bi->num_qgv_points = qi.num_points; 418 420 bi->num_psf_gv_points = qi.num_psf_points;
+3
drivers/gpu/drm/i915/display/intel_quirks.c
··· 191 191 /* ASRock ITX*/ 192 192 { 0x3185, 0x1849, 0x2212, quirk_increase_ddi_disabled_time }, 193 193 { 0x3184, 0x1849, 0x2212, quirk_increase_ddi_disabled_time }, 194 + /* ECS Liva Q2 */ 195 + { 0x3185, 0x1019, 0xa94d, quirk_increase_ddi_disabled_time }, 196 + { 0x3184, 0x1019, 0xa94d, quirk_increase_ddi_disabled_time }, 194 197 }; 195 198 196 199 void intel_init_quirks(struct drm_i915_private *i915)
+7 -1
drivers/gpu/drm/i915/intel_pm.c
··· 6561 6561 enum plane_id plane_id; 6562 6562 u8 slices; 6563 6563 6564 - skl_pipe_wm_get_hw_state(crtc, &crtc_state->wm.skl.optimal); 6564 + memset(&crtc_state->wm.skl.optimal, 0, 6565 + sizeof(crtc_state->wm.skl.optimal)); 6566 + if (crtc_state->hw.active) 6567 + skl_pipe_wm_get_hw_state(crtc, &crtc_state->wm.skl.optimal); 6565 6568 crtc_state->wm.skl.raw = crtc_state->wm.skl.optimal; 6566 6569 6567 6570 memset(&dbuf_state->ddb[pipe], 0, sizeof(dbuf_state->ddb[pipe])); ··· 6574 6571 &crtc_state->wm.skl.plane_ddb[plane_id]; 6575 6572 struct skl_ddb_entry *ddb_y = 6576 6573 &crtc_state->wm.skl.plane_ddb_y[plane_id]; 6574 + 6575 + if (!crtc_state->hw.active) 6576 + continue; 6577 6577 6578 6578 skl_ddb_get_hw_plane_state(dev_priv, crtc->pipe, 6579 6579 plane_id, ddb, ddb_y);