From: Joonyoung Shim <jy0922.shim@samsung.com>
To: Inki Dae <inki.dae@samsung.com>
Cc: kyungmin.park@samsung.com, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 10/13] drm/exynos: update crtc to plane safely
Date: Mon, 20 Aug 2012 10:25:50 +0900 [thread overview]
Message-ID: <5031921E.4000600@samsung.com> (raw)
In-Reply-To: <1345197059-25583-11-git-send-email-inki.dae@samsung.com>
On 08/17/2012 06:50 PM, Inki Dae wrote:
> if old_crtc isn't same as encoder->crtc then it means that
> user changed crtc id to another one so a plane to old_crtc
> should be disabled so that current plane can be updated safely
> and plane->crtc should be set to new crtc(encoder->crtc)
>
> Signed-off-by: Inki Dae <inki.dae@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> ---
> drivers/gpu/drm/exynos/exynos_drm_encoder.c | 59 +++++++++++++++++++++++++-
> 1 files changed, 56 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_encoder.c b/drivers/gpu/drm/exynos/exynos_drm_encoder.c
> index a562a94..7bcace8 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_encoder.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_encoder.c
> @@ -44,6 +44,7 @@
> * @dpms: store the encoder dpms value.
> */
> struct exynos_drm_encoder {
> + struct drm_crtc *old_crtc;
> struct drm_encoder drm_encoder;
> struct exynos_drm_manager *manager;
> int dpms;
> @@ -106,22 +107,74 @@ exynos_drm_encoder_mode_fixup(struct drm_encoder *encoder,
> return true;
> }
>
> +static void disable_plane_to_crtc(struct drm_device *dev,
> + struct drm_crtc *old_crtc,
> + struct drm_crtc *new_crtc)
> +{
> + struct drm_plane *plane;
> +
> + /*
> + * if old_crtc isn't same as encoder->crtc then it means that
> + * user changed crtc id to another one so the plane to old_crtc
> + * should be disabled and plane->crtc should be set to new_crtc
> + * (encoder->crtc)
> + */
> + list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> + if (plane->crtc == old_crtc) {
> + /*
> + * do not change below call order.
> + *
> + * plane->funcs->disable_plane call checks
> + * if encoder->crtc is same as plane->crtc and if same
> + * then overlay_ops->disable callback will be called
> + * to diasble current hw overlay so plane->crtc should
> + * have new_crtc because new_crtc was set to
> + * encoder->crtc in advance.
> + */
> + plane->crtc = new_crtc;
> + plane->funcs->disable_plane(plane);
> + }
> + }
> +}
> +
> static void exynos_drm_encoder_mode_set(struct drm_encoder *encoder,
> struct drm_display_mode *mode,
> struct drm_display_mode *adjusted_mode)
> {
> struct drm_device *dev = encoder->dev;
> struct drm_connector *connector;
> - struct exynos_drm_manager *manager = exynos_drm_get_manager(encoder);
> - struct exynos_drm_manager_ops *manager_ops = manager->ops;
> + struct exynos_drm_manager *manager;
> + struct exynos_drm_manager_ops *manager_ops;
>
> DRM_DEBUG_KMS("%s\n", __FILE__);
>
> list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
> - if (connector->encoder == encoder)
> + if (connector->encoder == encoder) {
> + struct exynos_drm_encoder *exynos_encoder;
> +
> + exynos_encoder = to_exynos_encoder(encoder);
Does needs to do this in for statement?
> +
> + if (exynos_encoder->old_crtc != encoder->crtc &&
> + exynos_encoder->old_crtc) {
> +
> + /*
> + * disable a plane to old crtc and change
> + * crtc of the plane to new one.
> + */
> + disable_plane_to_crtc(dev,
> + exynos_encoder->old_crtc,
> + encoder->crtc);
> + }
> +
> + manager = exynos_drm_get_manager(encoder);
> + manager_ops = manager->ops;
Does needs to do this in for statement?
> +
> if (manager_ops && manager_ops->mode_set)
> manager_ops->mode_set(manager->dev,
> adjusted_mode);
> +
> + exynos_encoder->old_crtc = encoder->crtc;
> + }
> }
> }
>
next prev parent reply other threads:[~2012-08-20 1:26 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-17 9:50 [PATCH 00/13] updated exynos-drm-fixes Inki Dae
2012-08-17 9:50 ` [PATCH 01/13] drm/exynos: added device object to subdrv's remove callback as argument Inki Dae
2012-08-17 9:50 ` [PATCH 02/13] drm/exynos: separated subdrv->probe call and encoder/connector creation Inki Dae
2012-08-20 1:11 ` Joonyoung Shim
2012-08-20 1:52 ` InKi Dae
2012-08-20 1:59 ` Joonyoung Shim
2012-08-20 4:31 ` InKi Dae
2012-08-20 4:42 ` Joonyoung Shim
2012-08-20 5:43 ` InKi Dae
2012-08-17 9:50 ` [PATCH 03/13] drm/exynos: fixed page align bug Inki Dae
2012-08-17 9:50 ` [PATCH 04/13] drm/exynos: use empty function instead of drm_helper_connector_dpms Inki Dae
2012-08-20 1:12 ` Joonyoung Shim
2012-08-20 2:50 ` InKi Dae
2012-08-17 9:50 ` [PATCH 05/13] drm/exynos: removed exynos_drm_encoder_dpms call Inki Dae
2012-08-20 1:14 ` Joonyoung Shim
2012-08-20 2:00 ` InKi Dae
2012-08-17 9:50 ` [PATCH 06/13] drm/exynos: separeated fimd_power_on into some parts Inki Dae
2012-08-17 9:50 ` [PATCH 07/13] drm/exynos: control display power at connector module Inki Dae
2012-08-17 9:50 ` [PATCH 08/13] drm/exynos: make sure that hardware overlay for fimd is disabled Inki Dae
2012-08-20 2:09 ` Joonyoung Shim
2012-08-17 9:50 ` [PATCH 09/13] drm/exynos: check NV12M format specific to Exynos properly Inki Dae
2012-08-20 1:17 ` Joonyoung Shim
2012-08-20 2:23 ` InKi Dae
2012-08-20 4:52 ` Joonyoung Shim
2012-08-20 5:11 ` InKi Dae
2012-08-20 5:15 ` InKi Dae
2012-08-20 5:22 ` Joonyoung Shim
2012-08-20 5:45 ` InKi Dae
2012-08-17 9:50 ` [PATCH 10/13] drm/exynos: update crtc to plane safely Inki Dae
2012-08-20 1:25 ` Joonyoung Shim [this message]
2012-08-17 9:50 ` [PATCH 11/13] drm/exynos: changed context name of hdmi and mixer Inki Dae
2012-08-20 1:27 ` Joonyoung Shim
2012-08-20 2:29 ` InKi Dae
2012-08-20 4:55 ` Joonyoung Shim
2012-08-20 6:17 ` InKi Dae
2012-08-20 6:36 ` Joonyoung Shim
2012-08-20 6:51 ` InKi Dae
2012-08-20 7:30 ` InKi Dae
2012-08-17 9:50 ` [PATCH 12/13] drm/exynos: fixed build warning Inki Dae
2012-08-17 9:50 ` [PATCH 13/13] drm/exynos: make sure that hardware overlay for hdmi is disabled Inki Dae
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=5031921E.4000600@samsung.com \
--to=jy0922.shim@samsung.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=inki.dae@samsung.com \
--cc=kyungmin.park@samsung.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox