Hi Tommaso,

> -----Original Message-----
> From: Laurent Pinchart <[email protected]>
> Sent: 24 March 2026 19:33
> Subject: Re: [PATCH] drm: rz-du: Ensure correct suspend/resume ordering with 
> VSP
> 
> On Tue, Mar 24, 2026 at 07:05:05PM +0100, Tommaso Merciai wrote:
> > The VSP serves as an interface to memory and a compositor to the DU.
> > It therefore needs to be suspended after and resumed before the DU, to
> > be properly stopped and restarted in a controlled fashion driven by
> > the DU driver. This currently works by chance. Avoid relying on luck
> > by enforcing the correct suspend/resume ordering with device links.
> >
> > Based on similar work done by Laurent Pinchart for R-Car DU.
> 
> If the R-Car DU patch gets merged before this one, you could mention the 
> commit ID here.

Now the R-Car patch hit on drm-misc-next. Can you please repost this patch
with commit ID?

Cheers,
Biju



> 
> >
> > Signed-off-by: Tommaso Merciai <[email protected]>
> 
> Reviewed-by: Laurent Pinchart <[email protected]>
> 
> > ---
> >  drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c | 16 ++++++++++++++++
> > drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.h |  2 ++
> >  2 files changed, 18 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c
> > b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c
> > index bd486377f037..eb626c3cc421 100644
> > --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c
> > +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c
> > @@ -20,6 +20,7 @@
> >  #include <drm/drm_vblank.h>
> >
> >  #include <linux/bitops.h>
> > +#include <linux/device.h>
> >  #include <linux/dma-mapping.h>
> >  #include <linux/of_platform.h>
> >  #include <linux/platform_device.h>
> > @@ -293,6 +294,9 @@ static void rzg2l_du_vsp_cleanup(struct drm_device
> > *dev, void *res)  {
> >     struct rzg2l_du_vsp *vsp = res;
> >
> > +   if (vsp->link)
> > +           device_link_del(vsp->link);
> > +
> >     put_device(vsp->vsp);
> >  }
> >
> > @@ -317,6 +321,18 @@ int rzg2l_du_vsp_init(struct rzg2l_du_vsp *vsp, struct 
> > device_node *np,
> >     if (ret < 0)
> >             return ret;
> >
> > +   /*
> > +    * Enforce suspend/resume ordering between the DU (consumer) and the
> > +    * VSP (supplier). The DU will be suspended before and resume after the
> > +    * VSP.
> > +    */
> > +   vsp->link = device_link_add(rcdu->dev, vsp->vsp, DL_FLAG_STATELESS);
> > +   if (!vsp->link) {
> > +           dev_err(rcdu->dev, "Failed to create device link to VSP %s\n",
> > +                   dev_name(vsp->vsp));
> > +           return -EINVAL;
> > +   }
> > +
> >     ret = vsp1_du_init(vsp->vsp);
> >     if (ret < 0)
> >             return ret;
> > diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.h
> > b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.h
> > index 322eb80dcbaf..a22aaf0843ed 100644
> > --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.h
> > +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.h
> > @@ -15,6 +15,7 @@
> >  #include <linux/scatterlist.h>
> >
> >  struct device;
> > +struct device_link;
> >  struct drm_framebuffer;
> >  struct rzg2l_du_device;
> >  struct rzg2l_du_format_info;
> > @@ -29,6 +30,7 @@ struct rzg2l_du_vsp_plane {  struct rzg2l_du_vsp {
> >     unsigned int index;
> >     struct device *vsp;
> > +   struct device_link *link;
> >     struct rzg2l_du_device *dev;
> >  };
> >
> 
> --
> Regards,
> 
> Laurent Pinchart

Reply via email to