[PATCH 02/28] drm/writeback: Add a helper function to get writeback connector
Dmitry Baryshkov
dmitry.baryshkov at oss.qualcomm.com
Sat Jul 26 12:20:06 UTC 2025
On Fri, Jul 25, 2025 at 10:33:43AM +0530, Suraj Kandpal wrote:
> Now that we can initialize a drm_writeback_connector without
> having to initialize the drm_connector within it and leaving the
> responsibility of initialising the drm_connector and maintaining
> the association with drm_writeback_connector to it. This helper
> hooks lets drivers return the drm_writeback_connector associated
> with the give drm_connector.
>
> Signed-off-by: Suraj Kandpal <suraj.kandpal at intel.com>
> ---
> drivers/gpu/drm/drm_writeback.c | 14 ++++++
> include/drm/drm_modeset_helper_vtables.h | 59 ++++++++++++++++++++++++
> include/drm/drm_writeback.h | 14 ++++--
> 3 files changed, 82 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c
> index fa58eb0dc7bf..e9f7123270d6 100644
> --- a/drivers/gpu/drm/drm_writeback.c
> +++ b/drivers/gpu/drm/drm_writeback.c
> @@ -107,6 +107,19 @@ static const struct dma_fence_ops drm_writeback_fence_ops = {
> .get_timeline_name = drm_writeback_fence_get_timeline_name,
> };
>
> +struct drm_writeback_connector *
> +drm_connector_to_writeback(struct drm_connector *connector)
> +{
> + const struct drm_connector_helper_funcs *funcs =
> + connector->helper_private;
> +
> + if (funcs->get_writeback_connector)
> + return funcs->get_writeback_connector(connector);
> +
> + return container_of(connector, struct drm_writeback_connector, base);
> +}
> +EXPORT_SYMBOL(drm_connector_to_writeback);
> +
> static int create_writeback_properties(struct drm_device *dev)
> {
> struct drm_property *prop;
> @@ -443,6 +456,7 @@ drm_writeback_connector_init_with_conn(struct drm_device *dev, struct drm_connec
> struct drm_writeback_connector *wb_connector,
> struct drm_encoder *enc,
> const struct drm_connector_funcs *con_funcs,
> + const struct drm_writeback_connector_helper_funcs *wb_funcs,
> const u32 *formats, int n_formats)
> {
> struct drm_property_blob *blob;
> diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
> index ce7c7aeac887..6b89b33d2304 100644
> --- a/include/drm/drm_modeset_helper_vtables.h
> +++ b/include/drm/drm_modeset_helper_vtables.h
> @@ -31,6 +31,7 @@
>
> #include <drm/drm_crtc.h>
> #include <drm/drm_encoder.h>
> +#include <drm/drm_writeback.h>
>
> /**
> * DOC: overview
> @@ -1179,6 +1180,25 @@ struct drm_connector_helper_funcs {
> *
> */
> void (*disable_hpd)(struct drm_connector *connector);
> +
> + /**
> + * @get_writeback_connector:
> + *
> + * This callback is used by drivers to get the writeback connector in
> + * case the init is done via drm_writeback_init_with_conn. Which means
> + * the drivers don't have drm_connector embedded in drm_writeback_connector
> + * so they need to send the associated writeback connector with this
> + * function.
> + *
> + * This operation is optional.
> + *
> + * This is mainly called from drm_writeback_set_gb.
> + *
> + * RETURNS:
> + *
> + * drm_writeback_connector assoiciated with the drm connector.
> + */
> + struct drm_writeback_connector *(*get_writeback_connector)(struct drm_connector *connector);
> };
>
> /**
> @@ -1192,6 +1212,45 @@ static inline void drm_connector_helper_add(struct drm_connector *connector,
> connector->helper_private = funcs;
> }
>
> +/**
> + * struct drm_writeback_connector_helper_funcs - helper operations for writeback
> + * connectors.
> + *
> + * These functions are used by the atomic and legacy modeset helpers and by the
> + * probe helpers.
> + */
> +struct drm_writeback_connector_helper_funcs {
> + /**
> + * @get_connector_from_writeback:
> + *
> + * This callback is used by drivers to get the drm_connector in
> + * case the init is done via drm_writeback_init_with_conn. Which means
> + * the drivers don't have drm_connector embedded in drm_writeback_connector
> + * so they need to send the associated drm_connector with this
> + * function.
> + *
> + * This operation is optional.
> + *
> + * RETURNS:
> + *
> + * drm_connector assoiciated with the drm_writeback_connector.
> + */
> + struct drm_connector
> + *(*get_connector_from_writeback)(struct drm_writeback_connector *wbconnector);
> +};
> +
> +/**
> + * drm_writeback_connector_helper_add - sets the helper vtable for a connector
> + * @wb_connector: DRM writeback connector
> + * @funcs: helper vtable to set for @wb_connector
> + */
> +static inline void
> +drm_writeback_connector_helper_add(struct drm_writeback_connector *wb_connector,
> + const struct drm_writeback_connector_helper_funcs *funcs)
> +{
> + wb_connector->helper_private = funcs;
> +}
> +
> /**
> * struct drm_plane_helper_funcs - helper operations for planes
> *
> diff --git a/include/drm/drm_writeback.h b/include/drm/drm_writeback.h
> index 149744dbeef0..77c3c64c132d 100644
> --- a/include/drm/drm_writeback.h
> +++ b/include/drm/drm_writeback.h
> @@ -84,6 +84,13 @@ struct drm_writeback_connector {
> * The name of the connector's fence timeline.
> */
> char timeline_name[32];
> +
> + /**
> + * @helper_private:
> + *
> + * helper private funcs for writeback_connector
> + */
> + const struct drm_writeback_connector_helper_funcs *helper_private;
> };
Unrelate to the commit? Also, where is this defined?
>
> /**
> @@ -142,11 +149,7 @@ struct drm_writeback_job {
> void *priv;
> };
>
> -static inline struct drm_writeback_connector *
> -drm_connector_to_writeback(struct drm_connector *connector)
> -{
> - return container_of(connector, struct drm_writeback_connector, base);
> -}
> +struct drm_writeback_connector *drm_connector_to_writeback(struct drm_connector *connector);
>
> int drm_writeback_connector_init(struct drm_device *dev,
> struct drm_writeback_connector *wb_connector,
> @@ -172,6 +175,7 @@ drm_writeback_connector_init_with_conn(struct drm_device *dev, struct drm_connec
> struct drm_writeback_connector *wb_connector,
> struct drm_encoder *enc,
> const struct drm_connector_funcs *con_funcs,
> + const struct drm_writeback_connector_helper_funcs *wb_funcs,
> const u32 *formats, int n_formats);
>
> int drm_writeback_set_fb(struct drm_connector_state *conn_state,
> --
> 2.34.1
>
--
With best wishes
Dmitry
More information about the Intel-xe
mailing list