All of lore.kernel.org
 help / color / mirror / Atom feed
* Responsiveness Changes to i915 Driver
@ 2014-08-14 23:52 Wilde, Martin
  2014-08-15  6:26 ` Chris Wilson
  0 siblings, 1 reply; 8+ messages in thread
From: Wilde, Martin @ 2014-08-14 23:52 UTC (permalink / raw)
  To: intel-gfx; +Cc: Cheng, Anton

[-- Attachment #1: Type: text/plain, Size: 2158 bytes --]

Greetings,

I am submitting the below changes to i915 Gfx driver to support resume time Responsiveness measurements.  These changes parallel the work already done in the IVB Windows Gfx driver.  These changes in addition to other OTS scripts (suspend_resume) allow tracking of what is referred to as the “B2I” or “Button To Image” time of the platform.  The shorter this time, the more responsiveness the platform is viewed by the end user.  Panel selection is an important factor in providing a more responsive system.  Note there is no dependency on other scripts.  The changes are standalone.


  *   Display the current T1_T3 value.  This is used to verify that the timing set in the VBT is correct.  We have seen many instances where the value is not set correctly for the panel and the resume time is longer than necessary (e.g. 500ms T3 versus 200ms T3).
  *   Print the time when the first page flip occurs.  This is when the user first sees the desktop displayed from resume.  While this measurement could be done by other methods, this is the actual time that the desktop manager/framebuffer makes the driver request and the Gfx driver performs the action.  Thus any layering software added can be correlated to increases in this time.

To support the latter (first page flip), I added a new ftrace called “trace_i915_resume”.  I looked at the existing page flip trace message and that one is designed for every page flip.  I did not want to convolute it with the one time flip trace on resume.  I used a trace message instead of a printk to reduce any performance impacts of using a printk.  Additionally printk is not reliable of when the message actually appears in the kernel log.

The attached patch file for the 3.10 Linux Kernel (currently used by the Chromium/Chrome OS project for a BayTrail platform) has the small number of changes to a few files in the i915 directory.  The changes are minimal and have no impact in performance (that I have seen).

I can also make the changes to the 3.15 Linux Kernel if required.

Let me know of any additional questions

Regards,

-martin

PCCG GED Responsiveness Technologist


[-- Attachment #2: i915.patch --]
[-- Type: application/octet-stream, Size: 3912 bytes --]

diff -rupN src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_drv.c src/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_drv.c
--- src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_drv.c	2014-08-14 14:21:38.683319040 -0700
+++ src/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_drv.c	2014-07-29 11:01:44.829968341 -0700
@@ -615,6 +615,8 @@ static int __i915_drm_thaw(struct drm_de
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	int error = 0;
 
+	dev_priv->trace_page_flip = true; // we are resuming, trace first flip
+
 	intel_uncore_early_sanitize(dev);
 
 	intel_uncore_sanitize(dev);
diff -rupN src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_drv.h src/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_drv.h
--- src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_drv.h	2014-08-14 14:21:47.687318738 -0700
+++ src/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_drv.h	2014-07-29 11:01:44.829968341 -0700
@@ -1509,6 +1509,7 @@ typedef struct drm_i915_private {
 	/* Old ums support infrastructure, same warning applies. */
 	struct i915_ums_state ums;
 	
+	bool trace_page_flip; // First page flip after S3 trace flag
 } drm_i915_private_t;
 
 static inline struct drm_i915_private *to_i915(const struct drm_device *dev)
diff -rupN src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_trace.h src/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_trace.h
--- src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_trace.h	2014-07-22 14:51:27.985740748 -0700
+++ src/third_party/kernel/3.10/drivers/gpu/drm/i915/i915_trace.h	2014-08-05 14:28:45.889319275 -0700
@@ -510,6 +510,22 @@ TRACE_EVENT(intel_gpu_freq_change,
 	    TP_printk("new_freq=%u", __entry->freq)
 );
 
+TRACE_EVENT(i915_resume,
+	    TP_PROTO(const char *action, bool start),
+	    TP_ARGS(action, start),
+
+	    TP_STRUCT__entry(
+			     __field(const char *, action)
+			     __field(bool, start)
+			     ),
+
+	    TP_fast_assign(
+			   __entry->action = action;
+			   __entry->start = start;
+			   ),
+
+	    TP_printk("%s %s", __entry->action, (__entry->start)?"begin":"end")
+);
 #endif /* _I915_TRACE_H_ */
 
 /* This part must be outside protection */
diff -rupN src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/intel_display.c src/third_party/kernel/3.10/drivers/gpu/drm/i915/intel_display.c
--- src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/intel_display.c	2014-08-14 14:22:31.739317265 -0700
+++ src/third_party/kernel/3.10/drivers/gpu/drm/i915/intel_display.c	2014-08-14 11:58:35.743606181 -0700
@@ -8358,6 +8358,11 @@ static int intel_crtc_page_flip(struct d
 
 	trace_i915_flip_request(intel_crtc->plane, obj);
 
+	if (dev_priv->trace_page_flip) {
+		dev_priv->trace_page_flip = false; // reset to only track once
+		trace_i915_resume("first page flip after resume", false);
+	}
+
 	return 0;
 
 cleanup_pending:
@@ -9805,6 +9810,8 @@ static void intel_crtc_init(struct drm_d
 	struct intel_crtc *intel_crtc;
 	int i;
 
+	dev_priv->trace_page_flip = false; // reset S3 page flip to no trace
+
 	intel_crtc = kzalloc(sizeof(*intel_crtc), GFP_KERNEL);
 	if (intel_crtc == NULL)
 		return;
diff -rupN src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/intel_dp.c src/third_party/kernel/3.10/drivers/gpu/drm/i915/intel_dp.c
--- src.org/third_party/kernel/3.10/drivers/gpu/drm/i915/intel_dp.c	2014-08-14 14:24:45.655312785 -0700
+++ src/third_party/kernel/3.10/drivers/gpu/drm/i915/intel_dp.c	2014-08-14 11:57:30.203608374 -0700
@@ -3528,6 +3528,7 @@ intel_dp_init_panel_power_sequencer(stru
 	intel_dp->panel_power_cycle_delay = get_delay(t11_t12);
 #undef get_delay
 
+	printk(KERN_INFO "i915: eDP T3 Value: %d\n", intel_dp->panel_power_up_delay);
 	DRM_DEBUG_KMS("panel power up delay %d, power down delay %d, power cycle delay %d\n",
 		      intel_dp->panel_power_up_delay, intel_dp->panel_power_down_delay,
 		      intel_dp->panel_power_cycle_delay);

[-- Attachment #3: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-08-27 20:34 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-14 23:52 Responsiveness Changes to i915 Driver Wilde, Martin
2014-08-15  6:26 ` Chris Wilson
2014-08-19 21:33   ` Wilde, Martin
2014-08-20  9:36     ` Jani Nikula
2014-08-20 18:03       ` Wilde, Martin
2014-08-20 18:12         ` Chris Wilson
2014-08-21  7:26         ` Jani Nikula
2014-08-27 20:33           ` Wilde, Martin

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.