Hi Maxime Ripard,

> -----Original Message-----
> From: Biju Das
> Sent: Thursday, December 14, 2023 8:50 PM
> Subject: RE: [PATCH v15 3/5] drm: renesas: Add RZ/G2L DU Support
> 
> Hi Maxime Ripard,
> 
> 
> > -----Original Message-----
> > From: Biju Das
> > Sent: Thursday, December 14, 2023 3:24 PM
> > Subject: RE: [PATCH v15 3/5] drm: renesas: Add RZ/G2L DU Support
> >
> > >
> > > > +
> > > > +       for (i = 0; i < num_planes; ++i) {
> > > > +               enum drm_plane_type type = i < num_crtcs
> > > > +                                        ? DRM_PLANE_TYPE_PRIMARY
> > > > +                                        : DRM_PLANE_TYPE_OVERLAY;
> > > > +               struct rzg2l_du_vsp_plane *plane = &vsp->planes[i];
> > > > +
> > > > +               plane->vsp = vsp;
> > > > +               plane->index = i;
> > > > +               ret = drm_universal_plane_init(&rcdu->ddev, &plane-
> >plane,
> > > > +                                              crtcs,
> &rzg2l_du_vsp_plane_funcs,
> > > > +                                              rzg2l_du_vsp_formats,
> > > > +
> ARRAY_SIZE(rzg2l_du_vsp_formats),
> > > > +                                              NULL, type, NULL);
> > > > +               if (ret < 0)
> > > > +                       return ret;
> > >
> > > you need to use drmm variant here too.
> >
> > I did rebased to latest drm_misc_next and I don't find the
> > drmm_universal_plane_init()
> >
> > Can you please point me to the API?
> 
> We cannot use drmm_universal_plane_alloc() in this architecture.
> 
> rzg2l_du_vsps_init() stores the VSP pointer and pipe index from DT first.
> 
> Then all the planes are created using rzg2l_du_vsp_init()
> 
> CRTC uses VSP pointer and pipe_index to set the
> plane(rzg2l_du_crtc_create()).
> 
> CRTC->vsp->planes[rcrtc->vsp_pipe].plane
> 

Thinking again, it is possible to use drmm_universal_plane_alloc() here

Introduce a linked list [1] and use an API [2] to retrieve plane
by matching vsp_pipe index against plane->index.

With this we don't need drmm_kcalloc() any more.

I will implement and test this and send v16, if there are no comments.


[1]
struct rzg2l_du_vsp_plane {
        struct drm_plane plane;
        struct rzg2l_du_vsp *vsp;
        unsigned int index;
        struct rzg2l_du_vsp_plane *next;
};

[2]
struct drm_plane *rzg2l_du_vsp_get_drm_plane(struct rzg2l_du_crtc *crtc,
                                         unsigned int pipe_index);


Cheers,
Biju

Reply via email to