<div dir="ltr">Very good. I should've added this when adding the dirtyfb flush... <div>Thanks,<div><br></div><div>Reviewed-by: Rodrigo Vivi <<a href="mailto:rodrigo.vivi@intel.com">rodrigo.vivi@intel.com</a>></div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 14, 2015 at 12:30 PM Paulo Zanoni <<a href="mailto:przanoni@gmail.com">przanoni@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Paulo Zanoni <<a href="mailto:paulo.r.zanoni@intel.com" target="_blank">paulo.r.zanoni@intel.com</a>><br>
<br>
First, an introduction. We currently have two types of GTT mmaps: the<br>
"normal" old mmap, and the WC mmap. For frontbuffer-related features<br>
that have automatic hardware tracking, only the non-WC mmap writes are<br>
detected by the hardware. Since inside the Kernel both are treated as<br>
ORIGIN_GTT, any features ignoring ORIGIN_GTT because of the hardware<br>
tracking are destined to fail.<br>
<br>
One of the special rules defined for the WC mmaps is that the user<br>
should call the dirtyfb IOCTL after he is done using the pointers, so<br>
that results in an intel_fb_obj_flush() call. The problem is that the<br>
dirtyfb is passing ORIGIN_GTT, so it is being ignored by FBC - even<br>
though the hardware tracking is not detecing the WC mmap operations.<br>
So in order to fix that without having to give up the automatic<br>
hardware tracking for GTT mmaps we transform the flush operation from<br>
dirtyfb into a special operation: ORIGIN_DIRTYFB.<br>
<br>
This commit fixes all the kms_frontbuffer_tracking subtests that<br>
contain "fbc" and "mmap-wc" in their names and are currently failing<br>
(for a total of 16 subtests).<br>
<br>
Signed-off-by: Paulo Zanoni <<a href="mailto:paulo.r.zanoni@intel.com" target="_blank">paulo.r.zanoni@intel.com</a>><br>
---<br>
 drivers/gpu/drm/i915/i915_drv.h      | 1 +<br>
 drivers/gpu/drm/i915/intel_display.c | 2 +-<br>
 2 files changed, 2 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h<br>
index cf6761c..78d21c1 100644<br>
--- a/drivers/gpu/drm/i915/i915_drv.h<br>
+++ b/drivers/gpu/drm/i915/i915_drv.h<br>
@@ -894,6 +894,7 @@ enum fb_op_origin {<br>
        ORIGIN_CPU,<br>
        ORIGIN_CS,<br>
        ORIGIN_FLIP,<br>
+       ORIGIN_DIRTYFB,<br>
 };<br>
<br>
 struct i915_fbc {<br>
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c<br>
index 6e3ba5f..cffaaf4a3 100644<br>
--- a/drivers/gpu/drm/i915/intel_display.c<br>
+++ b/drivers/gpu/drm/i915/intel_display.c<br>
@@ -14479,7 +14479,7 @@ static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb,<br>
        struct drm_i915_gem_object *obj = intel_fb->obj;<br>
<br>
        mutex_lock(&dev->struct_mutex);<br>
-       intel_fb_obj_flush(obj, false, ORIGIN_GTT);<br>
+       intel_fb_obj_flush(obj, false, ORIGIN_DIRTYFB);<br>
        mutex_unlock(&dev->struct_mutex);<br>
<br>
        return 0;<br>
--<br>
2.1.4<br>
<br>
_______________________________________________<br>
Intel-gfx mailing list<br>
<a href="mailto:Intel-gfx@lists.freedesktop.org" target="_blank">Intel-gfx@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/intel-gfx" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/intel-gfx</a><br>
</blockquote></div>