[RFCv2 06/10] drm: Specify primary plane at CRTC initialization

2014-03-10 Thread Rob Clark
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

2014-03-10 Thread Matt Roper
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

2014-03-09 Thread Rob Clark
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

2014-03-07 Thread Matt Roper
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