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)