[RFCv2 06/10] drm: Specify primary plane at CRTC initialization
On Mon, Mar 10, 2014 at 10:54 AM, Matt Roper wrote: > On Sun, Mar 09, 2014 at 05:12:31PM -0400, Rob Clark wrote: >> On Fri, Mar 7, 2014 at 7:03 PM, Matt Roper >> wrote: >> > Add primary plane as a parameter to drm_crtc_init() and update all >> > existing DRM drivers to use a helper-provided primary plane. >> > >> > Signed-off-by: Matt Roper >> > --- [snip] >> > diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c >> > b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c >> > index 84c5b13..372670e 100644 >> > --- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c >> > +++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c >> > @@ -753,6 +753,7 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev, >> > enum mdp4_dma dma_id) >> > { >> > struct drm_crtc *crtc = NULL; >> > + struct drm_plane *primary; >> > struct mdp4_crtc *mdp4_crtc; >> > int ret; >> > >> > @@ -791,7 +792,8 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev, >> > >> > INIT_FENCE_CB(&mdp4_crtc->pageflip_cb, pageflip_cb); >> > >> > - drm_crtc_init(dev, crtc, &mdp4_crtc_funcs); >> > + primary = drm_primary_helper_create_plane(dev); >> > + drm_crtc_init(dev, crtc, primary, &mdp4_crtc_funcs); >> >> note that msm, omap, and iirc exynos (and maybe even some others) >> already have their own private (now primary) planes. I suspect they >> should be using their existing plane, rather than creating a helper >> plane. >> >> BR, >> -R > > Yep, agreed. This is one of the items I called out as a TODO in the > patch set cover letter. I just haven't had enough time to look at those > drivers in detail yet to figure out how they work. Right now I believe > they all register the same set of plane handler functions at > drm_plane_init() that they do for their other overlay planes; I need to > figure out whether those handler functions will actually operate > properly on the private/primary planes, or whether the drivers were > previously just assuming that the handlers would never get called on > private planes and something different is needed. > ahh, I should have paid more attention to your cover letter. Well, omapdrm and msm are safe to convert (same set of plane handler fxns). I'll update and test msm when I rebase atomic, so their will be a patch that you can squash back in for that one. BR, -R > > Matt >
[RFCv2 06/10] drm: Specify primary plane at CRTC initialization
On Sun, Mar 09, 2014 at 05:12:31PM -0400, Rob Clark wrote: > On Fri, Mar 7, 2014 at 7:03 PM, Matt Roper > wrote: > > Add primary plane as a parameter to drm_crtc_init() and update all > > existing DRM drivers to use a helper-provided primary plane. > > > > Signed-off-by: Matt Roper > > --- > > drivers/gpu/drm/armada/armada_crtc.c | 4 +++- > > drivers/gpu/drm/ast/ast_mode.c | 4 +++- > > drivers/gpu/drm/bochs/bochs_kms.c | 4 +++- > > drivers/gpu/drm/cirrus/cirrus_mode.c | 4 +++- > > drivers/gpu/drm/drm_crtc.c | 8 +++- > > drivers/gpu/drm/exynos/exynos_drm_crtc.c | 4 +++- > > drivers/gpu/drm/gma500/psb_intel_display.c | 4 +++- > > drivers/gpu/drm/i915/intel_display.c | 4 +++- > > drivers/gpu/drm/mgag200/mgag200_mode.c | 4 +++- > > drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 4 +++- > > drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 4 +++- > > drivers/gpu/drm/nouveau/dispnv04/crtc.c| 4 +++- > > drivers/gpu/drm/nouveau/nv50_display.c | 4 +++- > > drivers/gpu/drm/omapdrm/omap_crtc.c| 4 +++- > > drivers/gpu/drm/qxl/qxl_display.c | 4 +++- > > drivers/gpu/drm/radeon/radeon_display.c| 4 +++- > > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 4 +++- > > drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 3 ++- > > drivers/gpu/drm/tegra/dc.c | 4 +++- > > drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 4 +++- > > drivers/gpu/drm/udl/udl_modeset.c | 4 +++- > > drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c| 4 +++- > > drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 4 +++- > > drivers/staging/imx-drm/imx-drm-core.c | 4 +++- > > include/drm/drm_crtc.h | 4 > > 25 files changed, 79 insertions(+), 24 deletions(-) > > > > diff --git a/drivers/gpu/drm/armada/armada_crtc.c > > b/drivers/gpu/drm/armada/armada_crtc.c > > index d8e3982..0a14d24 100644 > > --- a/drivers/gpu/drm/armada/armada_crtc.c > > +++ b/drivers/gpu/drm/armada/armada_crtc.c > > @@ -1030,6 +1030,7 @@ int armada_drm_crtc_create(struct drm_device *dev, > > unsigned num, > > { > > struct armada_private *priv = dev->dev_private; > > struct armada_crtc *dcrtc; > > + struct drm_plane *primary; > > void __iomem *base; > > int ret; > > > > @@ -1086,7 +1087,8 @@ int armada_drm_crtc_create(struct drm_device *dev, > > unsigned num, > > > > priv->dcrtc[dcrtc->num] = dcrtc; > > > > - drm_crtc_init(dev, &dcrtc->crtc, &armada_crtc_funcs); > > + primary = drm_primary_helper_create_plane(dev); > > + drm_crtc_init(dev, &dcrtc->crtc, primary, &armada_crtc_funcs); > > drm_crtc_helper_add(&dcrtc->crtc, &armada_crtc_helper_funcs); > > > > drm_object_attach_property(&dcrtc->crtc.base, priv->csc_yuv_prop, > > diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c > > index cca063b..44f0d32 100644 > > --- a/drivers/gpu/drm/ast/ast_mode.c > > +++ b/drivers/gpu/drm/ast/ast_mode.c > > @@ -626,13 +626,15 @@ static const struct drm_crtc_funcs ast_crtc_funcs = { > > static int ast_crtc_init(struct drm_device *dev) > > { > > struct ast_crtc *crtc; > > + struct drm_plane *primary; > > int i; > > > > crtc = kzalloc(sizeof(struct ast_crtc), GFP_KERNEL); > > if (!crtc) > > return -ENOMEM; > > > > - drm_crtc_init(dev, &crtc->base, &ast_crtc_funcs); > > + primary = drm_primary_helper_create_plane(dev); > > + drm_crtc_init(dev, &crtc->base, primary, &ast_crtc_funcs); > > drm_mode_crtc_set_gamma_size(&crtc->base, 256); > > drm_crtc_helper_add(&crtc->base, &ast_crtc_helper_funcs); > > > > diff --git a/drivers/gpu/drm/bochs/bochs_kms.c > > b/drivers/gpu/drm/bochs/bochs_kms.c > > index 62ec7d4..182f5c9 100644 > > --- a/drivers/gpu/drm/bochs/bochs_kms.c > > +++ b/drivers/gpu/drm/bochs/bochs_kms.c > > @@ -129,8 +129,10 @@ static void bochs_crtc_init(struct drm_device *dev) > > { > > struct bochs_device *bochs = dev->dev_private; > > struct drm_crtc *crtc = &bochs->crtc; > > + struct drm_plane *primary; > > > > - drm_crtc_init(dev, crtc, &bochs_crtc_funcs); > > + primary = drm_primary_helper_create_plane(dev); > > + drm_crtc_init(dev, crtc, primary, &bochs_crtc_funcs); > > drm_mode_crtc_set_gamma_size(crtc, 256); > > drm_crtc_helper_add(crtc, &bochs_helper_funcs); > > } > > diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c > > b/drivers/gpu/drm/cirrus/cirrus_mode.c > > index 530f78f..449246f 100644 > > --- a/drivers/gpu/drm/cirrus/cirrus_mode.c > > +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c > > @@ -381,6 +381,7 @@ static void cirrus_crtc_init(struct drm_device *dev) > > { > > struct cirrus_device *cdev = dev->dev_private; > > struct cirrus_crtc *cirrus_crtc; > > + struct drm_plane *primary; > > int i; > > > > cirrus_crtc = kzalloc(sizeof(struct cirrus_crtc) + > >
[RFCv2 06/10] drm: Specify primary plane at CRTC initialization
On Fri, Mar 7, 2014 at 7:03 PM, Matt Roper wrote: > Add primary plane as a parameter to drm_crtc_init() and update all > existing DRM drivers to use a helper-provided primary plane. > > Signed-off-by: Matt Roper > --- > drivers/gpu/drm/armada/armada_crtc.c | 4 +++- > drivers/gpu/drm/ast/ast_mode.c | 4 +++- > drivers/gpu/drm/bochs/bochs_kms.c | 4 +++- > drivers/gpu/drm/cirrus/cirrus_mode.c | 4 +++- > drivers/gpu/drm/drm_crtc.c | 8 +++- > drivers/gpu/drm/exynos/exynos_drm_crtc.c | 4 +++- > drivers/gpu/drm/gma500/psb_intel_display.c | 4 +++- > drivers/gpu/drm/i915/intel_display.c | 4 +++- > drivers/gpu/drm/mgag200/mgag200_mode.c | 4 +++- > drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 4 +++- > drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 4 +++- > drivers/gpu/drm/nouveau/dispnv04/crtc.c| 4 +++- > drivers/gpu/drm/nouveau/nv50_display.c | 4 +++- > drivers/gpu/drm/omapdrm/omap_crtc.c| 4 +++- > drivers/gpu/drm/qxl/qxl_display.c | 4 +++- > drivers/gpu/drm/radeon/radeon_display.c| 4 +++- > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 4 +++- > drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 3 ++- > drivers/gpu/drm/tegra/dc.c | 4 +++- > drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 4 +++- > drivers/gpu/drm/udl/udl_modeset.c | 4 +++- > drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c| 4 +++- > drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 4 +++- > drivers/staging/imx-drm/imx-drm-core.c | 4 +++- > include/drm/drm_crtc.h | 4 > 25 files changed, 79 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/armada/armada_crtc.c > b/drivers/gpu/drm/armada/armada_crtc.c > index d8e3982..0a14d24 100644 > --- a/drivers/gpu/drm/armada/armada_crtc.c > +++ b/drivers/gpu/drm/armada/armada_crtc.c > @@ -1030,6 +1030,7 @@ int armada_drm_crtc_create(struct drm_device *dev, > unsigned num, > { > struct armada_private *priv = dev->dev_private; > struct armada_crtc *dcrtc; > + struct drm_plane *primary; > void __iomem *base; > int ret; > > @@ -1086,7 +1087,8 @@ int armada_drm_crtc_create(struct drm_device *dev, > unsigned num, > > priv->dcrtc[dcrtc->num] = dcrtc; > > - drm_crtc_init(dev, &dcrtc->crtc, &armada_crtc_funcs); > + primary = drm_primary_helper_create_plane(dev); > + drm_crtc_init(dev, &dcrtc->crtc, primary, &armada_crtc_funcs); > drm_crtc_helper_add(&dcrtc->crtc, &armada_crtc_helper_funcs); > > drm_object_attach_property(&dcrtc->crtc.base, priv->csc_yuv_prop, > diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c > index cca063b..44f0d32 100644 > --- a/drivers/gpu/drm/ast/ast_mode.c > +++ b/drivers/gpu/drm/ast/ast_mode.c > @@ -626,13 +626,15 @@ static const struct drm_crtc_funcs ast_crtc_funcs = { > static int ast_crtc_init(struct drm_device *dev) > { > struct ast_crtc *crtc; > + struct drm_plane *primary; > int i; > > crtc = kzalloc(sizeof(struct ast_crtc), GFP_KERNEL); > if (!crtc) > return -ENOMEM; > > - drm_crtc_init(dev, &crtc->base, &ast_crtc_funcs); > + primary = drm_primary_helper_create_plane(dev); > + drm_crtc_init(dev, &crtc->base, primary, &ast_crtc_funcs); > drm_mode_crtc_set_gamma_size(&crtc->base, 256); > drm_crtc_helper_add(&crtc->base, &ast_crtc_helper_funcs); > > diff --git a/drivers/gpu/drm/bochs/bochs_kms.c > b/drivers/gpu/drm/bochs/bochs_kms.c > index 62ec7d4..182f5c9 100644 > --- a/drivers/gpu/drm/bochs/bochs_kms.c > +++ b/drivers/gpu/drm/bochs/bochs_kms.c > @@ -129,8 +129,10 @@ static void bochs_crtc_init(struct drm_device *dev) > { > struct bochs_device *bochs = dev->dev_private; > struct drm_crtc *crtc = &bochs->crtc; > + struct drm_plane *primary; > > - drm_crtc_init(dev, crtc, &bochs_crtc_funcs); > + primary = drm_primary_helper_create_plane(dev); > + drm_crtc_init(dev, crtc, primary, &bochs_crtc_funcs); > drm_mode_crtc_set_gamma_size(crtc, 256); > drm_crtc_helper_add(crtc, &bochs_helper_funcs); > } > diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c > b/drivers/gpu/drm/cirrus/cirrus_mode.c > index 530f78f..449246f 100644 > --- a/drivers/gpu/drm/cirrus/cirrus_mode.c > +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c > @@ -381,6 +381,7 @@ static void cirrus_crtc_init(struct drm_device *dev) > { > struct cirrus_device *cdev = dev->dev_private; > struct cirrus_crtc *cirrus_crtc; > + struct drm_plane *primary; > int i; > > cirrus_crtc = kzalloc(sizeof(struct cirrus_crtc) + > @@ -390,7 +391,8 @@ static void cirrus_crtc_init(struct drm_device *dev) > if (cirrus_crtc == NULL) > return; > > - drm_crtc_init(dev, &cirrus_crtc->base, &cirrus_crtc_funcs); > + primary = drm_primary_helper_create_plane(dev); > + drm_crtc
[RFCv2 06/10] drm: Specify primary plane at CRTC initialization
Add primary plane as a parameter to drm_crtc_init() and update all existing DRM drivers to use a helper-provided primary plane. Signed-off-by: Matt Roper --- drivers/gpu/drm/armada/armada_crtc.c | 4 +++- drivers/gpu/drm/ast/ast_mode.c | 4 +++- drivers/gpu/drm/bochs/bochs_kms.c | 4 +++- drivers/gpu/drm/cirrus/cirrus_mode.c | 4 +++- drivers/gpu/drm/drm_crtc.c | 8 +++- drivers/gpu/drm/exynos/exynos_drm_crtc.c | 4 +++- drivers/gpu/drm/gma500/psb_intel_display.c | 4 +++- drivers/gpu/drm/i915/intel_display.c | 4 +++- drivers/gpu/drm/mgag200/mgag200_mode.c | 4 +++- drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 4 +++- drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 4 +++- drivers/gpu/drm/nouveau/dispnv04/crtc.c| 4 +++- drivers/gpu/drm/nouveau/nv50_display.c | 4 +++- drivers/gpu/drm/omapdrm/omap_crtc.c| 4 +++- drivers/gpu/drm/qxl/qxl_display.c | 4 +++- drivers/gpu/drm/radeon/radeon_display.c| 4 +++- drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 4 +++- drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 3 ++- drivers/gpu/drm/tegra/dc.c | 4 +++- drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 4 +++- drivers/gpu/drm/udl/udl_modeset.c | 4 +++- drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c| 4 +++- drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 4 +++- drivers/staging/imx-drm/imx-drm-core.c | 4 +++- include/drm/drm_crtc.h | 4 25 files changed, 79 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c index d8e3982..0a14d24 100644 --- a/drivers/gpu/drm/armada/armada_crtc.c +++ b/drivers/gpu/drm/armada/armada_crtc.c @@ -1030,6 +1030,7 @@ int armada_drm_crtc_create(struct drm_device *dev, unsigned num, { struct armada_private *priv = dev->dev_private; struct armada_crtc *dcrtc; + struct drm_plane *primary; void __iomem *base; int ret; @@ -1086,7 +1087,8 @@ int armada_drm_crtc_create(struct drm_device *dev, unsigned num, priv->dcrtc[dcrtc->num] = dcrtc; - drm_crtc_init(dev, &dcrtc->crtc, &armada_crtc_funcs); + primary = drm_primary_helper_create_plane(dev); + drm_crtc_init(dev, &dcrtc->crtc, primary, &armada_crtc_funcs); drm_crtc_helper_add(&dcrtc->crtc, &armada_crtc_helper_funcs); drm_object_attach_property(&dcrtc->crtc.base, priv->csc_yuv_prop, diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c index cca063b..44f0d32 100644 --- a/drivers/gpu/drm/ast/ast_mode.c +++ b/drivers/gpu/drm/ast/ast_mode.c @@ -626,13 +626,15 @@ static const struct drm_crtc_funcs ast_crtc_funcs = { static int ast_crtc_init(struct drm_device *dev) { struct ast_crtc *crtc; + struct drm_plane *primary; int i; crtc = kzalloc(sizeof(struct ast_crtc), GFP_KERNEL); if (!crtc) return -ENOMEM; - drm_crtc_init(dev, &crtc->base, &ast_crtc_funcs); + primary = drm_primary_helper_create_plane(dev); + drm_crtc_init(dev, &crtc->base, primary, &ast_crtc_funcs); drm_mode_crtc_set_gamma_size(&crtc->base, 256); drm_crtc_helper_add(&crtc->base, &ast_crtc_helper_funcs); diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c index 62ec7d4..182f5c9 100644 --- a/drivers/gpu/drm/bochs/bochs_kms.c +++ b/drivers/gpu/drm/bochs/bochs_kms.c @@ -129,8 +129,10 @@ static void bochs_crtc_init(struct drm_device *dev) { struct bochs_device *bochs = dev->dev_private; struct drm_crtc *crtc = &bochs->crtc; + struct drm_plane *primary; - drm_crtc_init(dev, crtc, &bochs_crtc_funcs); + primary = drm_primary_helper_create_plane(dev); + drm_crtc_init(dev, crtc, primary, &bochs_crtc_funcs); drm_mode_crtc_set_gamma_size(crtc, 256); drm_crtc_helper_add(crtc, &bochs_helper_funcs); } diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c index 530f78f..449246f 100644 --- a/drivers/gpu/drm/cirrus/cirrus_mode.c +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c @@ -381,6 +381,7 @@ static void cirrus_crtc_init(struct drm_device *dev) { struct cirrus_device *cdev = dev->dev_private; struct cirrus_crtc *cirrus_crtc; + struct drm_plane *primary; int i; cirrus_crtc = kzalloc(sizeof(struct cirrus_crtc) + @@ -390,7 +391,8 @@ static void cirrus_crtc_init(struct drm_device *dev) if (cirrus_crtc == NULL) return; - drm_crtc_init(dev, &cirrus_crtc->base, &cirrus_crtc_funcs); + primary = drm_primary_helper_create_plane(dev); + drm_crtc_init(dev, &cirrus_crtc->base, primary, &cirrus_crtc_funcs); drm_mode_crtc_set_gamma_size(&cirrus_crtc->base, CIRRUS_LUT_SIZE); cdev->mode_info.crtc = cirrus_crtc; diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 5b9b512..35e7