summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Huang <kenbshuang@google.com>2023-10-11 13:55:35 +0800
committerTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2023-10-20 03:23:26 +0000
commit54648c67a2d0d54dc7e319305a039f3deb09a79a (patch)
tree3b64b99a06d2115cc42e39145d293062a4aa1217
parent4ca9237c95edd29b90b9dac290fe4ff362588e70 (diff)
downloaddisplay-54648c67a2d0d54dc7e319305a039f3deb09a79a.tar.gz
drm: samsung: add crtc fps in log
Currently, the display driver prints a refresh rate log based on BTS FPS, which may not align with the actual crtc FPS. Bug: 304763911 Test: check log Change-Id: I72b600ee64186c0dd11197f1a5af651e8035bd9c Signed-off-by: Ken Huang <kenbshuang@google.com> (cherry picked from commit bf6d563a148fe1e313a6b82b177166c6033c768b)
-rw-r--r--samsung/exynos_drm_bts.c4
-rw-r--r--samsung/exynos_drm_debug.c7
-rw-r--r--samsung/exynos_drm_decon.c20
-rw-r--r--samsung/exynos_drm_decon.h3
4 files changed, 21 insertions, 13 deletions
diff --git a/samsung/exynos_drm_bts.c b/samsung/exynos_drm_bts.c
index ab33269..a993c80 100644
--- a/samsung/exynos_drm_bts.c
+++ b/samsung/exynos_drm_bts.c
@@ -742,6 +742,8 @@ static void dpu_bts_convert_config_to_info(struct bts_dpp_info *dpp,
static void dpu_bts_calc_bw(struct decon_device *decon)
{
+ struct drm_crtc *crtc = &decon->crtc->base;
+ struct drm_crtc_state *crtc_state = crtc->state;
struct dpu_bts_win_config *config;
struct bts_decon_info bts_info;
int idx, i, wb_idx = -1, rcd_idx = -1;
@@ -837,7 +839,7 @@ static void dpu_bts_calc_bw(struct decon_device *decon)
decon->bts.max_disp_freq = dpu_bts_calc_disp_with_full_size(decon);
}
- DPU_EVENT_LOG(DPU_EVT_BTS_CALC_BW, decon->id, NULL);
+ DPU_EVENT_LOG(DPU_EVT_BTS_CALC_BW, decon->id, crtc_state);
DPU_DEBUG_BTS("%s -\n", __func__);
}
diff --git a/samsung/exynos_drm_debug.c b/samsung/exynos_drm_debug.c
index d28b648..3b45953 100644
--- a/samsung/exynos_drm_debug.c
+++ b/samsung/exynos_drm_debug.c
@@ -303,6 +303,8 @@ void DPU_EVENT_LOG(enum dpu_event_type type, int index, void *priv)
log->data.bts_cal.read_bw = decon->bts.read_bw;
log->data.bts_cal.write_bw = decon->bts.write_bw;
log->data.bts_cal.fps = decon->bts.fps;
+ crtc_state = (struct drm_crtc_state *)priv;
+ log->data.bts_cal.crtc_fps = drm_mode_vrefresh(&crtc_state->mode);
break;
case DPU_EVT_DSIM_UNDERRUN:
dpu_event_save_freqs(&log->data.bts_event.freqs);
@@ -875,10 +877,11 @@ static void dpu_event_log_print(const struct decon_device *decon, struct drm_pri
break;
case DPU_EVT_BTS_CALC_BW:
scnprintf(buf + len, sizeof(buf) - len,
- "\tdisp(%u) peak(%u) rt(%u) read(%u) write(%u) %uhz",
+ "\tdisp(%u) peak(%u) rt(%u) read(%u) write(%u) %uhz (crtc: %uhz)",
log->data.bts_cal.disp_freq, log->data.bts_cal.peak,
log->data.bts_cal.rt_avg_bw, log->data.bts_cal.read_bw,
- log->data.bts_cal.write_bw, log->data.bts_cal.fps);
+ log->data.bts_cal.write_bw, log->data.bts_cal.fps,
+ log->data.bts_cal.crtc_fps);
break;
case DPU_EVT_DSIM_UNDERRUN:
scnprintf(buf + len, sizeof(buf) - len,
diff --git a/samsung/exynos_drm_decon.c b/samsung/exynos_drm_decon.c
index 27d5f3f..f53ac07 100644
--- a/samsung/exynos_drm_decon.c
+++ b/samsung/exynos_drm_decon.c
@@ -910,6 +910,15 @@ static void decon_atomic_flush(struct exynos_drm_crtc *exynos_crtc,
decon_debug(decon, "%s -\n", __func__);
}
+static u32 _decon_get_current_fps(struct decon_device *decon)
+{
+ struct drm_crtc *crtc = &decon->crtc->base;
+ const struct drm_crtc_state *crtc_state = crtc->state;
+ u32 min_fps = min_t(u32, decon->bts.fps, drm_mode_vrefresh(&crtc_state->mode));
+
+ return min_fps ? min_fps : 60;
+}
+
static void decon_print_config_info(struct decon_device *decon)
{
char *str_output = NULL;
@@ -935,10 +944,11 @@ static void decon_print_config_info(struct decon_device *decon)
else if (decon->config.out_type & DECON_OUT_WB)
str_output = "WB";
- decon_info(decon, "%s mode. %s %s output.(%dx%d@%dhz)\n",
+ decon_info(decon, "%s mode. %s %s output.(%dx%d@%uhz, bts %uhz)\n",
decon->config.mode.op_mode ? "command" : "video",
str_trigger, str_output,
decon->config.image_width, decon->config.image_height,
+ _decon_get_current_fps(decon),
decon->bts.fps);
}
@@ -1330,14 +1340,6 @@ static void decon_disable_irqs(struct decon_device *decon)
disable_irq_nosync(decon->irq_fs);
}
-static u32 _decon_get_current_fps(struct decon_device *decon)
-{
- struct drm_crtc *crtc = &decon->crtc->base;
- const struct drm_crtc_state *crtc_state = crtc->state;
-
- return min_t(u32, decon->bts.fps, drm_mode_vrefresh(&crtc_state->mode)) ?: 60;
-}
-
static bool _decon_wait_for_framedone(struct decon_device *decon)
{
const u32 fps = _decon_get_current_fps(decon);
diff --git a/samsung/exynos_drm_decon.h b/samsung/exynos_drm_decon.h
index c1c1393..b24dd63 100644
--- a/samsung/exynos_drm_decon.h
+++ b/samsung/exynos_drm_decon.h
@@ -362,7 +362,8 @@ struct dpu_log_bts_cal {
u32 rt_avg_bw;
u32 read_bw;
u32 write_bw;
- u32 fps;
+ u32 fps; /* bts fps */
+ u32 crtc_fps; /* crtc fps */
};
struct dpu_log_bts_event {