On 26/03/2026 21:39, Alex Hung wrote:
LUT1D_INTERPOLATION and LUT3D_INTERPOLATION are read-only properties but
were missing DRM_MODE_PROP_IMMUTABLE and DRM_MODE_PROP_ATOMIC flags.
+ Xaver

So, I double checked previous conversation about these two interpolation properties. AFAIU, we agreed (?) on not making it immutable because it could become mutable if a HW allows it. - https://lore.kernel.org/dri-devel/CAFZQkGyj7=n2ucbbnjv7az3ohsd2lxaax5wzccpst_uehh3...@mail.gmail.com/

So, what's the best approach to inform userspace that they cannot change this property?
Perhaps the driver has to reject if in the end the property is immutable (?)

Melissa

Add the correct flags and remove the now-unreachable set_property
handlers in drm_atomic_colorop_set_property().

Link: 
https://lore.kernel.org/amd-gfx/[email protected]/
Fixes: 7fa3ee8c0a79 ("drm/colorop: Define LUT_1D interpolation")
Fixes: db971856bbe0 ("drm/colorop: Add 3D LUT support to color pipeline")
Suggested-by: Melissa Wen <[email protected]>
Suggested-by: Chaitanya Kumar Borah <[email protected]>
Signed-off-by: Alex Hung <[email protected]>
---
  drivers/gpu/drm/drm_atomic_uapi.c | 4 ----
  drivers/gpu/drm/drm_colorop.c     | 6 ++++--
  2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/drm_atomic_uapi.c 
b/drivers/gpu/drm/drm_atomic_uapi.c
index 713fa9e81732..e831894d5a51 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -758,8 +758,6 @@ static int drm_atomic_colorop_set_property(struct 
drm_colorop *colorop,
                        state->bypass = val;
                        *replaced = true;
                }
-       } else if (property == colorop->lut1d_interpolation_property) {
-               colorop->lut1d_interpolation = val;
        } else if (property == colorop->curve_1d_type_property) {
                if (state->curve_1d_type != val) {
                        state->curve_1d_type = val;
@@ -770,8 +768,6 @@ static int drm_atomic_colorop_set_property(struct 
drm_colorop *colorop,
                        state->multiplier = val;
                        *replaced = true;
                }
-       } else if (property == colorop->lut3d_interpolation_property) {
-               colorop->lut3d_interpolation = val;
        } else if (property == colorop->data_property) {
                return drm_atomic_color_set_data_property(colorop, state,
                                                          property, val,
diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c
index 398cc81ae588..34998f393f2e 100644
--- a/drivers/gpu/drm/drm_colorop.c
+++ b/drivers/gpu/drm/drm_colorop.c
@@ -317,7 +317,8 @@ int drm_plane_colorop_curve_1d_lut_init(struct drm_device 
*dev, struct drm_color
        colorop->size = lut_size;
/* interpolation */
-       prop = drm_property_create_enum(dev, 0, "LUT1D_INTERPOLATION",
+       prop = drm_property_create_enum(dev, DRM_MODE_PROP_ATOMIC | 
DRM_MODE_PROP_IMMUTABLE,
+                                       "LUT1D_INTERPOLATION",
                                        drm_colorop_lut1d_interpolation_list,
                                        
ARRAY_SIZE(drm_colorop_lut1d_interpolation_list));
        if (!prop)
@@ -413,7 +414,8 @@ int drm_plane_colorop_3dlut_init(struct drm_device *dev, 
struct drm_colorop *col
        colorop->size = lut_size;
/* interpolation */
-       prop = drm_property_create_enum(dev, 0, "LUT3D_INTERPOLATION",
+       prop = drm_property_create_enum(dev, DRM_MODE_PROP_ATOMIC | 
DRM_MODE_PROP_IMMUTABLE,
+                                       "LUT3D_INTERPOLATION",
                                        drm_colorop_lut3d_interpolation_list,
                                        
ARRAY_SIZE(drm_colorop_lut3d_interpolation_list));
        if (!prop)

Reply via email to