From: Ville Syrjälä <[email protected]>
We don't have a codepath that does the color LUT update via
MMIO while writing the double buffered registers via DSB/flip queue.
So if we fail to allocate the DSB buffer for the LUT update we have
to fall back to a full MMIO based update. Make it so.
If we hit this with the current code then the entire LUT update
is simply skipped. After the fix the entire update, including
the LUT, will happen.
v2: Keep the use_dsb check in intel_crtc_needs_vblank_work()
for the case when we need a color update but we have no
LUTs, and thus we can end up doing the update via the DSB
with intel_color_uses_dsb()==false
Signed-off-by: Ville Syrjälä <[email protected]>
---
drivers/gpu/drm/i915/display/intel_color.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_color.c
b/drivers/gpu/drm/i915/display/intel_color.c
index 87ced9f6ff40..26e92221fa19 100644
--- a/drivers/gpu/drm/i915/display/intel_color.c
+++ b/drivers/gpu/drm/i915/display/intel_color.c
@@ -2028,8 +2028,11 @@ void intel_color_prepare_commit(struct
intel_atomic_state *state,
else
crtc_state->dsb_color = intel_dsb_prepare(state, crtc,
INTEL_DSB_1, 1024);
- if (!intel_color_uses_dsb(crtc_state))
+ if (!intel_color_uses_dsb(crtc_state)) {
+ crtc_state->use_flipq = false;
+ crtc_state->use_dsb = false;
return;
+ }
display->color.funcs->load_luts(crtc_state);
--
2.54.0