linux-tegra.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mark Zhang <markz-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
To: Daniel Vetter <daniel-/w4YWyX8dFk@public.gmane.org>
Cc: thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@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 17:01:52 +0800	[thread overview]
Message-ID: <5593AC80.10801@nvidia.com> (raw)
In-Reply-To: <20150701083617.GF30960-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>

On 07/01/2015 04:36 PM, Daniel Vetter wrote:
> 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.
> 

Oh... I did a grep in drm source and are you talking about
"drm_framebuffer_funcs->dirty"? Yeah, that should work for me.. but that
requires userspace sending IOCTL to trigger, right? Honestly I'm lazy so
I created this HACK so that I don't need userspace to test.

> 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.
> 

Yep. Thanks Daniel.

Mark
> 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
>>
> 

  parent reply	other threads:[~2015-07-01  9:01 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
     [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 [this message]
     [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=5593AC80.10801@nvidia.com \
    --to=markz-ddmlm1+adcrqt0dzr+alfa@public.gmane.org \
    --cc=daniel-/w4YWyX8dFk@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).