Loading msm/sde/sde_encoder_phys_cmd.c +4 −1 Original line number Diff line number Diff line Loading @@ -565,6 +565,9 @@ static int _sde_encoder_phys_cmd_handle_ppdone_timeout( SDE_EVT32(DRMID(phys_enc->parent), SDE_EVTLOG_FATAL); sde_encoder_helper_unregister_irq(phys_enc, INTR_IDX_RDPTR); if (sde_kms_is_secure_session_inprogress(phys_enc->sde_kms)) SDE_DBG_DUMP("secure", "all", "dbg_bus"); else SDE_DBG_DUMP("all", "dbg_bus", "vbif_dbg_bus"); sde_encoder_helper_register_irq(phys_enc, INTR_IDX_RDPTR); } Loading msm/sde_dbg.c +58 −13 Original line number Diff line number Diff line Loading @@ -206,6 +206,7 @@ struct sde_dbg_regbuf { * @dbgbus_sde: debug bus structure for the sde * @dbgbus_vbif_rt: debug bus structure for the realtime vbif * @dump_all: dump all entries in register dump * @dump_secure: dump entries excluding few as it is in secure-session * @dsi_dbg_bus: dump dsi debug bus register * @regbuf: buffer data to track the register dumping in hw recovery * @cur_evt_index: index used for tracking event logs dump in hw recovery Loading @@ -229,6 +230,7 @@ static struct sde_dbg_base { struct sde_dbg_vbif_debug_bus dbgbus_vbif_rt; struct sde_dbg_dsi_debug_bus dbgbus_dsi; bool dump_all; bool dump_secure; bool dsi_dbg_bus; u32 debugfs_ctrl; Loading Loading @@ -2958,13 +2960,33 @@ static int _sde_dump_reg_range_cmp(void *priv, struct list_head *a, return ar->offset.start - br->offset.start; } static const char *const exclude_modules[] = { "vbif_rt", "vbif_nrt", "wb_2", NULL }; static bool is_block_exclude(char **modules, char *name) { char **ptr = modules; while (*ptr != NULL) { if (!strcmp(name, *ptr)) return true; ++ptr; } return false; } /** * _sde_dump_reg_by_ranges - dump ranges or full range of the register blk base * @dbg: register blk base structure * @reg_dump_flag: dump target, memory, kernel log, or both * @dump_secure: flag to indicate dumping in secure-session */ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, u32 reg_dump_flag) u32 reg_dump_flag, bool dump_secure) { char *addr; size_t len; Loading @@ -2987,6 +3009,12 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, len = _sde_dbg_get_dump_range(&range_node->offset, dbg->max_offset); addr = dbg->base + range_node->offset.start; if (dump_secure && is_block_exclude((char**)exclude_modules, range_node->range_name)) continue; pr_debug("%s: range_base=0x%pK start=0x%x end=0x%x\n", range_node->range_name, addr, range_node->offset.start, Loading @@ -3012,8 +3040,9 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, /** * _sde_dump_reg_by_blk - dump a named register base region * @blk_name: register blk name * @dump_secure: flag to indicate dumping in secure-session */ static void _sde_dump_reg_by_blk(const char *blk_name) static void _sde_dump_reg_by_blk(const char *blk_name, bool dump_secure) { struct sde_dbg_base *dbg_base = &sde_dbg_base; struct sde_dbg_reg_base *blk_base; Loading @@ -3025,7 +3054,7 @@ static void _sde_dump_reg_by_blk(const char *blk_name) if (strlen(blk_base->name) && !strcmp(blk_base->name, blk_name)) { _sde_dump_reg_by_ranges(blk_base, dbg_base->enable_reg_dump); dbg_base->enable_reg_dump, dump_secure); break; } } Loading @@ -3034,7 +3063,7 @@ static void _sde_dump_reg_by_blk(const char *blk_name) /** * _sde_dump_reg_all - dump all register regions */ static void _sde_dump_reg_all(void) static void _sde_dump_reg_all(bool dump_secure) { struct sde_dbg_base *dbg_base = &sde_dbg_base; struct sde_dbg_reg_base *blk_base; Loading @@ -3042,9 +3071,18 @@ static void _sde_dump_reg_all(void) if (!dbg_base) return; list_for_each_entry(blk_base, &dbg_base->reg_base_list, reg_base_head) if (strlen(blk_base->name)) _sde_dump_reg_by_blk(blk_base->name); list_for_each_entry(blk_base, &dbg_base->reg_base_list, reg_base_head) { if (!strlen(blk_base->name)) continue; if (dump_secure && is_block_exclude((char **)exclude_modules, blk_base->name)) continue; _sde_dump_reg_by_blk(blk_base->name, dump_secure); } } /** Loading Loading @@ -3349,10 +3387,11 @@ static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) * @name: string indicating origin of dump * @dump_dbgbus_sde: whether to dump the sde debug bus * @dump_dbgbus_vbif_rt: whether to dump the vbif rt debug bus * @dump_secure: flag to indicate dumping in secure-session */ static void _sde_dump_array(struct sde_dbg_reg_base *blk_arr[], u32 len, bool do_panic, const char *name, bool dump_dbgbus_sde, bool dump_dbgbus_vbif_rt, bool dump_all) bool dump_dbgbus_vbif_rt, bool dump_all, bool dump_secure) { int i; Loading @@ -3362,12 +3401,13 @@ static void _sde_dump_array(struct sde_dbg_reg_base *blk_arr[], sde_evtlog_dump_all(sde_dbg_base.evtlog); if (dump_all || !blk_arr || !len) { _sde_dump_reg_all(); _sde_dump_reg_all(dump_secure); } else { for (i = 0; i < len; i++) { if (blk_arr[i] != NULL) _sde_dump_reg_by_ranges(blk_arr[i], sde_dbg_base.enable_reg_dump); sde_dbg_base.enable_reg_dump, dump_secure); } } Loading Loading @@ -3398,7 +3438,7 @@ static void _sde_dump_work(struct work_struct *work) sde_dbg_base.work_panic, "evtlog_workitem", sde_dbg_base.dbgbus_sde.cmn.include_in_deferred_work, sde_dbg_base.dbgbus_vbif_rt.cmn.include_in_deferred_work, sde_dbg_base.dump_all); sde_dbg_base.dump_all, sde_dbg_base.dump_secure); } void sde_dbg_dump(bool queue_work, const char *name, ...) Loading @@ -3408,6 +3448,7 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) bool dump_dbgbus_sde = false; bool dump_dbgbus_vbif_rt = false; bool dump_all = false; bool dump_secure = false; va_list args; char *blk_name = NULL; struct sde_dbg_reg_base *blk_base = NULL; Loading Loading @@ -3462,6 +3503,9 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) if (!strcmp(blk_name, "panic")) do_panic = true; if (!strcmp(blk_name, "secure")) dump_secure = true; } va_end(args); Loading @@ -3476,7 +3520,8 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) schedule_work(&sde_dbg_base.dump_work); } else { _sde_dump_array(blk_arr, blk_len, do_panic, name, dump_dbgbus_sde, dump_dbgbus_vbif_rt, dump_all); dump_dbgbus_sde, dump_dbgbus_vbif_rt, dump_all, dump_secure); } } Loading Loading @@ -3596,7 +3641,7 @@ static ssize_t sde_evtlog_dump_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos) { _sde_dump_array(NULL, 0, sde_dbg_base.panic_on_err, "dump_debugfs", true, true, true); true, true, true, false); return count; } Loading Loading
msm/sde/sde_encoder_phys_cmd.c +4 −1 Original line number Diff line number Diff line Loading @@ -565,6 +565,9 @@ static int _sde_encoder_phys_cmd_handle_ppdone_timeout( SDE_EVT32(DRMID(phys_enc->parent), SDE_EVTLOG_FATAL); sde_encoder_helper_unregister_irq(phys_enc, INTR_IDX_RDPTR); if (sde_kms_is_secure_session_inprogress(phys_enc->sde_kms)) SDE_DBG_DUMP("secure", "all", "dbg_bus"); else SDE_DBG_DUMP("all", "dbg_bus", "vbif_dbg_bus"); sde_encoder_helper_register_irq(phys_enc, INTR_IDX_RDPTR); } Loading
msm/sde_dbg.c +58 −13 Original line number Diff line number Diff line Loading @@ -206,6 +206,7 @@ struct sde_dbg_regbuf { * @dbgbus_sde: debug bus structure for the sde * @dbgbus_vbif_rt: debug bus structure for the realtime vbif * @dump_all: dump all entries in register dump * @dump_secure: dump entries excluding few as it is in secure-session * @dsi_dbg_bus: dump dsi debug bus register * @regbuf: buffer data to track the register dumping in hw recovery * @cur_evt_index: index used for tracking event logs dump in hw recovery Loading @@ -229,6 +230,7 @@ static struct sde_dbg_base { struct sde_dbg_vbif_debug_bus dbgbus_vbif_rt; struct sde_dbg_dsi_debug_bus dbgbus_dsi; bool dump_all; bool dump_secure; bool dsi_dbg_bus; u32 debugfs_ctrl; Loading Loading @@ -2958,13 +2960,33 @@ static int _sde_dump_reg_range_cmp(void *priv, struct list_head *a, return ar->offset.start - br->offset.start; } static const char *const exclude_modules[] = { "vbif_rt", "vbif_nrt", "wb_2", NULL }; static bool is_block_exclude(char **modules, char *name) { char **ptr = modules; while (*ptr != NULL) { if (!strcmp(name, *ptr)) return true; ++ptr; } return false; } /** * _sde_dump_reg_by_ranges - dump ranges or full range of the register blk base * @dbg: register blk base structure * @reg_dump_flag: dump target, memory, kernel log, or both * @dump_secure: flag to indicate dumping in secure-session */ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, u32 reg_dump_flag) u32 reg_dump_flag, bool dump_secure) { char *addr; size_t len; Loading @@ -2987,6 +3009,12 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, len = _sde_dbg_get_dump_range(&range_node->offset, dbg->max_offset); addr = dbg->base + range_node->offset.start; if (dump_secure && is_block_exclude((char**)exclude_modules, range_node->range_name)) continue; pr_debug("%s: range_base=0x%pK start=0x%x end=0x%x\n", range_node->range_name, addr, range_node->offset.start, Loading @@ -3012,8 +3040,9 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg, /** * _sde_dump_reg_by_blk - dump a named register base region * @blk_name: register blk name * @dump_secure: flag to indicate dumping in secure-session */ static void _sde_dump_reg_by_blk(const char *blk_name) static void _sde_dump_reg_by_blk(const char *blk_name, bool dump_secure) { struct sde_dbg_base *dbg_base = &sde_dbg_base; struct sde_dbg_reg_base *blk_base; Loading @@ -3025,7 +3054,7 @@ static void _sde_dump_reg_by_blk(const char *blk_name) if (strlen(blk_base->name) && !strcmp(blk_base->name, blk_name)) { _sde_dump_reg_by_ranges(blk_base, dbg_base->enable_reg_dump); dbg_base->enable_reg_dump, dump_secure); break; } } Loading @@ -3034,7 +3063,7 @@ static void _sde_dump_reg_by_blk(const char *blk_name) /** * _sde_dump_reg_all - dump all register regions */ static void _sde_dump_reg_all(void) static void _sde_dump_reg_all(bool dump_secure) { struct sde_dbg_base *dbg_base = &sde_dbg_base; struct sde_dbg_reg_base *blk_base; Loading @@ -3042,9 +3071,18 @@ static void _sde_dump_reg_all(void) if (!dbg_base) return; list_for_each_entry(blk_base, &dbg_base->reg_base_list, reg_base_head) if (strlen(blk_base->name)) _sde_dump_reg_by_blk(blk_base->name); list_for_each_entry(blk_base, &dbg_base->reg_base_list, reg_base_head) { if (!strlen(blk_base->name)) continue; if (dump_secure && is_block_exclude((char **)exclude_modules, blk_base->name)) continue; _sde_dump_reg_by_blk(blk_base->name, dump_secure); } } /** Loading Loading @@ -3349,10 +3387,11 @@ static void _sde_dbg_dump_vbif_dbg_bus(struct sde_dbg_vbif_debug_bus *bus) * @name: string indicating origin of dump * @dump_dbgbus_sde: whether to dump the sde debug bus * @dump_dbgbus_vbif_rt: whether to dump the vbif rt debug bus * @dump_secure: flag to indicate dumping in secure-session */ static void _sde_dump_array(struct sde_dbg_reg_base *blk_arr[], u32 len, bool do_panic, const char *name, bool dump_dbgbus_sde, bool dump_dbgbus_vbif_rt, bool dump_all) bool dump_dbgbus_vbif_rt, bool dump_all, bool dump_secure) { int i; Loading @@ -3362,12 +3401,13 @@ static void _sde_dump_array(struct sde_dbg_reg_base *blk_arr[], sde_evtlog_dump_all(sde_dbg_base.evtlog); if (dump_all || !blk_arr || !len) { _sde_dump_reg_all(); _sde_dump_reg_all(dump_secure); } else { for (i = 0; i < len; i++) { if (blk_arr[i] != NULL) _sde_dump_reg_by_ranges(blk_arr[i], sde_dbg_base.enable_reg_dump); sde_dbg_base.enable_reg_dump, dump_secure); } } Loading Loading @@ -3398,7 +3438,7 @@ static void _sde_dump_work(struct work_struct *work) sde_dbg_base.work_panic, "evtlog_workitem", sde_dbg_base.dbgbus_sde.cmn.include_in_deferred_work, sde_dbg_base.dbgbus_vbif_rt.cmn.include_in_deferred_work, sde_dbg_base.dump_all); sde_dbg_base.dump_all, sde_dbg_base.dump_secure); } void sde_dbg_dump(bool queue_work, const char *name, ...) Loading @@ -3408,6 +3448,7 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) bool dump_dbgbus_sde = false; bool dump_dbgbus_vbif_rt = false; bool dump_all = false; bool dump_secure = false; va_list args; char *blk_name = NULL; struct sde_dbg_reg_base *blk_base = NULL; Loading Loading @@ -3462,6 +3503,9 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) if (!strcmp(blk_name, "panic")) do_panic = true; if (!strcmp(blk_name, "secure")) dump_secure = true; } va_end(args); Loading @@ -3476,7 +3520,8 @@ void sde_dbg_dump(bool queue_work, const char *name, ...) schedule_work(&sde_dbg_base.dump_work); } else { _sde_dump_array(blk_arr, blk_len, do_panic, name, dump_dbgbus_sde, dump_dbgbus_vbif_rt, dump_all); dump_dbgbus_sde, dump_dbgbus_vbif_rt, dump_all, dump_secure); } } Loading Loading @@ -3596,7 +3641,7 @@ static ssize_t sde_evtlog_dump_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos) { _sde_dump_array(NULL, 0, sde_dbg_base.panic_on_err, "dump_debugfs", true, true, true); true, true, true, false); return count; } Loading