Loading drivers/gpu/drm/msm/dp/dp_display.c +21 −13 Original line number Diff line number Diff line Loading @@ -639,7 +639,7 @@ static void dp_display_host_deinit(struct dp_display_private *dp) static int dp_display_process_hpd_high(struct dp_display_private *dp) { int rc = 0; int rc = -EINVAL; mutex_lock(&dp->session_lock); Loading @@ -651,7 +651,6 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp) } dp->is_connected = true; mutex_unlock(&dp->session_lock); dp->dp_display.max_pclk_khz = min(dp->parser->max_pclk_khz, dp->debug->max_pclk_khz); Loading @@ -673,9 +672,7 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp) * ENOTCONN --> no downstream device connected */ if (rc == -ETIMEDOUT || rc == -ENOTCONN) { mutex_lock(&dp->session_lock); dp->is_connected = false; mutex_unlock(&dp->session_lock); goto end; } Loading @@ -684,22 +681,22 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp) dp_display_process_mst_hpd_high(dp, false); mutex_lock(&dp->session_lock); rc = dp->ctrl->on(dp->ctrl, dp->mst.mst_active, dp->panel->fec_en, false); if (rc) { dp->is_connected = false; mutex_unlock(&dp->session_lock); goto end; } mutex_unlock(&dp->session_lock); dp->process_hpd_connect = false; dp_display_process_mst_hpd_high(dp, true); end: mutex_unlock(&dp->session_lock); if (!rc) dp_display_send_hpd_notification(dp); end: return rc; } Loading Loading @@ -784,6 +781,7 @@ static int dp_display_usbpd_configure_cb(struct device *dev) goto end; } mutex_lock(&dp->session_lock); dp_display_host_init(dp); /* check for hpd high */ Loading @@ -791,7 +789,7 @@ static int dp_display_usbpd_configure_cb(struct device *dev) queue_work(dp->wq, &dp->connect_work); else dp->process_hpd_connect = true; mutex_unlock(&dp->session_lock); end: return rc; } Loading Loading @@ -910,8 +908,10 @@ static int dp_display_usbpd_disconnect_cb(struct device *dev) goto end; } if (dp->debug->psm_enabled) mutex_lock(&dp->session_lock); if (dp->debug->psm_enabled && dp->core_initialized) dp->link->psm_config(dp->link, &dp->panel->link_info, true); mutex_unlock(&dp->session_lock); dp_display_disconnect_sync(dp); Loading Loading @@ -960,11 +960,19 @@ static void dp_display_attention_work(struct work_struct *work) struct dp_display_private *dp = container_of(work, struct dp_display_private, attention_work); if (dp->debug->mst_hpd_sim) mutex_lock(&dp->session_lock); if (dp->debug->mst_hpd_sim || !dp->core_initialized) { mutex_unlock(&dp->session_lock); goto mst_attention; } if (dp->link->process_request(dp->link)) if (dp->link->process_request(dp->link)) { mutex_unlock(&dp->session_lock); goto cp_irq; } mutex_unlock(&dp->session_lock); if (dp->link->sink_request & DS_PORT_STATUS_CHANGED) { if (dp_display_is_sink_count_zero(dp)) { Loading drivers/gpu/drm/msm/dsi-staging/dsi_panel.c +14 −4 Original line number Diff line number Diff line Loading @@ -2225,10 +2225,18 @@ static int dsi_panel_parse_bl_config(struct dsi_panel *panel) "qcom,platform-bklight-en-gpio", 0); if (!gpio_is_valid(panel->bl_config.en_gpio)) { pr_debug("[%s] failed get bklt gpio, rc=%d\n", panel->name, rc); if (panel->bl_config.en_gpio == -EPROBE_DEFER) { pr_debug("[%s] failed to get bklt gpio, rc=%d\n", panel->name, rc); rc = -EPROBE_DEFER; goto error; } else { pr_debug("[%s] failed to get bklt gpio, rc=%d\n", panel->name, rc); rc = 0; goto error; } } error: return rc; Loading Loading @@ -3169,8 +3177,10 @@ struct dsi_panel *dsi_panel_get(struct device *parent, pr_err("failed to parse power config, rc=%d\n", rc); rc = dsi_panel_parse_bl_config(panel); if (rc) if (rc) { pr_err("failed to parse backlight config, rc=%d\n", rc); goto error; } rc = dsi_panel_parse_misc_features(panel); Loading drivers/gpu/drm/msm/sde_dbg.c +41 −20 Original line number Diff line number Diff line /* Copyright (c) 2009-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2009-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -244,6 +244,7 @@ static struct sde_dbg_base { u32 cur_evt_index; u32 dbgbus_dump_idx; u32 vbif_dbgbus_dump_idx; enum sde_dbg_dump_context dump_mode; } sde_dbg_base; /* sde_dbg_base_evtlog - global pointer to main sde event log for macro use */ Loading Loading @@ -3389,6 +3390,17 @@ static inline int _sde_dbg_enable_power(int enable) enable); } /** * _sde_power_check - check if power needs to enabled * @dump_mode: to check if power need to be enabled * Return: true if success; false otherwise */ static inline bool _sde_power_check(enum sde_dbg_dump_context dump_mode) { return (dump_mode == SDE_DBG_DUMP_CLK_ENABLED_CTX || dump_mode == SDE_DBG_DUMP_IRQ_CTX) ? false : true; } /** * _sde_dump_reg - helper function for dumping rotator register set content * @dump_name: register set name Loading @@ -3400,8 +3412,7 @@ static inline int _sde_dbg_enable_power(int enable) * @from_isr: whether being called from isr context */ static void _sde_dump_reg(const char *dump_name, u32 reg_dump_flag, char *base_addr, char *addr, size_t len_bytes, u32 **dump_mem, bool from_isr) char *base_addr, char *addr, size_t len_bytes, u32 **dump_mem) { u32 in_log, in_mem, len_align, len_padded; u32 *dump_addr = NULL; Loading Loading @@ -3449,7 +3460,7 @@ static void _sde_dump_reg(const char *dump_name, u32 reg_dump_flag, } } if (!from_isr) { if (_sde_power_check(sde_dbg_base.dump_mode)) { rc = _sde_dbg_enable_power(true); if (rc) { pr_err("failed to enable power %d\n", rc); Loading Loading @@ -3481,7 +3492,7 @@ static void _sde_dump_reg(const char *dump_name, u32 reg_dump_flag, addr += REG_DUMP_ALIGN; } if (!from_isr) if (_sde_power_check(sde_dbg_base.dump_mode)) _sde_dbg_enable_power(false); } Loading Loading @@ -3583,7 +3594,7 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, _sde_dump_reg(range_node->range_name, reg_dump_flag, dbg->base, addr, len, &range_node->reg_dump, false); &range_node->reg_dump); } } else { /* If there is no list to dump ranges, dump all registers */ Loading @@ -3594,7 +3605,7 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, addr = dbg->base; len = dbg->max_offset; _sde_dump_reg(dbg->name, reg_dump_flag, dbg->base, addr, len, &dbg->reg_dump, false); &dbg->reg_dump); } } Loading Loading @@ -3721,11 +3732,13 @@ static void _sde_dbg_dump_sde_dbg_bus(struct sde_dbg_sde_debug_bus *bus) } } if (_sde_power_check(sde_dbg_base.dump_mode)) { rc = _sde_dbg_enable_power(true); if (rc) { pr_err("failed to enable power %d\n", rc); return; } } for (i = 0; i < bus->cmn.entries_size; i++) { head = bus->entries + i; Loading Loading @@ -3766,6 +3779,8 @@ static void _sde_dbg_dump_sde_dbg_bus(struct sde_dbg_sde_debug_bus *bus) head->wr_addr != DBGBUS_DSPP) writel_relaxed(0x0, mem_base + DBGBUS_DSPP); } if (_sde_power_check(sde_dbg_base.dump_mode)) _sde_dbg_enable_power(false); dev_info(sde_dbg_base.dev, "======== end %s dump =========\n", Loading Loading @@ -3878,11 +3893,14 @@ static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) } } if (_sde_power_check(sde_dbg_base.dump_mode)) { rc = _sde_dbg_enable_power(true); if (rc) { pr_err("failed to enable power %d\n", rc); return; } } value = readl_relaxed(mem_base + MMSS_VBIF_CLKON); writel_relaxed(value | BIT(1), mem_base + MMSS_VBIF_CLKON); Loading Loading @@ -3933,6 +3951,7 @@ static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) dump_addr += (head->block_cnt * head->test_pnt_cnt * 4); } if (_sde_power_check(sde_dbg_base.dump_mode)) _sde_dbg_enable_power(false); dev_info(sde_dbg_base.dev, "======== end %s dump =========\n", Loading Loading @@ -4001,7 +4020,7 @@ static void _sde_dump_work(struct work_struct *work) sde_dbg_base.dump_secure); } void sde_dbg_dump(bool queue_work, const char *name, ...) void sde_dbg_dump(enum sde_dbg_dump_context dump_mode, const char *name, ...) { int i, index = 0; bool do_panic = false; Loading @@ -4018,7 +4037,8 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) if (!sde_evtlog_is_enabled(sde_dbg_base.evtlog, SDE_EVTLOG_ALWAYS)) return; if (queue_work && work_pending(&sde_dbg_base.dump_work)) if ((dump_mode == SDE_DBG_DUMP_IRQ_CTX) && work_pending(&sde_dbg_base.dump_work)) return; blk_arr = &sde_dbg_base.req_dump_blks[0]; Loading @@ -4027,6 +4047,7 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) memset(sde_dbg_base.req_dump_blks, 0, sizeof(sde_dbg_base.req_dump_blks)); sde_dbg_base.dump_all = false; sde_dbg_base.dump_mode = dump_mode; va_start(args, name); i = 0; Loading Loading @@ -4069,7 +4090,7 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) } va_end(args); if (queue_work) { if (dump_mode == SDE_DBG_DUMP_IRQ_CTX) { /* schedule work to dump later */ sde_dbg_base.work_panic = do_panic; sde_dbg_base.dbgbus_sde.cmn.include_in_deferred_work = Loading drivers/gpu/drm/msm/sde_dbg.h +25 −7 Original line number Diff line number Diff line /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -49,6 +49,12 @@ enum sde_dbg_dump_flag { SDE_DBG_DUMP_IN_MEM = BIT(1), }; enum sde_dbg_dump_context { SDE_DBG_DUMP_PROC_CTX, SDE_DBG_DUMP_IRQ_CTX, SDE_DBG_DUMP_CLK_ENABLED_CTX, }; #ifdef CONFIG_DRM_SDE_EVTLOG_DEBUG #define SDE_EVTLOG_DEFAULT_ENABLE (SDE_EVTLOG_CRITICAL | SDE_EVTLOG_IRQ) #else Loading Loading @@ -137,8 +143,8 @@ extern struct sde_dbg_evtlog *sde_dbg_base_evtlog; * Including the special name "panic" will trigger a panic after * the dumping work has completed. */ #define SDE_DBG_DUMP(...) sde_dbg_dump(false, __func__, ##__VA_ARGS__, \ SDE_DBG_DUMP_DATA_LIMITER) #define SDE_DBG_DUMP(...) sde_dbg_dump(SDE_DBG_DUMP_PROC_CTX, __func__, \ ##__VA_ARGS__, SDE_DBG_DUMP_DATA_LIMITER) /** * SDE_DBG_DUMP_WQ - trigger dumping of all sde_dbg facilities, queuing the work Loading @@ -148,8 +154,19 @@ extern struct sde_dbg_evtlog *sde_dbg_base_evtlog; * Including the special name "panic" will trigger a panic after * the dumping work has completed. */ #define SDE_DBG_DUMP_WQ(...) sde_dbg_dump(true, __func__, ##__VA_ARGS__, \ SDE_DBG_DUMP_DATA_LIMITER) #define SDE_DBG_DUMP_WQ(...) sde_dbg_dump(SDE_DBG_DUMP_IRQ_CTX, __func__, \ ##__VA_ARGS__, SDE_DBG_DUMP_DATA_LIMITER) /** * SDE_DBG_DUMP_CLK_EN - trigger dumping of all sde_dbg facilities, without clk * @va_args: list of named register dump ranges and regions to dump, as * registered previously through sde_dbg_reg_register_base and * sde_dbg_reg_register_dump_range. * Including the special name "panic" will trigger a panic after * the dumping work has completed. */ #define SDE_DBG_DUMP_CLK_EN(...) sde_dbg_dump(SDE_DBG_DUMP_CLK_ENABLED_CTX, \ __func__, ##__VA_ARGS__, SDE_DBG_DUMP_DATA_LIMITER) /** * SDE_DBG_EVT_CTRL - trigger a different driver events Loading Loading @@ -254,7 +271,7 @@ void sde_dbg_destroy(void); * the dumping work has completed. * Returns: none */ void sde_dbg_dump(bool queue_work, const char *name, ...); void sde_dbg_dump(enum sde_dbg_dump_context mode, const char *name, ...); /** * sde_dbg_ctrl - trigger specific actions for the driver with debugging Loading Loading @@ -401,7 +418,8 @@ static inline void sde_dbg_destroy(void) { } static inline void sde_dbg_dump(bool queue_work, const char *name, ...) static inline void sde_dbg_dump(enum sde_dbg_dump_context, const char *name, ...) { } Loading Loading
drivers/gpu/drm/msm/dp/dp_display.c +21 −13 Original line number Diff line number Diff line Loading @@ -639,7 +639,7 @@ static void dp_display_host_deinit(struct dp_display_private *dp) static int dp_display_process_hpd_high(struct dp_display_private *dp) { int rc = 0; int rc = -EINVAL; mutex_lock(&dp->session_lock); Loading @@ -651,7 +651,6 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp) } dp->is_connected = true; mutex_unlock(&dp->session_lock); dp->dp_display.max_pclk_khz = min(dp->parser->max_pclk_khz, dp->debug->max_pclk_khz); Loading @@ -673,9 +672,7 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp) * ENOTCONN --> no downstream device connected */ if (rc == -ETIMEDOUT || rc == -ENOTCONN) { mutex_lock(&dp->session_lock); dp->is_connected = false; mutex_unlock(&dp->session_lock); goto end; } Loading @@ -684,22 +681,22 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp) dp_display_process_mst_hpd_high(dp, false); mutex_lock(&dp->session_lock); rc = dp->ctrl->on(dp->ctrl, dp->mst.mst_active, dp->panel->fec_en, false); if (rc) { dp->is_connected = false; mutex_unlock(&dp->session_lock); goto end; } mutex_unlock(&dp->session_lock); dp->process_hpd_connect = false; dp_display_process_mst_hpd_high(dp, true); end: mutex_unlock(&dp->session_lock); if (!rc) dp_display_send_hpd_notification(dp); end: return rc; } Loading Loading @@ -784,6 +781,7 @@ static int dp_display_usbpd_configure_cb(struct device *dev) goto end; } mutex_lock(&dp->session_lock); dp_display_host_init(dp); /* check for hpd high */ Loading @@ -791,7 +789,7 @@ static int dp_display_usbpd_configure_cb(struct device *dev) queue_work(dp->wq, &dp->connect_work); else dp->process_hpd_connect = true; mutex_unlock(&dp->session_lock); end: return rc; } Loading Loading @@ -910,8 +908,10 @@ static int dp_display_usbpd_disconnect_cb(struct device *dev) goto end; } if (dp->debug->psm_enabled) mutex_lock(&dp->session_lock); if (dp->debug->psm_enabled && dp->core_initialized) dp->link->psm_config(dp->link, &dp->panel->link_info, true); mutex_unlock(&dp->session_lock); dp_display_disconnect_sync(dp); Loading Loading @@ -960,11 +960,19 @@ static void dp_display_attention_work(struct work_struct *work) struct dp_display_private *dp = container_of(work, struct dp_display_private, attention_work); if (dp->debug->mst_hpd_sim) mutex_lock(&dp->session_lock); if (dp->debug->mst_hpd_sim || !dp->core_initialized) { mutex_unlock(&dp->session_lock); goto mst_attention; } if (dp->link->process_request(dp->link)) if (dp->link->process_request(dp->link)) { mutex_unlock(&dp->session_lock); goto cp_irq; } mutex_unlock(&dp->session_lock); if (dp->link->sink_request & DS_PORT_STATUS_CHANGED) { if (dp_display_is_sink_count_zero(dp)) { Loading
drivers/gpu/drm/msm/dsi-staging/dsi_panel.c +14 −4 Original line number Diff line number Diff line Loading @@ -2225,10 +2225,18 @@ static int dsi_panel_parse_bl_config(struct dsi_panel *panel) "qcom,platform-bklight-en-gpio", 0); if (!gpio_is_valid(panel->bl_config.en_gpio)) { pr_debug("[%s] failed get bklt gpio, rc=%d\n", panel->name, rc); if (panel->bl_config.en_gpio == -EPROBE_DEFER) { pr_debug("[%s] failed to get bklt gpio, rc=%d\n", panel->name, rc); rc = -EPROBE_DEFER; goto error; } else { pr_debug("[%s] failed to get bklt gpio, rc=%d\n", panel->name, rc); rc = 0; goto error; } } error: return rc; Loading Loading @@ -3169,8 +3177,10 @@ struct dsi_panel *dsi_panel_get(struct device *parent, pr_err("failed to parse power config, rc=%d\n", rc); rc = dsi_panel_parse_bl_config(panel); if (rc) if (rc) { pr_err("failed to parse backlight config, rc=%d\n", rc); goto error; } rc = dsi_panel_parse_misc_features(panel); Loading
drivers/gpu/drm/msm/sde_dbg.c +41 −20 Original line number Diff line number Diff line /* Copyright (c) 2009-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2009-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -244,6 +244,7 @@ static struct sde_dbg_base { u32 cur_evt_index; u32 dbgbus_dump_idx; u32 vbif_dbgbus_dump_idx; enum sde_dbg_dump_context dump_mode; } sde_dbg_base; /* sde_dbg_base_evtlog - global pointer to main sde event log for macro use */ Loading Loading @@ -3389,6 +3390,17 @@ static inline int _sde_dbg_enable_power(int enable) enable); } /** * _sde_power_check - check if power needs to enabled * @dump_mode: to check if power need to be enabled * Return: true if success; false otherwise */ static inline bool _sde_power_check(enum sde_dbg_dump_context dump_mode) { return (dump_mode == SDE_DBG_DUMP_CLK_ENABLED_CTX || dump_mode == SDE_DBG_DUMP_IRQ_CTX) ? false : true; } /** * _sde_dump_reg - helper function for dumping rotator register set content * @dump_name: register set name Loading @@ -3400,8 +3412,7 @@ static inline int _sde_dbg_enable_power(int enable) * @from_isr: whether being called from isr context */ static void _sde_dump_reg(const char *dump_name, u32 reg_dump_flag, char *base_addr, char *addr, size_t len_bytes, u32 **dump_mem, bool from_isr) char *base_addr, char *addr, size_t len_bytes, u32 **dump_mem) { u32 in_log, in_mem, len_align, len_padded; u32 *dump_addr = NULL; Loading Loading @@ -3449,7 +3460,7 @@ static void _sde_dump_reg(const char *dump_name, u32 reg_dump_flag, } } if (!from_isr) { if (_sde_power_check(sde_dbg_base.dump_mode)) { rc = _sde_dbg_enable_power(true); if (rc) { pr_err("failed to enable power %d\n", rc); Loading Loading @@ -3481,7 +3492,7 @@ static void _sde_dump_reg(const char *dump_name, u32 reg_dump_flag, addr += REG_DUMP_ALIGN; } if (!from_isr) if (_sde_power_check(sde_dbg_base.dump_mode)) _sde_dbg_enable_power(false); } Loading Loading @@ -3583,7 +3594,7 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, _sde_dump_reg(range_node->range_name, reg_dump_flag, dbg->base, addr, len, &range_node->reg_dump, false); &range_node->reg_dump); } } else { /* If there is no list to dump ranges, dump all registers */ Loading @@ -3594,7 +3605,7 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, addr = dbg->base; len = dbg->max_offset; _sde_dump_reg(dbg->name, reg_dump_flag, dbg->base, addr, len, &dbg->reg_dump, false); &dbg->reg_dump); } } Loading Loading @@ -3721,11 +3732,13 @@ static void _sde_dbg_dump_sde_dbg_bus(struct sde_dbg_sde_debug_bus *bus) } } if (_sde_power_check(sde_dbg_base.dump_mode)) { rc = _sde_dbg_enable_power(true); if (rc) { pr_err("failed to enable power %d\n", rc); return; } } for (i = 0; i < bus->cmn.entries_size; i++) { head = bus->entries + i; Loading Loading @@ -3766,6 +3779,8 @@ static void _sde_dbg_dump_sde_dbg_bus(struct sde_dbg_sde_debug_bus *bus) head->wr_addr != DBGBUS_DSPP) writel_relaxed(0x0, mem_base + DBGBUS_DSPP); } if (_sde_power_check(sde_dbg_base.dump_mode)) _sde_dbg_enable_power(false); dev_info(sde_dbg_base.dev, "======== end %s dump =========\n", Loading Loading @@ -3878,11 +3893,14 @@ static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) } } if (_sde_power_check(sde_dbg_base.dump_mode)) { rc = _sde_dbg_enable_power(true); if (rc) { pr_err("failed to enable power %d\n", rc); return; } } value = readl_relaxed(mem_base + MMSS_VBIF_CLKON); writel_relaxed(value | BIT(1), mem_base + MMSS_VBIF_CLKON); Loading Loading @@ -3933,6 +3951,7 @@ static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) dump_addr += (head->block_cnt * head->test_pnt_cnt * 4); } if (_sde_power_check(sde_dbg_base.dump_mode)) _sde_dbg_enable_power(false); dev_info(sde_dbg_base.dev, "======== end %s dump =========\n", Loading Loading @@ -4001,7 +4020,7 @@ static void _sde_dump_work(struct work_struct *work) sde_dbg_base.dump_secure); } void sde_dbg_dump(bool queue_work, const char *name, ...) void sde_dbg_dump(enum sde_dbg_dump_context dump_mode, const char *name, ...) { int i, index = 0; bool do_panic = false; Loading @@ -4018,7 +4037,8 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) if (!sde_evtlog_is_enabled(sde_dbg_base.evtlog, SDE_EVTLOG_ALWAYS)) return; if (queue_work && work_pending(&sde_dbg_base.dump_work)) if ((dump_mode == SDE_DBG_DUMP_IRQ_CTX) && work_pending(&sde_dbg_base.dump_work)) return; blk_arr = &sde_dbg_base.req_dump_blks[0]; Loading @@ -4027,6 +4047,7 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) memset(sde_dbg_base.req_dump_blks, 0, sizeof(sde_dbg_base.req_dump_blks)); sde_dbg_base.dump_all = false; sde_dbg_base.dump_mode = dump_mode; va_start(args, name); i = 0; Loading Loading @@ -4069,7 +4090,7 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) } va_end(args); if (queue_work) { if (dump_mode == SDE_DBG_DUMP_IRQ_CTX) { /* schedule work to dump later */ sde_dbg_base.work_panic = do_panic; sde_dbg_base.dbgbus_sde.cmn.include_in_deferred_work = Loading
drivers/gpu/drm/msm/sde_dbg.h +25 −7 Original line number Diff line number Diff line /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -49,6 +49,12 @@ enum sde_dbg_dump_flag { SDE_DBG_DUMP_IN_MEM = BIT(1), }; enum sde_dbg_dump_context { SDE_DBG_DUMP_PROC_CTX, SDE_DBG_DUMP_IRQ_CTX, SDE_DBG_DUMP_CLK_ENABLED_CTX, }; #ifdef CONFIG_DRM_SDE_EVTLOG_DEBUG #define SDE_EVTLOG_DEFAULT_ENABLE (SDE_EVTLOG_CRITICAL | SDE_EVTLOG_IRQ) #else Loading Loading @@ -137,8 +143,8 @@ extern struct sde_dbg_evtlog *sde_dbg_base_evtlog; * Including the special name "panic" will trigger a panic after * the dumping work has completed. */ #define SDE_DBG_DUMP(...) sde_dbg_dump(false, __func__, ##__VA_ARGS__, \ SDE_DBG_DUMP_DATA_LIMITER) #define SDE_DBG_DUMP(...) sde_dbg_dump(SDE_DBG_DUMP_PROC_CTX, __func__, \ ##__VA_ARGS__, SDE_DBG_DUMP_DATA_LIMITER) /** * SDE_DBG_DUMP_WQ - trigger dumping of all sde_dbg facilities, queuing the work Loading @@ -148,8 +154,19 @@ extern struct sde_dbg_evtlog *sde_dbg_base_evtlog; * Including the special name "panic" will trigger a panic after * the dumping work has completed. */ #define SDE_DBG_DUMP_WQ(...) sde_dbg_dump(true, __func__, ##__VA_ARGS__, \ SDE_DBG_DUMP_DATA_LIMITER) #define SDE_DBG_DUMP_WQ(...) sde_dbg_dump(SDE_DBG_DUMP_IRQ_CTX, __func__, \ ##__VA_ARGS__, SDE_DBG_DUMP_DATA_LIMITER) /** * SDE_DBG_DUMP_CLK_EN - trigger dumping of all sde_dbg facilities, without clk * @va_args: list of named register dump ranges and regions to dump, as * registered previously through sde_dbg_reg_register_base and * sde_dbg_reg_register_dump_range. * Including the special name "panic" will trigger a panic after * the dumping work has completed. */ #define SDE_DBG_DUMP_CLK_EN(...) sde_dbg_dump(SDE_DBG_DUMP_CLK_ENABLED_CTX, \ __func__, ##__VA_ARGS__, SDE_DBG_DUMP_DATA_LIMITER) /** * SDE_DBG_EVT_CTRL - trigger a different driver events Loading Loading @@ -254,7 +271,7 @@ void sde_dbg_destroy(void); * the dumping work has completed. * Returns: none */ void sde_dbg_dump(bool queue_work, const char *name, ...); void sde_dbg_dump(enum sde_dbg_dump_context mode, const char *name, ...); /** * sde_dbg_ctrl - trigger specific actions for the driver with debugging Loading Loading @@ -401,7 +418,8 @@ static inline void sde_dbg_destroy(void) { } static inline void sde_dbg_dump(bool queue_work, const char *name, ...) static inline void sde_dbg_dump(enum sde_dbg_dump_context, const char *name, ...) { } Loading