mirror of https://gitee.com/openkylin/linux.git
drm/tegra: dsi: Move register definitions into a table
After commit 75af8fa7fd
("drm/tegra: dsi: Trace register accesses"),
the debugfs register dump implementation causes excessive stack usage
and can result in build warnings. To fix this, move the register
definitions into a table and iterate over the table while dumping the
registers to debugfs.
Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
parent
cf6824ac72
commit
a40051c0fb
|
@ -122,12 +122,89 @@ static inline void tegra_dsi_writel(struct tegra_dsi *dsi, u32 value,
|
|||
writel(value, dsi->regs + (offset << 2));
|
||||
}
|
||||
|
||||
#define DEBUGFS_REG32(_name) { .name = #_name, .offset = _name }
|
||||
|
||||
static const struct debugfs_reg32 tegra_dsi_regs[] = {
|
||||
DEBUGFS_REG32(DSI_INCR_SYNCPT),
|
||||
DEBUGFS_REG32(DSI_INCR_SYNCPT_CONTROL),
|
||||
DEBUGFS_REG32(DSI_INCR_SYNCPT_ERROR),
|
||||
DEBUGFS_REG32(DSI_CTXSW),
|
||||
DEBUGFS_REG32(DSI_RD_DATA),
|
||||
DEBUGFS_REG32(DSI_WR_DATA),
|
||||
DEBUGFS_REG32(DSI_POWER_CONTROL),
|
||||
DEBUGFS_REG32(DSI_INT_ENABLE),
|
||||
DEBUGFS_REG32(DSI_INT_STATUS),
|
||||
DEBUGFS_REG32(DSI_INT_MASK),
|
||||
DEBUGFS_REG32(DSI_HOST_CONTROL),
|
||||
DEBUGFS_REG32(DSI_CONTROL),
|
||||
DEBUGFS_REG32(DSI_SOL_DELAY),
|
||||
DEBUGFS_REG32(DSI_MAX_THRESHOLD),
|
||||
DEBUGFS_REG32(DSI_TRIGGER),
|
||||
DEBUGFS_REG32(DSI_TX_CRC),
|
||||
DEBUGFS_REG32(DSI_STATUS),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_CONTROL),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_0),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_1),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_2),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_3),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_4),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_5),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_6),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_7),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_0_LO),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_0_HI),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_1_LO),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_1_HI),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_2_LO),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_2_HI),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_3_LO),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_3_HI),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_4_LO),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_4_HI),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_5_LO),
|
||||
DEBUGFS_REG32(DSI_PKT_SEQ_5_HI),
|
||||
DEBUGFS_REG32(DSI_DCS_CMDS),
|
||||
DEBUGFS_REG32(DSI_PKT_LEN_0_1),
|
||||
DEBUGFS_REG32(DSI_PKT_LEN_2_3),
|
||||
DEBUGFS_REG32(DSI_PKT_LEN_4_5),
|
||||
DEBUGFS_REG32(DSI_PKT_LEN_6_7),
|
||||
DEBUGFS_REG32(DSI_PHY_TIMING_0),
|
||||
DEBUGFS_REG32(DSI_PHY_TIMING_1),
|
||||
DEBUGFS_REG32(DSI_PHY_TIMING_2),
|
||||
DEBUGFS_REG32(DSI_BTA_TIMING),
|
||||
DEBUGFS_REG32(DSI_TIMEOUT_0),
|
||||
DEBUGFS_REG32(DSI_TIMEOUT_1),
|
||||
DEBUGFS_REG32(DSI_TO_TALLY),
|
||||
DEBUGFS_REG32(DSI_PAD_CONTROL_0),
|
||||
DEBUGFS_REG32(DSI_PAD_CONTROL_CD),
|
||||
DEBUGFS_REG32(DSI_PAD_CD_STATUS),
|
||||
DEBUGFS_REG32(DSI_VIDEO_MODE_CONTROL),
|
||||
DEBUGFS_REG32(DSI_PAD_CONTROL_1),
|
||||
DEBUGFS_REG32(DSI_PAD_CONTROL_2),
|
||||
DEBUGFS_REG32(DSI_PAD_CONTROL_3),
|
||||
DEBUGFS_REG32(DSI_PAD_CONTROL_4),
|
||||
DEBUGFS_REG32(DSI_GANGED_MODE_CONTROL),
|
||||
DEBUGFS_REG32(DSI_GANGED_MODE_START),
|
||||
DEBUGFS_REG32(DSI_GANGED_MODE_SIZE),
|
||||
DEBUGFS_REG32(DSI_RAW_DATA_BYTE_COUNT),
|
||||
DEBUGFS_REG32(DSI_ULTRA_LOW_POWER_CONTROL),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_8),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_9),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_10),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_11),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_12),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_13),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_14),
|
||||
DEBUGFS_REG32(DSI_INIT_SEQ_DATA_15),
|
||||
};
|
||||
|
||||
static int tegra_dsi_show_regs(struct seq_file *s, void *data)
|
||||
{
|
||||
struct drm_info_node *node = s->private;
|
||||
struct tegra_dsi *dsi = node->info_ent->data;
|
||||
struct drm_crtc *crtc = dsi->output.encoder.crtc;
|
||||
struct drm_device *drm = node->minor->dev;
|
||||
unsigned int i;
|
||||
int err = 0;
|
||||
|
||||
drm_modeset_lock_all(drm);
|
||||
|
@ -137,93 +214,12 @@ static int tegra_dsi_show_regs(struct seq_file *s, void *data)
|
|||
goto unlock;
|
||||
}
|
||||
|
||||
#define DUMP_REG(name) \
|
||||
seq_printf(s, "%-32s %#05x %08x\n", #name, name, \
|
||||
tegra_dsi_readl(dsi, name))
|
||||
for (i = 0; i < ARRAY_SIZE(tegra_dsi_regs); i++) {
|
||||
unsigned int offset = tegra_dsi_regs[i].offset;
|
||||
|
||||
DUMP_REG(DSI_INCR_SYNCPT);
|
||||
DUMP_REG(DSI_INCR_SYNCPT_CONTROL);
|
||||
DUMP_REG(DSI_INCR_SYNCPT_ERROR);
|
||||
DUMP_REG(DSI_CTXSW);
|
||||
DUMP_REG(DSI_RD_DATA);
|
||||
DUMP_REG(DSI_WR_DATA);
|
||||
DUMP_REG(DSI_POWER_CONTROL);
|
||||
DUMP_REG(DSI_INT_ENABLE);
|
||||
DUMP_REG(DSI_INT_STATUS);
|
||||
DUMP_REG(DSI_INT_MASK);
|
||||
DUMP_REG(DSI_HOST_CONTROL);
|
||||
DUMP_REG(DSI_CONTROL);
|
||||
DUMP_REG(DSI_SOL_DELAY);
|
||||
DUMP_REG(DSI_MAX_THRESHOLD);
|
||||
DUMP_REG(DSI_TRIGGER);
|
||||
DUMP_REG(DSI_TX_CRC);
|
||||
DUMP_REG(DSI_STATUS);
|
||||
|
||||
DUMP_REG(DSI_INIT_SEQ_CONTROL);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_0);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_1);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_2);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_3);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_4);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_5);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_6);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_7);
|
||||
|
||||
DUMP_REG(DSI_PKT_SEQ_0_LO);
|
||||
DUMP_REG(DSI_PKT_SEQ_0_HI);
|
||||
DUMP_REG(DSI_PKT_SEQ_1_LO);
|
||||
DUMP_REG(DSI_PKT_SEQ_1_HI);
|
||||
DUMP_REG(DSI_PKT_SEQ_2_LO);
|
||||
DUMP_REG(DSI_PKT_SEQ_2_HI);
|
||||
DUMP_REG(DSI_PKT_SEQ_3_LO);
|
||||
DUMP_REG(DSI_PKT_SEQ_3_HI);
|
||||
DUMP_REG(DSI_PKT_SEQ_4_LO);
|
||||
DUMP_REG(DSI_PKT_SEQ_4_HI);
|
||||
DUMP_REG(DSI_PKT_SEQ_5_LO);
|
||||
DUMP_REG(DSI_PKT_SEQ_5_HI);
|
||||
|
||||
DUMP_REG(DSI_DCS_CMDS);
|
||||
|
||||
DUMP_REG(DSI_PKT_LEN_0_1);
|
||||
DUMP_REG(DSI_PKT_LEN_2_3);
|
||||
DUMP_REG(DSI_PKT_LEN_4_5);
|
||||
DUMP_REG(DSI_PKT_LEN_6_7);
|
||||
|
||||
DUMP_REG(DSI_PHY_TIMING_0);
|
||||
DUMP_REG(DSI_PHY_TIMING_1);
|
||||
DUMP_REG(DSI_PHY_TIMING_2);
|
||||
DUMP_REG(DSI_BTA_TIMING);
|
||||
|
||||
DUMP_REG(DSI_TIMEOUT_0);
|
||||
DUMP_REG(DSI_TIMEOUT_1);
|
||||
DUMP_REG(DSI_TO_TALLY);
|
||||
|
||||
DUMP_REG(DSI_PAD_CONTROL_0);
|
||||
DUMP_REG(DSI_PAD_CONTROL_CD);
|
||||
DUMP_REG(DSI_PAD_CD_STATUS);
|
||||
DUMP_REG(DSI_VIDEO_MODE_CONTROL);
|
||||
DUMP_REG(DSI_PAD_CONTROL_1);
|
||||
DUMP_REG(DSI_PAD_CONTROL_2);
|
||||
DUMP_REG(DSI_PAD_CONTROL_3);
|
||||
DUMP_REG(DSI_PAD_CONTROL_4);
|
||||
|
||||
DUMP_REG(DSI_GANGED_MODE_CONTROL);
|
||||
DUMP_REG(DSI_GANGED_MODE_START);
|
||||
DUMP_REG(DSI_GANGED_MODE_SIZE);
|
||||
|
||||
DUMP_REG(DSI_RAW_DATA_BYTE_COUNT);
|
||||
DUMP_REG(DSI_ULTRA_LOW_POWER_CONTROL);
|
||||
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_8);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_9);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_10);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_11);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_12);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_13);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_14);
|
||||
DUMP_REG(DSI_INIT_SEQ_DATA_15);
|
||||
|
||||
#undef DUMP_REG
|
||||
seq_printf(s, "%-32s %#05x %08x\n", tegra_dsi_regs[i].name,
|
||||
offset, tegra_dsi_readl(dsi, offset));
|
||||
}
|
||||
|
||||
unlock:
|
||||
drm_modeset_unlock_all(drm);
|
||||
|
|
Loading…
Reference in New Issue