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

drm/msm/dpu: request for display color blocks based on hw catalog entry

Request for color processing blocks only if they are
available in the display hw catalog and they are
sufficient in number for the selection.

Signed-off-by: Kalyan Thota <kalyan_t@codeaurora.org>
Fixes: e47616df008b ("drm/msm/dpu: add support for color processing
Tested-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Rob Clark <robdclark@chromium.org>

authored by

Kalyan Thota and committed by
Rob Clark
5fddd4f5 1cb2c4a2

+8 -4
+8 -4
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
··· 521 521 struct dpu_kms *dpu_kms, 522 522 struct drm_display_mode *mode) 523 523 { 524 - struct msm_display_topology topology; 524 + struct msm_display_topology topology = {0}; 525 525 int i, intf_count = 0; 526 526 527 527 for (i = 0; i < MAX_PHYS_ENCODERS_PER_VIRTUAL; i++) ··· 537 537 * 1 LM, 1 INTF 538 538 * 2 LM, 1 INTF (stream merge to support high resolution interfaces) 539 539 * 540 - * Adding color blocks only to primary interface 540 + * Adding color blocks only to primary interface if available in 541 + * sufficient number 541 542 */ 542 543 if (intf_count == 2) 543 544 topology.num_lm = 2; ··· 547 546 else 548 547 topology.num_lm = (mode->hdisplay > MAX_HDISPLAY_SPLIT) ? 2 : 1; 549 548 550 - if (dpu_enc->disp_info.intf_type == DRM_MODE_ENCODER_DSI) 551 - topology.num_dspp = topology.num_lm; 549 + if (dpu_enc->disp_info.intf_type == DRM_MODE_ENCODER_DSI) { 550 + if (dpu_kms->catalog->dspp && 551 + (dpu_kms->catalog->dspp_count >= topology.num_lm)) 552 + topology.num_dspp = topology.num_lm; 553 + } 552 554 553 555 topology.num_enc = 0; 554 556 topology.num_intf = intf_count;