diff options
author | Ken Huang <kenbshuang@google.com> | 2023-10-11 13:55:35 +0800 |
---|---|---|
committer | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2023-10-20 03:23:26 +0000 |
commit | 54648c67a2d0d54dc7e319305a039f3deb09a79a (patch) | |
tree | 3b64b99a06d2115cc42e39145d293062a4aa1217 | |
parent | 4ca9237c95edd29b90b9dac290fe4ff362588e70 (diff) | |
download | display-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.c | 4 | ||||
-rw-r--r-- | samsung/exynos_drm_debug.c | 7 | ||||
-rw-r--r-- | samsung/exynos_drm_decon.c | 20 | ||||
-rw-r--r-- | samsung/exynos_drm_decon.h | 3 |
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 { |