@@ -456,18 +456,24 @@ int drm_atomic_crtc_set_property(struct drm_crtc *crtc,
&state->palette_after_ctm_blob, val);
if (ret)
DRM_ERROR("Failed to load blob palette_after_ctm\n");
+ else
+ state->color_correction_changed = true;
return ret;
} else if (property == config->cm_palette_before_ctm_property) {
ret = drm_atomic_crtc_set_blob(dev,
&state->palette_before_ctm_blob, val);
if (ret)
DRM_ERROR("Failed to load blob palette_before_ctm\n");
+ else
+ state->color_correction_changed = true;
return ret;
} else if (property == config->cm_ctm_property) {
ret = drm_atomic_crtc_set_blob(dev,
&state->ctm_blob, val);
if (ret)
DRM_ERROR("Failed to load blob ctm\n");
+ else
+ state->color_correction_changed = true;
return ret;
} else if (crtc->funcs->atomic_set_property)
return crtc->funcs->atomic_set_property(crtc, state, property, val);
@@ -263,6 +263,7 @@ struct drm_atomic_state;
* @mode_changed: crtc_state->mode or crtc_state->enable has been changed
* @active_changed: crtc_state->active has been toggled.
* @connectors_changed: connectors to this crtc have been updated
+ * @color_correction_changed: color correction blob in this crtc got updated
* @plane_mask: bitmask of (1 << drm_plane_index(plane)) of attached planes
* @last_vblank_count: for helpers and drivers to capture the vblank of the
* update to ensure framebuffer cleanup isn't done too early
@@ -292,6 +293,7 @@ struct drm_crtc_state {
bool mode_changed : 1;
bool active_changed : 1;
bool connectors_changed : 1;
+ bool color_correction_changed : 1;
/* attached planes bitmask:
* WARNING: transitional helpers do not maintain plane_mask so
Add a color correction state flag, to indicate a change in color correction states. This flag will help a core driver to optimize its commit calls, by appling the color correction only when there is a change, not every commit. Signed-off-by: Shashank Sharma <shashank.sharma@intel.com> --- drivers/gpu/drm/drm_atomic.c | 6 ++++++ include/drm/drm_crtc.h | 2 ++ 2 files changed, 8 insertions(+)