diff --git a/msm/dp/dp_debug.c b/msm/dp/dp_debug.c index 7fa0718e..d8c7a2a9 100644 --- a/msm/dp/dp_debug.c +++ b/msm/dp/dp_debug.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved. */ @@ -393,6 +393,7 @@ static ssize_t dp_debug_read_crc(struct file *file, char __user *user_buff, size sde_conn = to_sde_connector(drm_conn); panel = sde_conn->drv_panel; + drm_connector_put(drm_conn); } else { panel = debug->panel; } diff --git a/msm/dsi/dsi_ctrl.c b/msm/dsi/dsi_ctrl.c index 7911b4d3..78c6b885 100644 --- a/msm/dsi/dsi_ctrl.c +++ b/msm/dsi/dsi_ctrl.c @@ -1561,11 +1561,11 @@ static int dsi_message_tx(struct dsi_ctrl *dsi_ctrl, struct dsi_cmd_desc *cmd_de cmdbuf = (u8 *)(dsi_ctrl->vaddr); - msm_gem_sync(dsi_ctrl->tx_cmd_buf); for (cnt = 0; cnt < length; cnt++) cmdbuf[dsi_ctrl->cmd_len + cnt] = buffer[cnt]; dsi_ctrl->cmd_len += length; + msm_gem_sync(dsi_ctrl->tx_cmd_buf); if (*flags & DSI_CTRL_CMD_LAST_COMMAND) { cmd_mem.length = dsi_ctrl->cmd_len; diff --git a/msm/sde/sde_encoder_phys_wb.c b/msm/sde/sde_encoder_phys_wb.c index d4fb117b..a3c4e62e 100644 --- a/msm/sde/sde_encoder_phys_wb.c +++ b/msm/sde/sde_encoder_phys_wb.c @@ -567,6 +567,13 @@ static void _sde_encoder_phys_wb_setup_cwb(struct sde_encoder_phys *phys_enc, bo return; } + if (crtc->num_mixers > MAX_CWB_PER_CTL_V1) { + SDE_ERROR("[enc:%d wb:%d] %d LM %d CWB case not supported\n", + DRMID(phys_enc->parent), WBID(wb_enc), + crtc->num_mixers, MAX_CWB_PER_CTL_V1); + return; + } + hw_ctl = crtc->mixers[0].hw_ctl; if (hw_ctl && hw_ctl->ops.setup_intf_cfg_v1 && (test_bit(SDE_WB_CWB_CTRL, &hw_wb->caps->features) || @@ -865,7 +872,7 @@ static int _sde_enc_phys_wb_validate_cwb(struct sde_encoder_phys *phys_enc, struct sde_rect wb_roi = {0,}, pu_roi = {0,}; u32 out_width = 0, out_height = 0; const struct sde_format *fmt; - int prog_line, ret = 0; + int num_lm, prog_line, ret = 0; fb = sde_wb_connector_state_get_output_fb(conn_state); if (!fb) { @@ -873,6 +880,12 @@ static int _sde_enc_phys_wb_validate_cwb(struct sde_encoder_phys *phys_enc, return 0; } + num_lm = sde_crtc_get_num_datapath(crtc_state->crtc, conn_state->connector, crtc_state); + if (num_lm > MAX_CWB_PER_CTL_V1) { + SDE_ERROR("%d LM %d CWB case not supported\n", num_lm, MAX_CWB_PER_CTL_V1); + return -EINVAL; + } + fmt = sde_get_sde_format_ext(fb->format->format, fb->modifier); if (!fmt) { SDE_ERROR("unsupported output pixel format:%x\n", fb->format->format); diff --git a/msm/sde/sde_plane.c b/msm/sde/sde_plane.c index 2cfb1a34..45e7a869 100644 --- a/msm/sde/sde_plane.c +++ b/msm/sde/sde_plane.c @@ -501,6 +501,9 @@ static void _sde_plane_set_qos_remap(struct drm_plane *plane) return; } + if (psde->is_virtual) + return; + memset(&qos_params, 0, sizeof(qos_params)); qos_params.vbif_idx = VBIF_RT; qos_params.clk_ctrl = psde->pipe_hw->cap->clk_ctrl;