intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [Intel-gfx] [PATCH CI 1/4] drm: Add function to convert rect in 16.16 fixed format to regular format
@ 2021-01-04 20:56 José Roberto de Souza
  2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area José Roberto de Souza
                   ` (5 more replies)
  0 siblings, 6 replies; 17+ messages in thread
From: José Roberto de Souza @ 2021-01-04 20:56 UTC (permalink / raw)
  To: intel-gfx; +Cc: dri-devel

Much more clear to read one function call than four lines doing this
conversion.

v7:
- function renamed
- calculating width and height before truncate
- inlined

v10:
- renamed parameters from source and destination to src and dst
to match sister functions

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: dri-devel@lists.freedesktop.org
Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
 include/drm/drm_rect.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/include/drm/drm_rect.h b/include/drm/drm_rect.h
index e7f4d24cdd00..39f2deee709c 100644
--- a/include/drm/drm_rect.h
+++ b/include/drm/drm_rect.h
@@ -206,6 +206,19 @@ static inline bool drm_rect_equals(const struct drm_rect *r1,
 		r1->y1 == r2->y1 && r1->y2 == r2->y2;
 }
 
+/**
+ * drm_rect_fp_to_int - Convert a rect in 16.16 fixed point form to int form.
+ * @dst: rect to be stored the converted value
+ * @src: rect in 16.16 fixed point form
+ */
+static inline void drm_rect_fp_to_int(struct drm_rect *dst,
+				      const struct drm_rect *src)
+{
+	drm_rect_init(dst, src->x1 >> 16, src->y1 >> 16,
+		      drm_rect_width(src) >> 16,
+		      drm_rect_height(src) >> 16);
+}
+
 bool drm_rect_intersect(struct drm_rect *r, const struct drm_rect *clip);
 bool drm_rect_clip_scaled(struct drm_rect *src, struct drm_rect *dst,
 			  const struct drm_rect *clip);
-- 
2.30.0

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

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

* [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-01-04 20:56 [Intel-gfx] [PATCH CI 1/4] drm: Add function to convert rect in 16.16 fixed format to regular format José Roberto de Souza
@ 2021-01-04 20:56 ` José Roberto de Souza
  2021-07-20 15:09   ` Daniel Vetter
  2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 3/4] drm/i915/display: Split and export main surface calculation from skl_check_main_surface() José Roberto de Souza
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 17+ messages in thread
From: José Roberto de Souza @ 2021-01-04 20:56 UTC (permalink / raw)
  To: intel-gfx

Now using plane damage clips property to calcualte the damaged area.
Selective fetch only supports one region to be fetched so software
needs to calculate a bounding box around all damage clips.

Now that we are not complete fetching each plane, there is another
loop needed as all the plane areas that intersect with the pipe
damaged area needs to be fetched from memory so the complete blending
of all planes can happen.

v2:
- do not shifting new_plane_state->uapi.dst only src is in 16.16 format

v4:
- setting plane selective fetch area using the whole pipe damage area
- mark the whole plane area damaged if plane visibility or alpha
changed

v5:
- taking in consideration src.y1 in the damage coordinates
- adding to the pipe damaged area planes that were visible but are
invisible in the new state

v6:
- consider old state plane coordinates when visibility changes or it
moved to calculate damaged area
- remove from damaged area the portion not in src clip

v7:
- intersec every damage clip with src to minimize damaged area

v8:
- adjust pipe_damaged area to 4 lines grouping
- adjust calculation now that is understood that uapi.src is the
framebuffer coordinates that plane will start to fetch from

v9:
- Only add plane dst or src to damaged_area if visible
- Early skip plane damage calculation if it was not visible in old and
new state

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
 drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
 1 file changed, 99 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index d9a395c486d3..f5b9519b3756 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
 	if (clip->y1 == -1)
 		goto exit;
 
+	drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
+
 	val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
 	val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
-	val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
+	val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
 exit:
 	crtc_state->psr2_man_track_ctl = val;
 }
@@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
 				struct intel_crtc *crtc)
 {
 	struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
+	struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
 	struct intel_plane_state *new_plane_state, *old_plane_state;
-	struct drm_rect pipe_clip = { .y1 = -1 };
 	struct intel_plane *plane;
 	bool full_update = false;
 	int i, ret;
@@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
 	if (ret)
 		return ret;
 
+	/*
+	 * Calculate minimal selective fetch area of each plane and calculate
+	 * the pipe damaged area.
+	 * In the next loop the plane selective fetch area will actually be set
+	 * using whole pipe damaged area.
+	 */
 	for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
 					     new_plane_state, i) {
-		struct drm_rect *sel_fetch_area, temp;
+		struct drm_rect src, damaged_area = { .y1 = -1 };
+		struct drm_mode_rect *damaged_clips;
+		u32 num_clips, j;
 
 		if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
 			continue;
 
+		if (!new_plane_state->uapi.visible &&
+		    !old_plane_state->uapi.visible)
+			continue;
+
 		/*
 		 * TODO: Not clear how to handle planes with negative position,
 		 * also planes are not updated if they have a negative X
@@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
 			break;
 		}
 
-		if (!new_plane_state->uapi.visible)
-			continue;
+		num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
 
 		/*
-		 * For now doing a selective fetch in the whole plane area,
-		 * optimizations will come in the future.
+		 * If visibility or plane moved, mark the whole plane area as
+		 * damaged as it needs to be complete redraw in the new and old
+		 * position.
 		 */
-		sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
-		sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
-		sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
+		if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
+		    !drm_rect_equals(&new_plane_state->uapi.dst,
+				     &old_plane_state->uapi.dst)) {
+			if (old_plane_state->uapi.visible) {
+				damaged_area.y1 = old_plane_state->uapi.dst.y1;
+				damaged_area.y2 = old_plane_state->uapi.dst.y2;
+				clip_area_update(&pipe_clip, &damaged_area);
+			}
+
+			if (new_plane_state->uapi.visible) {
+				damaged_area.y1 = new_plane_state->uapi.dst.y1;
+				damaged_area.y2 = new_plane_state->uapi.dst.y2;
+				clip_area_update(&pipe_clip, &damaged_area);
+			}
+			continue;
+		} else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
+			   (!num_clips &&
+			    new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
+			/*
+			 * If the plane don't have damaged areas but the
+			 * framebuffer changed or alpha changed, mark the whole
+			 * plane area as damaged.
+			 */
+			damaged_area.y1 = new_plane_state->uapi.dst.y1;
+			damaged_area.y2 = new_plane_state->uapi.dst.y2;
+			clip_area_update(&pipe_clip, &damaged_area);
+			continue;
+		}
+
+		drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
+		damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
+
+		for (j = 0; j < num_clips; j++) {
+			struct drm_rect clip;
+
+			clip.x1 = damaged_clips[j].x1;
+			clip.y1 = damaged_clips[j].y1;
+			clip.x2 = damaged_clips[j].x2;
+			clip.y2 = damaged_clips[j].y2;
+			if (drm_rect_intersect(&clip, &src))
+				clip_area_update(&damaged_area, &clip);
+		}
 
-		temp = *sel_fetch_area;
-		temp.y1 += new_plane_state->uapi.dst.y1;
-		temp.y2 += new_plane_state->uapi.dst.y2;
-		clip_area_update(&pipe_clip, &temp);
+		if (damaged_area.y1 == -1)
+			continue;
+
+		damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
+		damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
+		clip_area_update(&pipe_clip, &damaged_area);
+	}
+
+	if (full_update)
+		goto skip_sel_fetch_set_loop;
+
+	/* It must be aligned to 4 lines */
+	pipe_clip.y1 -= pipe_clip.y1 % 4;
+	if (pipe_clip.y2 % 4)
+		pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
+
+	/*
+	 * Now that we have the pipe damaged area check if it intersect with
+	 * every plane, if it does set the plane selective fetch area.
+	 */
+	for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
+					     new_plane_state, i) {
+		struct drm_rect *sel_fetch_area, inter;
+
+		if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
+		    !new_plane_state->uapi.visible)
+			continue;
+
+		inter = pipe_clip;
+		if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
+			continue;
+
+		sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
+		sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
+		sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
 	}
 
+skip_sel_fetch_set_loop:
 	psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
 	return 0;
 }
-- 
2.30.0

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

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

* [Intel-gfx] [PATCH CI 3/4] drm/i915/display: Split and export main surface calculation from skl_check_main_surface()
  2021-01-04 20:56 [Intel-gfx] [PATCH CI 1/4] drm: Add function to convert rect in 16.16 fixed format to regular format José Roberto de Souza
  2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area José Roberto de Souza
@ 2021-01-04 20:56 ` José Roberto de Souza
  2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 4/4] drm/i915/display/psr: Program plane's calculated offset to plane SF register José Roberto de Souza
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 17+ messages in thread
From: José Roberto de Souza @ 2021-01-04 20:56 UTC (permalink / raw)
  To: intel-gfx

The calculation the offsets of the main surface will be needed by PSR2
selective fetch code so here splitting and exporting it.
No functional changes were done here.

v3: Rebased

Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Tested-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 78 ++++++++++++--------
 drivers/gpu/drm/i915/display/intel_display.h |  2 +
 2 files changed, 51 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index f2c48e5cdb43..0189d379a55e 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -3752,33 +3752,19 @@ static int intel_plane_max_height(struct intel_plane *plane,
 		return INT_MAX;
 }
 
-static int skl_check_main_surface(struct intel_plane_state *plane_state)
+int skl_calc_main_surface_offset(const struct intel_plane_state *plane_state,
+				 int *x, int *y, u32 *offset)
 {
 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
 	const struct drm_framebuffer *fb = plane_state->hw.fb;
-	unsigned int rotation = plane_state->hw.rotation;
-	int x = plane_state->uapi.src.x1 >> 16;
-	int y = plane_state->uapi.src.y1 >> 16;
-	int w = drm_rect_width(&plane_state->uapi.src) >> 16;
-	int h = drm_rect_height(&plane_state->uapi.src) >> 16;
-	int min_width = intel_plane_min_width(plane, fb, 0, rotation);
-	int max_width = intel_plane_max_width(plane, fb, 0, rotation);
-	int max_height = intel_plane_max_height(plane, fb, 0, rotation);
-	int aux_plane = intel_main_to_aux_plane(fb, 0);
-	u32 aux_offset = plane_state->color_plane[aux_plane].offset;
-	u32 alignment, offset;
+	const int aux_plane = intel_main_to_aux_plane(fb, 0);
+	const u32 aux_offset = plane_state->color_plane[aux_plane].offset;
+	const u32 alignment = intel_surf_alignment(fb, 0);
+	const int w = drm_rect_width(&plane_state->uapi.src) >> 16;
 
-	if (w > max_width || w < min_width || h > max_height) {
-		drm_dbg_kms(&dev_priv->drm,
-			    "requested Y/RGB source size %dx%d outside limits (min: %dx1 max: %dx%d)\n",
-			    w, h, min_width, max_width, max_height);
-		return -EINVAL;
-	}
-
-	intel_add_fb_offsets(&x, &y, plane_state, 0);
-	offset = intel_plane_compute_aligned_offset(&x, &y, plane_state, 0);
-	alignment = intel_surf_alignment(fb, 0);
+	intel_add_fb_offsets(x, y, plane_state, 0);
+	*offset = intel_plane_compute_aligned_offset(x, y, plane_state, 0);
 	if (drm_WARN_ON(&dev_priv->drm, alignment && !is_power_of_2(alignment)))
 		return -EINVAL;
 
@@ -3787,9 +3773,10 @@ static int skl_check_main_surface(struct intel_plane_state *plane_state)
 	 * main surface offset, and it must be non-negative. Make
 	 * sure that is what we will get.
 	 */
-	if (aux_plane && offset > aux_offset)
-		offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0,
-							   offset, aux_offset & ~(alignment - 1));
+	if (aux_plane && *offset > aux_offset)
+		*offset = intel_plane_adjust_aligned_offset(x, y, plane_state, 0,
+							    *offset,
+							    aux_offset & ~(alignment - 1));
 
 	/*
 	 * When using an X-tiled surface, the plane blows up
@@ -3800,18 +3787,51 @@ static int skl_check_main_surface(struct intel_plane_state *plane_state)
 	if (fb->modifier == I915_FORMAT_MOD_X_TILED) {
 		int cpp = fb->format->cpp[0];
 
-		while ((x + w) * cpp > plane_state->color_plane[0].stride) {
-			if (offset == 0) {
+		while ((*x + w) * cpp > plane_state->color_plane[0].stride) {
+			if (*offset == 0) {
 				drm_dbg_kms(&dev_priv->drm,
 					    "Unable to find suitable display surface offset due to X-tiling\n");
 				return -EINVAL;
 			}
 
-			offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0,
-								   offset, offset - alignment);
+			*offset = intel_plane_adjust_aligned_offset(x, y, plane_state, 0,
+								    *offset,
+								    *offset - alignment);
 		}
 	}
 
+	return 0;
+}
+
+static int skl_check_main_surface(struct intel_plane_state *plane_state)
+{
+	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
+	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
+	const struct drm_framebuffer *fb = plane_state->hw.fb;
+	const unsigned int rotation = plane_state->hw.rotation;
+	int x = plane_state->uapi.src.x1 >> 16;
+	int y = plane_state->uapi.src.y1 >> 16;
+	const int w = drm_rect_width(&plane_state->uapi.src) >> 16;
+	const int h = drm_rect_height(&plane_state->uapi.src) >> 16;
+	const int min_width = intel_plane_min_width(plane, fb, 0, rotation);
+	const int max_width = intel_plane_max_width(plane, fb, 0, rotation);
+	const int max_height = intel_plane_max_height(plane, fb, 0, rotation);
+	const int aux_plane = intel_main_to_aux_plane(fb, 0);
+	const u32 alignment = intel_surf_alignment(fb, 0);
+	u32 offset;
+	int ret;
+
+	if (w > max_width || w < min_width || h > max_height) {
+		drm_dbg_kms(&dev_priv->drm,
+			    "requested Y/RGB source size %dx%d outside limits (min: %dx1 max: %dx%d)\n",
+			    w, h, min_width, max_width, max_height);
+		return -EINVAL;
+	}
+
+	ret = skl_calc_main_surface_offset(plane_state, &x, &y, &offset);
+	if (ret)
+		return ret;
+
 	/*
 	 * CCS AUX surface doesn't have its own x/y offsets, we must make sure
 	 * they match with the main surface x/y offsets.
diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
index f7e49a39bd92..7ddbc00a0f41 100644
--- a/drivers/gpu/drm/i915/display/intel_display.h
+++ b/drivers/gpu/drm/i915/display/intel_display.h
@@ -630,6 +630,8 @@ u32 skl_plane_ctl_crtc(const struct intel_crtc_state *crtc_state);
 u32 skl_plane_stride(const struct intel_plane_state *plane_state,
 		     int plane);
 int skl_check_plane_surface(struct intel_plane_state *plane_state);
+int skl_calc_main_surface_offset(const struct intel_plane_state *plane_state,
+				 int *x, int *y, u32 *offset);
 int skl_format_to_fourcc(int format, bool rgb_order, bool alpha);
 int bdw_get_pipemisc_bpp(struct intel_crtc *crtc);
 unsigned int intel_plane_fence_y_offset(const struct intel_plane_state *plane_state);
-- 
2.30.0

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

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

* [Intel-gfx] [PATCH CI 4/4] drm/i915/display/psr: Program plane's calculated offset to plane SF register
  2021-01-04 20:56 [Intel-gfx] [PATCH CI 1/4] drm: Add function to convert rect in 16.16 fixed format to regular format José Roberto de Souza
  2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area José Roberto de Souza
  2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 3/4] drm/i915/display: Split and export main surface calculation from skl_check_main_surface() José Roberto de Souza
@ 2021-01-04 20:56 ` José Roberto de Souza
  2021-01-04 22:27 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format Patchwork
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 17+ messages in thread
From: José Roberto de Souza @ 2021-01-04 20:56 UTC (permalink / raw)
  To: intel-gfx

It programs Plane's calculated x, y, offset to Plane SF register.
It does the calculation of x and y offsets using
skl_calc_main_surface_offset().

v3: Update commit message

Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Tested-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
---
 drivers/gpu/drm/i915/display/intel_psr.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index f5b9519b3756..c24ae69426cf 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1186,7 +1186,8 @@ void intel_psr2_program_plane_sel_fetch(struct intel_plane *plane,
 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
 	enum pipe pipe = plane->pipe;
 	const struct drm_rect *clip;
-	u32 val;
+	u32 val, offset;
+	int ret, x, y;
 
 	if (!crtc_state->enable_psr2_sel_fetch)
 		return;
@@ -1203,9 +1204,14 @@ void intel_psr2_program_plane_sel_fetch(struct intel_plane *plane,
 	val |= plane_state->uapi.dst.x1;
 	intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_POS(pipe, plane->id), val);
 
-	/* TODO: consider tiling and auxiliary surfaces */
-	val = (clip->y1 + plane_state->color_plane[color_plane].y) << 16;
-	val |= plane_state->color_plane[color_plane].x;
+	/* TODO: consider auxiliary surfaces */
+	x = plane_state->uapi.src.x1 >> 16;
+	y = (plane_state->uapi.src.y1 >> 16) + clip->y1;
+	ret = skl_calc_main_surface_offset(plane_state, &x, &y, &offset);
+	if (ret)
+		drm_warn_once(&dev_priv->drm, "skl_calc_main_surface_offset() returned %i\n",
+			      ret);
+	val = y << 16 | x;
 	intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_OFFSET(pipe, plane->id),
 			  val);
 
-- 
2.30.0

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

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

* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format
  2021-01-04 20:56 [Intel-gfx] [PATCH CI 1/4] drm: Add function to convert rect in 16.16 fixed format to regular format José Roberto de Souza
                   ` (2 preceding siblings ...)
  2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 4/4] drm/i915/display/psr: Program plane's calculated offset to plane SF register José Roberto de Souza
@ 2021-01-04 22:27 ` Patchwork
  2021-01-04 22:54 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
  2021-01-05  1:04 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
  5 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2021-01-04 22:27 UTC (permalink / raw)
  To: Souza, Jose; +Cc: intel-gfx

== Series Details ==

Series: series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format
URL   : https://patchwork.freedesktop.org/series/85458/
State : warning

== Summary ==

$ dim sparse --fast origin/drm-tip
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
-
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:261:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:1398:25: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:1398:25:    struct dma_fence *
+drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:1398:25:    struct dma_fence [noderef] __rcu *
+drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:1399:17: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:1399:17:    struct dma_fence *
+drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:1399:17:    struct dma_fence [noderef] __rcu *
+drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:1458:17: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:1458:17:    struct dma_fence *
+drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:1458:17:    struct dma_fence [noderef] __rcu *
+drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:285:16: error: incompatible types in comparison expression (different type sizes):
+drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:285:16:    unsigned long *
+drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:285:16:    unsigned long long *
+drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c:276:25: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c:276:25:    struct dma_fence *
+drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c:276:25:    struct dma_fence [noderef] __rcu *
+drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c:277:17: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c:277:17:    struct dma_fence *
+drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c:277:17:    struct dma_fence [noderef] __rcu *
+drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c:331:17: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c:331:17:    struct dma_fence *
+drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c:331:17:    struct dma_fence [noderef] __rcu *
+drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.h:92:56: error: marked inline, but without a definition
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:257:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/a


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

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

