[V7 10/45] drm/colorop: Add NEXT property

Louis Chauvet louis.chauvet at bootlin.com
Tue Feb 25 10:21:32 UTC 2025



Le 20/12/2024 à 05:33, Alex Hung a écrit :
> From: Harry Wentland <harry.wentland at amd.com>
> 
> We'll construct color pipelines out of drm_colorop by
> chaining them via the NEXT pointer. NEXT will point to
> the next drm_colorop in the pipeline, or by 0 if we're
> at the end of the pipeline.
> 
> Signed-off-by: Alex Hung <alex.hung at amd.com>
> Signed-off-by: Harry Wentland <harry.wentland at amd.com>
> ---
> v5:
>   - move next comment here from Add 3x4 CTM patch (Sebastian)
>   - Add kernel doc
> 
> v4:
>   - Allow setting of NEXT property to NULL (Chaitanya Kumar Borah)
> 
> v3:
>   - Add next pointer to colorop to be used by drivers
>     and in DRM core
> 
>   drivers/gpu/drm/drm_colorop.c | 30 ++++++++++++++++++++++++++++++
>   include/drm/drm_colorop.h     | 20 ++++++++++++++++++++
>   2 files changed, 50 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c
> index 01cbe90635e8..954acd09673a 100644
> --- a/drivers/gpu/drm/drm_colorop.c
> +++ b/drivers/gpu/drm/drm_colorop.c
> @@ -89,6 +89,7 @@ static int drm_colorop_init(struct drm_device *dev, struct drm_colorop *colorop,
>   	colorop->dev = dev;
>   	colorop->type = type;
>   	colorop->plane = plane;
> +	colorop->next = NULL;
>   
>   	list_add_tail(&colorop->head, &config->colorop_list);
>   	colorop->index = config->num_colorop++;
> @@ -121,6 +122,16 @@ static int drm_colorop_init(struct drm_device *dev, struct drm_colorop *colorop,
>   				   colorop->bypass_property,
>   				   1);
>   
> +	/* next */
> +	prop = drm_property_create_object(dev, DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_ATOMIC,
> +					  "NEXT", DRM_MODE_OBJECT_COLOROP);
> +	if (!prop)
> +		return -ENOMEM;
> +	colorop->next_property = prop;
> +	drm_object_attach_property(&colorop->base,
> +				   colorop->next_property,
> +				   0);
> +
>   	return ret;
>   }
>   
> @@ -294,3 +305,22 @@ const char *drm_get_colorop_curve_1d_type_name(enum drm_colorop_curve_1d_type ty
>   
>   	return colorop_curve_1d_type_names[type];
>   }
> +
> +/**
> + * drm_colorop_set_next_property - sets the next pointer
> + * @colorop: drm colorop
> + * @next: next colorop
> + *
> + * Should be used when constructing the color pipeline
> + */
> +void drm_colorop_set_next_property(struct drm_colorop *colorop, struct drm_colorop *next)
> +{
> +	if (!colorop->next_property)
> +		return;

I agree with Simon, a WARN_ON seems appropriate here, the 
colorop->next_property should always exist, and if not, it is a bug.

> +
> +	drm_object_property_set_value(&colorop->base,
> +				      colorop->next_property,
> +				      next ? next->base.id : 0);
> +	colorop->next = next;
> +}
> +EXPORT_SYMBOL(drm_colorop_set_next_property);
> diff --git a/include/drm/drm_colorop.h b/include/drm/drm_colorop.h
> index 5ed24d60a99e..2f0572be37bb 100644
> --- a/include/drm/drm_colorop.h
> +++ b/include/drm/drm_colorop.h
> @@ -165,6 +165,14 @@ struct drm_colorop {
>   	 */
>   	enum drm_colorop_type type;
>   
> +	/**
> +	 * @next:
> +	 *
> +	 * Read-only
> +	 * Pointer to next drm_colorop in pipeline
> +	 */
> +	struct drm_colorop *next;
> +
>   	/**
>   	 * @type_property:
>   	 *
> @@ -192,10 +200,20 @@ struct drm_colorop {
>   	 */
>   	struct drm_property *curve_1d_type_property;
>   
> +	/**
> +	 * @next_property:
> +	 *
> +	 * Read-only property to next colorop in the pipeline
> +	 */
> +	struct drm_property *next_property;
> +
>   };
>   
>   #define obj_to_colorop(x) container_of(x, struct drm_colorop, base)
>   
> +
> +
> +

Strange useless lines

Thanks,
Louis Chauvet

>   /**
>    * drm_colorop_find - look up a Colorop object from its ID
>    * @dev: DRM device
> @@ -268,4 +286,6 @@ const char *drm_get_colorop_type_name(enum drm_colorop_type type);
>    */
>   const char *drm_get_colorop_curve_1d_type_name(enum drm_colorop_curve_1d_type type);
>   
> +void drm_colorop_set_next_property(struct drm_colorop *colorop, struct drm_colorop *next);
> +
>   #endif /* __DRM_COLOROP_H__ */

-- 
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com



More information about the dri-devel mailing list