disp: msm: sde: save register write logs in dump

Changes are made to add register write logs to memory dump.
This can be extracted from crash dumps and used for analysis.

Change-Id: If46aaa4ae68f83c79d4b51cbe5dfd22340aa991d
Signed-off-by: Yashwanth <yvulapu@codeaurora.org>
Cette révision appartient à :
Yashwanth
2021-01-18 14:45:51 +05:30
révisé par Dhaval Patel
Parent bb66bea78f
révision 43d147f299
5 fichiers modifiés avec 154 ajouts et 1 suppressions

Voir le fichier

@@ -72,6 +72,34 @@ enum sde_dbg_dump_context {
SDE_DBG_DUMP_CLK_ENABLED_CTX,
};
/*
* Define blocks for register write logging.
*/
#define SDE_REG_LOG_DEFAULT 0
#define SDE_REG_LOG_NONE 1
#define SDE_REG_LOG_CDM 2
#define SDE_REG_LOG_DSPP 3
#define SDE_REG_LOG_INTF 4
#define SDE_REG_LOG_LM 5
#define SDE_REG_LOG_CTL 6
#define SDE_REG_LOG_PINGPONG 7
#define SDE_REG_LOG_SSPP 8
#define SDE_REG_LOG_WB 9
#define SDE_REG_LOG_TOP 10
#define SDE_REG_LOG_VBIF 11
#define SDE_REG_LOG_DSC 12
#define SDE_REG_LOG_ROT 13
#define SDE_REG_LOG_DS 14
#define SDE_REG_LOG_REGDMA 15
#define SDE_REG_LOG_UIDLE 16
#define SDE_REG_LOG_SID 16
#define SDE_REG_LOG_QDSS 17
/*
* 0-32 are reserved for sde_reg_write due to log masks
* Additional blocks are assigned from 33 to avoid conflict
*/
#define SDE_REG_LOG_RSCC 33
#define SDE_EVTLOG_DEFAULT_ENABLE (SDE_EVTLOG_CRITICAL | SDE_EVTLOG_IRQ | \
SDE_EVTLOG_EXTERNAL)
@@ -126,6 +154,44 @@ struct sde_dbg_evtlog {
extern struct sde_dbg_evtlog *sde_dbg_base_evtlog;
/*
* reglog keeps this number of entries in memory for debug purpose. This
* number must be greater than number of possible writes in at least one
* single commit.
*/
#define SDE_REGLOG_ENTRY 1024
struct sde_dbg_reglog_log {
s64 time;
u32 pid;
u32 addr;
u32 val;
u8 blk_id;
};
/**
* @last_dump: Index of last entry to be output during reglog dumps
* @filter_list: Linked list of currently active filter strings
*/
struct sde_dbg_reglog {
struct sde_dbg_reglog_log logs[SDE_REGLOG_ENTRY];
u32 first;
u32 last;
u32 last_dump;
u32 curr;
u32 next;
u32 enable;
u32 enable_mask;
spinlock_t spin_lock;
};
extern struct sde_dbg_reglog *sde_dbg_base_reglog;
/**
* SDE_REG_LOG - Write register write to the register log
*/
#define SDE_REG_LOG(blk_id, val, addr) sde_reglog_log(blk_id, val, addr)
/**
* SDE_EVT32 - Write a list of 32bit values to the event log, default area
* ... - variable arguments
@@ -207,6 +273,12 @@ extern struct sde_dbg_evtlog *sde_dbg_base_evtlog;
*/
struct sde_dbg_evtlog *sde_evtlog_init(void);
/**
* sde_reglog_init - allocate a new reg log object
* Returns: reglog or -ERROR
*/
struct sde_dbg_reglog *sde_reglog_init(void);
/**
* sde_evtlog_destroy - destroy previously allocated event log
* @evtlog: pointer to evtlog
@@ -214,6 +286,13 @@ struct sde_dbg_evtlog *sde_evtlog_init(void);
*/
void sde_evtlog_destroy(struct sde_dbg_evtlog *evtlog);
/**
* sde_reglog_destroy - destroy previously allocated reg log
* @reglog: pointer to reglog
* Returns: none
*/
void sde_reglog_destroy(struct sde_dbg_reglog *reglog);
/**
* sde_evtlog_log - log an entry into the event log.
* log collection may be enabled/disabled entirely via debugfs
@@ -227,6 +306,15 @@ void sde_evtlog_destroy(struct sde_dbg_evtlog *evtlog);
void sde_evtlog_log(struct sde_dbg_evtlog *evtlog, const char *name, int line,
int flag, ...);
/**
* sde_reglog_log - log an entry into the reg log.
* log collection may be enabled/disabled entirely via debugfs
* log area collection may be filtered by user provided flags via debugfs.
* @reglog: pointer to evtlog
* Returns: none
*/
void sde_reglog_log(u8 blk_id, u32 val, u32 addr);
/**
* sde_evtlog_dump_all - print all entries in event log to kernel log
* @evtlog: pointer to evtlog