summaryrefslogtreecommitdiff
path: root/samsung/exynos_drm_bts.c
diff options
context:
space:
mode:
Diffstat (limited to 'samsung/exynos_drm_bts.c')
-rw-r--r--samsung/exynos_drm_bts.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/samsung/exynos_drm_bts.c b/samsung/exynos_drm_bts.c
index 8bed570..7fc453a 100644
--- a/samsung/exynos_drm_bts.c
+++ b/samsung/exynos_drm_bts.c
@@ -882,6 +882,16 @@ static void dpu_bts_update_resources(struct decon_device *decon, bool shadow_upd
DPU_DEBUG_BTS(" peak = %u, rt = %u, read = %u, write = %u\n",
bw.peak, bw.rt, bw.read, bw.write);
+ /* When concurrent writeback is enabled, writeback instant off may occur if the outfifo
+ * for writeback is full meanwhile the outfifo for LCD is not full yet.
+ * We can limit max_disp_freq to avoid it when concurrent writeback is enabled.
+ * Currently, the issue only occurs when all layers are solid color layers (read = 0).
+ */
+ if ((decon->bts.max_dfs_lv_for_wb > 0) && (bw.read == 0) && (bw.write > 0)) {
+ decon->bts.max_disp_freq =
+ min(decon->bts.max_disp_freq, decon->bts.max_dfs_lv_for_wb);
+ }
+
if (shadow_updated) {
/* after DECON h/w configs are updated to shadow SFR */
if (decon->bts.total_bw < decon->bts.prev_total_bw ||