[PATCH 02/28] drm/writeback: Add a helper function to get writeback connector
Kandpal, Suraj
suraj.kandpal at intel.com
Fri Aug 1 04:04:16 UTC 2025
> > > > 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?
> >
> > This is very much related to this commit and defined on top right here in this
> commit.
>
> Then please split this patch into two.
Sure will do
Regards,
Suraj Kandpal
>
>
> --
> With best wishes
> Dmitry
More information about the dri-devel
mailing list