Explorar el Código

disp: msm: sde: skip unnecessary cache register programming

Plane update will call system cache update, and by default,
will clear any cache programming. This clear is only necessary
after returning from a cached state. This change will reduce
unnecessary programming and event logs if the sys cache
was previously disabled and remains disabled.

Change-Id: I7f560ff24990a8c7ad785e560873193b7bf3a491
Signed-off-by: Nilaan Gunabalachandran <[email protected]>
Nilaan Gunabalachandran hace 4 años
padre
commit
2a3fe5e4c5
Se han modificado 1 ficheros con 6 adiciones y 1 borrados
  1. 6 1
      msm/sde/sde_plane.c

+ 6 - 1
msm/sde/sde_plane.c

@@ -2716,15 +2716,17 @@ static void _sde_plane_sspp_setup_sys_cache(struct sde_plane *psde,
 		struct sde_plane_state *pstate, bool is_tp10)
 {
 	struct sde_sc_cfg *sc_cfg = psde->catalog->sc_cfg;
+	bool prev_rd_en;
 
 	if (!psde->pipe_hw->ops.setup_sys_cache ||
 			!(psde->perf_features & BIT(SDE_PERF_SSPP_SYS_CACHE)))
 		return;
 
+	prev_rd_en = pstate->sc_cfg.rd_en;
+
 	SDE_DEBUG("features:0x%x rotation:0x%x\n",
 		psde->features, pstate->rotation);
 
-
 	pstate->sc_cfg.rd_en = false;
 	pstate->sc_cfg.rd_scid = 0x0;
 	pstate->sc_cfg.flags = SSPP_SYS_CACHE_EN_FLAG |
@@ -2760,6 +2762,9 @@ static void _sde_plane_sspp_setup_sys_cache(struct sde_plane *psde,
 		pstate->sc_cfg.type = SDE_SYS_CACHE_DISP;
 	}
 
+	if (!pstate->sc_cfg.rd_en && !prev_rd_en)
+		return;
+
 	SDE_EVT32(DRMID(&psde->base), pstate->sc_cfg.rd_scid,
 			pstate->sc_cfg.rd_en, pstate->sc_cfg.rd_noallocate);