[igt-dev] [CI 3/5] lib/i915: Add intel_display_ver() and use it in display tests/libs
Matt Roper
matthew.d.roper at intel.com
Sat Jun 5 19:28:51 UTC 2021
Display code should check the display version of the platform rather
than the graphics version; on some platforms these versions won't be the
same.
v2:
- Continue to use intel_gen() in draw_rect_blt() since it's checking
the version of the blitter engine (graphics) rather than the display
version. (Jose)
- Rename some gen -> display_ver in kms_universal_plane too. (Jose)
Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
Reviewed-by: José Roberto de Souza <jose.souza at intel.com>
---
lib/igt_draw.c | 6 +++---
lib/igt_fb.c | 14 +++++++-------
lib/intel_chipset.h | 1 +
lib/intel_device_info.c | 14 ++++++++++++++
tests/kms_atomic_transition.c | 2 +-
tests/kms_big_fb.c | 10 +++++-----
tests/kms_ccs.c | 2 +-
tests/kms_draw_crc.c | 2 +-
tests/kms_flip_scaled_crc.c | 2 +-
tests/kms_flip_tiling.c | 2 +-
tests/kms_frontbuffer_tracking.c | 4 ++--
tests/kms_getfb.c | 2 +-
tests/kms_hdmi_inject.c | 2 +-
tests/kms_panel_fitting.c | 2 +-
tests/kms_plane.c | 2 +-
tests/kms_plane_lowres.c | 4 ++--
tests/kms_plane_scaling.c | 8 ++++----
tests/kms_rotation_crc.c | 8 ++++----
tests/kms_universal_plane.c | 10 +++++-----
19 files changed, 56 insertions(+), 41 deletions(-)
diff --git a/lib/igt_draw.c b/lib/igt_draw.c
index a3144b50..da1d39fc 100644
--- a/lib/igt_draw.c
+++ b/lib/igt_draw.c
@@ -339,7 +339,7 @@ static void draw_rect_mmap_cpu(int fd, struct buf_data *buf, struct rect *rect,
/* We didn't implement suport for the older tiling methods yet. */
if (tiling != I915_TILING_NONE)
- igt_require(intel_gen(intel_get_drm_devid(fd)) >= 5);
+ igt_require(intel_display_ver(intel_get_drm_devid(fd)) >= 5);
ptr = gem_mmap__cpu(fd, buf->handle, 0, PAGE_ALIGN(buf->size),
PROT_READ | PROT_WRITE);
@@ -389,7 +389,7 @@ static void draw_rect_mmap_wc(int fd, struct buf_data *buf, struct rect *rect,
/* We didn't implement suport for the older tiling methods yet. */
if (tiling != I915_TILING_NONE)
- igt_require(intel_gen(intel_get_drm_devid(fd)) >= 5);
+ igt_require(intel_display_ver(intel_get_drm_devid(fd)) >= 5);
ptr = gem_mmap__wc(fd, buf->handle, 0, PAGE_ALIGN(buf->size),
PROT_READ | PROT_WRITE);
@@ -440,7 +440,7 @@ static void draw_rect_pwrite_tiled(int fd, struct buf_data *buf,
int pixels_written = 0;
/* We didn't implement suport for the older tiling methods yet. */
- igt_require(intel_gen(intel_get_drm_devid(fd)) >= 5);
+ igt_require(intel_display_ver(intel_get_drm_devid(fd)) >= 5);
pixel_size = buf->bpp / 8;
tmp_size = sizeof(tmp) / pixel_size;
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 3e6841fd..585ede38 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -408,7 +408,7 @@ void igt_get_fb_tile_size(int fd, uint64_t modifier, int fb_bpp,
break;
case LOCAL_I915_FORMAT_MOD_X_TILED:
igt_require_intel(fd);
- if (intel_gen(intel_get_drm_devid(fd)) == 2) {
+ if (intel_display_ver(intel_get_drm_devid(fd)) == 2) {
*width_ret = 128;
*height_ret = 16;
} else {
@@ -422,7 +422,7 @@ void igt_get_fb_tile_size(int fd, uint64_t modifier, int fb_bpp,
case LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC:
case LOCAL_I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS:
igt_require_intel(fd);
- if (intel_gen(intel_get_drm_devid(fd)) == 2) {
+ if (intel_display_ver(intel_get_drm_devid(fd)) == 2) {
*width_ret = 128;
*height_ret = 16;
} else if (IS_915(intel_get_drm_devid(fd))) {
@@ -693,7 +693,7 @@ static uint32_t calc_plane_stride(struct igt_fb *fb, int plane)
if (fb->modifier != LOCAL_DRM_FORMAT_MOD_NONE &&
is_i915_device(fb->fd) &&
- intel_gen(intel_get_drm_devid(fb->fd)) <= 3) {
+ intel_display_ver(intel_get_drm_devid(fb->fd)) <= 3) {
uint32_t stride;
/* Round the tiling up to the next power-of-two and the region
@@ -758,7 +758,7 @@ static uint64_t calc_plane_size(struct igt_fb *fb, int plane)
{
if (fb->modifier != LOCAL_DRM_FORMAT_MOD_NONE &&
is_i915_device(fb->fd) &&
- intel_gen(intel_get_drm_devid(fb->fd)) <= 3) {
+ intel_display_ver(intel_get_drm_devid(fb->fd)) <= 3) {
uint64_t min_size = (uint64_t) fb->strides[plane] *
fb->plane_height[plane];
uint64_t size;
@@ -2118,12 +2118,12 @@ struct fb_blit_upload {
static bool fast_blit_ok(const struct igt_fb *fb)
{
- int gen = intel_gen(intel_get_drm_devid(fb->fd));
+ int ver = intel_display_ver(intel_get_drm_devid(fb->fd));
- if (gen < 9)
+ if (ver < 9)
return false;
- if (gen < 12)
+ if (ver < 12)
return true;
return fb->modifier != I915_FORMAT_MOD_X_TILED;
diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
index 8e81ffa9..87b3bbc4 100644
--- a/lib/intel_chipset.h
+++ b/lib/intel_chipset.h
@@ -84,6 +84,7 @@ struct intel_device_info {
const struct intel_device_info *intel_get_device_info(uint16_t devid) __attribute__((pure));
unsigned intel_gen(uint16_t devid) __attribute__((pure));
+unsigned intel_display_ver(uint16_t devid) __attribute__((pure));
extern enum pch_type intel_pch;
diff --git a/lib/intel_device_info.c b/lib/intel_device_info.c
index 4ab236e4..0c09f5cd 100644
--- a/lib/intel_device_info.c
+++ b/lib/intel_device_info.c
@@ -535,3 +535,17 @@ unsigned intel_gen(uint16_t devid)
{
return intel_get_device_info(devid)->graphics_ver ?: -1u;
}
+
+/**
+ * intel_display_ver:
+ * @devid: pci device id
+ *
+ * Computes the Intel GFX display version for the given device id.
+ *
+ * Returns:
+ * The display version on successful lookup, -1u on failure.
+ */
+unsigned intel_display_ver(uint16_t devid)
+{
+ return intel_get_device_info(devid)->display_ver ?: -1u;
+}
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index d8085ef3..f4131071 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -141,7 +141,7 @@ static bool skip_plane(data_t *data, igt_plane_t *plane)
if (plane->type == DRM_PLANE_TYPE_CURSOR)
return false;
- if (intel_gen(intel_get_drm_devid(data->drm_fd)) < 11)
+ if (intel_display_ver(intel_get_drm_devid(data->drm_fd)) < 11)
return false;
/*
diff --git a/tests/kms_big_fb.c b/tests/kms_big_fb.c
index b35727a0..81bf0542 100644
--- a/tests/kms_big_fb.c
+++ b/tests/kms_big_fb.c
@@ -153,7 +153,7 @@ static bool size_ok(data_t *data, uint64_t size)
* The kernel limits scanout to the
* mappable portion of ggtt on gmch platforms.
*/
- if ((intel_gen(data->devid) < 5 ||
+ if ((intel_display_ver(data->devid) < 5 ||
IS_VALLEYVIEW(data->devid) ||
IS_CHERRYVIEW(data->devid)) &&
size > data->mappable_size / 2)
@@ -182,7 +182,7 @@ static void max_fb_size(data_t *data, int *width, int *height,
*height = data->max_fb_height;
/* max fence stride is only 8k bytes on gen3 */
- if (intel_gen(data->devid) < 4 &&
+ if (intel_display_ver(data->devid) < 4 &&
format == DRM_FORMAT_XRGB8888)
*width = min(*width, 8192 / 4);
@@ -553,7 +553,7 @@ test_addfb(data_t *data)
* max fb size of 4k pixels, hence we can't test
* with 32bpp and must use 16bpp instead.
*/
- if (intel_gen(data->devid) == 3)
+ if (intel_display_ver(data->devid) == 3)
format = DRM_FORMAT_RGB565;
else
format = DRM_FORMAT_XRGB8888;
@@ -570,7 +570,7 @@ test_addfb(data_t *data)
bo = gem_create(data->drm_fd, size);
igt_require(bo);
- if (intel_gen(data->devid) < 4)
+ if (intel_display_ver(data->devid) < 4)
gem_set_tiling(data->drm_fd, bo,
igt_fb_mod_to_tiling(data->modifier), strides[0]);
@@ -660,7 +660,7 @@ igt_main
* On gen2 we could use either, but let's go for the
* blitter there as well.
*/
- if (intel_gen(data.devid) >= 4)
+ if (intel_display_ver(data.devid) >= 4)
data.render_copy = igt_get_render_copyfunc(data.devid);
data.bops = buf_ops_create(data.drm_fd);
diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
index 01e3b979..a3eac1f8 100644
--- a/tests/kms_ccs.c
+++ b/tests/kms_ccs.c
@@ -573,7 +573,7 @@ igt_main_args("cs:", NULL, help_str, opt_handler, &data)
igt_fixture {
data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
- igt_require(intel_gen(intel_get_drm_devid(data.drm_fd)) >= 9);
+ igt_require(intel_display_ver(intel_get_drm_devid(data.drm_fd)) >= 9);
kmstest_set_vt_graphics_mode();
igt_require_pipe_crc(data.drm_fd);
diff --git a/tests/kms_draw_crc.c b/tests/kms_draw_crc.c
index e1fdcef6..dcda2e04 100644
--- a/tests/kms_draw_crc.c
+++ b/tests/kms_draw_crc.c
@@ -245,7 +245,7 @@ static void fill_fb_subtest(void)
get_fill_crc(LOCAL_I915_FORMAT_MOD_X_TILED, &crc);
igt_assert_crc_equal(&crc, &base_crc);
- if (intel_gen(intel_get_drm_devid(drm_fd)) >= 9) {
+ if (intel_display_ver(intel_get_drm_devid(drm_fd)) >= 9) {
get_fill_crc(LOCAL_I915_FORMAT_MOD_Y_TILED, &crc);
igt_assert_crc_equal(&crc, &base_crc);
}
diff --git a/tests/kms_flip_scaled_crc.c b/tests/kms_flip_scaled_crc.c
index bb796caf..d81ad352 100644
--- a/tests/kms_flip_scaled_crc.c
+++ b/tests/kms_flip_scaled_crc.c
@@ -261,7 +261,7 @@ igt_main
igt_fixture {
data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
- data.gen = intel_gen(intel_get_drm_devid(data.drm_fd));
+ data.gen = intel_display_ver(intel_get_drm_devid(data.drm_fd));
igt_require(data.gen >= 9);
igt_display_require(&data.display, data.drm_fd);
igt_require(data.display.is_atomic);
diff --git a/tests/kms_flip_tiling.c b/tests/kms_flip_tiling.c
index 09e99580..573cc337 100644
--- a/tests/kms_flip_tiling.c
+++ b/tests/kms_flip_tiling.c
@@ -155,7 +155,7 @@ igt_main
{
igt_fixture {
data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
- data.gen = intel_gen(intel_get_drm_devid(data.drm_fd));
+ data.gen = intel_display_ver(intel_get_drm_devid(data.drm_fd));
data.testformat = DRM_FORMAT_XRGB8888;
diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index 906caa4c..97902c08 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -2647,7 +2647,7 @@ static void scaledprimary_subtest(const struct test_mode *t)
struct igt_fb new_fb, *old_fb;
struct modeset_params *params = pick_params(t);
struct fb_region *reg = ¶ms->primary;
- int gen = intel_gen(intel_get_drm_devid(drm.fd));
+ int gen = intel_display_ver(intel_get_drm_devid(drm.fd));
int src_y_upscale = ALIGN(reg->h / 4, 4);
igt_require_f(gen >= 9,
@@ -2831,7 +2831,7 @@ static void farfromfence_subtest(const struct test_mode *t)
struct draw_pattern_info *pattern = &pattern1;
struct fb_region *target;
int max_height, assertions = 0;
- int gen = intel_gen(intel_get_drm_devid(drm.fd));
+ int gen = intel_display_ver(intel_get_drm_devid(drm.fd));
igt_skip_on(t->method == IGT_DRAW_MMAP_GTT &&
!gem_has_mappable_ggtt(drm.fd));
diff --git a/tests/kms_getfb.c b/tests/kms_getfb.c
index 917b57bb..14be74d6 100644
--- a/tests/kms_getfb.c
+++ b/tests/kms_getfb.c
@@ -92,7 +92,7 @@ static void get_ccs_fb(int fd, struct drm_mode_fb_cmd2 *ret)
igt_require(has_addfb2_iface(fd));
igt_require_intel(fd);
- if ((intel_gen(intel_get_drm_devid(fd))) >= 12) {
+ if ((intel_display_ver(intel_get_drm_devid(fd))) >= 12) {
add.modifier[0] = I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS;
add.modifier[1] = I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS;
diff --git a/tests/kms_hdmi_inject.c b/tests/kms_hdmi_inject.c
index 1769df08..b47b8a39 100644
--- a/tests/kms_hdmi_inject.c
+++ b/tests/kms_hdmi_inject.c
@@ -87,7 +87,7 @@ hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
devid = intel_get_drm_devid(drm_fd);
/* 4K requires at least HSW */
- igt_require(IS_HASWELL(devid) || intel_gen(devid) >= 8);
+ igt_require(IS_HASWELL(devid) || intel_display_ver(devid) >= 8);
edid = igt_kms_get_4k_edid();
kmstest_force_edid(drm_fd, connector, edid);
diff --git a/tests/kms_panel_fitting.c b/tests/kms_panel_fitting.c
index 1623f34e..3e42d148 100644
--- a/tests/kms_panel_fitting.c
+++ b/tests/kms_panel_fitting.c
@@ -243,7 +243,7 @@ static void test_atomic_fastset(data_t *data)
if (stat("/sys/module/i915/parameters/fastboot", &sb) == 0)
igt_set_module_param_int(data->drm_fd, "fastboot", 1);
- igt_require(intel_gen(intel_get_drm_devid(display->drm_fd)) >= 5);
+ igt_require(intel_display_ver(intel_get_drm_devid(display->drm_fd)) >= 5);
}
igt_require(display->is_atomic);
diff --git a/tests/kms_plane.c b/tests/kms_plane.c
index d7cbe892..ba419bbd 100644
--- a/tests/kms_plane.c
+++ b/tests/kms_plane.c
@@ -999,7 +999,7 @@ static bool skip_plane(data_t *data, igt_plane_t *plane)
if (plane->type == DRM_PLANE_TYPE_CURSOR)
return false;
- if (intel_gen(intel_get_drm_devid(data->drm_fd)) < 11)
+ if (intel_display_ver(intel_get_drm_devid(data->drm_fd)) < 11)
return false;
/*
diff --git a/tests/kms_plane_lowres.c b/tests/kms_plane_lowres.c
index a4def89f..7fd02180 100644
--- a/tests/kms_plane_lowres.c
+++ b/tests/kms_plane_lowres.c
@@ -80,14 +80,14 @@ static igt_plane_t *first_sdr_plane(igt_output_t *output, uint32_t devid)
{
int index;
- index = intel_gen(devid) <= 9 ? 0 : SDR_PLANE_BASE;
+ index = intel_display_ver(devid) <= 9 ? 0 : SDR_PLANE_BASE;
return igt_output_get_plane(output, index);
}
static bool is_sdr_plane(const igt_plane_t *plane, uint32_t devid)
{
- if (intel_gen(devid) <= 9)
+ if (intel_display_ver(devid) <= 9)
return true;
return plane->index >= SDR_PLANE_BASE;
diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
index 7464b5bd..2aa46ac8 100644
--- a/tests/kms_plane_scaling.c
+++ b/tests/kms_plane_scaling.c
@@ -52,9 +52,9 @@ static int get_num_scalers(data_t* d, enum pipe pipe)
if (!is_i915_device(d->drm_fd))
return 1;
- igt_require(intel_gen(d->devid) >= 9);
+ igt_require(intel_display_ver(d->devid) >= 9);
- if (intel_gen(d->devid) >= 10)
+ if (intel_display_ver(d->devid) >= 10)
return 2;
else if (pipe != PIPE_C)
return 2;
@@ -167,7 +167,7 @@ static bool can_rotate(data_t *d, unsigned format, uint64_t tiling,
switch (format) {
case DRM_FORMAT_RGB565:
- if (intel_gen(d->devid) >= 11)
+ if (intel_display_ver(d->devid) >= 11)
break;
/* fall through */
case DRM_FORMAT_C8:
@@ -198,7 +198,7 @@ static bool can_scale(data_t *d, unsigned format)
case DRM_FORMAT_XBGR16161616F:
case DRM_FORMAT_ARGB16161616F:
case DRM_FORMAT_ABGR16161616F:
- if (intel_gen(d->devid) >= 11)
+ if (intel_display_ver(d->devid) >= 11)
return true;
/* fall through */
case DRM_FORMAT_C8:
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index bcbb9bdc..20556c82 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -517,7 +517,7 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
/* Only support partial covering primary plane on gen9+ */
if (is_amdgpu_device(data->gfx_fd) ||
(plane_type == DRM_PLANE_TYPE_PRIMARY &&
- intel_gen(intel_get_drm_devid(data->gfx_fd)) < 9)) {
+ intel_display_ver(intel_get_drm_devid(data->gfx_fd)) < 9)) {
if (i != rectangle)
continue;
else
@@ -730,12 +730,12 @@ static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
*/
if (p[0].format == DRM_FORMAT_RGB565 &&
(planeconfigs[i].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
- && intel_gen(data->devid) < 11)
+ && intel_display_ver(data->devid) < 11)
continue;
if (p[1].format == DRM_FORMAT_RGB565 &&
(planeconfigs[j].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
- && intel_gen(data->devid) < 11)
+ && intel_display_ver(data->devid) < 11)
continue;
/*
* if using packed formats crc's will be
@@ -1024,7 +1024,7 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
data.gfx_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_AMDGPU);
if (is_i915_device(data.gfx_fd)) {
data.devid = intel_get_drm_devid(data.gfx_fd);
- gen = intel_gen(data.devid);
+ gen = intel_display_ver(data.devid);
}
kmstest_set_vt_graphics_mode();
diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
index aae3fc52..4366dd4d 100644
--- a/tests/kms_universal_plane.c
+++ b/tests/kms_universal_plane.c
@@ -32,7 +32,7 @@
typedef struct {
int drm_fd;
igt_display_t display;
- int gen;
+ int display_ver;
} data_t;
typedef struct {
@@ -383,7 +383,7 @@ sanity_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
* gen9+).
*/
igt_plane_set_fb(primary, &test.undersized_fb);
- expect = (data->gen < 9) ? -EINVAL : 0;
+ expect = (data->display_ver < 9) ? -EINVAL : 0;
igt_assert(igt_display_try_commit2(&data->display, COMMIT_UNIVERSAL) == expect);
/* Same as above, but different plane positioning. */
@@ -393,7 +393,7 @@ sanity_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
igt_plane_set_position(primary, 0, 0);
/* Try to use universal plane API to scale down (should fail on pre-gen9) */
- expect = (data->gen < 9) ? -ERANGE : 0;
+ expect = (data->display_ver < 9) ? -ERANGE : 0;
igt_assert(drmModeSetPlane(data->drm_fd, primary->drm_plane->plane_id,
output->config.crtc->crtc_id,
test.oversized_fb.fb_id, 0,
@@ -704,7 +704,7 @@ gen9_test_pipe(data_t *data, enum pipe pipe, igt_output_t *output)
int ret = 0;
- igt_skip_on(data->gen < 9);
+ igt_skip_on(data->display_ver < 9);
igt_require_pipe(&data->display, pipe);
igt_output_set_pipe(output, pipe);
@@ -798,7 +798,7 @@ igt_main
igt_fixture {
data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
- data.gen = intel_gen(intel_get_drm_devid(data.drm_fd));
+ data.display_ver = intel_display_ver(intel_get_drm_devid(data.drm_fd));
kmstest_set_vt_graphics_mode();
--
2.25.4
More information about the igt-dev
mailing list