On 21/05/2026 13:17, Borah, Chaitanya Kumar wrote:


On 5/20/2026 2:39 AM, Melissa Wen wrote:
As it's not immutable anymore, any changes should be handled by
drm_colorop_state. Move their enum and make it correctly behaves as
mutable.

Reviewed-by: Chaitanya Kumar Borah <[email protected]>
Signed-off-by: Melissa Wen <[email protected]>

---

v6:
- check drm_object_property_get_default_value() before set interp props
---
  drivers/gpu/drm/drm_atomic.c      |  4 ++--
  drivers/gpu/drm/drm_atomic_uapi.c |  8 ++++----
  drivers/gpu/drm/drm_colorop.c     | 16 ++++++++++++++--
  include/drm/drm_colorop.h         | 28 ++++++++++++++--------------
  4 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 659cf56150e5..b26212e719b2 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -857,7 +857,7 @@ static void drm_atomic_colorop_print_state(struct drm_printer *p,
      case DRM_COLOROP_1D_LUT:
          drm_printf_indent(p, 1, "size=%d\n", colorop->size);
          drm_printf_indent(p, 1, "interpolation=%s\n",
- drm_get_colorop_lut1d_interpolation_name(colorop->lut1d_interpolation));
+ drm_get_colorop_lut1d_interpolation_name(state->lut1d_interpolation));
          drm_printf_indent(p, 1, "data blob id=%d\n", state->data ? state->data->base.id : 0);
          break;
      case DRM_COLOROP_CTM_3X4:
@@ -869,7 +869,7 @@ static void drm_atomic_colorop_print_state(struct drm_printer *p,
      case DRM_COLOROP_3D_LUT:
          drm_printf_indent(p, 1, "size=%d\n", colorop->size);
          drm_printf_indent(p, 1, "interpolation=%s\n",
- drm_get_colorop_lut3d_interpolation_name(colorop->lut3d_interpolation));
+ drm_get_colorop_lut3d_interpolation_name(state->lut3d_interpolation));
          drm_printf_indent(p, 1, "data blob id=%d\n", state->data ? state->data->base.id : 0);
          break;
      default:
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index 6441b55cc274..78423905051e 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -751,13 +751,13 @@ static int drm_atomic_colorop_set_property(struct drm_colorop *colorop,
      if (property == colorop->bypass_property) {
          state->bypass = val;
      } else if (property == colorop->lut1d_interpolation_property) {
-        colorop->lut1d_interpolation = val;
+        state->lut1d_interpolation = val;
      } else if (property == colorop->curve_1d_type_property) {
          state->curve_1d_type = val;
      } else if (property == colorop->multiplier_property) {
          state->multiplier = val;
      } else if (property == colorop->lut3d_interpolation_property) {
-        colorop->lut3d_interpolation = val;
+        state->lut3d_interpolation = val;
      } else if (property == colorop->data_property) {
          return drm_atomic_color_set_data_property(colorop, state,
                                property, val);
@@ -782,7 +782,7 @@ drm_atomic_colorop_get_property(struct drm_colorop *colorop,
      else if (property == colorop->bypass_property)
          *val = state->bypass;
      else if (property == colorop->lut1d_interpolation_property)
-        *val = colorop->lut1d_interpolation;
+        *val = state->lut1d_interpolation;
      else if (property == colorop->curve_1d_type_property)
          *val = state->curve_1d_type;
      else if (property == colorop->multiplier_property)
@@ -790,7 +790,7 @@ drm_atomic_colorop_get_property(struct drm_colorop *colorop,
      else if (property == colorop->size_property)
          *val = colorop->size;
      else if (property == colorop->lut3d_interpolation_property)
-        *val = colorop->lut3d_interpolation;
+        *val = state->lut3d_interpolation;
      else if (property == colorop->data_property)
          *val = (state->data) ? state->data->base.id : 0;
      else
diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c
index 764d12060666..b0a9a8094dfe 100644
--- a/drivers/gpu/drm/drm_colorop.c
+++ b/drivers/gpu/drm/drm_colorop.c
@@ -342,7 +342,6 @@ int drm_plane_colorop_curve_1d_lut_init(struct drm_device *dev, struct drm_color
        colorop->lut1d_interpolation_property = prop;
      drm_object_attach_property(&colorop->base, prop, interpolation);
-    colorop->lut1d_interpolation = interpolation;
        /* data */
      ret = drm_colorop_create_data_prop(dev, colorop);
@@ -442,7 +441,6 @@ int drm_plane_colorop_3dlut_init(struct drm_device *dev, struct drm_colorop *col
        colorop->lut3d_interpolation_property = prop;
      drm_object_attach_property(&colorop->base, prop, interpolation);
-    colorop->lut3d_interpolation = interpolation;
        /* data */
      ret = drm_colorop_create_data_prop(dev, colorop);
@@ -521,6 +519,20 @@ static void __drm_colorop_state_reset(struct drm_colorop_state *colorop_state,
                                 &val))
              colorop_state->curve_1d_type = val;
      }
+
+    if (colorop->lut1d_interpolation_property) {
+ if(!drm_object_property_get_default_value(&colorop->base,
+ colorop->lut1d_interpolation_property,
+                              &val));
+            colorop_state->lut1d_interpolation = val;
+    }
+
+    if (colorop->lut3d_interpolation_property) {
+ if(!drm_object_property_get_default_value(&colorop->base,
+ colorop->lut3d_interpolation_property,
+                              &val);
+            colorop_state->lut3d_interpolation = val;
+    }

I see you fixed the ; in the next patch, better to fix it within this patch. Also needs space between if and (.

Ouch, thanks for pointing it out.


  }
    /**
diff --git a/include/drm/drm_colorop.h b/include/drm/drm_colorop.h
index 53a2148082d5..d08a6a8a8392 100644
--- a/include/drm/drm_colorop.h
+++ b/include/drm/drm_colorop.h
@@ -183,6 +183,20 @@ struct drm_colorop_state {
       */
      struct drm_property_blob *data;
  +    /**
+     * @lut1d_interpolation:
+     *
+     * Interpolation for DRM_COLOROP_1D_LUT
+     */
+    enum drm_colorop_lut1d_interpolation_type lut1d_interpolation;
+
+    /**
+     * @lut3d_interpolation:
+     *
+     * Interpolation for DRM_COLOROP_3D_LUT
+     */
+    enum drm_colorop_lut3d_interpolation_type lut3d_interpolation;
+
      /** @state: backpointer to global drm_atomic_commit */
      struct drm_atomic_commit *state;
  };
@@ -306,20 +320,6 @@ struct drm_colorop {
       */
      uint32_t size;
  -    /**
-     * @lut1d_interpolation:
-     *
-     * Interpolation for DRM_COLOROP_1D_LUT
-     */
-    enum drm_colorop_lut1d_interpolation_type lut1d_interpolation;
-
-    /**
-     * @lut3d_interpolation:
-     *
-     * Interpolation for DRM_COLOROP_3D_LUT
-     */
-    enum drm_colorop_lut3d_interpolation_type lut3d_interpolation;
-
      /**
       * @lut1d_interpolation_property:
       *


Reply via email to