From b641619969514b6c2552f58e334fb6f95b96404b Mon Sep 17 00:00:00 2001 From: Radhakrishna Sripada Date: Fri, 13 Jul 2018 14:11:14 -0700 Subject: tools/intel_dp_compliance: Use ARGB8888 format fbs for Gen 10 According to Display WA #1172, to truly bypass the color data on Gen 10 use ARGB8888 instead of XRGB8888 to pass compliance. v2: Use ARGB8888 format only for video pattern fb, set per pixel alpha value to 0xff in fill_framebuffer.(Imre) v3: Set the aplha value for each pixel(Imre) Cc: Imre Deak Cc: Manasi Navare Signed-off-by: Radhakrishna Sripada Reviewed-by: Manasi Navare Signed-off-by: Imre Deak --- tools/intel_dp_compliance.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'tools') diff --git a/tools/intel_dp_compliance.c b/tools/intel_dp_compliance.c index c40548e7..14631a46 100644 --- a/tools/intel_dp_compliance.c +++ b/tools/intel_dp_compliance.c @@ -175,7 +175,7 @@ static int tio_fd; struct termios saved_tio; drmModeRes *resources; -int drm_fd, modes; +int drm_fd, modes, gen; uint64_t tiling = LOCAL_DRM_FORMAT_MOD_NONE; uint32_t depth = 24, stride, bpp; int specified_mode_num = -1, specified_disp_id = -1; @@ -506,9 +506,13 @@ static int setup_video_pattern_framebuffer(struct connector *dp_conn) video_width = dp_conn->test_pattern.hdisplay; video_height = dp_conn->test_pattern.vdisplay; + /* + * Display WA1172: Gen10 To pass the color data unaffected set either + * per-pixel alpha or Plane alpha to 0xff. Use ARGB8888 and set alpha to 0xff. + */ dp_conn->test_pattern.fb = igt_create_fb(drm_fd, video_width, video_height, - DRM_FORMAT_XRGB8888, + gen == 10 ? DRM_FORMAT_ARGB8888 : DRM_FORMAT_XRGB8888, LOCAL_DRM_FORMAT_MOD_NONE, &dp_conn->test_pattern.fb_pattern); igt_assert(dp_conn->test_pattern.fb); @@ -537,6 +541,7 @@ static int fill_framebuffer(struct connector *dp_conn) uint32_t *red_ptr, *green_ptr, *blue_ptr, *white_ptr, *src_ptr, *dst_ptr; int x, y; int32_t pixel_val; + uint8_t alpha; video_width = dp_conn->test_pattern.hdisplay; video_height = dp_conn->test_pattern.vdisplay; @@ -554,10 +559,12 @@ static int fill_framebuffer(struct connector *dp_conn) while (x < video_width) { for (pixel_val = 0; pixel_val < 256; pixel_val = pixel_val + (256 / tile_width)) { - red_ptr[x] = pixel_val << 16; - green_ptr[x] = pixel_val << 8; - blue_ptr[x] = pixel_val << 0; - white_ptr[x] = red_ptr[x] | green_ptr[x] | blue_ptr[x]; + alpha = gen == 10 ? 0xff : 0; + red_ptr[x] = alpha << 24 | pixel_val << 16; + green_ptr[x] = alpha << 24 | pixel_val << 8; + blue_ptr[x] = alpha << 24 | pixel_val << 0; + white_ptr[x] = alpha << 24 | red_ptr[x] | green_ptr[x] | + blue_ptr[x]; if (++x >= video_width) break; } @@ -1036,6 +1043,7 @@ int main(int argc, char **argv) set_termio_mode(); drm_fd = drm_open_driver(DRIVER_ANY); + gen = intel_gen(intel_get_drm_devid(drm_fd)); kmstest_set_vt_graphics_mode(); setup_debugfs_files(); -- cgit v1.2.3