summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Huang <kenbshuang@google.com>2023-03-15 21:59:21 +0800
committerKen Huang <kenbshuang@google.com>2023-03-16 02:01:56 +0000
commit1377d0c351a722a4bf5e8ee01f23347b1cdffd2d (patch)
tree9d3e0778587369b7d1e0eb77f201421292e9b61b
parentf49bb252bd7fca78a7d819c1f697e742e6be6966 (diff)
downloaddisplay-1377d0c351a722a4bf5e8ee01f23347b1cdffd2d.tar.gz
drm: samsung: add more log to debug stability issues
Bug: 269239140 Test: check dpu event log Change-Id: Ia7c3cb8753d382de016c6ed8c5fef194a16203af Signed-off-by: Ken Huang <kenbshuang@google.com>
-rw-r--r--samsung/cal_9845/decon_reg.c2
-rw-r--r--samsung/exynos_drm_debug.c6
-rw-r--r--samsung/exynos_drm_decon.c7
-rw-r--r--samsung/exynos_drm_decon.h1
4 files changed, 9 insertions, 7 deletions
diff --git a/samsung/cal_9845/decon_reg.c b/samsung/cal_9845/decon_reg.c
index 90d2111..b388b50 100644
--- a/samsung/cal_9845/decon_reg.c
+++ b/samsung/cal_9845/decon_reg.c
@@ -338,7 +338,7 @@ static void decon_reg_clear_dsimif(u32 id, u32 dsimif)
val = SEL_DSIM_GET(dsimif_read(id, DSIMIF_SEL(dsimif)));
if ((id == 0 && val < 2) || (id == 1 && val == 2)) {
- cal_log_info(id, "clearing dsimif%d sel\n", dsimif);
+ cal_log_info(id, "clearing dsimif%u sel, val: %u\n", dsimif, val);
dsimif_write(id, DSIMIF_SEL(dsimif), SEL_DSIM(3));
}
}
diff --git a/samsung/exynos_drm_debug.c b/samsung/exynos_drm_debug.c
index 7c5487f..89276f7 100644
--- a/samsung/exynos_drm_debug.c
+++ b/samsung/exynos_drm_debug.c
@@ -258,6 +258,7 @@ void DPU_EVENT_LOG(enum dpu_event_type type, int index, void *priv)
log->data.crtc_info.planes_changed = crtc_state->planes_changed;
log->data.crtc_info.mode_changed = crtc_state->mode_changed;
log->data.crtc_info.active_changed = crtc_state->active_changed;
+ log->data.crtc_info.connectors_changed = crtc_state->connectors_changed;
break;
case DPU_EVT_BTS_RELEASE_BW:
case DPU_EVT_BTS_UPDATE_BW:
@@ -857,13 +858,14 @@ static void dpu_event_log_print(const struct decon_device *decon, struct drm_pri
case DPU_EVT_REQ_CRTC_INFO_OLD:
case DPU_EVT_REQ_CRTC_INFO_NEW:
scnprintf(buf + len, sizeof(buf) - len,
- "\tenable(%d) active(%d) sr(%d) [p:%d m:%d a:%d]",
+ "\tenable(%d) active(%d) sr(%d) [p:%d m:%d a:%d c:%d]",
log->data.crtc_info.enable,
log->data.crtc_info.active,
log->data.crtc_info.self_refresh,
log->data.crtc_info.planes_changed,
log->data.crtc_info.mode_changed,
- log->data.crtc_info.active_changed);
+ log->data.crtc_info.active_changed,
+ log->data.crtc_info.connectors_changed);
break;
case DPU_EVT_BTS_RELEASE_BW:
case DPU_EVT_BTS_UPDATE_BW:
diff --git a/samsung/exynos_drm_decon.c b/samsung/exynos_drm_decon.c
index dd41789..fba4326 100644
--- a/samsung/exynos_drm_decon.c
+++ b/samsung/exynos_drm_decon.c
@@ -347,7 +347,6 @@ static void decon_update_config(struct decon_config *config,
const struct exynos_drm_connector_state *exynos_conn_state)
{
const struct drm_display_mode *mode = &crtc_state->adjusted_mode;
- struct decon_device *decon = crtc_to_decon(crtc_state->crtc);
config->image_width = mode->hdisplay;
config->image_height = mode->vdisplay;
@@ -380,8 +379,6 @@ static void decon_update_config(struct decon_config *config,
decon_update_dsi_config(config, crtc_state, exynos_conn_state);
config->out_bpc = exynos_conn_state->exynos_mode.bpc;
-
- DPU_EVENT_LOG(DPU_EVT_DECON_UPDATE_CONFIG, decon->id, NULL);
}
static bool decon_is_seamless_possible(const struct decon_device *decon,
@@ -1240,7 +1237,8 @@ static void decon_enable(struct exynos_drm_crtc *exynos_crtc, struct drm_crtc_st
DPU_ATRACE_BEGIN(__func__);
if (decon->state == DECON_STATE_HIBERNATION) {
- WARN_ON(!old_crtc_state->self_refresh_active);
+ WARN_ON(!old_crtc_state->self_refresh_active ||
+ crtc_state->mode_changed || crtc_state->connectors_changed);
if (old_exynos_crtc_state->bypass) {
spin_lock_irqsave(&decon->slock, flags);
@@ -1260,6 +1258,7 @@ static void decon_enable(struct exynos_drm_crtc *exynos_crtc, struct drm_crtc_st
crtc_get_exynos_connector_state(state, crtc_state);
decon_update_config(&decon->config, crtc_state, exynos_conn_state);
+ DPU_EVENT_LOG(DPU_EVT_DECON_UPDATE_CONFIG, decon->id, NULL);
if (decon_is_te_enabled(decon))
decon_request_te_irq(exynos_crtc, exynos_conn_state);
diff --git a/samsung/exynos_drm_decon.h b/samsung/exynos_drm_decon.h
index 1d5ce3f..03a1634 100644
--- a/samsung/exynos_drm_decon.h
+++ b/samsung/exynos_drm_decon.h
@@ -332,6 +332,7 @@ struct dpu_log_crtc_info {
bool mode_changed;
bool active_changed;
bool self_refresh;
+ bool connectors_changed;
};
struct dpu_log_freqs {