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
