From: Joonyoung Shim <jy0922.shim@samsung.com>
To: Gustavo Padovan <gustavo@padovan.org>, linux-samsung-soc@vger.kernel.org
Cc: tjakobi@math.uni-bielefeld.de,
Gustavo Padovan <gustavo.padovan@collabora.co.uk>,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v8 02/14] drm/exynos: atomic phase 1: use drm_plane_helper_update()
Date: Thu, 28 May 2015 17:24:26 +0900 [thread overview]
Message-ID: <5566D0BA.9070006@samsung.com> (raw)
In-Reply-To: <1432760183-4342-3-git-send-email-gustavo@padovan.org>
On 05/28/2015 05:56 AM, Gustavo Padovan wrote:
> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
>
> 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 <gustavo.padovan@collabora.co.uk>
> Reviewed-by: Joonyoung Shim <jy0922.shim@samsung.com>
> Tested-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>y
> ---
> drivers/gpu/drm/exynos/exynos_drm_crtc.c | 31 ++++++++++++------------
> drivers/gpu/drm/exynos/exynos_drm_plane.c | 40 +++++++++++++++++++++++--------
> drivers/gpu/drm/exynos/exynos_drm_plane.h | 2 +-
> 3 files changed, 47 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> index 363b019..ba44c9b 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,17 +211,9 @@ 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;
> - 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);
> - if (ret) {
> - crtc->primary->fb = old_fb;
> - spin_lock_irq(&dev->event_lock);
> - exynos_crtc->event = NULL;
> - drm_vblank_put(dev, exynos_crtc->pipe);
> - spin_unlock_irq(&dev->event_lock);
> - return 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);
>
> 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)
> }
>
> static struct drm_plane_funcs exynos_plane_funcs = {
> - .update_plane = exynos_update_plane,
> + .update_plane = drm_plane_helper_update,
> .disable_plane = exynos_disable_plane,
> .destroy = drm_plane_cleanup,
> };
>
> +static int exynos_plane_atomic_check(struct drm_plane *plane,
> + struct drm_plane_state *state)
> +{
> + return exynos_check_plane(plane, state->fb);
> +}
> +
> +static void exynos_plane_atomic_update(struct drm_plane *plane,
> + struct drm_plane_state *old_state)
> +{
> + struct drm_plane_state *state = plane->state;
> +
> + if (!state->crtc)
> + return;
> +
> + exynos_update_plane(plane, state->crtc, state->fb,
> + state->crtc_x, state->crtc_y,
> + state->crtc_w, state->crtc_h,
> + state->src_x >> 16, state->src_y >> 16,
> + state->src_w >> 16, state->src_h >> 16);
should be
+ state->src_x, state->src_y,
+ state->src_w, state->src_h);
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2015-05-28 8:24 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-27 20:56 [PATCH v8 00/14] drm/exynos: atomic modesetting support Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 01/14] drm/exynos: fix source data argument for plane Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 02/14] drm/exynos: atomic phase 1: use drm_plane_helper_update() Gustavo Padovan
2015-05-28 8:24 ` Joonyoung Shim [this message]
2015-05-27 20:56 ` [PATCH v8 03/14] drm/exynos: atomic phase 1: use drm_plane_helper_disable() Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 04/14] drm/exynos: atomic phase 1: add .mode_set_nofb() callback Gustavo Padovan
2015-05-28 8:24 ` Joonyoung Shim
2015-05-29 6:21 ` Joonyoung Shim
2015-05-27 20:56 ` [PATCH v8 05/14] drm/exynos: atomic phase 2: wire up state reset(), duplicate() and destroy() Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 06/14] drm/exynos: atomic phase 2: keep track of framebuffer pointer Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 07/14] drm/exynos: atomic phase 3: atomic updates of planes Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 08/14] drm/exynos: atomic phase 3: use atomic .set_config helper Gustavo Padovan
2015-05-28 8:25 ` Joonyoung Shim
2015-05-27 20:56 ` [PATCH v8 09/14] drm/exynos: atomic phase 3: convert page flips Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 10/14] drm/exynos: remove exported functions from exynos_drm_plane Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 11/14] drm/exynos: don't disable unused functions at init Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 12/14] drm/exynos: move exynos_drm_crtc_disable() Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 13/14] drm/exynos: atomic dpms support Gustavo Padovan
2015-05-27 20:56 ` [PATCH v8 14/14] drm/exynos: remove unnecessary calls to disable_plane() Gustavo Padovan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5566D0BA.9070006@samsung.com \
--to=jy0922.shim@samsung.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gustavo.padovan@collabora.co.uk \
--cc=gustavo@padovan.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=tjakobi@math.uni-bielefeld.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.