[PATCH v7 02/13] drm/exynos: atomic phase 1: use drm_plane_helper_update()

2015-05-27 Thread Joonyoung Shim
On 05/23/2015 12:40 AM, Gustavo Padovan wrote:
> From: Gustavo Padovan 
> 
> Rip out the check from exynos_update_plane() and create
> exynos_check_plane() for the check phase enabling use to use
> the atomic helpers to call our check and update phases when updating
> planes.
> 
> Update all users of exynos_update_plane() accordingly to call
> exynos_check_plane() before.
> 
> Signed-off-by: Gustavo Padovan 
> Reviewed-by: Joonyoung Shim 
> Tested-by: Tobias Jakobi y
> ---
>  drivers/gpu/drm/exynos/exynos_drm_crtc.c  | 23 ++
>  drivers/gpu/drm/exynos/exynos_drm_plane.c | 40 
> +++
>  drivers/gpu/drm/exynos/exynos_drm_plane.h |  2 +-
>  3 files changed, 50 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c 
> b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> index 363b019..27cc450 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> @@ -116,6 +116,7 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc 
> *crtc, int x, int y,
>   struct drm_framebuffer *fb = crtc->primary->fb;
>   unsigned int crtc_w;
>   unsigned int crtc_h;
> + int ret;
>  
>   /* when framebuffer changing is requested, crtc's dpms should be on */
>   if (exynos_crtc->dpms > DRM_MODE_DPMS_ON) {
> @@ -123,12 +124,17 @@ static int exynos_drm_crtc_mode_set_base(struct 
> drm_crtc *crtc, int x, int y,
>   return -EPERM;
>   }
>  
> + ret = exynos_check_plane(crtc->primary, fb);
> + if (ret)
> + return ret;
> +
>   crtc_w = fb->width - x;
>   crtc_h = fb->height - y;
> + exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> + crtc_w, crtc_h, x << 16, y << 16,
> + crtc_w << 16, crtc_h << 16);
>  
> - return exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> -crtc_w, crtc_h, x << 16, y << 16,
> -crtc_w << 16, crtc_h << 16);
> + return 0;
>  }
>  
>  static void exynos_drm_crtc_disable(struct drm_crtc *crtc)
> @@ -165,7 +171,6 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc 
> *crtc,
>  {
>   struct drm_device *dev = crtc->dev;
>   struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
> - struct drm_framebuffer *old_fb = crtc->primary->fb;
>   unsigned int crtc_w, crtc_h;
>   int ret;
>  
> @@ -184,6 +189,10 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc 
> *crtc,
>   goto out;
>   }
>  
> + ret = exynos_check_plane(crtc->primary, fb);
> + if (ret)
> + goto out;
> +
>   ret = drm_vblank_get(dev, exynos_crtc->pipe);
>   if (ret) {
>   DRM_DEBUG("failed to acquire vblank counter\n");
> @@ -202,6 +211,7 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc 
> *crtc,
>   crtc->primary->fb = fb;
>   crtc_w = fb->width - crtc->x;
>   crtc_h = fb->height - crtc->y;
> +<<< HEAD
>   ret = exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> crtc_w, crtc_h, crtc->x << 16, crtc->y << 16,
> crtc_w << 16, crtc_h << 16);
> @@ -213,6 +223,11 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc 
> *crtc,
>   spin_unlock_irq(>event_lock);
>   return ret;
>   }
> +===
> + exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> + crtc_w, crtc_h, crtc->x, crtc->y,
> + crtc_w, crtc_h);
> +>>> 2f6d1f4... drm/exynos: atomic phase 1: use drm_plane_helper_update()

Maybe unhandled output of merge, could you fix it?


[PATCH v7 02/13] drm/exynos: atomic phase 1: use drm_plane_helper_update()

2015-05-27 Thread Gustavo Padovan
Hi Joonyoung,

2015-05-27 Joonyoung Shim :