* [Intel-gfx] ✓ Fi.CI.BAT: success for series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format
  2021-01-04 20:56 [Intel-gfx] [PATCH CI 1/4] drm: Add function to convert rect in 16.16 fixed format to regular format José Roberto de Souza
                   ` (3 preceding siblings ...)
  2021-01-04 22:27 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format Patchwork
@ 2021-01-04 22:54 ` Patchwork
  2021-01-05  1:04 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
  5 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2021-01-04 22:54 UTC (permalink / raw)
  To: Souza, Jose; +Cc: intel-gfx


[-- Attachment #1.1: Type: text/plain, Size: 2074 bytes --]

== Series Details ==

Series: series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format
URL   : https://patchwork.freedesktop.org/series/85458/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_9544 -> Patchwork_19254
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/index.html

Known issues
------------

  Here are the changes found in Patchwork_19254 that come from known issues:

### IGT changes ###

#### Possible fixes ####

  * igt@i915_selftest@live@blt:
    - fi-snb-2600:        [DMESG-FAIL][1] ([i915#1409]) -> [PASS][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/fi-snb-2600/igt@i915_selftest@live@blt.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/fi-snb-2600/igt@i915_selftest@live@blt.html

  
  [i915#1409]: https://gitlab.freedesktop.org/drm/intel/issues/1409


Participating hosts (42 -> 36)
------------------------------

  Missing    (6): fi-ilk-m540 fi-hsw-4200u fi-bsw-cyan fi-ctg-p8600 fi-tgl-y fi-bdw-samus 


Build changes
-------------

  * Linux: CI_DRM_9544 -> Patchwork_19254

  CI-20190529: 20190529
  CI_DRM_9544: b950eb2b863a3e5de7b9647aa037ed50d7dd687c @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5942: e14e76a87c44c684ec958b391b030bb549254f88 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_19254: 7b34b5cee6ec5e996c12b1013f3f587b8e4e6d5c @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

7b34b5cee6ec drm/i915/display/psr: Program plane's calculated offset to plane SF register
8d547e349776 drm/i915/display: Split and export main surface calculation from skl_check_main_surface()
f2f94c7d10be drm/i915/display/psr: Use plane damage clips to calculate damaged area
1d5b3487eab7 drm: Add function to convert rect in 16.16 fixed format to regular format

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/index.html

[-- Attachment #1.2: Type: text/html, Size: 2684 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

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

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

* [Intel-gfx] ✗ Fi.CI.IGT: failure for series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format
  2021-01-04 20:56 [Intel-gfx] [PATCH CI 1/4] drm: Add function to convert rect in 16.16 fixed format to regular format José Roberto de Souza
                   ` (4 preceding siblings ...)
  2021-01-04 22:54 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
@ 2021-01-05  1:04 ` Patchwork
  2021-01-05 13:29   ` Souza, Jose
  5 siblings, 1 reply; 17+ messages in thread
From: Patchwork @ 2021-01-05  1:04 UTC (permalink / raw)
  To: Souza, Jose; +Cc: intel-gfx


[-- Attachment #1.1: Type: text/plain, Size: 20613 bytes --]

== Series Details ==

Series: series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format
URL   : https://patchwork.freedesktop.org/series/85458/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_9544_full -> Patchwork_19254_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_19254_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_19254_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_19254_full:

### IGT changes ###

#### Possible regressions ####

  * igt@gem_exec_nop@basic-sequential:
    - shard-hsw:          [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-hsw6/igt@gem_exec_nop@basic-sequential.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw6/igt@gem_exec_nop@basic-sequential.html

  
New tests
---------

  New tests have been introduced between CI_DRM_9544_full and Patchwork_19254_full:

### New IGT tests (1) ###

  * igt@gem_spin_batch@resubmit-new-all:
    - Statuses :
    - Exec time: [None] s

  

Known issues
------------

  Here are the changes found in Patchwork_19254_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_persistence@engines-hostile:
    - shard-hsw:          NOTRUN -> [SKIP][3] ([fdo#109271] / [i915#1099]) +3 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw4/igt@gem_ctx_persistence@engines-hostile.html

  * igt@gem_exec_whisper@basic-queues-forked-all:
    - shard-glk:          [PASS][4] -> [DMESG-WARN][5] ([i915#118] / [i915#95])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-glk1/igt@gem_exec_whisper@basic-queues-forked-all.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-glk7/igt@gem_exec_whisper@basic-queues-forked-all.html

  * igt@gem_userptr_blits@mmap-offset-invalidate-active@wb:
    - shard-snb:          NOTRUN -> [SKIP][6] ([fdo#109271]) +50 similar issues
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-snb6/igt@gem_userptr_blits@mmap-offset-invalidate-active@wb.html

  * igt@gem_userptr_blits@vma-merge:
    - shard-hsw:          NOTRUN -> [FAIL][7] ([i915#2724])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw6/igt@gem_userptr_blits@vma-merge.html

  * igt@i915_selftest@live@hangcheck:
    - shard-iclb:         [PASS][8] -> [INCOMPLETE][9] ([i915#926])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb7/igt@i915_selftest@live@hangcheck.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb6/igt@i915_selftest@live@hangcheck.html

  * igt@kms_async_flips@test-time-stamp:
    - shard-tglb:         [PASS][10] -> [FAIL][11] ([i915#2574])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-tglb5/igt@kms_async_flips@test-time-stamp.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-tglb8/igt@kms_async_flips@test-time-stamp.html

  * igt@kms_chamelium@hdmi-hpd-with-enabled-mode:
    - shard-kbl:          NOTRUN -> [SKIP][12] ([fdo#109271] / [fdo#111827]) +2 similar issues
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl7/igt@kms_chamelium@hdmi-hpd-with-enabled-mode.html

  * igt@kms_color@pipe-b-ctm-0-25:
    - shard-tglb:         NOTRUN -> [FAIL][13] ([i915#1149] / [i915#315])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-tglb6/igt@kms_color@pipe-b-ctm-0-25.html

  * igt@kms_color_chamelium@pipe-b-ctm-green-to-red:
    - shard-hsw:          NOTRUN -> [SKIP][14] ([fdo#109271] / [fdo#111827]) +9 similar issues
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw4/igt@kms_color_chamelium@pipe-b-ctm-green-to-red.html

  * igt@kms_color_chamelium@pipe-d-gamma:
    - shard-snb:          NOTRUN -> [SKIP][15] ([fdo#109271] / [fdo#111827]) +4 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-snb6/igt@kms_color_chamelium@pipe-d-gamma.html

  * igt@kms_cursor_crc@pipe-a-cursor-256x85-offscreen:
    - shard-skl:          [PASS][16] -> [FAIL][17] ([i915#54]) +8 similar issues
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl4/igt@kms_cursor_crc@pipe-a-cursor-256x85-offscreen.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl5/igt@kms_cursor_crc@pipe-a-cursor-256x85-offscreen.html

  * igt@kms_cursor_crc@pipe-c-cursor-64x21-random:
    - shard-skl:          NOTRUN -> [FAIL][18] ([i915#54]) +1 similar issue
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl10/igt@kms_cursor_crc@pipe-c-cursor-64x21-random.html

  * igt@kms_cursor_crc@pipe-d-cursor-suspend:
    - shard-kbl:          NOTRUN -> [SKIP][19] ([fdo#109271]) +50 similar issues
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl3/igt@kms_cursor_crc@pipe-d-cursor-suspend.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff:
    - shard-glk:          [PASS][20] -> [FAIL][21] ([i915#49])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-glk7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-glk2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff:
    - shard-tglb:         NOTRUN -> [SKIP][22] ([fdo#111825]) +3 similar issues
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-tglb6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-render:
    - shard-hsw:          NOTRUN -> [SKIP][23] ([fdo#109271]) +157 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw7/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-move:
    - shard-skl:          NOTRUN -> [SKIP][24] ([fdo#109271]) +19 similar issues
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl10/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-move.html

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-skl:          [PASS][25] -> [FAIL][26] ([i915#1188])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl1/igt@kms_hdr@bpc-switch-suspend.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl1/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_pipe_crc_basic@read-crc-pipe-d:
    - shard-kbl:          NOTRUN -> [SKIP][27] ([fdo#109271] / [i915#533])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl3/igt@kms_pipe_crc_basic@read-crc-pipe-d.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
    - shard-skl:          [PASS][28] -> [DMESG-WARN][29] ([i915#1982])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl10/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl10/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html

  * igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max:
    - shard-kbl:          NOTRUN -> [FAIL][30] ([fdo#108145] / [i915#265])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl3/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max.html

  * igt@kms_psr@psr2_sprite_plane_move:
    - shard-iclb:         [PASS][31] -> [SKIP][32] ([fdo#109441]) +2 similar issues
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb5/igt@kms_psr@psr2_sprite_plane_move.html

  * igt@prime_vgem@sync@rcs0:
    - shard-iclb:         [PASS][33] -> [INCOMPLETE][34] ([i915#409])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb4/igt@prime_vgem@sync@rcs0.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb3/igt@prime_vgem@sync@rcs0.html

  
#### Possible fixes ####

  * igt@drm_import_export@prime:
    - shard-kbl:          [INCOMPLETE][35] -> [PASS][36]
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-kbl4/igt@drm_import_export@prime.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl7/igt@drm_import_export@prime.html

  * igt@gem_exec_balancer@waits:
    - shard-kbl:          [INCOMPLETE][37] ([i915#2877]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-kbl3/igt@gem_exec_balancer@waits.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl3/igt@gem_exec_balancer@waits.html

  * {igt@gem_exec_fair@basic-pace@vcs0}:
    - shard-iclb:         [FAIL][39] ([i915#2842]) -> [PASS][40] +1 similar issue
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb6/igt@gem_exec_fair@basic-pace@vcs0.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb3/igt@gem_exec_fair@basic-pace@vcs0.html

  * {igt@gem_exec_fair@basic-pace@vecs0}:
    - shard-glk:          [FAIL][41] ([i915#2842]) -> [PASS][42] +1 similar issue
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-glk7/igt@gem_exec_fair@basic-pace@vecs0.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-glk2/igt@gem_exec_fair@basic-pace@vecs0.html

  * igt@gem_exec_suspend@basic-s3:
    - shard-skl:          [INCOMPLETE][43] ([i915#198]) -> [PASS][44]
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl2/igt@gem_exec_suspend@basic-s3.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl7/igt@gem_exec_suspend@basic-s3.html

  * igt@gem_exec_whisper@basic-contexts-all:
    - shard-glk:          [DMESG-WARN][45] ([i915#118] / [i915#95]) -> [PASS][46] +2 similar issues
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-glk3/igt@gem_exec_whisper@basic-contexts-all.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-glk1/igt@gem_exec_whisper@basic-contexts-all.html

  * igt@gem_fenced_exec_thrash@too-many-fences:
    - shard-snb:          [INCOMPLETE][47] ([i915#2055]) -> [PASS][48]
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-snb5/igt@gem_fenced_exec_thrash@too-many-fences.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-snb6/igt@gem_fenced_exec_thrash@too-many-fences.html

  * igt@gem_userptr_blits@huge-split:
    - shard-tglb:         [INCOMPLETE][49] ([i915#2502]) -> [PASS][50]
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-tglb5/igt@gem_userptr_blits@huge-split.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-tglb6/igt@gem_userptr_blits@huge-split.html

  * igt@kms_async_flips@alternate-sync-async-flip:
    - shard-skl:          [FAIL][51] ([i915#2521]) -> [PASS][52]
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl3/igt@kms_async_flips@alternate-sync-async-flip.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl10/igt@kms_async_flips@alternate-sync-async-flip.html

  * igt@kms_cursor_crc@pipe-b-cursor-128x128-random:
    - shard-skl:          [FAIL][53] ([i915#54]) -> [PASS][54] +7 similar issues
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl2/igt@kms_cursor_crc@pipe-b-cursor-128x128-random.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl7/igt@kms_cursor_crc@pipe-b-cursor-128x128-random.html

  * igt@kms_cursor_edge_walk@pipe-a-256x256-top-edge:
    - shard-skl:          [DMESG-WARN][55] ([i915#1982]) -> [PASS][56]
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl4/igt@kms_cursor_edge_walk@pipe-a-256x256-top-edge.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl2/igt@kms_cursor_edge_walk@pipe-a-256x256-top-edge.html

  * igt@kms_cursor_legacy@flip-vs-cursor-legacy:
    - shard-skl:          [FAIL][57] ([i915#2346]) -> [PASS][58]
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl5/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl7/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible@b-edp1:
    - shard-skl:          [FAIL][59] ([i915#2122]) -> [PASS][60] +2 similar issues
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl5/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-edp1.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl7/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-edp1.html

  * igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
    - shard-skl:          [FAIL][61] ([fdo#108145] / [i915#265]) -> [PASS][62] +2 similar issues
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl9/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl9/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
    - shard-snb:          [SKIP][63] ([fdo#109271]) -> [PASS][64] +1 similar issue
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-snb6/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-snb7/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html

  * igt@kms_psr2_su@frontbuffer:
    - shard-iclb:         [SKIP][65] ([fdo#109642] / [fdo#111068]) -> [PASS][66] +1 similar issue
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb5/igt@kms_psr2_su@frontbuffer.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb2/igt@kms_psr2_su@frontbuffer.html

  * igt@kms_psr@psr2_sprite_blt:
    - shard-iclb:         [SKIP][67] ([fdo#109441]) -> [PASS][68]
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb1/igt@kms_psr@psr2_sprite_blt.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html

  
#### Warnings ####

  * igt@i915_pm_rc6_residency@rc6-fence:
    - shard-iclb:         [WARN][69] ([i915#2681] / [i915#2684]) -> [WARN][70] ([i915#1804] / [i915#2684])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb1/igt@i915_pm_rc6_residency@rc6-fence.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb4/igt@i915_pm_rc6_residency@rc6-fence.html

  * igt@kms_dp_dsc@basic-dsc-enable-edp:
    - shard-iclb:         [DMESG-WARN][71] ([i915#1226]) -> [SKIP][72] ([fdo#109349])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb2/igt@kms_dp_dsc@basic-dsc-enable-edp.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb5/igt@kms_dp_dsc@basic-dsc-enable-edp.html

  * igt@runner@aborted:
    - shard-kbl:          ([FAIL][73], [FAIL][74]) ([i915#2295] / [i915#2722] / [i915#483]) -> [FAIL][75] ([i915#2295] / [i915#483])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-kbl2/igt@runner@aborted.html
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-kbl4/igt@runner@aborted.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl4/igt@runner@aborted.html
    - shard-iclb:         [FAIL][76] ([i915#2295] / [i915#2724]) -> ([FAIL][77], [FAIL][78], [FAIL][79]) ([i915#1580] / [i915#2295] / [i915#2426] / [i915#2724] / [i915#409] / [i915#483])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb4/igt@runner@aborted.html
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb3/igt@runner@aborted.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb8/igt@runner@aborted.html
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb6/igt@runner@aborted.html
    - shard-apl:          [FAIL][80] ([i915#2295]) -> ([FAIL][81], [FAIL][82]) ([i915#1610] / [i915#2295] / [i915#2426])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-apl7/igt@runner@aborted.html
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-apl7/igt@runner@aborted.html
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-apl8/igt@runner@aborted.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109349]: https://bugs.freedesktop.org/show_bug.cgi?id=109349
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
  [i915#1149]: https://gitlab.freedesktop.org/drm/intel/issues/1149
  [i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
  [i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188
  [i915#1226]: https://gitlab.freedesktop.org/drm/intel/issues/1226
  [i915#1580]: https://gitlab.freedesktop.org/drm/intel/issues/1580
  [i915#1610]: https://gitlab.freedesktop.org/drm/intel/issues/1610
  [i915#1804]: https://gitlab.freedesktop.org/drm/intel/issues/1804
  [i915#198]: https://gitlab.freedesktop.org/drm/intel/issues/198
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2055]: https://gitlab.freedesktop.org/drm/intel/issues/2055
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2295]: https://gitlab.freedesktop.org/drm/intel/issues/2295
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2426]: https://gitlab.freedesktop.org/drm/intel/issues/2426
  [i915#2502]: https://gitlab.freedesktop.org/drm/intel/issues/2502
  [i915#2521]: https://gitlab.freedesktop.org/drm/intel/issues/2521
  [i915#2574]: https://gitlab.freedesktop.org/drm/intel/issues/2574
  [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
  [i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
  [i915#2684]: https://gitlab.freedesktop.org/drm/intel/issues/2684
  [i915#2722]: https://gitlab.freedesktop.org/drm/intel/issues/2722
  [i915#2724]: https://gitlab.freedesktop.org/drm/intel/issues/2724
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
  [i915#2877]: https://gitlab.freedesktop.org/drm/intel/issues/2877
  [i915#315]: https://gitlab.freedesktop.org/drm/intel/issues/315
  [i915#409]: https://gitlab.freedesktop.org/drm/intel/issues/409
  [i915#483]: https://gitlab.freedesktop.org/drm/intel/issues/483
  [i915#49]: https://gitlab.freedesktop.org/drm/intel/issues/49
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#54]: https://gitlab.freedesktop.org/drm/intel/issues/54
  [i915#926]: https://gitlab.freedesktop.org/drm/intel/issues/926
  [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95


Participating hosts (10 -> 10)
------------------------------

  No changes in participating hosts


Build changes
-------------

  * Linux: CI_DRM_9544 -> Patchwork_19254

  CI-20190529: 20190529
  CI_DRM_9544: b950eb2b863a3e5de7b9647aa037ed50d7dd687c @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5942: e14e76a87c44c684ec958b391b030bb549254f88 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_19254: 7b34b5cee6ec5e996c12b1013f3f587b8e4e6d5c @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/index.html

[-- Attachment #1.2: Type: text/html, Size: 24745 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

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

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

* Re: [Intel-gfx]  ✗ Fi.CI.IGT: failure for series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format
  2021-01-05  1:04 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
@ 2021-01-05 13:29   ` Souza, Jose
  0 siblings, 0 replies; 17+ messages in thread
From: Souza, Jose @ 2021-01-05 13:29 UTC (permalink / raw)
  To: intel-gfx


[-- Attachment #1.1: Type: text/plain, Size: 20503 bytes --]

On Tue, 2021-01-05 at 01:04 +0000, Patchwork wrote:
Patch Details
Series: series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format
URL:    https://patchwork.freedesktop.org/series/85458/
State:  failure
Details:        https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/index.html
CI Bug Log - changes from CI_DRM_9544_full -> Patchwork_19254_full
Summary

FAILURE

Serious unknown changes coming with Patchwork_19254_full absolutely need to be
verified manually.

If you think the reported changes have nothing to do with the changes
introduced in Patchwork_19254_full, please notify your bug team to allow them
to document this new failure mode, which will reduce false positives in CI.

Possible new issues

Here are the unknown changes that may have been introduced in Patchwork_19254_full:

IGT changes
Possible regressions

  *   igt@gem_exec_nop@basic-sequential:
     *   shard-hsw: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-hsw6/igt@gem_exec_nop@basic-sequential.html> -> INCOMPLETE<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw6/igt@gem_exec_nop@basic-sequential.html>


Not related, all the changes here are on display and related to PSR.
Patch pushed.

thanks for the reviews GG.

New tests

New tests have been introduced between CI_DRM_9544_full and Patchwork_19254_full:

New IGT tests (1)

  *   igt@gem_spin_batch@resubmit-new-all:
     *   Statuses :
     *   Exec time: [None] s

Known issues

Here are the changes found in Patchwork_19254_full that come from known issues:

IGT changes
Issues hit

  *   igt@gem_ctx_persistence@engines-hostile:

     *   shard-hsw: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw4/igt@gem_ctx_persistence@engines-hostile.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271> / i915#1099<https://gitlab.freedesktop.org/drm/intel/issues/1099>) +3 similar issues
  *   igt@gem_exec_whisper@basic-queues-forked-all:

     *   shard-glk: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-glk1/igt@gem_exec_whisper@basic-queues-forked-all.html> -> DMESG-WARN<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-glk7/igt@gem_exec_whisper@basic-queues-forked-all.html> (i915#118<https://gitlab.freedesktop.org/drm/intel/issues/118> / i915#95<https://gitlab.freedesktop.org/drm/intel/issues/95>)
  *   igt@gem_userptr_blits@mmap-offset-invalidate-active@wb:

     *   shard-snb: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-snb6/igt@gem_userptr_blits@mmap-offset-invalidate-active@wb.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271>) +50 similar issues
  *   igt@gem_userptr_blits@vma-merge:

     *   shard-hsw: NOTRUN -> FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw6/igt@gem_userptr_blits@vma-merge.html> (i915#2724<https://gitlab.freedesktop.org/drm/intel/issues/2724>)
  *   igt@i915_selftest@live@hangcheck:

     *   shard-iclb: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb7/igt@i915_selftest@live@hangcheck.html> -> INCOMPLETE<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb6/igt@i915_selftest@live@hangcheck.html> (i915#926<https://gitlab.freedesktop.org/drm/intel/issues/926>)
  *   igt@kms_async_flips@test-time-stamp:

     *   shard-tglb: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-tglb5/igt@kms_async_flips@test-time-stamp.html> -> FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-tglb8/igt@kms_async_flips@test-time-stamp.html> (i915#2574<https://gitlab.freedesktop.org/drm/intel/issues/2574>)
  *   igt@kms_chamelium@hdmi-hpd-with-enabled-mode:

     *   shard-kbl: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl7/igt@kms_chamelium@hdmi-hpd-with-enabled-mode.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271> / fdo#111827<https://bugs.freedesktop.org/show_bug.cgi?id=111827>) +2 similar issues
  *   igt@kms_color@pipe-b-ctm-0-25:

     *   shard-tglb: NOTRUN -> FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-tglb6/igt@kms_color@pipe-b-ctm-0-25.html> (i915#1149<https://gitlab.freedesktop.org/drm/intel/issues/1149> / i915#315<https://gitlab.freedesktop.org/drm/intel/issues/315>)
  *   igt@kms_color_chamelium@pipe-b-ctm-green-to-red:

     *   shard-hsw: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw4/igt@kms_color_chamelium@pipe-b-ctm-green-to-red.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271> / fdo#111827<https://bugs.freedesktop.org/show_bug.cgi?id=111827>) +9 similar issues
  *   igt@kms_color_chamelium@pipe-d-gamma:

     *   shard-snb: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-snb6/igt@kms_color_chamelium@pipe-d-gamma.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271> / fdo#111827<https://bugs.freedesktop.org/show_bug.cgi?id=111827>) +4 similar issues
  *   igt@kms_cursor_crc@pipe-a-cursor-256x85-offscreen:

     *   shard-skl: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl4/igt@kms_cursor_crc@pipe-a-cursor-256x85-offscreen.html> -> FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl5/igt@kms_cursor_crc@pipe-a-cursor-256x85-offscreen.html> (i915#54<https://gitlab.freedesktop.org/drm/intel/issues/54>) +8 similar issues
  *   igt@kms_cursor_crc@pipe-c-cursor-64x21-random:

     *   shard-skl: NOTRUN -> FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl10/igt@kms_cursor_crc@pipe-c-cursor-64x21-random.html> (i915#54<https://gitlab.freedesktop.org/drm/intel/issues/54>) +1 similar issue
  *   igt@kms_cursor_crc@pipe-d-cursor-suspend:

     *   shard-kbl: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl3/igt@kms_cursor_crc@pipe-d-cursor-suspend.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271>) +50 similar issues
  *   igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff:

     *   shard-glk: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-glk7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff.html> -> FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-glk2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff.html> (i915#49<https://gitlab.freedesktop.org/drm/intel/issues/49>)
  *   igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff:

     *   shard-tglb: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-tglb6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff.html> (fdo#111825<https://bugs.freedesktop.org/show_bug.cgi?id=111825>) +3 similar issues
  *   igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-render:

     *   shard-hsw: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-hsw7/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-render.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271>) +157 similar issues
  *   igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-move:

     *   shard-skl: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl10/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-move.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271>) +19 similar issues
  *   igt@kms_hdr@bpc-switch-suspend:

     *   shard-skl: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl1/igt@kms_hdr@bpc-switch-suspend.html> -> FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl1/igt@kms_hdr@bpc-switch-suspend.html> (i915#1188<https://gitlab.freedesktop.org/drm/intel/issues/1188>)
  *   igt@kms_pipe_crc_basic@read-crc-pipe-d:

     *   shard-kbl: NOTRUN -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl3/igt@kms_pipe_crc_basic@read-crc-pipe-d.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271> / i915#533<https://gitlab.freedesktop.org/drm/intel/issues/533>)
  *   igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:

     *   shard-skl: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl10/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html> -> DMESG-WARN<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl10/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b.html> (i915#1982<https://gitlab.freedesktop.org/drm/intel/issues/1982>)
  *   igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max:

     *   shard-kbl: NOTRUN -> FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl3/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max.html> (fdo#108145<https://bugs.freedesktop.org/show_bug.cgi?id=108145> / i915#265<https://gitlab.freedesktop.org/drm/intel/issues/265>)
  *   igt@kms_psr@psr2_sprite_plane_move:

     *   shard-iclb: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html> -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb5/igt@kms_psr@psr2_sprite_plane_move.html> (fdo#109441<https://bugs.freedesktop.org/show_bug.cgi?id=109441>) +2 similar issues
  *   igt@prime_vgem@sync@rcs0:

     *   shard-iclb: PASS<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb4/igt@prime_vgem@sync@rcs0.html> -> INCOMPLETE<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb3/igt@prime_vgem@sync@rcs0.html> (i915#409<https://gitlab.freedesktop.org/drm/intel/issues/409>)

Possible fixes

  *   igt@drm_import_export@prime:

     *   shard-kbl: INCOMPLETE<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-kbl4/igt@drm_import_export@prime.html> -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl7/igt@drm_import_export@prime.html>
  *   igt@gem_exec_balancer@waits:

     *   shard-kbl: INCOMPLETE<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-kbl3/igt@gem_exec_balancer@waits.html> (i915#2877<https://gitlab.freedesktop.org/drm/intel/issues/2877>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl3/igt@gem_exec_balancer@waits.html>
  *   {igt@gem_exec_fair@basic-pace@vcs0}:

     *   shard-iclb: FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb6/igt@gem_exec_fair@basic-pace@vcs0.html> (i915#2842<https://gitlab.freedesktop.org/drm/intel/issues/2842>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb3/igt@gem_exec_fair@basic-pace@vcs0.html> +1 similar issue
  *   {igt@gem_exec_fair@basic-pace@vecs0}:

     *   shard-glk: FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-glk7/igt@gem_exec_fair@basic-pace@vecs0.html> (i915#2842<https://gitlab.freedesktop.org/drm/intel/issues/2842>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-glk2/igt@gem_exec_fair@basic-pace@vecs0.html> +1 similar issue
  *   igt@gem_exec_suspend@basic-s3:

     *   shard-skl: INCOMPLETE<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl2/igt@gem_exec_suspend@basic-s3.html> (i915#198<https://gitlab.freedesktop.org/drm/intel/issues/198>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl7/igt@gem_exec_suspend@basic-s3.html>
  *   igt@gem_exec_whisper@basic-contexts-all:

     *   shard-glk: DMESG-WARN<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-glk3/igt@gem_exec_whisper@basic-contexts-all.html> (i915#118<https://gitlab.freedesktop.org/drm/intel/issues/118> / i915#95<https://gitlab.freedesktop.org/drm/intel/issues/95>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-glk1/igt@gem_exec_whisper@basic-contexts-all.html> +2 similar issues
  *   igt@gem_fenced_exec_thrash@too-many-fences:

     *   shard-snb: INCOMPLETE<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-snb5/igt@gem_fenced_exec_thrash@too-many-fences.html> (i915#2055<https://gitlab.freedesktop.org/drm/intel/issues/2055>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-snb6/igt@gem_fenced_exec_thrash@too-many-fences.html>
  *   igt@gem_userptr_blits@huge-split:

     *   shard-tglb: INCOMPLETE<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-tglb5/igt@gem_userptr_blits@huge-split.html> (i915#2502<https://gitlab.freedesktop.org/drm/intel/issues/2502>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-tglb6/igt@gem_userptr_blits@huge-split.html>
  *   igt@kms_async_flips@alternate-sync-async-flip:

     *   shard-skl: FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl3/igt@kms_async_flips@alternate-sync-async-flip.html> (i915#2521<https://gitlab.freedesktop.org/drm/intel/issues/2521>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl10/igt@kms_async_flips@alternate-sync-async-flip.html>
  *   igt@kms_cursor_crc@pipe-b-cursor-128x128-random:

     *   shard-skl: FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl2/igt@kms_cursor_crc@pipe-b-cursor-128x128-random.html> (i915#54<https://gitlab.freedesktop.org/drm/intel/issues/54>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl7/igt@kms_cursor_crc@pipe-b-cursor-128x128-random.html> +7 similar issues
  *   igt@kms_cursor_edge_walk@pipe-a-256x256-top-edge:

     *   shard-skl: DMESG-WARN<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl4/igt@kms_cursor_edge_walk@pipe-a-256x256-top-edge.html> (i915#1982<https://gitlab.freedesktop.org/drm/intel/issues/1982>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl2/igt@kms_cursor_edge_walk@pipe-a-256x256-top-edge.html>
  *   igt@kms_cursor_legacy@flip-vs-cursor-legacy:

     *   shard-skl: FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl5/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html> (i915#2346<https://gitlab.freedesktop.org/drm/intel/issues/2346>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl7/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html>
  *   igt@kms_flip@plain-flip-fb-recreate-interruptible@b-edp1:

     *   shard-skl: FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl5/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-edp1.html> (i915#2122<https://gitlab.freedesktop.org/drm/intel/issues/2122>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl7/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-edp1.html> +2 similar issues
  *   igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:

     *   shard-skl: FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-skl9/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html> (fdo#108145<https://bugs.freedesktop.org/show_bug.cgi?id=108145> / i915#265<https://gitlab.freedesktop.org/drm/intel/issues/265>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-skl9/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html> +2 similar issues
  *   igt@kms_plane_multiple@atomic-pipe-a-tiling-x:

     *   shard-snb: SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-snb6/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html> (fdo#109271<https://bugs.freedesktop.org/show_bug.cgi?id=109271>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-snb7/igt@kms_plane_multiple@atomic-pipe-a-tiling-x.html> +1 similar issue
  *   igt@kms_psr2_su@frontbuffer:

     *   shard-iclb: SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb5/igt@kms_psr2_su@frontbuffer.html> (fdo#109642<https://bugs.freedesktop.org/show_bug.cgi?id=109642> / fdo#111068<https://bugs.freedesktop.org/show_bug.cgi?id=111068>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb2/igt@kms_psr2_su@frontbuffer.html> +1 similar issue
  *   igt@kms_psr@psr2_sprite_blt:

     *   shard-iclb: SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb1/igt@kms_psr@psr2_sprite_blt.html> (fdo#109441<https://bugs.freedesktop.org/show_bug.cgi?id=109441>) -> PASS<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html>

Warnings

  *   igt@i915_pm_rc6_residency@rc6-fence:

     *   shard-iclb: WARN<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb1/igt@i915_pm_rc6_residency@rc6-fence.html> (i915#2681<https://gitlab.freedesktop.org/drm/intel/issues/2681> / i915#2684<https://gitlab.freedesktop.org/drm/intel/issues/2684>) -> WARN<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb4/igt@i915_pm_rc6_residency@rc6-fence.html> (i915#1804<https://gitlab.freedesktop.org/drm/intel/issues/1804> / i915#2684<https://gitlab.freedesktop.org/drm/intel/issues/2684>)
  *   igt@kms_dp_dsc@basic-dsc-enable-edp:

     *   shard-iclb: DMESG-WARN<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb2/igt@kms_dp_dsc@basic-dsc-enable-edp.html> (i915#1226<https://gitlab.freedesktop.org/drm/intel/issues/1226>) -> SKIP<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb5/igt@kms_dp_dsc@basic-dsc-enable-edp.html> (fdo#109349<https://bugs.freedesktop.org/show_bug.cgi?id=109349>)
  *   igt@runner@aborted:

     *   shard-kbl: (FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-kbl2/igt@runner@aborted.html>, FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-kbl4/igt@runner@aborted.html>) (i915#2295<https://gitlab.freedesktop.org/drm/intel/issues/2295> / i915#2722<https://gitlab.freedesktop.org/drm/intel/issues/2722> / i915#483<https://gitlab.freedesktop.org/drm/intel/issues/483>) -> FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-kbl4/igt@runner@aborted.html> (i915#2295<https://gitlab.freedesktop.org/drm/intel/issues/2295> / i915#483<https://gitlab.freedesktop.org/drm/intel/issues/483>)

     *   shard-iclb: FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-iclb4/igt@runner@aborted.html> (i915#2295<https://gitlab.freedesktop.org/drm/intel/issues/2295> / i915#2724<https://gitlab.freedesktop.org/drm/intel/issues/2724>) -> (FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb3/igt@runner@aborted.html>, FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb8/igt@runner@aborted.html>, FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-iclb6/igt@runner@aborted.html>) (i915#1580<https://gitlab.freedesktop.org/drm/intel/issues/1580> / i915#2295<https://gitlab.freedesktop.org/drm/intel/issues/2295> / i915#2426<https://gitlab.freedesktop.org/drm/intel/issues/2426> / i915#2724<https://gitlab.freedesktop.org/drm/intel/issues/2724> / i915#409<https://gitlab.freedesktop.org/drm/intel/issues/409> / i915#483<https://gitlab.freedesktop.org/drm/intel/issues/483>)

     *   shard-apl: FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9544/shard-apl7/igt@runner@aborted.html> (i915#2295<https://gitlab.freedesktop.org/drm/intel/issues/2295>) -> (FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-apl7/igt@runner@aborted.html>, FAIL<https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19254/shard-apl8/igt@runner@aborted.html>) (i915#1610<https://gitlab.freedesktop.org/drm/intel/issues/1610> / i915#2295<https://gitlab.freedesktop.org/drm/intel/issues/2295> / i915#2426<https://gitlab.freedesktop.org/drm/intel/issues/2426>)

{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).

Participating hosts (10 -> 10)

No changes in participating hosts

Build changes

  *   Linux: CI_DRM_9544 -> Patchwork_19254

CI-20190529: 20190529
CI_DRM_9544: b950eb2b863a3e5de7b9647aa037ed50d7dd687c @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_5942: e14e76a87c44c684ec958b391b030bb549254f88 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_19254: 7b34b5cee6ec5e996c12b1013f3f587b8e4e6d5c @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

_______________________________________________

Intel-gfx mailing list

Intel-gfx@lists.freedesktop.org<mailto:Intel-gfx@lists.freedesktop.org>

https://lists.freedesktop.org/mailman/listinfo/intel-gfx



[-- Attachment #1.2: Type: text/html, Size: 25292 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

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

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

* Re: [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area José Roberto de Souza
@ 2021-07-20 15:09   ` Daniel Vetter
  2021-07-20 15:16     ` Daniel Vetter
  0 siblings, 1 reply; 17+ messages in thread
From: Daniel Vetter @ 2021-07-20 15:09 UTC (permalink / raw)
  To: José Roberto de Souza, Gwan-gyeong Mun, Syrjala, Ville; +Cc: intel-gfx

On Mon, Jan 4, 2021 at 9:56 PM José Roberto de Souza
<jose.souza@intel.com> wrote:
>
> Now using plane damage clips property to calcualte the damaged area.
> Selective fetch only supports one region to be fetched so software
> needs to calculate a bounding box around all damage clips.
>
> Now that we are not complete fetching each plane, there is another
> loop needed as all the plane areas that intersect with the pipe
> damaged area needs to be fetched from memory so the complete blending
> of all planes can happen.
>
> v2:
> - do not shifting new_plane_state->uapi.dst only src is in 16.16 format
>
> v4:
> - setting plane selective fetch area using the whole pipe damage area
> - mark the whole plane area damaged if plane visibility or alpha
> changed
>
> v5:
> - taking in consideration src.y1 in the damage coordinates
> - adding to the pipe damaged area planes that were visible but are
> invisible in the new state
>
> v6:
> - consider old state plane coordinates when visibility changes or it
> moved to calculate damaged area
> - remove from damaged area the portion not in src clip
>
> v7:
> - intersec every damage clip with src to minimize damaged area
>
> v8:
> - adjust pipe_damaged area to 4 lines grouping
> - adjust calculation now that is understood that uapi.src is the
> framebuffer coordinates that plane will start to fetch from
>
> v9:
> - Only add plane dst or src to damaged_area if visible
> - Early skip plane damage calculation if it was not visible in old and
> new state
>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>

Why is this not using drm_atomic_helper_damage_merged? I just stumbled
over this, and this is one of the only two drivers that directly digs
around in the damage area, and seems to reinvent a bunch of the stuff
here.
-Daniel

> ---
>  drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
>  1 file changed, 99 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index d9a395c486d3..f5b9519b3756 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
>         if (clip->y1 == -1)
>                 goto exit;
>
> +       drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
> +
>         val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
>         val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
> -       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
> +       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
>  exit:
>         crtc_state->psr2_man_track_ctl = val;
>  }
> @@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>                                 struct intel_crtc *crtc)
>  {
>         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
> +       struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
>         struct intel_plane_state *new_plane_state, *old_plane_state;
> -       struct drm_rect pipe_clip = { .y1 = -1 };
>         struct intel_plane *plane;
>         bool full_update = false;
>         int i, ret;
> @@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>         if (ret)
>                 return ret;
>
> +       /*
> +        * Calculate minimal selective fetch area of each plane and calculate
> +        * the pipe damaged area.
> +        * In the next loop the plane selective fetch area will actually be set
> +        * using whole pipe damaged area.
> +        */
>         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
>                                              new_plane_state, i) {
> -               struct drm_rect *sel_fetch_area, temp;
> +               struct drm_rect src, damaged_area = { .y1 = -1 };
> +               struct drm_mode_rect *damaged_clips;
> +               u32 num_clips, j;
>
>                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
>                         continue;
>
> +               if (!new_plane_state->uapi.visible &&
> +                   !old_plane_state->uapi.visible)
> +                       continue;
> +
>                 /*
>                  * TODO: Not clear how to handle planes with negative position,
>                  * also planes are not updated if they have a negative X
> @@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>                         break;
>                 }
>
> -               if (!new_plane_state->uapi.visible)
> -                       continue;
> +               num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
>
>                 /*
> -                * For now doing a selective fetch in the whole plane area,
> -                * optimizations will come in the future.
> +                * If visibility or plane moved, mark the whole plane area as
> +                * damaged as it needs to be complete redraw in the new and old
> +                * position.
>                  */
> -               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> -               sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
> -               sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
> +               if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
> +                   !drm_rect_equals(&new_plane_state->uapi.dst,
> +                                    &old_plane_state->uapi.dst)) {
> +                       if (old_plane_state->uapi.visible) {
> +                               damaged_area.y1 = old_plane_state->uapi.dst.y1;
> +                               damaged_area.y2 = old_plane_state->uapi.dst.y2;
> +                               clip_area_update(&pipe_clip, &damaged_area);
> +                       }
> +
> +                       if (new_plane_state->uapi.visible) {
> +                               damaged_area.y1 = new_plane_state->uapi.dst.y1;
> +                               damaged_area.y2 = new_plane_state->uapi.dst.y2;
> +                               clip_area_update(&pipe_clip, &damaged_area);
> +                       }
> +                       continue;
> +               } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> +                          (!num_clips &&
> +                           new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> +                       /*
> +                        * If the plane don't have damaged areas but the
> +                        * framebuffer changed or alpha changed, mark the whole
> +                        * plane area as damaged.
> +                        */
> +                       damaged_area.y1 = new_plane_state->uapi.dst.y1;
> +                       damaged_area.y2 = new_plane_state->uapi.dst.y2;
> +                       clip_area_update(&pipe_clip, &damaged_area);
> +                       continue;
> +               }
> +
> +               drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> +               damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
> +
> +               for (j = 0; j < num_clips; j++) {
> +                       struct drm_rect clip;
> +
> +                       clip.x1 = damaged_clips[j].x1;
> +                       clip.y1 = damaged_clips[j].y1;
> +                       clip.x2 = damaged_clips[j].x2;
> +                       clip.y2 = damaged_clips[j].y2;
> +                       if (drm_rect_intersect(&clip, &src))
> +                               clip_area_update(&damaged_area, &clip);
> +               }
>
> -               temp = *sel_fetch_area;
> -               temp.y1 += new_plane_state->uapi.dst.y1;
> -               temp.y2 += new_plane_state->uapi.dst.y2;
> -               clip_area_update(&pipe_clip, &temp);
> +               if (damaged_area.y1 == -1)
> +                       continue;
> +
> +               damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
> +               damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
> +               clip_area_update(&pipe_clip, &damaged_area);
> +       }
> +
> +       if (full_update)
> +               goto skip_sel_fetch_set_loop;
> +
> +       /* It must be aligned to 4 lines */
> +       pipe_clip.y1 -= pipe_clip.y1 % 4;
> +       if (pipe_clip.y2 % 4)
> +               pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
> +
> +       /*
> +        * Now that we have the pipe damaged area check if it intersect with
> +        * every plane, if it does set the plane selective fetch area.
> +        */
> +       for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> +                                            new_plane_state, i) {
> +               struct drm_rect *sel_fetch_area, inter;
> +
> +               if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
> +                   !new_plane_state->uapi.visible)
> +                       continue;
> +
> +               inter = pipe_clip;
> +               if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
> +                       continue;
> +
> +               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> +               sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
> +               sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
>         }
>
> +skip_sel_fetch_set_loop:
>         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
>         return 0;
>  }
> --
> 2.30.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-07-20 15:09   ` Daniel Vetter
@ 2021-07-20 15:16     ` Daniel Vetter
  2021-07-20 15:31       ` Daniel Vetter
  0 siblings, 1 reply; 17+ messages in thread
From: Daniel Vetter @ 2021-07-20 15:16 UTC (permalink / raw)
  To: José Roberto de Souza, Gwan-gyeong Mun, Syrjala, Ville; +Cc: intel-gfx

On Tue, Jul 20, 2021 at 5:09 PM Daniel Vetter <daniel@ffwll.ch> wrote:
>
> On Mon, Jan 4, 2021 at 9:56 PM José Roberto de Souza
> <jose.souza@intel.com> wrote:
> >
> > Now using plane damage clips property to calcualte the damaged area.
> > Selective fetch only supports one region to be fetched so software
> > needs to calculate a bounding box around all damage clips.
> >
> > Now that we are not complete fetching each plane, there is another
> > loop needed as all the plane areas that intersect with the pipe
> > damaged area needs to be fetched from memory so the complete blending
> > of all planes can happen.
> >
> > v2:
> > - do not shifting new_plane_state->uapi.dst only src is in 16.16 format
> >
> > v4:
> > - setting plane selective fetch area using the whole pipe damage area
> > - mark the whole plane area damaged if plane visibility or alpha
> > changed
> >
> > v5:
> > - taking in consideration src.y1 in the damage coordinates
> > - adding to the pipe damaged area planes that were visible but are
> > invisible in the new state
> >
> > v6:
> > - consider old state plane coordinates when visibility changes or it
> > moved to calculate damaged area
> > - remove from damaged area the portion not in src clip
> >
> > v7:
> > - intersec every damage clip with src to minimize damaged area
> >
> > v8:
> > - adjust pipe_damaged area to 4 lines grouping
> > - adjust calculation now that is understood that uapi.src is the
> > framebuffer coordinates that plane will start to fetch from
> >
> > v9:
> > - Only add plane dst or src to damaged_area if visible
> > - Early skip plane damage calculation if it was not visible in old and
> > new state
> >
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
>
> Why is this not using drm_atomic_helper_damage_merged? I just stumbled
> over this, and this is one of the only two drivers that directly digs
> around in the damage area, and seems to reinvent a bunch of the stuff
> here.

Also, did we merge the igts for this stuff? They unfortunately never
landed, when vmwgfx team did all this work, but for i915 we really
shouldn't even land new support without tests.
-Daniel

> > ---
> >  drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
> >  1 file changed, 99 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > index d9a395c486d3..f5b9519b3756 100644
> > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > @@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> >         if (clip->y1 == -1)
> >                 goto exit;
> >
> > +       drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
> > +
> >         val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
> >         val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
> > -       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
> > +       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
> >  exit:
> >         crtc_state->psr2_man_track_ctl = val;
> >  }
> > @@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> >                                 struct intel_crtc *crtc)
> >  {
> >         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
> > +       struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
> >         struct intel_plane_state *new_plane_state, *old_plane_state;
> > -       struct drm_rect pipe_clip = { .y1 = -1 };
> >         struct intel_plane *plane;
> >         bool full_update = false;
> >         int i, ret;
> > @@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> >         if (ret)
> >                 return ret;
> >
> > +       /*
> > +        * Calculate minimal selective fetch area of each plane and calculate
> > +        * the pipe damaged area.
> > +        * In the next loop the plane selective fetch area will actually be set
> > +        * using whole pipe damaged area.
> > +        */
> >         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> >                                              new_plane_state, i) {
> > -               struct drm_rect *sel_fetch_area, temp;
> > +               struct drm_rect src, damaged_area = { .y1 = -1 };
> > +               struct drm_mode_rect *damaged_clips;
> > +               u32 num_clips, j;
> >
> >                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
> >                         continue;
> >
> > +               if (!new_plane_state->uapi.visible &&
> > +                   !old_plane_state->uapi.visible)
> > +                       continue;
> > +
> >                 /*
> >                  * TODO: Not clear how to handle planes with negative position,
> >                  * also planes are not updated if they have a negative X
> > @@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> >                         break;
> >                 }
> >
> > -               if (!new_plane_state->uapi.visible)
> > -                       continue;
> > +               num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
> >
> >                 /*
> > -                * For now doing a selective fetch in the whole plane area,
> > -                * optimizations will come in the future.
> > +                * If visibility or plane moved, mark the whole plane area as
> > +                * damaged as it needs to be complete redraw in the new and old
> > +                * position.
> >                  */
> > -               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > -               sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
> > -               sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
> > +               if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
> > +                   !drm_rect_equals(&new_plane_state->uapi.dst,
> > +                                    &old_plane_state->uapi.dst)) {
> > +                       if (old_plane_state->uapi.visible) {
> > +                               damaged_area.y1 = old_plane_state->uapi.dst.y1;
> > +                               damaged_area.y2 = old_plane_state->uapi.dst.y2;
> > +                               clip_area_update(&pipe_clip, &damaged_area);
> > +                       }
> > +
> > +                       if (new_plane_state->uapi.visible) {
> > +                               damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > +                               damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > +                               clip_area_update(&pipe_clip, &damaged_area);
> > +                       }
> > +                       continue;
> > +               } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> > +                          (!num_clips &&
> > +                           new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> > +                       /*
> > +                        * If the plane don't have damaged areas but the
> > +                        * framebuffer changed or alpha changed, mark the whole
> > +                        * plane area as damaged.
> > +                        */
> > +                       damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > +                       damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > +                       clip_area_update(&pipe_clip, &damaged_area);
> > +                       continue;
> > +               }
> > +
> > +               drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> > +               damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
> > +
> > +               for (j = 0; j < num_clips; j++) {
> > +                       struct drm_rect clip;
> > +
> > +                       clip.x1 = damaged_clips[j].x1;
> > +                       clip.y1 = damaged_clips[j].y1;
> > +                       clip.x2 = damaged_clips[j].x2;
> > +                       clip.y2 = damaged_clips[j].y2;
> > +                       if (drm_rect_intersect(&clip, &src))
> > +                               clip_area_update(&damaged_area, &clip);
> > +               }
> >
> > -               temp = *sel_fetch_area;
> > -               temp.y1 += new_plane_state->uapi.dst.y1;
> > -               temp.y2 += new_plane_state->uapi.dst.y2;
> > -               clip_area_update(&pipe_clip, &temp);
> > +               if (damaged_area.y1 == -1)
> > +                       continue;
> > +
> > +               damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
> > +               damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
> > +               clip_area_update(&pipe_clip, &damaged_area);
> > +       }
> > +
> > +       if (full_update)
> > +               goto skip_sel_fetch_set_loop;
> > +
> > +       /* It must be aligned to 4 lines */
> > +       pipe_clip.y1 -= pipe_clip.y1 % 4;
> > +       if (pipe_clip.y2 % 4)
> > +               pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
> > +
> > +       /*
> > +        * Now that we have the pipe damaged area check if it intersect with
> > +        * every plane, if it does set the plane selective fetch area.
> > +        */
> > +       for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > +                                            new_plane_state, i) {
> > +               struct drm_rect *sel_fetch_area, inter;
> > +
> > +               if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
> > +                   !new_plane_state->uapi.visible)
> > +                       continue;
> > +
> > +               inter = pipe_clip;
> > +               if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
> > +                       continue;
> > +
> > +               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > +               sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
> > +               sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
> >         }
> >
> > +skip_sel_fetch_set_loop:
> >         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
> >         return 0;
> >  }
> > --
> > 2.30.0
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch



-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-07-20 15:16     ` Daniel Vetter
@ 2021-07-20 15:31       ` Daniel Vetter
  2021-07-20 16:55         ` Souza, Jose
  0 siblings, 1 reply; 17+ messages in thread
From: Daniel Vetter @ 2021-07-20 15:31 UTC (permalink / raw)
  To: José Roberto de Souza, Gwan-gyeong Mun, Syrjala, Ville; +Cc: intel-gfx

On Tue, Jul 20, 2021 at 5:16 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> On Tue, Jul 20, 2021 at 5:09 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > On Mon, Jan 4, 2021 at 9:56 PM José Roberto de Souza
> > <jose.souza@intel.com> wrote:
> > >
> > > Now using plane damage clips property to calcualte the damaged area.
> > > Selective fetch only supports one region to be fetched so software
> > > needs to calculate a bounding box around all damage clips.
> > >
> > > Now that we are not complete fetching each plane, there is another
> > > loop needed as all the plane areas that intersect with the pipe
> > > damaged area needs to be fetched from memory so the complete blending
> > > of all planes can happen.
> > >
> > > v2:
> > > - do not shifting new_plane_state->uapi.dst only src is in 16.16 format
> > >
> > > v4:
> > > - setting plane selective fetch area using the whole pipe damage area
> > > - mark the whole plane area damaged if plane visibility or alpha
> > > changed
> > >
> > > v5:
> > > - taking in consideration src.y1 in the damage coordinates
> > > - adding to the pipe damaged area planes that were visible but are
> > > invisible in the new state
> > >
> > > v6:
> > > - consider old state plane coordinates when visibility changes or it
> > > moved to calculate damaged area
> > > - remove from damaged area the portion not in src clip
> > >
> > > v7:
> > > - intersec every damage clip with src to minimize damaged area
> > >
> > > v8:
> > > - adjust pipe_damaged area to 4 lines grouping
> > > - adjust calculation now that is understood that uapi.src is the
> > > framebuffer coordinates that plane will start to fetch from
> > >
> > > v9:
> > > - Only add plane dst or src to damaged_area if visible
> > > - Early skip plane damage calculation if it was not visible in old and
> > > new state
> > >
> > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> >
> > Why is this not using drm_atomic_helper_damage_merged? I just stumbled
> > over this, and this is one of the only two drivers that directly digs
> > around in the damage area, and seems to reinvent a bunch of the stuff
> > here.
>
> Also, did we merge the igts for this stuff? They unfortunately never
> landed, when vmwgfx team did all this work, but for i915 we really
> shouldn't even land new support without tests.

Lo and behold, we merge the uapi enabling way earlier than this patch here:

commit 093a3a30000926b8bda9eef773e4ed5079053350
Author: José Roberto de Souza <jose.souza@intel.com>
Date:   Thu Jun 25 18:01:47 2020 -0700

   drm/i915: Add plane damage clips property

And the igts are nowhere near to be seen, at least the stuff from
vmwgfx didn't land. Please file a JIRA internally and ping me on that
so this gets sorted out asap.

Thanks, Daniel

> > > ---
> > >  drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
> > >  1 file changed, 99 insertions(+), 14 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > > index d9a395c486d3..f5b9519b3756 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > @@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> > >         if (clip->y1 == -1)
> > >                 goto exit;
> > >
> > > +       drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
> > > +
> > >         val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
> > >         val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
> > > -       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
> > > +       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
> > >  exit:
> > >         crtc_state->psr2_man_track_ctl = val;
> > >  }
> > > @@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > >                                 struct intel_crtc *crtc)
> > >  {
> > >         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
> > > +       struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
> > >         struct intel_plane_state *new_plane_state, *old_plane_state;
> > > -       struct drm_rect pipe_clip = { .y1 = -1 };
> > >         struct intel_plane *plane;
> > >         bool full_update = false;
> > >         int i, ret;
> > > @@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > >         if (ret)
> > >                 return ret;
> > >
> > > +       /*
> > > +        * Calculate minimal selective fetch area of each plane and calculate
> > > +        * the pipe damaged area.
> > > +        * In the next loop the plane selective fetch area will actually be set
> > > +        * using whole pipe damaged area.
> > > +        */
> > >         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > >                                              new_plane_state, i) {
> > > -               struct drm_rect *sel_fetch_area, temp;
> > > +               struct drm_rect src, damaged_area = { .y1 = -1 };
> > > +               struct drm_mode_rect *damaged_clips;
> > > +               u32 num_clips, j;
> > >
> > >                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
> > >                         continue;
> > >
> > > +               if (!new_plane_state->uapi.visible &&
> > > +                   !old_plane_state->uapi.visible)
> > > +                       continue;
> > > +
> > >                 /*
> > >                  * TODO: Not clear how to handle planes with negative position,
> > >                  * also planes are not updated if they have a negative X
> > > @@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > >                         break;
> > >                 }
> > >
> > > -               if (!new_plane_state->uapi.visible)
> > > -                       continue;
> > > +               num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
> > >
> > >                 /*
> > > -                * For now doing a selective fetch in the whole plane area,
> > > -                * optimizations will come in the future.
> > > +                * If visibility or plane moved, mark the whole plane area as
> > > +                * damaged as it needs to be complete redraw in the new and old
> > > +                * position.
> > >                  */
> > > -               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > -               sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
> > > -               sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
> > > +               if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
> > > +                   !drm_rect_equals(&new_plane_state->uapi.dst,
> > > +                                    &old_plane_state->uapi.dst)) {
> > > +                       if (old_plane_state->uapi.visible) {
> > > +                               damaged_area.y1 = old_plane_state->uapi.dst.y1;
> > > +                               damaged_area.y2 = old_plane_state->uapi.dst.y2;
> > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > +                       }
> > > +
> > > +                       if (new_plane_state->uapi.visible) {
> > > +                               damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > +                               damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > +                       }
> > > +                       continue;
> > > +               } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> > > +                          (!num_clips &&
> > > +                           new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> > > +                       /*
> > > +                        * If the plane don't have damaged areas but the
> > > +                        * framebuffer changed or alpha changed, mark the whole
> > > +                        * plane area as damaged.
> > > +                        */
> > > +                       damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > +                       damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > +                       clip_area_update(&pipe_clip, &damaged_area);
> > > +                       continue;
> > > +               }
> > > +
> > > +               drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> > > +               damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
> > > +
> > > +               for (j = 0; j < num_clips; j++) {
> > > +                       struct drm_rect clip;
> > > +
> > > +                       clip.x1 = damaged_clips[j].x1;
> > > +                       clip.y1 = damaged_clips[j].y1;
> > > +                       clip.x2 = damaged_clips[j].x2;
> > > +                       clip.y2 = damaged_clips[j].y2;
> > > +                       if (drm_rect_intersect(&clip, &src))
> > > +                               clip_area_update(&damaged_area, &clip);
> > > +               }
> > >
> > > -               temp = *sel_fetch_area;
> > > -               temp.y1 += new_plane_state->uapi.dst.y1;
> > > -               temp.y2 += new_plane_state->uapi.dst.y2;
> > > -               clip_area_update(&pipe_clip, &temp);
> > > +               if (damaged_area.y1 == -1)
> > > +                       continue;
> > > +
> > > +               damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
> > > +               damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
> > > +               clip_area_update(&pipe_clip, &damaged_area);
> > > +       }
> > > +
> > > +       if (full_update)
> > > +               goto skip_sel_fetch_set_loop;
> > > +
> > > +       /* It must be aligned to 4 lines */
> > > +       pipe_clip.y1 -= pipe_clip.y1 % 4;
> > > +       if (pipe_clip.y2 % 4)
> > > +               pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
> > > +
> > > +       /*
> > > +        * Now that we have the pipe damaged area check if it intersect with
> > > +        * every plane, if it does set the plane selective fetch area.
> > > +        */
> > > +       for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > +                                            new_plane_state, i) {
> > > +               struct drm_rect *sel_fetch_area, inter;
> > > +
> > > +               if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
> > > +                   !new_plane_state->uapi.visible)
> > > +                       continue;
> > > +
> > > +               inter = pipe_clip;
> > > +               if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
> > > +                       continue;
> > > +
> > > +               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > +               sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
> > > +               sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
> > >         }
> > >
> > > +skip_sel_fetch_set_loop:
> > >         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
> > >         return 0;
> > >  }
> > > --
> > > 2.30.0
> > >
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> >
> >
> >
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
>
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch



-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-07-20 15:31       ` Daniel Vetter
@ 2021-07-20 16:55         ` Souza, Jose
  2021-07-21  7:50           ` Daniel Vetter
  0 siblings, 1 reply; 17+ messages in thread
From: Souza, Jose @ 2021-07-20 16:55 UTC (permalink / raw)
  To: daniel, Mun, Gwan-gyeong, ville.syrjala; +Cc: intel-gfx

On Tue, 2021-07-20 at 17:31 +0200, Daniel Vetter wrote:
> On Tue, Jul 20, 2021 at 5:16 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > On Tue, Jul 20, 2021 at 5:09 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > On Mon, Jan 4, 2021 at 9:56 PM José Roberto de Souza
> > > <jose.souza@intel.com> wrote:
> > > > 
> > > > Now using plane damage clips property to calcualte the damaged area.
> > > > Selective fetch only supports one region to be fetched so software
> > > > needs to calculate a bounding box around all damage clips.
> > > > 
> > > > Now that we are not complete fetching each plane, there is another
> > > > loop needed as all the plane areas that intersect with the pipe
> > > > damaged area needs to be fetched from memory so the complete blending
> > > > of all planes can happen.
> > > > 
> > > > v2:
> > > > - do not shifting new_plane_state->uapi.dst only src is in 16.16 format
> > > > 
> > > > v4:
> > > > - setting plane selective fetch area using the whole pipe damage area
> > > > - mark the whole plane area damaged if plane visibility or alpha
> > > > changed
> > > > 
> > > > v5:
> > > > - taking in consideration src.y1 in the damage coordinates
> > > > - adding to the pipe damaged area planes that were visible but are
> > > > invisible in the new state
> > > > 
> > > > v6:
> > > > - consider old state plane coordinates when visibility changes or it
> > > > moved to calculate damaged area
> > > > - remove from damaged area the portion not in src clip
> > > > 
> > > > v7:
> > > > - intersec every damage clip with src to minimize damaged area
> > > > 
> > > > v8:
> > > > - adjust pipe_damaged area to 4 lines grouping
> > > > - adjust calculation now that is understood that uapi.src is the
> > > > framebuffer coordinates that plane will start to fetch from
> > > > 
> > > > v9:
> > > > - Only add plane dst or src to damaged_area if visible
> > > > - Early skip plane damage calculation if it was not visible in old and
> > > > new state
> > > > 
> > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> > > 
> > > Why is this not using drm_atomic_helper_damage_merged? I just stumbled
> > > over this, and this is one of the only two drivers that directly digs
> > > around in the damage area, and seems to reinvent a bunch of the stuff
> > > here.

We can use drm_atomic_helper_damage_merged() but it would only save us one for loop.

> > 
> > Also, did we merge the igts for this stuff? They unfortunately never
> > landed, when vmwgfx team did all this work, but for i915 we really
> > shouldn't even land new support without tests.
> 
> Lo and behold, we merge the uapi enabling way earlier than this patch here:
> 
> commit 093a3a30000926b8bda9eef773e4ed5079053350
> Author: José Roberto de Souza <jose.souza@intel.com>
> Date:   Thu Jun 25 18:01:47 2020 -0700
> 
>    drm/i915: Add plane damage clips property
> 
> And the igts are nowhere near to be seen, at least the stuff from
> vmwgfx didn't land. Please file a JIRA internally and ping me on that
> so this gets sorted out asap.

Here the IGT: https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/tests/kms_psr2_sf.c

> 
> Thanks, Daniel
> 
> > > > ---
> > > >  drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
> > > >  1 file changed, 99 insertions(+), 14 deletions(-)
> > > > 
> > > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > index d9a395c486d3..f5b9519b3756 100644
> > > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > @@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> > > >         if (clip->y1 == -1)
> > > >                 goto exit;
> > > > 
> > > > +       drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
> > > > +
> > > >         val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
> > > >         val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
> > > > -       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
> > > > +       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
> > > >  exit:
> > > >         crtc_state->psr2_man_track_ctl = val;
> > > >  }
> > > > @@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > >                                 struct intel_crtc *crtc)
> > > >  {
> > > >         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
> > > > +       struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
> > > >         struct intel_plane_state *new_plane_state, *old_plane_state;
> > > > -       struct drm_rect pipe_clip = { .y1 = -1 };
> > > >         struct intel_plane *plane;
> > > >         bool full_update = false;
> > > >         int i, ret;
> > > > @@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > >         if (ret)
> > > >                 return ret;
> > > > 
> > > > +       /*
> > > > +        * Calculate minimal selective fetch area of each plane and calculate
> > > > +        * the pipe damaged area.
> > > > +        * In the next loop the plane selective fetch area will actually be set
> > > > +        * using whole pipe damaged area.
> > > > +        */
> > > >         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > >                                              new_plane_state, i) {
> > > > -               struct drm_rect *sel_fetch_area, temp;
> > > > +               struct drm_rect src, damaged_area = { .y1 = -1 };
> > > > +               struct drm_mode_rect *damaged_clips;
> > > > +               u32 num_clips, j;
> > > > 
> > > >                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
> > > >                         continue;
> > > > 
> > > > +               if (!new_plane_state->uapi.visible &&
> > > > +                   !old_plane_state->uapi.visible)
> > > > +                       continue;
> > > > +
> > > >                 /*
> > > >                  * TODO: Not clear how to handle planes with negative position,
> > > >                  * also planes are not updated if they have a negative X
> > > > @@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > >                         break;
> > > >                 }
> > > > 
> > > > -               if (!new_plane_state->uapi.visible)
> > > > -                       continue;
> > > > +               num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
> > > > 
> > > >                 /*
> > > > -                * For now doing a selective fetch in the whole plane area,
> > > > -                * optimizations will come in the future.
> > > > +                * If visibility or plane moved, mark the whole plane area as
> > > > +                * damaged as it needs to be complete redraw in the new and old
> > > > +                * position.
> > > >                  */
> > > > -               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > -               sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
> > > > -               sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
> > > > +               if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
> > > > +                   !drm_rect_equals(&new_plane_state->uapi.dst,
> > > > +                                    &old_plane_state->uapi.dst)) {
> > > > +                       if (old_plane_state->uapi.visible) {
> > > > +                               damaged_area.y1 = old_plane_state->uapi.dst.y1;
> > > > +                               damaged_area.y2 = old_plane_state->uapi.dst.y2;
> > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > +                       }
> > > > +
> > > > +                       if (new_plane_state->uapi.visible) {
> > > > +                               damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > +                               damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > +                       }
> > > > +                       continue;
> > > > +               } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> > > > +                          (!num_clips &&
> > > > +                           new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> > > > +                       /*
> > > > +                        * If the plane don't have damaged areas but the
> > > > +                        * framebuffer changed or alpha changed, mark the whole
> > > > +                        * plane area as damaged.
> > > > +                        */
> > > > +                       damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > +                       damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > +                       clip_area_update(&pipe_clip, &damaged_area);
> > > > +                       continue;
> > > > +               }
> > > > +
> > > > +               drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> > > > +               damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
> > > > +
> > > > +               for (j = 0; j < num_clips; j++) {
> > > > +                       struct drm_rect clip;
> > > > +
> > > > +                       clip.x1 = damaged_clips[j].x1;
> > > > +                       clip.y1 = damaged_clips[j].y1;
> > > > +                       clip.x2 = damaged_clips[j].x2;
> > > > +                       clip.y2 = damaged_clips[j].y2;
> > > > +                       if (drm_rect_intersect(&clip, &src))
> > > > +                               clip_area_update(&damaged_area, &clip);
> > > > +               }
> > > > 
> > > > -               temp = *sel_fetch_area;
> > > > -               temp.y1 += new_plane_state->uapi.dst.y1;
> > > > -               temp.y2 += new_plane_state->uapi.dst.y2;
> > > > -               clip_area_update(&pipe_clip, &temp);
> > > > +               if (damaged_area.y1 == -1)
> > > > +                       continue;
> > > > +
> > > > +               damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > +               damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > +               clip_area_update(&pipe_clip, &damaged_area);
> > > > +       }
> > > > +
> > > > +       if (full_update)
> > > > +               goto skip_sel_fetch_set_loop;
> > > > +
> > > > +       /* It must be aligned to 4 lines */
> > > > +       pipe_clip.y1 -= pipe_clip.y1 % 4;
> > > > +       if (pipe_clip.y2 % 4)
> > > > +               pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
> > > > +
> > > > +       /*
> > > > +        * Now that we have the pipe damaged area check if it intersect with
> > > > +        * every plane, if it does set the plane selective fetch area.
> > > > +        */
> > > > +       for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > +                                            new_plane_state, i) {
> > > > +               struct drm_rect *sel_fetch_area, inter;
> > > > +
> > > > +               if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
> > > > +                   !new_plane_state->uapi.visible)
> > > > +                       continue;
> > > > +
> > > > +               inter = pipe_clip;
> > > > +               if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
> > > > +                       continue;
> > > > +
> > > > +               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > +               sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
> > > > +               sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
> > > >         }
> > > > 
> > > > +skip_sel_fetch_set_loop:
> > > >         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
> > > >         return 0;
> > > >  }
> > > > --
> > > > 2.30.0
> > > > 
> > > > _______________________________________________
> > > > Intel-gfx mailing list
> > > > Intel-gfx@lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > > 
> > > 
> > > 
> > > --
> > > Daniel Vetter
> > > Software Engineer, Intel Corporation
> > > http://blog.ffwll.ch
> > 
> > 
> > 
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
> 
> 
> 

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

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

* Re: [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-07-20 16:55         ` Souza, Jose
@ 2021-07-21  7:50           ` Daniel Vetter
  2021-07-21  7:56             ` Daniel Vetter
  0 siblings, 1 reply; 17+ messages in thread
From: Daniel Vetter @ 2021-07-21  7:50 UTC (permalink / raw)
  To: Souza, Jose; +Cc: intel-gfx

On Tue, Jul 20, 2021 at 6:55 PM Souza, Jose <jose.souza@intel.com> wrote:
> On Tue, 2021-07-20 at 17:31 +0200, Daniel Vetter wrote:
> > On Tue, Jul 20, 2021 at 5:16 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > On Tue, Jul 20, 2021 at 5:09 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > > On Mon, Jan 4, 2021 at 9:56 PM José Roberto de Souza
> > > > <jose.souza@intel.com> wrote:
> > > > >
> > > > > Now using plane damage clips property to calcualte the damaged area.
> > > > > Selective fetch only supports one region to be fetched so software
> > > > > needs to calculate a bounding box around all damage clips.
> > > > >
> > > > > Now that we are not complete fetching each plane, there is another
> > > > > loop needed as all the plane areas that intersect with the pipe
> > > > > damaged area needs to be fetched from memory so the complete blending
> > > > > of all planes can happen.
> > > > >
> > > > > v2:
> > > > > - do not shifting new_plane_state->uapi.dst only src is in 16.16 format
> > > > >
> > > > > v4:
> > > > > - setting plane selective fetch area using the whole pipe damage area
> > > > > - mark the whole plane area damaged if plane visibility or alpha
> > > > > changed
> > > > >
> > > > > v5:
> > > > > - taking in consideration src.y1 in the damage coordinates
> > > > > - adding to the pipe damaged area planes that were visible but are
> > > > > invisible in the new state
> > > > >
> > > > > v6:
> > > > > - consider old state plane coordinates when visibility changes or it
> > > > > moved to calculate damaged area
> > > > > - remove from damaged area the portion not in src clip
> > > > >
> > > > > v7:
> > > > > - intersec every damage clip with src to minimize damaged area
> > > > >
> > > > > v8:
> > > > > - adjust pipe_damaged area to 4 lines grouping
> > > > > - adjust calculation now that is understood that uapi.src is the
> > > > > framebuffer coordinates that plane will start to fetch from
> > > > >
> > > > > v9:
> > > > > - Only add plane dst or src to damaged_area if visible
> > > > > - Early skip plane damage calculation if it was not visible in old and
> > > > > new state
> > > > >
> > > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> > > >
> > > > Why is this not using drm_atomic_helper_damage_merged? I just stumbled
> > > > over this, and this is one of the only two drivers that directly digs
> > > > around in the damage area, and seems to reinvent a bunch of the stuff
> > > > here.
>
> We can use drm_atomic_helper_damage_merged() but it would only save us one for loop.

Yes please. The trouble with rolling our own copies for everything is
that it does add up.

> > > Also, did we merge the igts for this stuff? They unfortunately never
> > > landed, when vmwgfx team did all this work, but for i915 we really
> > > shouldn't even land new support without tests.
> >
> > Lo and behold, we merge the uapi enabling way earlier than this patch here:
> >
> > commit 093a3a30000926b8bda9eef773e4ed5079053350
> > Author: José Roberto de Souza <jose.souza@intel.com>
> > Date:   Thu Jun 25 18:01:47 2020 -0700
> >
> >    drm/i915: Add plane damage clips property
> >
> > And the igts are nowhere near to be seen, at least the stuff from
> > vmwgfx didn't land. Please file a JIRA internally and ping me on that
> > so this gets sorted out asap.
>
> Here the IGT: https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/tests/kms_psr2_sf.c

There was some igts that were cross-driver, not intel specific. The
thing here is supposed to be a cross-vendor interface, so would be
really good if you resurrect those from vmwgfx folks and land them
too:

https://patchwork.freedesktop.org/series/51087/

Cheers, Daniel



>
> >
> > Thanks, Daniel
> >
> > > > > ---
> > > > >  drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
> > > > >  1 file changed, 99 insertions(+), 14 deletions(-)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > index d9a395c486d3..f5b9519b3756 100644
> > > > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > @@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> > > > >         if (clip->y1 == -1)
> > > > >                 goto exit;
> > > > >
> > > > > +       drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
> > > > > +
> > > > >         val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
> > > > >         val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
> > > > > -       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
> > > > > +       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
> > > > >  exit:
> > > > >         crtc_state->psr2_man_track_ctl = val;
> > > > >  }
> > > > > @@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > >                                 struct intel_crtc *crtc)
> > > > >  {
> > > > >         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
> > > > > +       struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
> > > > >         struct intel_plane_state *new_plane_state, *old_plane_state;
> > > > > -       struct drm_rect pipe_clip = { .y1 = -1 };
> > > > >         struct intel_plane *plane;
> > > > >         bool full_update = false;
> > > > >         int i, ret;
> > > > > @@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > >         if (ret)
> > > > >                 return ret;
> > > > >
> > > > > +       /*
> > > > > +        * Calculate minimal selective fetch area of each plane and calculate
> > > > > +        * the pipe damaged area.
> > > > > +        * In the next loop the plane selective fetch area will actually be set
> > > > > +        * using whole pipe damaged area.
> > > > > +        */
> > > > >         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > >                                              new_plane_state, i) {
> > > > > -               struct drm_rect *sel_fetch_area, temp;
> > > > > +               struct drm_rect src, damaged_area = { .y1 = -1 };
> > > > > +               struct drm_mode_rect *damaged_clips;
> > > > > +               u32 num_clips, j;
> > > > >
> > > > >                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
> > > > >                         continue;
> > > > >
> > > > > +               if (!new_plane_state->uapi.visible &&
> > > > > +                   !old_plane_state->uapi.visible)
> > > > > +                       continue;
> > > > > +
> > > > >                 /*
> > > > >                  * TODO: Not clear how to handle planes with negative position,
> > > > >                  * also planes are not updated if they have a negative X
> > > > > @@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > >                         break;
> > > > >                 }
> > > > >
> > > > > -               if (!new_plane_state->uapi.visible)
> > > > > -                       continue;
> > > > > +               num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
> > > > >
> > > > >                 /*
> > > > > -                * For now doing a selective fetch in the whole plane area,
> > > > > -                * optimizations will come in the future.
> > > > > +                * If visibility or plane moved, mark the whole plane area as
> > > > > +                * damaged as it needs to be complete redraw in the new and old
> > > > > +                * position.
> > > > >                  */
> > > > > -               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > -               sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
> > > > > -               sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
> > > > > +               if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
> > > > > +                   !drm_rect_equals(&new_plane_state->uapi.dst,
> > > > > +                                    &old_plane_state->uapi.dst)) {
> > > > > +                       if (old_plane_state->uapi.visible) {
> > > > > +                               damaged_area.y1 = old_plane_state->uapi.dst.y1;
> > > > > +                               damaged_area.y2 = old_plane_state->uapi.dst.y2;
> > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > +                       }
> > > > > +
> > > > > +                       if (new_plane_state->uapi.visible) {
> > > > > +                               damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > +                               damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > +                       }
> > > > > +                       continue;
> > > > > +               } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> > > > > +                          (!num_clips &&
> > > > > +                           new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> > > > > +                       /*
> > > > > +                        * If the plane don't have damaged areas but the
> > > > > +                        * framebuffer changed or alpha changed, mark the whole
> > > > > +                        * plane area as damaged.
> > > > > +                        */
> > > > > +                       damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > +                       damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > +                       clip_area_update(&pipe_clip, &damaged_area);
> > > > > +                       continue;
> > > > > +               }
> > > > > +
> > > > > +               drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> > > > > +               damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
> > > > > +
> > > > > +               for (j = 0; j < num_clips; j++) {
> > > > > +                       struct drm_rect clip;
> > > > > +
> > > > > +                       clip.x1 = damaged_clips[j].x1;
> > > > > +                       clip.y1 = damaged_clips[j].y1;
> > > > > +                       clip.x2 = damaged_clips[j].x2;
> > > > > +                       clip.y2 = damaged_clips[j].y2;
> > > > > +                       if (drm_rect_intersect(&clip, &src))
> > > > > +                               clip_area_update(&damaged_area, &clip);
> > > > > +               }
> > > > >
> > > > > -               temp = *sel_fetch_area;
> > > > > -               temp.y1 += new_plane_state->uapi.dst.y1;
> > > > > -               temp.y2 += new_plane_state->uapi.dst.y2;
> > > > > -               clip_area_update(&pipe_clip, &temp);
> > > > > +               if (damaged_area.y1 == -1)
> > > > > +                       continue;
> > > > > +
> > > > > +               damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > +               damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > +               clip_area_update(&pipe_clip, &damaged_area);
> > > > > +       }
> > > > > +
> > > > > +       if (full_update)
> > > > > +               goto skip_sel_fetch_set_loop;
> > > > > +
> > > > > +       /* It must be aligned to 4 lines */
> > > > > +       pipe_clip.y1 -= pipe_clip.y1 % 4;
> > > > > +       if (pipe_clip.y2 % 4)
> > > > > +               pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
> > > > > +
> > > > > +       /*
> > > > > +        * Now that we have the pipe damaged area check if it intersect with
> > > > > +        * every plane, if it does set the plane selective fetch area.
> > > > > +        */
> > > > > +       for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > > +                                            new_plane_state, i) {
> > > > > +               struct drm_rect *sel_fetch_area, inter;
> > > > > +
> > > > > +               if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
> > > > > +                   !new_plane_state->uapi.visible)
> > > > > +                       continue;
> > > > > +
> > > > > +               inter = pipe_clip;
> > > > > +               if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
> > > > > +                       continue;
> > > > > +
> > > > > +               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > +               sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
> > > > > +               sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
> > > > >         }
> > > > >
> > > > > +skip_sel_fetch_set_loop:
> > > > >         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
> > > > >         return 0;
> > > > >  }
> > > > > --
> > > > > 2.30.0
> > > > >
> > > > > _______________________________________________
> > > > > Intel-gfx mailing list
> > > > > Intel-gfx@lists.freedesktop.org
> > > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > > >
> > > >
> > > >
> > > > --
> > > > Daniel Vetter
> > > > Software Engineer, Intel Corporation
> > > > http://blog.ffwll.ch
> > >
> > >
> > >
> > > --
> > > Daniel Vetter
> > > Software Engineer, Intel Corporation
> > > http://blog.ffwll.ch
> >
> >
> >
>


--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-07-21  7:50           ` Daniel Vetter
@ 2021-07-21  7:56             ` Daniel Vetter
  2021-07-21  8:20               ` Daniel Vetter
  2021-07-21 19:42               ` Souza, Jose
  0 siblings, 2 replies; 17+ messages in thread
From: Daniel Vetter @ 2021-07-21  7:56 UTC (permalink / raw)
  To: Souza, Jose, Pankaj Bharadiya; +Cc: intel-gfx

On Wed, Jul 21, 2021 at 9:50 AM Daniel Vetter <daniel@ffwll.ch> wrote:
> On Tue, Jul 20, 2021 at 6:55 PM Souza, Jose <jose.souza@intel.com> wrote:
> > On Tue, 2021-07-20 at 17:31 +0200, Daniel Vetter wrote:
> > > On Tue, Jul 20, 2021 at 5:16 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > > On Tue, Jul 20, 2021 at 5:09 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > > > On Mon, Jan 4, 2021 at 9:56 PM José Roberto de Souza
> > > > > <jose.souza@intel.com> wrote:
> > > > > >
> > > > > > Now using plane damage clips property to calcualte the damaged area.
> > > > > > Selective fetch only supports one region to be fetched so software
> > > > > > needs to calculate a bounding box around all damage clips.
> > > > > >
> > > > > > Now that we are not complete fetching each plane, there is another
> > > > > > loop needed as all the plane areas that intersect with the pipe
> > > > > > damaged area needs to be fetched from memory so the complete blending
> > > > > > of all planes can happen.
> > > > > >
> > > > > > v2:
> > > > > > - do not shifting new_plane_state->uapi.dst only src is in 16.16 format
> > > > > >
> > > > > > v4:
> > > > > > - setting plane selective fetch area using the whole pipe damage area
> > > > > > - mark the whole plane area damaged if plane visibility or alpha
> > > > > > changed
> > > > > >
> > > > > > v5:
> > > > > > - taking in consideration src.y1 in the damage coordinates
> > > > > > - adding to the pipe damaged area planes that were visible but are
> > > > > > invisible in the new state
> > > > > >
> > > > > > v6:
> > > > > > - consider old state plane coordinates when visibility changes or it
> > > > > > moved to calculate damaged area
> > > > > > - remove from damaged area the portion not in src clip
> > > > > >
> > > > > > v7:
> > > > > > - intersec every damage clip with src to minimize damaged area
> > > > > >
> > > > > > v8:
> > > > > > - adjust pipe_damaged area to 4 lines grouping
> > > > > > - adjust calculation now that is understood that uapi.src is the
> > > > > > framebuffer coordinates that plane will start to fetch from
> > > > > >
> > > > > > v9:
> > > > > > - Only add plane dst or src to damaged_area if visible
> > > > > > - Early skip plane damage calculation if it was not visible in old and
> > > > > > new state
> > > > > >
> > > > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > > Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > > Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> > > > >
> > > > > Why is this not using drm_atomic_helper_damage_merged? I just stumbled
> > > > > over this, and this is one of the only two drivers that directly digs
> > > > > around in the damage area, and seems to reinvent a bunch of the stuff
> > > > > here.
> >
> > We can use drm_atomic_helper_damage_merged() but it would only save us one for loop.
>
> Yes please. The trouble with rolling our own copies for everything is
> that it does add up.
>
> > > > Also, did we merge the igts for this stuff? They unfortunately never
> > > > landed, when vmwgfx team did all this work, but for i915 we really
> > > > shouldn't even land new support without tests.
> > >
> > > Lo and behold, we merge the uapi enabling way earlier than this patch here:
> > >
> > > commit 093a3a30000926b8bda9eef773e4ed5079053350
> > > Author: José Roberto de Souza <jose.souza@intel.com>
> > > Date:   Thu Jun 25 18:01:47 2020 -0700
> > >
> > >    drm/i915: Add plane damage clips property
> > >
> > > And the igts are nowhere near to be seen, at least the stuff from
> > > vmwgfx didn't land. Please file a JIRA internally and ping me on that
> > > so this gets sorted out asap.
> >
> > Here the IGT: https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/tests/kms_psr2_sf.c
>
> There was some igts that were cross-driver, not intel specific. The
> thing here is supposed to be a cross-vendor interface, so would be
> really good if you resurrect those from vmwgfx folks and land them
> too:
>
> https://patchwork.freedesktop.org/series/51087/

Also from a very quick look at the kms_psr2_sf tests there's really
not a whole lot specific about our psr2 implementation in there. The
test should work on any plane with a FB_DAMAGE_CLIPS rect available,
so there's no reason to make this specific to intel, much less to
psr2. I think we need to:
- make this a generic kms test, it should work
- merge with the testcases from the folks who merged FB_DAMAGE_CLIPS
originally to make sure all drivers follow the same contract.

KMS properties are generic, intel-specific tests for when there's
nothing intel-specific isn't good. Also adding Pankaj.

Cheers, Daniel

> >
> > >
> > > Thanks, Daniel
> > >
> > > > > > ---
> > > > > >  drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
> > > > > >  1 file changed, 99 insertions(+), 14 deletions(-)
> > > > > >
> > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > index d9a395c486d3..f5b9519b3756 100644
> > > > > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > @@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> > > > > >         if (clip->y1 == -1)
> > > > > >                 goto exit;
> > > > > >
> > > > > > +       drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
> > > > > > +
> > > > > >         val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
> > > > > >         val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
> > > > > > -       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
> > > > > > +       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
> > > > > >  exit:
> > > > > >         crtc_state->psr2_man_track_ctl = val;
> > > > > >  }
> > > > > > @@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > >                                 struct intel_crtc *crtc)
> > > > > >  {
> > > > > >         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
> > > > > > +       struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
> > > > > >         struct intel_plane_state *new_plane_state, *old_plane_state;
> > > > > > -       struct drm_rect pipe_clip = { .y1 = -1 };
> > > > > >         struct intel_plane *plane;
> > > > > >         bool full_update = false;
> > > > > >         int i, ret;
> > > > > > @@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > >         if (ret)
> > > > > >                 return ret;
> > > > > >
> > > > > > +       /*
> > > > > > +        * Calculate minimal selective fetch area of each plane and calculate
> > > > > > +        * the pipe damaged area.
> > > > > > +        * In the next loop the plane selective fetch area will actually be set
> > > > > > +        * using whole pipe damaged area.
> > > > > > +        */
> > > > > >         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > > >                                              new_plane_state, i) {
> > > > > > -               struct drm_rect *sel_fetch_area, temp;
> > > > > > +               struct drm_rect src, damaged_area = { .y1 = -1 };
> > > > > > +               struct drm_mode_rect *damaged_clips;
> > > > > > +               u32 num_clips, j;
> > > > > >
> > > > > >                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
> > > > > >                         continue;
> > > > > >
> > > > > > +               if (!new_plane_state->uapi.visible &&
> > > > > > +                   !old_plane_state->uapi.visible)
> > > > > > +                       continue;
> > > > > > +
> > > > > >                 /*
> > > > > >                  * TODO: Not clear how to handle planes with negative position,
> > > > > >                  * also planes are not updated if they have a negative X
> > > > > > @@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > >                         break;
> > > > > >                 }
> > > > > >
> > > > > > -               if (!new_plane_state->uapi.visible)
> > > > > > -                       continue;
> > > > > > +               num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
> > > > > >
> > > > > >                 /*
> > > > > > -                * For now doing a selective fetch in the whole plane area,
> > > > > > -                * optimizations will come in the future.
> > > > > > +                * If visibility or plane moved, mark the whole plane area as
> > > > > > +                * damaged as it needs to be complete redraw in the new and old
> > > > > > +                * position.
> > > > > >                  */
> > > > > > -               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > > -               sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
> > > > > > -               sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
> > > > > > +               if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
> > > > > > +                   !drm_rect_equals(&new_plane_state->uapi.dst,
> > > > > > +                                    &old_plane_state->uapi.dst)) {
> > > > > > +                       if (old_plane_state->uapi.visible) {
> > > > > > +                               damaged_area.y1 = old_plane_state->uapi.dst.y1;
> > > > > > +                               damaged_area.y2 = old_plane_state->uapi.dst.y2;
> > > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > +                       }
> > > > > > +
> > > > > > +                       if (new_plane_state->uapi.visible) {
> > > > > > +                               damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > > +                               damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > +                       }
> > > > > > +                       continue;
> > > > > > +               } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> > > > > > +                          (!num_clips &&
> > > > > > +                           new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> > > > > > +                       /*
> > > > > > +                        * If the plane don't have damaged areas but the
> > > > > > +                        * framebuffer changed or alpha changed, mark the whole
> > > > > > +                        * plane area as damaged.
> > > > > > +                        */
> > > > > > +                       damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > > +                       damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > > +                       clip_area_update(&pipe_clip, &damaged_area);
> > > > > > +                       continue;
> > > > > > +               }
> > > > > > +
> > > > > > +               drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> > > > > > +               damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
> > > > > > +
> > > > > > +               for (j = 0; j < num_clips; j++) {
> > > > > > +                       struct drm_rect clip;
> > > > > > +
> > > > > > +                       clip.x1 = damaged_clips[j].x1;
> > > > > > +                       clip.y1 = damaged_clips[j].y1;
> > > > > > +                       clip.x2 = damaged_clips[j].x2;
> > > > > > +                       clip.y2 = damaged_clips[j].y2;
> > > > > > +                       if (drm_rect_intersect(&clip, &src))
> > > > > > +                               clip_area_update(&damaged_area, &clip);
> > > > > > +               }
> > > > > >
> > > > > > -               temp = *sel_fetch_area;
> > > > > > -               temp.y1 += new_plane_state->uapi.dst.y1;
> > > > > > -               temp.y2 += new_plane_state->uapi.dst.y2;
> > > > > > -               clip_area_update(&pipe_clip, &temp);
> > > > > > +               if (damaged_area.y1 == -1)
> > > > > > +                       continue;
> > > > > > +
> > > > > > +               damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > > +               damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > > +               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > +       }
> > > > > > +
> > > > > > +       if (full_update)
> > > > > > +               goto skip_sel_fetch_set_loop;
> > > > > > +
> > > > > > +       /* It must be aligned to 4 lines */
> > > > > > +       pipe_clip.y1 -= pipe_clip.y1 % 4;
> > > > > > +       if (pipe_clip.y2 % 4)
> > > > > > +               pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
> > > > > > +
> > > > > > +       /*
> > > > > > +        * Now that we have the pipe damaged area check if it intersect with
> > > > > > +        * every plane, if it does set the plane selective fetch area.
> > > > > > +        */
> > > > > > +       for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > > > +                                            new_plane_state, i) {
> > > > > > +               struct drm_rect *sel_fetch_area, inter;
> > > > > > +
> > > > > > +               if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
> > > > > > +                   !new_plane_state->uapi.visible)
> > > > > > +                       continue;
> > > > > > +
> > > > > > +               inter = pipe_clip;
> > > > > > +               if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
> > > > > > +                       continue;
> > > > > > +
> > > > > > +               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > > +               sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
> > > > > > +               sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
> > > > > >         }
> > > > > >
> > > > > > +skip_sel_fetch_set_loop:
> > > > > >         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
> > > > > >         return 0;
> > > > > >  }
> > > > > > --
> > > > > > 2.30.0
> > > > > >
> > > > > > _______________________________________________
> > > > > > Intel-gfx mailing list
> > > > > > Intel-gfx@lists.freedesktop.org
> > > > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Daniel Vetter
> > > > > Software Engineer, Intel Corporation
> > > > > http://blog.ffwll.ch
> > > >
> > > >
> > > >
> > > > --
> > > > Daniel Vetter
> > > > Software Engineer, Intel Corporation
> > > > http://blog.ffwll.ch
> > >
> > >
> > >
> >
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch



-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-07-21  7:56             ` Daniel Vetter
@ 2021-07-21  8:20               ` Daniel Vetter
  2021-07-21 19:42               ` Souza, Jose
  1 sibling, 0 replies; 17+ messages in thread
From: Daniel Vetter @ 2021-07-21  8:20 UTC (permalink / raw)
  To: Souza, Jose, Pankaj Bharadiya, IGT development; +Cc: intel-gfx

On Wed, Jul 21, 2021 at 9:56 AM Daniel Vetter <daniel@ffwll.ch> wrote:
> On Wed, Jul 21, 2021 at 9:50 AM Daniel Vetter <daniel@ffwll.ch> wrote:
> > On Tue, Jul 20, 2021 at 6:55 PM Souza, Jose <jose.souza@intel.com> wrote:
> > > On Tue, 2021-07-20 at 17:31 +0200, Daniel Vetter wrote:
> > > > On Tue, Jul 20, 2021 at 5:16 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > > > On Tue, Jul 20, 2021 at 5:09 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > > > > On Mon, Jan 4, 2021 at 9:56 PM José Roberto de Souza
> > > > > > <jose.souza@intel.com> wrote:
> > > > > > >
> > > > > > > Now using plane damage clips property to calcualte the damaged area.
> > > > > > > Selective fetch only supports one region to be fetched so software
> > > > > > > needs to calculate a bounding box around all damage clips.
> > > > > > >
> > > > > > > Now that we are not complete fetching each plane, there is another
> > > > > > > loop needed as all the plane areas that intersect with the pipe
> > > > > > > damaged area needs to be fetched from memory so the complete blending
> > > > > > > of all planes can happen.
> > > > > > >
> > > > > > > v2:
> > > > > > > - do not shifting new_plane_state->uapi.dst only src is in 16.16 format
> > > > > > >
> > > > > > > v4:
> > > > > > > - setting plane selective fetch area using the whole pipe damage area
> > > > > > > - mark the whole plane area damaged if plane visibility or alpha
> > > > > > > changed
> > > > > > >
> > > > > > > v5:
> > > > > > > - taking in consideration src.y1 in the damage coordinates
> > > > > > > - adding to the pipe damaged area planes that were visible but are
> > > > > > > invisible in the new state
> > > > > > >
> > > > > > > v6:
> > > > > > > - consider old state plane coordinates when visibility changes or it
> > > > > > > moved to calculate damaged area
> > > > > > > - remove from damaged area the portion not in src clip
> > > > > > >
> > > > > > > v7:
> > > > > > > - intersec every damage clip with src to minimize damaged area
> > > > > > >
> > > > > > > v8:
> > > > > > > - adjust pipe_damaged area to 4 lines grouping
> > > > > > > - adjust calculation now that is understood that uapi.src is the
> > > > > > > framebuffer coordinates that plane will start to fetch from
> > > > > > >
> > > > > > > v9:
> > > > > > > - Only add plane dst or src to damaged_area if visible
> > > > > > > - Early skip plane damage calculation if it was not visible in old and
> > > > > > > new state
> > > > > > >
> > > > > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > > > Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > > > Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> > > > > >
> > > > > > Why is this not using drm_atomic_helper_damage_merged? I just stumbled
> > > > > > over this, and this is one of the only two drivers that directly digs
> > > > > > around in the damage area, and seems to reinvent a bunch of the stuff
> > > > > > here.
> > >
> > > We can use drm_atomic_helper_damage_merged() but it would only save us one for loop.
> >
> > Yes please. The trouble with rolling our own copies for everything is
> > that it does add up.
> >
> > > > > Also, did we merge the igts for this stuff? They unfortunately never
> > > > > landed, when vmwgfx team did all this work, but for i915 we really
> > > > > shouldn't even land new support without tests.
> > > >
> > > > Lo and behold, we merge the uapi enabling way earlier than this patch here:
> > > >
> > > > commit 093a3a30000926b8bda9eef773e4ed5079053350
> > > > Author: José Roberto de Souza <jose.souza@intel.com>
> > > > Date:   Thu Jun 25 18:01:47 2020 -0700
> > > >
> > > >    drm/i915: Add plane damage clips property
> > > >
> > > > And the igts are nowhere near to be seen, at least the stuff from
> > > > vmwgfx didn't land. Please file a JIRA internally and ping me on that
> > > > so this gets sorted out asap.
> > >
> > > Here the IGT: https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/tests/kms_psr2_sf.c
> >
> > There was some igts that were cross-driver, not intel specific. The
> > thing here is supposed to be a cross-vendor interface, so would be
> > really good if you resurrect those from vmwgfx folks and land them
> > too:
> >
> > https://patchwork.freedesktop.org/series/51087/
>
> Also from a very quick look at the kms_psr2_sf tests there's really
> not a whole lot specific about our psr2 implementation in there. The
> test should work on any plane with a FB_DAMAGE_CLIPS rect available,
> so there's no reason to make this specific to intel, much less to
> psr2. I think we need to:
> - make this a generic kms test, it should work
> - merge with the testcases from the folks who merged FB_DAMAGE_CLIPS
> originally to make sure all drivers follow the same contract.
>
> KMS properties are generic, intel-specific tests for when there's
> nothing intel-specific isn't good. Also adding Pankaj.

Looks like Pankaj no longer working at intel.

Another one is this here:

    igt_debug_manual_check("all", expected);

That's like the worst name because it means we can only enable this
manual checkpoint when "all" is set, which also enables all others. It
seems copypasta from from other kms_psr tests. Please:
- fix this and replace the string with something useful
- patch the igt functions igt_debug_manual_check() and
igt_debug_wait_for_keypress() to assert if "all" is supplied, and
update docs accordingly

I'm also not super convinced the testcase design makes sense, it
creates a new subtest for each block position, instead of having a few
functional subtests and then moving the blocks around. FB_DAMAGE_CLIPS
is about updates, and you don't test updates if you split each update
into a separate subtest (which CI splits up in its runs). That just
wastes machine time.

If this is copypasta from other psr tests, then those need to be fixed up too.

Also since we're deep in igt discussions, adding igt list too.

Cheers, Daniel

> > >
> > > >
> > > > Thanks, Daniel
> > > >
> > > > > > > ---
> > > > > > >  drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
> > > > > > >  1 file changed, 99 insertions(+), 14 deletions(-)
> > > > > > >
> > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > > index d9a395c486d3..f5b9519b3756 100644
> > > > > > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > > @@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> > > > > > >         if (clip->y1 == -1)
> > > > > > >                 goto exit;
> > > > > > >
> > > > > > > +       drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
> > > > > > > +
> > > > > > >         val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
> > > > > > >         val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
> > > > > > > -       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
> > > > > > > +       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
> > > > > > >  exit:
> > > > > > >         crtc_state->psr2_man_track_ctl = val;
> > > > > > >  }
> > > > > > > @@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > > >                                 struct intel_crtc *crtc)
> > > > > > >  {
> > > > > > >         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
> > > > > > > +       struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
> > > > > > >         struct intel_plane_state *new_plane_state, *old_plane_state;
> > > > > > > -       struct drm_rect pipe_clip = { .y1 = -1 };
> > > > > > >         struct intel_plane *plane;
> > > > > > >         bool full_update = false;
> > > > > > >         int i, ret;
> > > > > > > @@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > > >         if (ret)
> > > > > > >                 return ret;
> > > > > > >
> > > > > > > +       /*
> > > > > > > +        * Calculate minimal selective fetch area of each plane and calculate
> > > > > > > +        * the pipe damaged area.
> > > > > > > +        * In the next loop the plane selective fetch area will actually be set
> > > > > > > +        * using whole pipe damaged area.
> > > > > > > +        */
> > > > > > >         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > > > >                                              new_plane_state, i) {
> > > > > > > -               struct drm_rect *sel_fetch_area, temp;
> > > > > > > +               struct drm_rect src, damaged_area = { .y1 = -1 };
> > > > > > > +               struct drm_mode_rect *damaged_clips;
> > > > > > > +               u32 num_clips, j;
> > > > > > >
> > > > > > >                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
> > > > > > >                         continue;
> > > > > > >
> > > > > > > +               if (!new_plane_state->uapi.visible &&
> > > > > > > +                   !old_plane_state->uapi.visible)
> > > > > > > +                       continue;
> > > > > > > +
> > > > > > >                 /*
> > > > > > >                  * TODO: Not clear how to handle planes with negative position,
> > > > > > >                  * also planes are not updated if they have a negative X
> > > > > > > @@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > > >                         break;
> > > > > > >                 }
> > > > > > >
> > > > > > > -               if (!new_plane_state->uapi.visible)
> > > > > > > -                       continue;
> > > > > > > +               num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
> > > > > > >
> > > > > > >                 /*
> > > > > > > -                * For now doing a selective fetch in the whole plane area,
> > > > > > > -                * optimizations will come in the future.
> > > > > > > +                * If visibility or plane moved, mark the whole plane area as
> > > > > > > +                * damaged as it needs to be complete redraw in the new and old
> > > > > > > +                * position.
> > > > > > >                  */
> > > > > > > -               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > > > -               sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
> > > > > > > -               sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
> > > > > > > +               if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
> > > > > > > +                   !drm_rect_equals(&new_plane_state->uapi.dst,
> > > > > > > +                                    &old_plane_state->uapi.dst)) {
> > > > > > > +                       if (old_plane_state->uapi.visible) {
> > > > > > > +                               damaged_area.y1 = old_plane_state->uapi.dst.y1;
> > > > > > > +                               damaged_area.y2 = old_plane_state->uapi.dst.y2;
> > > > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > +                       }
> > > > > > > +
> > > > > > > +                       if (new_plane_state->uapi.visible) {
> > > > > > > +                               damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > > > +                               damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > +                       }
> > > > > > > +                       continue;
> > > > > > > +               } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> > > > > > > +                          (!num_clips &&
> > > > > > > +                           new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> > > > > > > +                       /*
> > > > > > > +                        * If the plane don't have damaged areas but the
> > > > > > > +                        * framebuffer changed or alpha changed, mark the whole
> > > > > > > +                        * plane area as damaged.
> > > > > > > +                        */
> > > > > > > +                       damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > > > +                       damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > > > +                       clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > +                       continue;
> > > > > > > +               }
> > > > > > > +
> > > > > > > +               drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> > > > > > > +               damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
> > > > > > > +
> > > > > > > +               for (j = 0; j < num_clips; j++) {
> > > > > > > +                       struct drm_rect clip;
> > > > > > > +
> > > > > > > +                       clip.x1 = damaged_clips[j].x1;
> > > > > > > +                       clip.y1 = damaged_clips[j].y1;
> > > > > > > +                       clip.x2 = damaged_clips[j].x2;
> > > > > > > +                       clip.y2 = damaged_clips[j].y2;
> > > > > > > +                       if (drm_rect_intersect(&clip, &src))
> > > > > > > +                               clip_area_update(&damaged_area, &clip);
> > > > > > > +               }
> > > > > > >
> > > > > > > -               temp = *sel_fetch_area;
> > > > > > > -               temp.y1 += new_plane_state->uapi.dst.y1;
> > > > > > > -               temp.y2 += new_plane_state->uapi.dst.y2;
> > > > > > > -               clip_area_update(&pipe_clip, &temp);
> > > > > > > +               if (damaged_area.y1 == -1)
> > > > > > > +                       continue;
> > > > > > > +
> > > > > > > +               damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > > > +               damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > > > +               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > +       }
> > > > > > > +
> > > > > > > +       if (full_update)
> > > > > > > +               goto skip_sel_fetch_set_loop;
> > > > > > > +
> > > > > > > +       /* It must be aligned to 4 lines */
> > > > > > > +       pipe_clip.y1 -= pipe_clip.y1 % 4;
> > > > > > > +       if (pipe_clip.y2 % 4)
> > > > > > > +               pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
> > > > > > > +
> > > > > > > +       /*
> > > > > > > +        * Now that we have the pipe damaged area check if it intersect with
> > > > > > > +        * every plane, if it does set the plane selective fetch area.
> > > > > > > +        */
> > > > > > > +       for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > > > > +                                            new_plane_state, i) {
> > > > > > > +               struct drm_rect *sel_fetch_area, inter;
> > > > > > > +
> > > > > > > +               if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
> > > > > > > +                   !new_plane_state->uapi.visible)
> > > > > > > +                       continue;
> > > > > > > +
> > > > > > > +               inter = pipe_clip;
> > > > > > > +               if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
> > > > > > > +                       continue;
> > > > > > > +
> > > > > > > +               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > > > +               sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
> > > > > > > +               sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
> > > > > > >         }
> > > > > > >
> > > > > > > +skip_sel_fetch_set_loop:
> > > > > > >         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
> > > > > > >         return 0;
> > > > > > >  }
> > > > > > > --
> > > > > > > 2.30.0
> > > > > > >
> > > > > > > _______________________________________________
> > > > > > > Intel-gfx mailing list
> > > > > > > Intel-gfx@lists.freedesktop.org
> > > > > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Daniel Vetter
> > > > > > Software Engineer, Intel Corporation
> > > > > > http://blog.ffwll.ch
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Daniel Vetter
> > > > > Software Engineer, Intel Corporation
> > > > > http://blog.ffwll.ch
> > > >
> > > >
> > > >
> > >
> >
> >
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
>
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch



-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-07-21  7:56             ` Daniel Vetter
  2021-07-21  8:20               ` Daniel Vetter
@ 2021-07-21 19:42               ` Souza, Jose
  2021-07-22 12:19                 ` Daniel Vetter
  1 sibling, 1 reply; 17+ messages in thread
From: Souza, Jose @ 2021-07-21 19:42 UTC (permalink / raw)
  To: daniel, pankaj.laxminarayan.bharadiya; +Cc: intel-gfx

On Wed, 2021-07-21 at 09:56 +0200, Daniel Vetter wrote:
> On Wed, Jul 21, 2021 at 9:50 AM Daniel Vetter <daniel@ffwll.ch> wrote:
> > On Tue, Jul 20, 2021 at 6:55 PM Souza, Jose <jose.souza@intel.com> wrote:
> > > On Tue, 2021-07-20 at 17:31 +0200, Daniel Vetter wrote:
> > > > On Tue, Jul 20, 2021 at 5:16 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > > > On Tue, Jul 20, 2021 at 5:09 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > > > > On Mon, Jan 4, 2021 at 9:56 PM José Roberto de Souza
> > > > > > <jose.souza@intel.com> wrote:
> > > > > > > 
> > > > > > > Now using plane damage clips property to calcualte the damaged area.
> > > > > > > Selective fetch only supports one region to be fetched so software
> > > > > > > needs to calculate a bounding box around all damage clips.
> > > > > > > 
> > > > > > > Now that we are not complete fetching each plane, there is another
> > > > > > > loop needed as all the plane areas that intersect with the pipe
> > > > > > > damaged area needs to be fetched from memory so the complete blending
> > > > > > > of all planes can happen.
> > > > > > > 
> > > > > > > v2:
> > > > > > > - do not shifting new_plane_state->uapi.dst only src is in 16.16 format
> > > > > > > 
> > > > > > > v4:
> > > > > > > - setting plane selective fetch area using the whole pipe damage area
> > > > > > > - mark the whole plane area damaged if plane visibility or alpha
> > > > > > > changed
> > > > > > > 
> > > > > > > v5:
> > > > > > > - taking in consideration src.y1 in the damage coordinates
> > > > > > > - adding to the pipe damaged area planes that were visible but are
> > > > > > > invisible in the new state
> > > > > > > 
> > > > > > > v6:
> > > > > > > - consider old state plane coordinates when visibility changes or it
> > > > > > > moved to calculate damaged area
> > > > > > > - remove from damaged area the portion not in src clip
> > > > > > > 
> > > > > > > v7:
> > > > > > > - intersec every damage clip with src to minimize damaged area
> > > > > > > 
> > > > > > > v8:
> > > > > > > - adjust pipe_damaged area to 4 lines grouping
> > > > > > > - adjust calculation now that is understood that uapi.src is the
> > > > > > > framebuffer coordinates that plane will start to fetch from
> > > > > > > 
> > > > > > > v9:
> > > > > > > - Only add plane dst or src to damaged_area if visible
> > > > > > > - Early skip plane damage calculation if it was not visible in old and
> > > > > > > new state
> > > > > > > 
> > > > > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > > > Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > > > Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> > > > > > 
> > > > > > Why is this not using drm_atomic_helper_damage_merged? I just stumbled
> > > > > > over this, and this is one of the only two drivers that directly digs
> > > > > > around in the damage area, and seems to reinvent a bunch of the stuff
> > > > > > here.
> > > 
> > > We can use drm_atomic_helper_damage_merged() but it would only save us one for loop.
> > 
> > Yes please. The trouble with rolling our own copies for everything is
> > that it does add up.
> > 
> > > > > Also, did we merge the igts for this stuff? They unfortunately never
> > > > > landed, when vmwgfx team did all this work, but for i915 we really
> > > > > shouldn't even land new support without tests.
> > > > 
> > > > Lo and behold, we merge the uapi enabling way earlier than this patch here:
> > > > 
> > > > commit 093a3a30000926b8bda9eef773e4ed5079053350
> > > > Author: José Roberto de Souza <jose.souza@intel.com>
> > > > Date:   Thu Jun 25 18:01:47 2020 -0700
> > > > 
> > > >    drm/i915: Add plane damage clips property
> > > > 
> > > > And the igts are nowhere near to be seen, at least the stuff from
> > > > vmwgfx didn't land. Please file a JIRA internally and ping me on that
> > > > so this gets sorted out asap.
> > > 
> > > Here the IGT: https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/tests/kms_psr2_sf.c
> > 
> > There was some igts that were cross-driver, not intel specific. The
> > thing here is supposed to be a cross-vendor interface, so would be
> > really good if you resurrect those from vmwgfx folks and land them
> > too:
> > 
> > https://patchwork.freedesktop.org/series/51087/
> 
> Also from a very quick look at the kms_psr2_sf tests there's really
> not a whole lot specific about our psr2 implementation in there. The
> test should work on any plane with a FB_DAMAGE_CLIPS rect available,
> so there's no reason to make this specific to intel, much less to
> psr2. I think we need to:
> - make this a generic kms test, it should work
> - merge with the testcases from the folks who merged FB_DAMAGE_CLIPS
> originally to make sure all drivers follow the same contract.
> 
> KMS properties are generic, intel-specific tests for when there's
> nothing intel-specific isn't good. Also adding Pankaj.

For Intel the only use that we have for damage clips is PSR2 selective fetch, we needed this test to be specific PSR2 to check if i915 is properly
handling it by checking the updates in the PSR2 status registers and also properly rendering the image on the eDP panel.

Making this generic will only remove the test coverage that we have for this feature(that is not even enable by default yet).

> 
> Cheers, Daniel
> 
> > > 
> > > > 
> > > > Thanks, Daniel
> > > > 
> > > > > > > ---
> > > > > > >  drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
> > > > > > >  1 file changed, 99 insertions(+), 14 deletions(-)
> > > > > > > 
> > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > > index d9a395c486d3..f5b9519b3756 100644
> > > > > > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > > @@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> > > > > > >         if (clip->y1 == -1)
> > > > > > >                 goto exit;
> > > > > > > 
> > > > > > > +       drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
> > > > > > > +
> > > > > > >         val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
> > > > > > >         val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
> > > > > > > -       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
> > > > > > > +       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
> > > > > > >  exit:
> > > > > > >         crtc_state->psr2_man_track_ctl = val;
> > > > > > >  }
> > > > > > > @@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > > >                                 struct intel_crtc *crtc)
> > > > > > >  {
> > > > > > >         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
> > > > > > > +       struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
> > > > > > >         struct intel_plane_state *new_plane_state, *old_plane_state;
> > > > > > > -       struct drm_rect pipe_clip = { .y1 = -1 };
> > > > > > >         struct intel_plane *plane;
> > > > > > >         bool full_update = false;
> > > > > > >         int i, ret;
> > > > > > > @@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > > >         if (ret)
> > > > > > >                 return ret;
> > > > > > > 
> > > > > > > +       /*
> > > > > > > +        * Calculate minimal selective fetch area of each plane and calculate
> > > > > > > +        * the pipe damaged area.
> > > > > > > +        * In the next loop the plane selective fetch area will actually be set
> > > > > > > +        * using whole pipe damaged area.
> > > > > > > +        */
> > > > > > >         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > > > >                                              new_plane_state, i) {
> > > > > > > -               struct drm_rect *sel_fetch_area, temp;
> > > > > > > +               struct drm_rect src, damaged_area = { .y1 = -1 };
> > > > > > > +               struct drm_mode_rect *damaged_clips;
> > > > > > > +               u32 num_clips, j;
> > > > > > > 
> > > > > > >                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
> > > > > > >                         continue;
> > > > > > > 
> > > > > > > +               if (!new_plane_state->uapi.visible &&
> > > > > > > +                   !old_plane_state->uapi.visible)
> > > > > > > +                       continue;
> > > > > > > +
> > > > > > >                 /*
> > > > > > >                  * TODO: Not clear how to handle planes with negative position,
> > > > > > >                  * also planes are not updated if they have a negative X
> > > > > > > @@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > > >                         break;
> > > > > > >                 }
> > > > > > > 
> > > > > > > -               if (!new_plane_state->uapi.visible)
> > > > > > > -                       continue;
> > > > > > > +               num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
> > > > > > > 
> > > > > > >                 /*
> > > > > > > -                * For now doing a selective fetch in the whole plane area,
> > > > > > > -                * optimizations will come in the future.
> > > > > > > +                * If visibility or plane moved, mark the whole plane area as
> > > > > > > +                * damaged as it needs to be complete redraw in the new and old
> > > > > > > +                * position.
> > > > > > >                  */
> > > > > > > -               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > > > -               sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
> > > > > > > -               sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
> > > > > > > +               if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
> > > > > > > +                   !drm_rect_equals(&new_plane_state->uapi.dst,
> > > > > > > +                                    &old_plane_state->uapi.dst)) {
> > > > > > > +                       if (old_plane_state->uapi.visible) {
> > > > > > > +                               damaged_area.y1 = old_plane_state->uapi.dst.y1;
> > > > > > > +                               damaged_area.y2 = old_plane_state->uapi.dst.y2;
> > > > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > +                       }
> > > > > > > +
> > > > > > > +                       if (new_plane_state->uapi.visible) {
> > > > > > > +                               damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > > > +                               damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > +                       }
> > > > > > > +                       continue;
> > > > > > > +               } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> > > > > > > +                          (!num_clips &&
> > > > > > > +                           new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> > > > > > > +                       /*
> > > > > > > +                        * If the plane don't have damaged areas but the
> > > > > > > +                        * framebuffer changed or alpha changed, mark the whole
> > > > > > > +                        * plane area as damaged.
> > > > > > > +                        */
> > > > > > > +                       damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > > > +                       damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > > > +                       clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > +                       continue;
> > > > > > > +               }
> > > > > > > +
> > > > > > > +               drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> > > > > > > +               damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
> > > > > > > +
> > > > > > > +               for (j = 0; j < num_clips; j++) {
> > > > > > > +                       struct drm_rect clip;
> > > > > > > +
> > > > > > > +                       clip.x1 = damaged_clips[j].x1;
> > > > > > > +                       clip.y1 = damaged_clips[j].y1;
> > > > > > > +                       clip.x2 = damaged_clips[j].x2;
> > > > > > > +                       clip.y2 = damaged_clips[j].y2;
> > > > > > > +                       if (drm_rect_intersect(&clip, &src))
> > > > > > > +                               clip_area_update(&damaged_area, &clip);
> > > > > > > +               }
> > > > > > > 
> > > > > > > -               temp = *sel_fetch_area;
> > > > > > > -               temp.y1 += new_plane_state->uapi.dst.y1;
> > > > > > > -               temp.y2 += new_plane_state->uapi.dst.y2;
> > > > > > > -               clip_area_update(&pipe_clip, &temp);
> > > > > > > +               if (damaged_area.y1 == -1)
> > > > > > > +                       continue;
> > > > > > > +
> > > > > > > +               damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > > > +               damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > > > +               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > +       }
> > > > > > > +
> > > > > > > +       if (full_update)
> > > > > > > +               goto skip_sel_fetch_set_loop;
> > > > > > > +
> > > > > > > +       /* It must be aligned to 4 lines */
> > > > > > > +       pipe_clip.y1 -= pipe_clip.y1 % 4;
> > > > > > > +       if (pipe_clip.y2 % 4)
> > > > > > > +               pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
> > > > > > > +
> > > > > > > +       /*
> > > > > > > +        * Now that we have the pipe damaged area check if it intersect with
> > > > > > > +        * every plane, if it does set the plane selective fetch area.
> > > > > > > +        */
> > > > > > > +       for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > > > > +                                            new_plane_state, i) {
> > > > > > > +               struct drm_rect *sel_fetch_area, inter;
> > > > > > > +
> > > > > > > +               if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
> > > > > > > +                   !new_plane_state->uapi.visible)
> > > > > > > +                       continue;
> > > > > > > +
> > > > > > > +               inter = pipe_clip;
> > > > > > > +               if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
> > > > > > > +                       continue;
> > > > > > > +
> > > > > > > +               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > > > +               sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
> > > > > > > +               sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
> > > > > > >         }
> > > > > > > 
> > > > > > > +skip_sel_fetch_set_loop:
> > > > > > >         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
> > > > > > >         return 0;
> > > > > > >  }
> > > > > > > --
> > > > > > > 2.30.0
> > > > > > > 
> > > > > > > _______________________________________________
> > > > > > > Intel-gfx mailing list
> > > > > > > Intel-gfx@lists.freedesktop.org
> > > > > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > --
> > > > > > Daniel Vetter
> > > > > > Software Engineer, Intel Corporation
> > > > > > http://blog.ffwll.ch
> > > > > 
> > > > > 
> > > > > 
> > > > > --
> > > > > Daniel Vetter
> > > > > Software Engineer, Intel Corporation
> > > > > http://blog.ffwll.ch
> > > > 
> > > > 
> > > > 
> > > 
> > 
> > 
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
> 
> 
> 

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

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

* Re: [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area
  2021-07-21 19:42               ` Souza, Jose
@ 2021-07-22 12:19                 ` Daniel Vetter
  0 siblings, 0 replies; 17+ messages in thread
From: Daniel Vetter @ 2021-07-22 12:19 UTC (permalink / raw)
  To: Souza, Jose; +Cc: pankaj.laxminarayan.bharadiya, intel-gfx

On Wed, Jul 21, 2021 at 9:42 PM Souza, Jose <jose.souza@intel.com> wrote:
> On Wed, 2021-07-21 at 09:56 +0200, Daniel Vetter wrote:
> > On Wed, Jul 21, 2021 at 9:50 AM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > On Tue, Jul 20, 2021 at 6:55 PM Souza, Jose <jose.souza@intel.com> wrote:
> > > > On Tue, 2021-07-20 at 17:31 +0200, Daniel Vetter wrote:
> > > > > On Tue, Jul 20, 2021 at 5:16 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > > > > On Tue, Jul 20, 2021 at 5:09 PM Daniel Vetter <daniel@ffwll.ch> wrote:
> > > > > > > On Mon, Jan 4, 2021 at 9:56 PM José Roberto de Souza
> > > > > > > <jose.souza@intel.com> wrote:
> > > > > > > >
> > > > > > > > Now using plane damage clips property to calcualte the damaged area.
> > > > > > > > Selective fetch only supports one region to be fetched so software
> > > > > > > > needs to calculate a bounding box around all damage clips.
> > > > > > > >
> > > > > > > > Now that we are not complete fetching each plane, there is another
> > > > > > > > loop needed as all the plane areas that intersect with the pipe
> > > > > > > > damaged area needs to be fetched from memory so the complete blending
> > > > > > > > of all planes can happen.
> > > > > > > >
> > > > > > > > v2:
> > > > > > > > - do not shifting new_plane_state->uapi.dst only src is in 16.16 format
> > > > > > > >
> > > > > > > > v4:
> > > > > > > > - setting plane selective fetch area using the whole pipe damage area
> > > > > > > > - mark the whole plane area damaged if plane visibility or alpha
> > > > > > > > changed
> > > > > > > >
> > > > > > > > v5:
> > > > > > > > - taking in consideration src.y1 in the damage coordinates
> > > > > > > > - adding to the pipe damaged area planes that were visible but are
> > > > > > > > invisible in the new state
> > > > > > > >
> > > > > > > > v6:
> > > > > > > > - consider old state plane coordinates when visibility changes or it
> > > > > > > > moved to calculate damaged area
> > > > > > > > - remove from damaged area the portion not in src clip
> > > > > > > >
> > > > > > > > v7:
> > > > > > > > - intersec every damage clip with src to minimize damaged area
> > > > > > > >
> > > > > > > > v8:
> > > > > > > > - adjust pipe_damaged area to 4 lines grouping
> > > > > > > > - adjust calculation now that is understood that uapi.src is the
> > > > > > > > framebuffer coordinates that plane will start to fetch from
> > > > > > > >
> > > > > > > > v9:
> > > > > > > > - Only add plane dst or src to damaged_area if visible
> > > > > > > > - Early skip plane damage calculation if it was not visible in old and
> > > > > > > > new state
> > > > > > > >
> > > > > > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > > > > Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > > > > Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > > > > > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> > > > > > >
> > > > > > > Why is this not using drm_atomic_helper_damage_merged? I just stumbled
> > > > > > > over this, and this is one of the only two drivers that directly digs
> > > > > > > around in the damage area, and seems to reinvent a bunch of the stuff
> > > > > > > here.
> > > >
> > > > We can use drm_atomic_helper_damage_merged() but it would only save us one for loop.
> > >
> > > Yes please. The trouble with rolling our own copies for everything is
> > > that it does add up.
> > >
> > > > > > Also, did we merge the igts for this stuff? They unfortunately never
> > > > > > landed, when vmwgfx team did all this work, but for i915 we really
> > > > > > shouldn't even land new support without tests.
> > > > >
> > > > > Lo and behold, we merge the uapi enabling way earlier than this patch here:
> > > > >
> > > > > commit 093a3a30000926b8bda9eef773e4ed5079053350
> > > > > Author: José Roberto de Souza <jose.souza@intel.com>
> > > > > Date:   Thu Jun 25 18:01:47 2020 -0700
> > > > >
> > > > >    drm/i915: Add plane damage clips property
> > > > >
> > > > > And the igts are nowhere near to be seen, at least the stuff from
> > > > > vmwgfx didn't land. Please file a JIRA internally and ping me on that
> > > > > so this gets sorted out asap.
> > > >
> > > > Here the IGT: https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/tests/kms_psr2_sf.c
> > >
> > > There was some igts that were cross-driver, not intel specific. The
> > > thing here is supposed to be a cross-vendor interface, so would be
> > > really good if you resurrect those from vmwgfx folks and land them
> > > too:
> > >
> > > https://patchwork.freedesktop.org/series/51087/
> >
> > Also from a very quick look at the kms_psr2_sf tests there's really
> > not a whole lot specific about our psr2 implementation in there. The
> > test should work on any plane with a FB_DAMAGE_CLIPS rect available,
> > so there's no reason to make this specific to intel, much less to
> > psr2. I think we need to:
> > - make this a generic kms test, it should work
> > - merge with the testcases from the folks who merged FB_DAMAGE_CLIPS
> > originally to make sure all drivers follow the same contract.
> >
> > KMS properties are generic, intel-specific tests for when there's
> > nothing intel-specific isn't good. Also adding Pankaj.
>
> For Intel the only use that we have for damage clips is PSR2 selective fetch, we needed this test to be specific PSR2 to check if i915 is properly
> handling it by checking the updates in the PSR2 status registers and also properly rendering the image on the eDP panel.

I haven't seen the properly rendering check (it's all manual), so
that's not very intel specific.

The psr2 status registers check we can do in some intel specific
subtest I think, or as additional checks.

> Making this generic will only remove the test coverage that we have for this feature(that is not even enable by default yet).

Look there's pretty clear consensus that kms properties are cross
vendor and there should be tests across vendors in igt for this. Now
vmwgfx slacked a bit and never pushed theirs fully upstream, which
just means the bucket passes to the next person trying to use this.

I'll file a jira here.
-Daniel

>
> >
> > Cheers, Daniel
> >
> > > >
> > > > >
> > > > > Thanks, Daniel
> > > > >
> > > > > > > > ---
> > > > > > > >  drivers/gpu/drm/i915/display/intel_psr.c | 113 ++++++++++++++++++++---
> > > > > > > >  1 file changed, 99 insertions(+), 14 deletions(-)
> > > > > > > >
> > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > > > index d9a395c486d3..f5b9519b3756 100644
> > > > > > > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > > > > > > @@ -1242,9 +1242,11 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
> > > > > > > >         if (clip->y1 == -1)
> > > > > > > >                 goto exit;
> > > > > > > >
> > > > > > > > +       drm_WARN_ON(crtc_state->uapi.crtc->dev, clip->y1 % 4 || clip->y2 % 4);
> > > > > > > > +
> > > > > > > >         val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE;
> > > > > > > >         val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(clip->y1 / 4 + 1);
> > > > > > > > -       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(DIV_ROUND_UP(clip->y2, 4) + 1);
> > > > > > > > +       val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(clip->y2 / 4 + 1);
> > > > > > > >  exit:
> > > > > > > >         crtc_state->psr2_man_track_ctl = val;
> > > > > > > >  }
> > > > > > > > @@ -1269,8 +1271,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > > > >                                 struct intel_crtc *crtc)
> > > > > > > >  {
> > > > > > > >         struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
> > > > > > > > +       struct drm_rect pipe_clip = { .x1 = 0, .y1 = -1, .x2 = INT_MAX, .y2 = -1 };
> > > > > > > >         struct intel_plane_state *new_plane_state, *old_plane_state;
> > > > > > > > -       struct drm_rect pipe_clip = { .y1 = -1 };
> > > > > > > >         struct intel_plane *plane;
> > > > > > > >         bool full_update = false;
> > > > > > > >         int i, ret;
> > > > > > > > @@ -1282,13 +1284,25 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > > > >         if (ret)
> > > > > > > >                 return ret;
> > > > > > > >
> > > > > > > > +       /*
> > > > > > > > +        * Calculate minimal selective fetch area of each plane and calculate
> > > > > > > > +        * the pipe damaged area.
> > > > > > > > +        * In the next loop the plane selective fetch area will actually be set
> > > > > > > > +        * using whole pipe damaged area.
> > > > > > > > +        */
> > > > > > > >         for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > > > > >                                              new_plane_state, i) {
> > > > > > > > -               struct drm_rect *sel_fetch_area, temp;
> > > > > > > > +               struct drm_rect src, damaged_area = { .y1 = -1 };
> > > > > > > > +               struct drm_mode_rect *damaged_clips;
> > > > > > > > +               u32 num_clips, j;
> > > > > > > >
> > > > > > > >                 if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
> > > > > > > >                         continue;
> > > > > > > >
> > > > > > > > +               if (!new_plane_state->uapi.visible &&
> > > > > > > > +                   !old_plane_state->uapi.visible)
> > > > > > > > +                       continue;
> > > > > > > > +
> > > > > > > >                 /*
> > > > > > > >                  * TODO: Not clear how to handle planes with negative position,
> > > > > > > >                  * also planes are not updated if they have a negative X
> > > > > > > > @@ -1300,23 +1314,94 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
> > > > > > > >                         break;
> > > > > > > >                 }
> > > > > > > >
> > > > > > > > -               if (!new_plane_state->uapi.visible)
> > > > > > > > -                       continue;
> > > > > > > > +               num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
> > > > > > > >
> > > > > > > >                 /*
> > > > > > > > -                * For now doing a selective fetch in the whole plane area,
> > > > > > > > -                * optimizations will come in the future.
> > > > > > > > +                * If visibility or plane moved, mark the whole plane area as
> > > > > > > > +                * damaged as it needs to be complete redraw in the new and old
> > > > > > > > +                * position.
> > > > > > > >                  */
> > > > > > > > -               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > > > > -               sel_fetch_area->y1 = new_plane_state->uapi.src.y1 >> 16;
> > > > > > > > -               sel_fetch_area->y2 = new_plane_state->uapi.src.y2 >> 16;
> > > > > > > > +               if (new_plane_state->uapi.visible != old_plane_state->uapi.visible ||
> > > > > > > > +                   !drm_rect_equals(&new_plane_state->uapi.dst,
> > > > > > > > +                                    &old_plane_state->uapi.dst)) {
> > > > > > > > +                       if (old_plane_state->uapi.visible) {
> > > > > > > > +                               damaged_area.y1 = old_plane_state->uapi.dst.y1;
> > > > > > > > +                               damaged_area.y2 = old_plane_state->uapi.dst.y2;
> > > > > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > > +                       }
> > > > > > > > +
> > > > > > > > +                       if (new_plane_state->uapi.visible) {
> > > > > > > > +                               damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > > > > +                               damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > > > > +                               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > > +                       }
> > > > > > > > +                       continue;
> > > > > > > > +               } else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> > > > > > > > +                          (!num_clips &&
> > > > > > > > +                           new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> > > > > > > > +                       /*
> > > > > > > > +                        * If the plane don't have damaged areas but the
> > > > > > > > +                        * framebuffer changed or alpha changed, mark the whole
> > > > > > > > +                        * plane area as damaged.
> > > > > > > > +                        */
> > > > > > > > +                       damaged_area.y1 = new_plane_state->uapi.dst.y1;
> > > > > > > > +                       damaged_area.y2 = new_plane_state->uapi.dst.y2;
> > > > > > > > +                       clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > > +                       continue;
> > > > > > > > +               }
> > > > > > > > +
> > > > > > > > +               drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> > > > > > > > +               damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
> > > > > > > > +
> > > > > > > > +               for (j = 0; j < num_clips; j++) {
> > > > > > > > +                       struct drm_rect clip;
> > > > > > > > +
> > > > > > > > +                       clip.x1 = damaged_clips[j].x1;
> > > > > > > > +                       clip.y1 = damaged_clips[j].y1;
> > > > > > > > +                       clip.x2 = damaged_clips[j].x2;
> > > > > > > > +                       clip.y2 = damaged_clips[j].y2;
> > > > > > > > +                       if (drm_rect_intersect(&clip, &src))
> > > > > > > > +                               clip_area_update(&damaged_area, &clip);
> > > > > > > > +               }
> > > > > > > >
> > > > > > > > -               temp = *sel_fetch_area;
> > > > > > > > -               temp.y1 += new_plane_state->uapi.dst.y1;
> > > > > > > > -               temp.y2 += new_plane_state->uapi.dst.y2;
> > > > > > > > -               clip_area_update(&pipe_clip, &temp);
> > > > > > > > +               if (damaged_area.y1 == -1)
> > > > > > > > +                       continue;
> > > > > > > > +
> > > > > > > > +               damaged_area.y1 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > > > > +               damaged_area.y2 += new_plane_state->uapi.dst.y1 - src.y1;
> > > > > > > > +               clip_area_update(&pipe_clip, &damaged_area);
> > > > > > > > +       }
> > > > > > > > +
> > > > > > > > +       if (full_update)
> > > > > > > > +               goto skip_sel_fetch_set_loop;
> > > > > > > > +
> > > > > > > > +       /* It must be aligned to 4 lines */
> > > > > > > > +       pipe_clip.y1 -= pipe_clip.y1 % 4;
> > > > > > > > +       if (pipe_clip.y2 % 4)
> > > > > > > > +               pipe_clip.y2 = ((pipe_clip.y2 / 4) + 1) * 4;
> > > > > > > > +
> > > > > > > > +       /*
> > > > > > > > +        * Now that we have the pipe damaged area check if it intersect with
> > > > > > > > +        * every plane, if it does set the plane selective fetch area.
> > > > > > > > +        */
> > > > > > > > +       for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
> > > > > > > > +                                            new_plane_state, i) {
> > > > > > > > +               struct drm_rect *sel_fetch_area, inter;
> > > > > > > > +
> > > > > > > > +               if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc ||
> > > > > > > > +                   !new_plane_state->uapi.visible)
> > > > > > > > +                       continue;
> > > > > > > > +
> > > > > > > > +               inter = pipe_clip;
> > > > > > > > +               if (!drm_rect_intersect(&inter, &new_plane_state->uapi.dst))
> > > > > > > > +                       continue;
> > > > > > > > +
> > > > > > > > +               sel_fetch_area = &new_plane_state->psr2_sel_fetch_area;
> > > > > > > > +               sel_fetch_area->y1 = inter.y1 - new_plane_state->uapi.dst.y1;
> > > > > > > > +               sel_fetch_area->y2 = inter.y2 - new_plane_state->uapi.dst.y1;
> > > > > > > >         }
> > > > > > > >
> > > > > > > > +skip_sel_fetch_set_loop:
> > > > > > > >         psr2_man_trk_ctl_calc(crtc_state, &pipe_clip, full_update);
> > > > > > > >         return 0;
> > > > > > > >  }
> > > > > > > > --
> > > > > > > > 2.30.0
> > > > > > > >
> > > > > > > > _______________________________________________
> > > > > > > > Intel-gfx mailing list
> > > > > > > > Intel-gfx@lists.freedesktop.org
> > > > > > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Daniel Vetter
> > > > > > > Software Engineer, Intel Corporation
> > > > > > > http://blog.ffwll.ch
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Daniel Vetter
> > > > > > Software Engineer, Intel Corporation
> > > > > > http://blog.ffwll.ch
> > > > >
> > > > >
> > > > >
> > > >
> > >
> > >
> > > --
> > > Daniel Vetter
> > > Software Engineer, Intel Corporation
> > > http://blog.ffwll.ch
> >
> >
> >
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

end of thread, other threads:[~2021-07-22 12:20 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-04 20:56 [Intel-gfx] [PATCH CI 1/4] drm: Add function to convert rect in 16.16 fixed format to regular format José Roberto de Souza
2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 2/4] drm/i915/display/psr: Use plane damage clips to calculate damaged area José Roberto de Souza
2021-07-20 15:09   ` Daniel Vetter
2021-07-20 15:16     ` Daniel Vetter
2021-07-20 15:31       ` Daniel Vetter
2021-07-20 16:55         ` Souza, Jose
2021-07-21  7:50           ` Daniel Vetter
2021-07-21  7:56             ` Daniel Vetter
2021-07-21  8:20               ` Daniel Vetter
2021-07-21 19:42               ` Souza, Jose
2021-07-22 12:19                 ` Daniel Vetter
2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 3/4] drm/i915/display: Split and export main surface calculation from skl_check_main_surface() José Roberto de Souza
2021-01-04 20:56 ` [Intel-gfx] [PATCH CI 4/4] drm/i915/display/psr: Program plane's calculated offset to plane SF register José Roberto de Souza
2021-01-04 22:27 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for series starting with [CI,1/4] drm: Add function to convert rect in 16.16 fixed format to regular format Patchwork
2021-01-04 22:54 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-01-05  1:04 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2021-01-05 13:29   ` Souza, Jose

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