From 66fe527ab2ccc9cd9cc349aa26addefe97c91fde Mon Sep 17 00:00:00 2001 From: Clarence Ip Date: Wed, 24 Feb 2016 17:55:10 -0500 Subject: [PATCH] mdss: mdp: add debugfs node for danger/safe on mdss Add debugfs node to get the danger/safe status of mdp and source pipes on MDSS. Change-Id: I0c93d42b144cda932d80ba18221ae814bed3d3d4 Signed-off-by: Dhaval Patel [cip@codeaurora.org: Resolved merge conflict] Signed-off-by: Clarence Ip --- drivers/video/fbdev/msm/mdss_mdp_debug.c | 63 ++++++++++++++++++++++++ drivers/video/fbdev/msm/mdss_mdp_debug.h | 8 +++ drivers/video/fbdev/msm/mdss_mdp_hwio.h | 2 + 3 files changed, 73 insertions(+) diff --git a/drivers/video/fbdev/msm/mdss_mdp_debug.c b/drivers/video/fbdev/msm/mdss_mdp_debug.c index 57e5863ec745..00472a0cd669 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_debug.c +++ b/drivers/video/fbdev/msm/mdss_mdp_debug.c @@ -1035,6 +1035,65 @@ static int mdss_debugfs_buffers_show(struct seq_file *s, void *v) } DEFINE_MDSS_DEBUGFS_SEQ_FOPS(mdss_debugfs_buffers); +static int __danger_safe_signal_status(struct seq_file *s, bool danger_status) +{ + struct mdss_data_type *mdata = (struct mdss_data_type *)s->private; + u32 status; + int i, j; + + mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON); + if (danger_status) { + seq_puts(s, "\nDanger signal status:\n"); + status = readl_relaxed(mdata->mdp_base + + MDSS_MDP_DANGER_STATUS); + } else { + seq_puts(s, "\nSafe signal status:\n"); + status = readl_relaxed(mdata->mdp_base + + MDSS_MDP_SAFE_STATUS); + } + mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF); + + seq_printf(s, "MDP : 0x%lx\n", + DANGER_SAFE_STATUS(status, MDP_DANGER_SAFE_BIT_OFFSET)); + + for (i = 0, j = VIG_DANGER_SAFE_BIT_OFFSET; i < mdata->nvig_pipes; + i++, j += 2) + seq_printf(s, "VIG%d : 0x%lx \t", i, + DANGER_SAFE_STATUS(status, j)); + seq_puts(s, "\n"); + + for (i = 0, j = RGB_DANGER_SAFE_BIT_OFFSET; i < mdata->nrgb_pipes; + i++, j += 2) + seq_printf(s, "RGB%d : 0x%lx \t", i, + DANGER_SAFE_STATUS(status, j)); + seq_puts(s, "\n"); + for (i = 0, j = DMA_DANGER_SAFE_BIT_OFFSET; i < mdata->ndma_pipes; + i++, j += 2) + seq_printf(s, "DMA%d : 0x%lx \t", i, + DANGER_SAFE_STATUS(status, j)); + seq_puts(s, "\n"); + + for (i = 0, j = CURSOR_DANGER_SAFE_BIT_OFFSET; i < mdata->ncursor_pipes; + i++, j += 2) + seq_printf(s, "CURSOR%d : 0x%lx \t", i, + DANGER_SAFE_STATUS(status, j)); + seq_puts(s, "\n"); + + return 0; +} + +static int mdss_debugfs_danger_stats_show(struct seq_file *s, void *v) +{ + return __danger_safe_signal_status(s, true); +} +DEFINE_MDSS_DEBUGFS_SEQ_FOPS(mdss_debugfs_danger_stats); + +static int mdss_debugfs_safe_stats_show(struct seq_file *s, void *v) +{ + return __danger_safe_signal_status(s, false); +} +DEFINE_MDSS_DEBUGFS_SEQ_FOPS(mdss_debugfs_safe_stats); + static void __stats_ctl_dump(struct mdss_mdp_ctl *ctl, struct seq_file *s) { if (!ctl->ref_cnt) @@ -1106,6 +1165,10 @@ int mdss_mdp_debugfs_init(struct mdss_data_type *mdata) &mdss_debugfs_buffers_fops); debugfs_create_file("stat", 0644, mdd->root, mdata, &mdss_debugfs_stats_fops); + debugfs_create_file("danger_stat", 0644, mdd->root, mdata, + &mdss_debugfs_danger_stats_fops); + debugfs_create_file("safe_stat", 0644, mdd->root, mdata, + &mdss_debugfs_safe_stats_fops); debugfs_create_u32("serialize_wait4pp", 0644, mdd->root, (u32 *)&mdata->serialize_wait4pp); debugfs_create_u32("enable_gate", 0644, mdd->root, diff --git a/drivers/video/fbdev/msm/mdss_mdp_debug.h b/drivers/video/fbdev/msm/mdss_mdp_debug.h index 05d310e6fd50..9a72577432ca 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_debug.h +++ b/drivers/video/fbdev/msm/mdss_mdp_debug.h @@ -21,6 +21,14 @@ #include "mdss.h" #include "mdss_mdp.h" +#define MDP_DANGER_SAFE_BIT_OFFSET 0 +#define VIG_DANGER_SAFE_BIT_OFFSET 4 +#define RGB_DANGER_SAFE_BIT_OFFSET 12 +#define DMA_DANGER_SAFE_BIT_OFFSET 20 +#define CURSOR_DANGER_SAFE_BIT_OFFSET 24 + +#define DANGER_SAFE_STATUS(X, Y) (((X) & (BIT(Y) | BIT((Y)+1))) >> (Y)) + static inline const char *mdss_mdp_pipetype2str(u32 ptype) { static const char const *strings[] = { diff --git a/drivers/video/fbdev/msm/mdss_mdp_hwio.h b/drivers/video/fbdev/msm/mdss_mdp_hwio.h index 06d2282e7789..7f3dbcaada2a 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_hwio.h +++ b/drivers/video/fbdev/msm/mdss_mdp_hwio.h @@ -51,6 +51,8 @@ #define MDSS_MDP_REG_VIDEO_INTF_UNDERFLOW_CTL 0x002E0 #define MDSS_MDP_REG_SPLIT_DISPLAY_EN 0x002F4 #define MDSS_MDP_REG_SPLIT_DISPLAY_UPPER_PIPE_CTRL 0x002F8 +#define MDSS_MDP_DANGER_STATUS 0x00360 +#define MDSS_MDP_SAFE_STATUS 0x00364 #define MDSS_MDP_REG_SPLIT_DISPLAY_LOWER_PIPE_CTRL 0x003F0 #define MDSS_MDP_REG_DCE_SEL 0x00450