> On 05/23/2015 12:40 AM, Gustavo Padovan wrote:
> > From: Gustavo Padovan 
> > 
> > Rip out the check from exynos_update_plane() and create
> > exynos_check_plane() for the check phase enabling use to use
> > the atomic helpers to call our check and update phases when updating
> > planes.
> > 
> > Update all users of exynos_update_plane() accordingly to call
> > exynos_check_plane() before.
> > 
> > Signed-off-by: Gustavo Padovan 
> > Reviewed-by: Joonyoung Shim 
> > Tested-by: Tobias Jakobi y
> > ---
> >  drivers/gpu/drm/exynos/exynos_drm_crtc.c  | 23 ++
> >  drivers/gpu/drm/exynos/exynos_drm_plane.c | 40 
> > +++
> >  drivers/gpu/drm/exynos/exynos_drm_plane.h |  2 +-
> >  3 files changed, 50 insertions(+), 15 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c 
> > b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> > index 363b019..27cc450 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> > @@ -116,6 +116,7 @@ static int exynos_drm_crtc_mode_set_base(struct 
> > drm_crtc *crtc, int x, int y,
> > struct drm_framebuffer *fb = crtc->primary->fb;
> > unsigned int crtc_w;
> > unsigned int crtc_h;
> > +   int ret;
> >  
> > /* when framebuffer changing is requested, crtc's dpms should be on */
> > if (exynos_crtc->dpms > DRM_MODE_DPMS_ON) {
> > @@ -123,12 +124,17 @@ static int exynos_drm_crtc_mode_set_base(struct 
> > drm_crtc *crtc, int x, int y,
> > return -EPERM;
> > }
> >  
> > +   ret = exynos_check_plane(crtc->primary, fb);
> > +   if (ret)
> > +   return ret;
> > +
> > crtc_w = fb->width - x;
> > crtc_h = fb->height - y;
> > +   exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> > +   crtc_w, crtc_h, x << 16, y << 16,
> > +   crtc_w << 16, crtc_h << 16);
> >  
> > -   return exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> > -  crtc_w, crtc_h, x << 16, y << 16,
> > -  crtc_w << 16, crtc_h << 16);
> > +   return 0;
> >  }
> >  
> >  static void exynos_drm_crtc_disable(struct drm_crtc *crtc)
> > @@ -165,7 +171,6 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc 
> > *crtc,
> >  {
> > struct drm_device *dev = crtc->dev;
> > struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
> > -   struct drm_framebuffer *old_fb = crtc->primary->fb;
> > unsigned int crtc_w, crtc_h;
> > int ret;
> >  
> > @@ -184,6 +189,10 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc 
> > *crtc,
> > goto out;
> > }
> >  
> > +   ret = exynos_check_plane(crtc->primary, fb);
> > +   if (ret)
> > +   goto out;
> > +
> > ret = drm_vblank_get(dev, exynos_crtc->pipe);
> > if (ret) {
> > DRM_DEBUG("failed to acquire vblank counter\n");
> > @@ -202,6 +211,7 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc 
> > *crtc,
> > crtc->primary->fb = fb;
> > crtc_w = fb->width - crtc->x;
> > crtc_h = fb->height - crtc->y;
> > +<<< HEAD
> > ret = exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> >   crtc_w, crtc_h, crtc->x << 16, crtc->y << 16,
> >   crtc_w << 16, crtc_h << 16);
> > @@ -213,6 +223,11 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc 
> > *crtc,
> > spin_unlock_irq(>event_lock);
> > return ret;
> > }
> > +===
> > +   exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
> > +   crtc_w, crtc_h, crtc->x, crtc->y,
> > +   crtc_w, crtc_h);
> > +>>> 2f6d1f4... drm/exynos: atomic phase 1: use 
> > drm_plane_helper_update()
> 
> Maybe unhandled output of merge, could you fix it?

Sure. Fixed.

Gustavo


[PATCH v7 02/13] drm/exynos: atomic phase 1: use drm_plane_helper_update()

2015-05-22 Thread Gustavo Padovan
From: Gustavo Padovan 

Rip out the check from exynos_update_plane() and create
exynos_check_plane() for the check phase enabling use to use
the atomic helpers to call our check and update phases when updating
planes.

Update all users of exynos_update_plane() accordingly to call
exynos_check_plane() before.

Signed-off-by: Gustavo Padovan 
Reviewed-by: Joonyoung Shim 
Tested-by: Tobias Jakobi y
---
 drivers/gpu/drm/exynos/exynos_drm_crtc.c  | 23 ++
 drivers/gpu/drm/exynos/exynos_drm_plane.c | 40 +++
 drivers/gpu/drm/exynos/exynos_drm_plane.h |  2 +-
 3 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c 
b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index 363b019..27cc450 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -116,6 +116,7 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc 
*crtc, int x, int y,
struct drm_framebuffer *fb = crtc->primary->fb;
unsigned int crtc_w;
unsigned int crtc_h;
+   int ret;

/* when framebuffer changing is requested, crtc's dpms should be on */
if (exynos_crtc->dpms > DRM_MODE_DPMS_ON) {
@@ -123,12 +124,17 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc 
*crtc, int x, int y,
return -EPERM;
}

+   ret = exynos_check_plane(crtc->primary, fb);
+   if (ret)
+   return ret;
+
crtc_w = fb->width - x;
crtc_h = fb->height - y;
+   exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
+   crtc_w, crtc_h, x << 16, y << 16,
+   crtc_w << 16, crtc_h << 16);

-   return exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
-  crtc_w, crtc_h, x << 16, y << 16,
-  crtc_w << 16, crtc_h << 16);
+   return 0;
 }

 static void exynos_drm_crtc_disable(struct drm_crtc *crtc)
@@ -165,7 +171,6 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc,
 {
struct drm_device *dev = crtc->dev;
struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
-   struct drm_framebuffer *old_fb = crtc->primary->fb;
unsigned int crtc_w, crtc_h;
int ret;

@@ -184,6 +189,10 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc,
goto out;
}

+   ret = exynos_check_plane(crtc->primary, fb);
+   if (ret)
+   goto out;
+
ret = drm_vblank_get(dev, exynos_crtc->pipe);
if (ret) {
DRM_DEBUG("failed to acquire vblank counter\n");
@@ -202,6 +211,7 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc,
crtc->primary->fb = fb;
crtc_w = fb->width - crtc->x;
crtc_h = fb->height - crtc->y;
+<<< HEAD
ret = exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
  crtc_w, crtc_h, crtc->x << 16, crtc->y << 16,
  crtc_w << 16, crtc_h << 16);
@@ -213,6 +223,11 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc,
spin_unlock_irq(>event_lock);
return ret;
}
+===
+   exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
+   crtc_w, crtc_h, crtc->x, crtc->y,
+   crtc_w, crtc_h);
+>>> 2f6d1f4... drm/exynos: atomic phase 1: use drm_plane_helper_update()

return 0;

diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c 
b/drivers/gpu/drm/exynos/exynos_drm_plane.c
index b1180fb..b218b7a 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
@@ -144,21 +144,15 @@ void exynos_plane_mode_set(struct drm_plane *plane, 
struct drm_crtc *crtc,
plane->crtc = crtc;
 }

-int
+void
 exynos_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
 struct drm_framebuffer *fb, int crtc_x, int crtc_y,
 unsigned int crtc_w, unsigned int crtc_h,
 uint32_t src_x, uint32_t src_y,
 uint32_t src_w, uint32_t src_h)
 {
-
struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
struct exynos_drm_plane *exynos_plane = to_exynos_plane(plane);
-   int ret;
-
-   ret = exynos_check_plane(plane, fb);
-   if (ret < 0)
-   return ret;

exynos_plane_mode_set(plane, crtc, fb, crtc_x, crtc_y,
  crtc_w, crtc_h, src_x >> 16, src_y >> 16,
@@ -166,8 +160,6 @@ exynos_update_plane(struct drm_plane *plane, struct 
drm_crtc *crtc,

if (exynos_crtc->ops->win_commit)
exynos_crtc->ops->win_commit(exynos_crtc, exynos_plane->zpos);
-
-   return 0;
 }

 static int exynos_disable_plane(struct drm_plane *plane)
@@ -183,11 +175,37 @@ static int exynos_disable_plane(struct drm_plane *plane)
 }