From 43cb27c18710ee7746c2fa6fd592f24d72b440ec Mon Sep 17 00:00:00 2001 From: Srihitha Tangudu Date: Tue, 12 Apr 2022 12:52:02 +0530 Subject: [PATCH 1/4] disp: msm: dsi: handle read cmd tx failure from dsi host transfer Currently we are handling only write command transfer failures from dsi host transfer path. Modify check to handle read command transfer failures. Change-Id: Iee1dbf46a4374819e6d6425eb5acece8ec1fb8b1 Signed-off-by: Srihitha Tangudu --- msm/dsi/dsi_display.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index e6c03fc7f6c0..dc297f78093d 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -3340,7 +3340,7 @@ static ssize_t dsi_host_transfer(struct mipi_dsi_host *host, rc = dsi_ctrl_cmd_transfer(display->ctrl[ctrl_idx].ctrl, msg, &cmd_flags); - if (rc) { + if (rc < 0) { DSI_ERR("[%s] cmd transfer failed, rc=%d\n", display->name, rc); goto error_disable_cmd_engine; From 2b8416530035b98895acc05de9ef21e685a55017 Mon Sep 17 00:00:00 2001 From: Sai Srujana Oruganti Date: Mon, 18 Apr 2022 15:38:49 +0530 Subject: [PATCH 2/4] disp: msm: dsi: avoid setting ulp load to disable load When there is no ulp load entry, ulp load should be set to enable load. Change-Id: I531108b4d2137cf9262874bc411ff06592302374 Signed-off-by: Sai Srujana Oruganti --- msm/dsi/dsi_pwr.c | 1 - 1 file changed, 1 deletion(-) diff --git a/msm/dsi/dsi_pwr.c b/msm/dsi/dsi_pwr.c index 44bb745ad275..4dee0409d87c 100644 --- a/msm/dsi/dsi_pwr.c +++ b/msm/dsi/dsi_pwr.c @@ -68,7 +68,6 @@ static int dsi_pwr_parse_supply_node(struct dsi_parser_utils *utils, rc = utils->read_u32(node, "qcom,supply-ulp-load", &tmp); if (rc) { DSI_DEBUG("ulp-load not specified\n"); - rc = 0; } regs->vregs[i].ulp_load = (!rc ? tmp : regs->vregs[i].enable_load); From fc3be600f7b08a7125ed298b884c1407d752a42c Mon Sep 17 00:00:00 2001 From: Sai Srujana Oruganti Date: Thu, 21 Apr 2022 17:46:06 +0530 Subject: [PATCH 3/4] disp: msm: add skip panel power off dt property This property skips the panel power off for panels with in-cell design. Change-Id: I61ff7b8696940b74a58c79eef5b9cd43fd551c01 Signed-off-by: Sai Srujana Oruganti --- msm/dsi/dsi_panel.c | 5 ++++- msm/dsi/dsi_panel.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index cdfeb88e6873..b98447056ce3 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -379,7 +379,7 @@ static int dsi_panel_power_off(struct dsi_panel *panel) { int rc = 0; - if (panel->is_twm_en) { + if (panel->is_twm_en || panel->skip_panel_off) { DSI_DEBUG("TWM Enabled, skip panel power off\n"); return rc; } @@ -2085,6 +2085,9 @@ static int dsi_panel_parse_misc_features(struct dsi_panel *panel) panel->reset_gpio_always_on = utils->read_bool(utils->data, "qcom,platform-reset-gpio-always-on"); + panel->skip_panel_off = utils->read_bool(utils->data, + "qcom,skip-panel-power-off"); + panel->spr_info.enable = false; panel->spr_info.pack_type = MSM_DISPLAY_SPR_TYPE_MAX; diff --git a/msm/dsi/dsi_panel.h b/msm/dsi/dsi_panel.h index f3902274930b..3fc6baf9fd13 100644 --- a/msm/dsi/dsi_panel.h +++ b/msm/dsi/dsi_panel.h @@ -245,6 +245,7 @@ struct dsi_panel { atomic_t esd_recovery_pending; bool is_twm_en; + bool skip_panel_off; bool panel_initialized; bool te_using_watchdog_timer; struct dsi_qsync_capabilities qsync_caps; From 09ec818831de14ab5d5a72c73a3cee79625d2dea Mon Sep 17 00:00:00 2001 From: Jayaprakash Madisetty Date: Mon, 2 May 2022 22:14:55 +0530 Subject: [PATCH 4/4] disp: msm: avoid minidump region addition for mdss register dumps This change enables minidump for register dumps, debug bus collection based on CONFIG_QCOM_VA_MINIDUMP config. The minidump driver in 5.4 kernel needs physical contiguous memory allocation as a requirement. The minidump collection failure is seen with commit fdf36d71241f ("disp: msm: use vzalloc for large allocations") and it uses vzalloc to address memory allocation failure with order 5. This patch will disable minidump collection for regdumps, debug bus to address minidump collection failure. Change-Id: If5ff91ff95279ee2997765599dbeab16ac2dae60 Signed-off-by: Jayaprakash Madisetty --- msm/sde_dbg.c | 6 ++++++ msm/sde_dbg_evtlog.c | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/msm/sde_dbg.c b/msm/sde_dbg.c index 4d6a5e22d813..ffa3ae346e18 100644 --- a/msm/sde_dbg.c +++ b/msm/sde_dbg.c @@ -999,8 +999,10 @@ static void _sde_dbg_dump_sde_dbg_bus(struct sde_dbg_sde_debug_bus *bus) bus->cmn.content_size = list_size / sizeof(u32); } +#ifdef CONFIG_QCOM_VA_MINIDUMP if (sde_mini_dump_add_region(bus->cmn.name, list_size, *dump_mem) < 0) pr_err("minidump add %s failed\n", bus->cmn.name); +#endif dump_addr = *dump_mem; SDE_DBG_LOG_DUMP_ADDR(bus->cmn.name, dump_addr, list_size, 0); @@ -1047,8 +1049,10 @@ static void _sde_dbg_dump_dsi_dbg_bus(struct sde_dbg_sde_debug_bus *bus) bus->cmn.content_size = list_size / sizeof(u32); } +#ifdef CONFIG_QCOM_VA_MINIDUMP if (sde_mini_dump_add_region(bus->cmn.name, list_size, *dump_mem) < 0) pr_err("minidump add %s failed\n", bus->cmn.name); +#endif dump_addr = *dump_mem; @@ -1098,10 +1102,12 @@ static void _sde_dump_array(struct sde_dbg_reg_base *blk_arr[], pr_err("Failed to allocate memory for reg_dump_addr size:%d\n", reg_dump_size); +#ifdef CONFIG_QCOM_VA_MINIDUMP if (dbg_base->reg_dump_addr && sde_mini_dump_add_region("reg_dump", reg_dump_size, dbg_base->reg_dump_addr) < 0) pr_err("minidump add regdump failed\n"); +#endif if (dump_all) sde_evtlog_dump_all(sde_dbg_base.evtlog); diff --git a/msm/sde_dbg_evtlog.c b/msm/sde_dbg_evtlog.c index 59c8440e413d..f62aaf4ad151 100644 --- a/msm/sde_dbg_evtlog.c +++ b/msm/sde_dbg_evtlog.c @@ -220,7 +220,7 @@ struct sde_dbg_evtlog *sde_evtlog_init(void) { struct sde_dbg_evtlog *evtlog; - evtlog = vzalloc(sizeof(*evtlog)); + evtlog = kzalloc(sizeof(*evtlog), GFP_KERNEL); if (!evtlog) return ERR_PTR(-ENOMEM); @@ -240,7 +240,7 @@ struct sde_dbg_reglog *sde_reglog_init(void) { struct sde_dbg_reglog *reglog; - reglog = vzalloc(sizeof(*reglog)); + reglog = kzalloc(sizeof(*reglog), GFP_KERNEL); if (!reglog) return ERR_PTR(-ENOMEM); @@ -351,7 +351,7 @@ void sde_evtlog_destroy(struct sde_dbg_evtlog *evtlog) list_del(&filter_node->list); kfree(filter_node); } - vfree(evtlog); + kfree(evtlog); } void sde_reglog_destroy(struct sde_dbg_reglog *reglog) @@ -359,5 +359,5 @@ void sde_reglog_destroy(struct sde_dbg_reglog *reglog) if (!reglog) return; - vfree(reglog); + kfree(reglog); }