All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel-/w4YWyX8dFk@public.gmane.org>
To: Mark Zhang <markz-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Cc: thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	daniel-/w4YWyX8dFk@public.gmane.org,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: Re: [PATCH v2 12/12] JUST FOR TEST: Add one-shot trigger to update display
Date: Wed, 1 Jul 2015 10:36:17 +0200	[thread overview]
Message-ID: <20150701083617.GF30960@phenom.ffwll.local> (raw)
In-Reply-To: <1435738915-31973-13-git-send-email-markz-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>

On Wed, Jul 01, 2015 at 04:21:55PM +0800, Mark Zhang wrote:
> This HACK adds a workqueue to refresh the display periodically.
> This is used just for testing.

->dirty is the drm hook you're looking for, it's meant to flush out any
frontbuffer rendering. Generic kms clients using the dumb buffers (e.g.
fedora boot splash) use this already.

And of course you need to upload a new frame every time an (atomic) flip
happens too, but I guess you have that already. No need at all for a
periodic upload hack like this.

Cheers, Daniel

> 
> Signed-off-by: Mark Zhang <markz-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
>  drivers/gpu/drm/tegra/dc.c  |   37 +++++++++++++++++++++++++++++++++++++
>  drivers/gpu/drm/tegra/drm.h |    1 +
>  2 files changed, 38 insertions(+)
> 
> diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
> index 24a91613c4f5..4381691c73f7 100644
> --- a/drivers/gpu/drm/tegra/dc.c
> +++ b/drivers/gpu/drm/tegra/dc.c
> @@ -1296,6 +1296,8 @@ static void tegra_crtc_mode_set_nofb(struct drm_crtc *crtc)
>  		value &= ~DISP_CTRL_MODE_MASK;
>  		value |= DISP_CTRL_MODE_NC_DISPLAY;
>  		tegra_dc_writel(dc, value, DC_CMD_DISPLAY_COMMAND);
> +
> +		schedule_work(&dc->one_shot_trigger);
>  	} else {
>  		value = tegra_dc_readl(dc, DC_CMD_DISPLAY_COMMAND);
>  		value &= ~DISP_CTRL_MODE_MASK;
> @@ -1958,6 +1960,40 @@ static void tegra_dc_one_shot_work(struct work_struct *work)
>  	drm_modeset_unlock_all(drm);
>  }
>  
> +static void tegra_dc_one_shot_trigger(struct work_struct *work)
> +{
> +	struct tegra_dc *dc;
> +	struct drm_connector *connector;
> +	struct drm_device *drm;
> +	unsigned long update_mask = GENERAL_ACT_REQ | NC_HOST_TRIG;
> +	static int first_trigger = 1;
> +
> +	dc = container_of(work, struct tegra_dc, one_shot_trigger);
> +	drm = dc->base.dev;
> +	msleep(5000);
> +
> +	if (first_trigger) {
> +		dev_info(dc->dev, "First one-shot triggered.\n");
> +		tegra_dc_writel(dc, update_mask, DC_CMD_STATE_CONTROL);
> +		first_trigger = 0;
> +		schedule_work(&dc->one_shot_trigger);
> +		return;
> +	}
> +
> +	dev_info(dc->dev, "one-shot: Wakeup dc/dsi/panel.\n");
> +	drm_modeset_lock_all(drm);
> +	list_for_each_entry(connector, &drm->mode_config.connector_list, head) {
> +		if (connector->funcs->dpms)
> +			connector->funcs->dpms(connector,
> +						DRM_MODE_DPMS_STANDBY);
> +	}
> +	drm_modeset_unlock_all(drm);
> +
> +	/* Trigger the one-shot */
> +	tegra_dc_writel(dc, update_mask, DC_CMD_STATE_CONTROL);
> +	schedule_work(&dc->one_shot_trigger);
> +}
> +
>  static int tegra_dc_probe(struct platform_device *pdev)
>  {
>  	unsigned long flags = HOST1X_SYNCPT_CLIENT_MANAGED;
> @@ -1977,6 +2013,7 @@ static int tegra_dc_probe(struct platform_device *pdev)
>  	spin_lock_init(&dc->lock);
>  	INIT_LIST_HEAD(&dc->list);
>  	INIT_WORK(&dc->one_shot_work, tegra_dc_one_shot_work);
> +	INIT_WORK(&dc->one_shot_trigger, tegra_dc_one_shot_trigger);
>  	dc->dev = &pdev->dev;
>  	dc->soc = id->data;
>  
> diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
> index 00daf427c831..5d606cacb098 100644
> --- a/drivers/gpu/drm/tegra/drm.h
> +++ b/drivers/gpu/drm/tegra/drm.h
> @@ -132,6 +132,7 @@ struct tegra_dc {
>  	struct drm_pending_vblank_event *event;
>  
>  	struct work_struct one_shot_work;
> +	struct work_struct one_shot_trigger;
>  
>  	const struct tegra_dc_soc_info *soc;
>  
> -- 
> 1.7.9.5
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

  parent reply	other threads:[~2015-07-01  8:36 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-01  8:21 [PATCH v2 00/12] Tegra: Add DC one-shot support Mark Zhang
     [not found] ` <1435738915-31973-1-git-send-email-markz-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-07-01  8:21   ` [PATCH v2 01/12] drm: panel: Add a new private mode flag: DRM_PANEL_FLAG_PREFER_ONE_SHOT Mark Zhang
2015-07-01  8:54     ` Daniel Vetter
     [not found]       ` <20150701085437.GB24055-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2015-07-01 13:01         ` Mark Zhang
2015-07-01  8:21   ` [PATCH v2 02/12] drm: panel: Add one-shot flag to Sharp lq101r1sx01 driver Mark Zhang
2015-07-01  8:21   ` [PATCH v2 03/12] drm: panel: Turn on TE(Tearing Effect) on Sharp lq101r1sx01 Mark Zhang
2015-07-01  8:21   ` [PATCH v2 04/12] drm: panel: Add DRM panel private mode flag: TE polarity Mark Zhang
2015-07-01  8:21   ` [PATCH v2 05/12] drm: panel: Set TE polarity flag in Sharp lq101r1sx01 driver Mark Zhang
2015-07-01  8:21   ` [PATCH v2 06/12] drm/tegra: Set NC(Non-contiguous) mode to dc for one-shot Mark Zhang
2015-07-01  8:21   ` [PATCH v2 07/12] drm/panel: Add panel func: idle/busy Mark Zhang
2015-07-01  8:21   ` [PATCH v2 08/12] drm: dsi: Add "enter idle" & "exit idle" dcs functions Mark Zhang
2015-07-01  9:08     ` Varka Bhadram
     [not found]       ` <5593AE18.2070306-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-07-01  9:17         ` Mark Zhang
2015-07-01  8:21   ` [PATCH v2 09/12] drm: panel: Add idle/busy in Sharp lq101r1sx01 driver Mark Zhang
2015-07-01  8:21   ` [PATCH v2 10/12] drm/tegra: Suspend dc/dsi/panel in one-shot mode Mark Zhang
     [not found]     ` <1435738915-31973-11-git-send-email-markz-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-07-01  9:00       ` Daniel Vetter
     [not found]         ` <20150701090005.GC24055-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2015-07-01  9:03           ` Mark Zhang
2015-07-01  8:21   ` [PATCH v2 11/12] drm/tegra: dsi: Set connector DPMS state when enable/disable Mark Zhang
2015-07-01  8:21   ` [PATCH v2 12/12] JUST FOR TEST: Add one-shot trigger to update display Mark Zhang
     [not found]     ` <1435738915-31973-13-git-send-email-markz-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-07-01  8:36       ` Daniel Vetter [this message]
     [not found]         ` <20150701083617.GF30960-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2015-07-01  8:46           ` Daniel Vetter
     [not found]             ` <20150701084511.GA24055-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2015-07-01 12:51               ` Mark Zhang
2015-07-01  9:01           ` Mark Zhang
     [not found]             ` <5593AC80.10801-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-07-01 10:34               ` Daniel Vetter
     [not found]                 ` <20150701103457.GD24055-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2015-07-01 12:43                   ` Mark Zhang
     [not found]                     ` <5593E055.5050305-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-07-01 14:55                       ` Daniel Vetter
     [not found]                         ` <20150701145535.GW23343-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2015-07-03  7:57                           ` Mark Zhang
     [not found]                             ` <55964083.60001-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-07-03  8:03                               ` Daniel Vetter
     [not found]                                 ` <20150703080328.GI23343-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2015-07-03  8:05                                   ` Mark Zhang

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=20150701083617.GF30960@phenom.ffwll.local \
    --to=daniel-/w4ywyx8dfk@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=markz-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    /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.