From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: igt-dev@lists.freedesktop.org, Daniel Vetter <daniel@ffwll.ch>
Subject: Re: [igt-dev] [PATCH i-g-t 2/4] tests/kms_psr_sink_crc: Do not test sink crc
Date: Thu, 12 Jul 2018 16:19:44 -0700 [thread overview]
Message-ID: <20180712231944.GH2208@intel.com> (raw)
In-Reply-To: <20180712080943.8495-2-dhinakaran.pandiyan@intel.com>
On Thu, Jul 12, 2018 at 01:09:41AM -0700, Dhinakaran Pandiyan wrote:
> eDP sink crc reads use vblank interrupts that cause PSR exit and
> therefore makes them unsuitable for PSR testing. Besides that, reading
> sink CRC via the AUX channel for testing when the HW also is most likely
> is going to be using AUX channel is a recipe for inconsistent test
> results. Thirdly, CRC's have been seen to be noisy/inconsistent across
> sinks. We tradeoff the ability to validate what the sink is displaying
> for correctness.
>
> We also make use of source PSR status register to check whether HW tracking
> triggered PSR exit upon an exit event.
>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> tests/kms_psr_sink_crc.c | 60 ++++++++++++------------------------------------
> 1 file changed, 15 insertions(+), 45 deletions(-)
>
> diff --git a/tests/kms_psr_sink_crc.c b/tests/kms_psr_sink_crc.c
> index 3115a5de..4a18609a 100644
> --- a/tests/kms_psr_sink_crc.c
> +++ b/tests/kms_psr_sink_crc.c
> @@ -28,12 +28,8 @@
> #include <stdbool.h>
> #include <stdio.h>
> #include <string.h>
> -
> #include "intel_bufmgr.h"
>
> -#define CRC_BLACK "000000000000"
> -#define CRC_LEN 12
> -
> enum operations {
> PAGE_FLIP,
> MMAP_GTT,
> @@ -222,36 +218,17 @@ static bool wait_psr_entry(data_t *data)
> return false;
> }
>
> -static void get_sink_crc(data_t *data, char *crc)
> +static bool psr_inactive(data_t *data)
> {
> - if (igt_interactive_debug)
> - return;
> -
> - igt_require_f(igt_sysfs_read(data->debugfs_fd, "i915_sink_crc_eDP1",
> - crc, CRC_LEN) == CRC_LEN,
> - "Sink CRC is unreliable on this machine. Try manual debug with --interactive-debug=no-crc\n");
> - igt_debug("sink CRC: %.*s\n", CRC_LEN, crc);
> -
> - /* Black screen is always invalid */
> - igt_assert(strncmp(crc, CRC_BLACK, CRC_LEN));
> -}
> + char buf[512];
>
> -static bool is_green(char *crc)
> -{
> - const char *mask = "0000FFFF0000";
> - uint32_t *p = (uint32_t *)crc, *mask_p = (uint32_t *)mask;
> - if (igt_interactive_debug)
> - return false;
> -
> - /* Check R and B components are 0 and G is non-zero */
> - return *p == *mask_p && *(p + 2) == *(mask_p + 2) &&
> - (*(p + 1) & *(mask_p + 1)) != 0;
> + igt_debugfs_read(data->drm_fd, "i915_edp_psr_status", buf);
> + return !(strstr(buf, "SRDENT") || strstr("SLEEP"));
> }
>
> -static void assert_or_manual(bool condition, const char *expected)
> +static inline void manual(const char *expected)
> {
> - igt_debug_manual_check("no-crc", expected);
> - igt_assert(igt_interactive_debug || condition);
> + igt_debug_manual_check("all", expected);
> }
>
> static bool drrs_disabled(data_t *data)
> @@ -268,39 +245,32 @@ static void run_test(data_t *data)
> uint32_t handle = data->fb_white.gem_handle;
> igt_plane_t *test_plane = data->test_plane;
> void *ptr;
> - char ref_crc[CRC_LEN];
> - char crc[CRC_LEN];
> const char *expected = "";
>
> /* Confirm that screen became Green */
> - get_sink_crc(data, ref_crc);
> - assert_or_manual(is_green(ref_crc), "screen GREEN");
> + manual("screen GREEN");
>
> /* Confirm screen stays Green after PSR got active */
> igt_assert(wait_psr_entry(data));
> - get_sink_crc(data, ref_crc);
> - assert_or_manual(is_green(ref_crc), "screen GREEN");
> + manual("screen GREEN");
>
> /* Setting a secondary fb/plane */
> igt_plane_set_fb(test_plane, &data->fb_white);
> igt_display_commit(&data->display);
>
> /* Confirm it is not Green anymore */
> - igt_assert(wait_psr_entry(data));
> - get_sink_crc(data, ref_crc);
> if (test_plane->type == DRM_PLANE_TYPE_PRIMARY)
> - assert_or_manual(!is_green(ref_crc), "screen WHITE");
> + manual("screen WHITE");
> else
> - assert_or_manual(!is_green(ref_crc), "GREEN background with WHITE box");
> + manual("GREEN background with WHITE box");
>
> + igt_assert(wait_psr_entry(data));
> switch (data->op) {
> case PAGE_FLIP:
> /* Only in use when testing primary plane */
> igt_assert(drmModePageFlip(data->drm_fd, data->crtc_id,
> data->fb_green.fb_id, 0, NULL) == 0);
> - get_sink_crc(data, crc);
> - assert_or_manual(is_green(crc), "screen GREEN");
> - expected = "still GREEN";
> + expected = "GREEN";
> break;
> case MMAP_GTT:
> ptr = gem_mmap__gtt(data->drm_fd, handle, data->mod_size,
> @@ -342,8 +312,8 @@ static void run_test(data_t *data)
> expected = "screen GREEN";
> break;
> }
> - get_sink_crc(data, crc);
> - assert_or_manual(strncmp(ref_crc, crc, CRC_LEN) != 0, expected);
> + assert(psr_inactive(data));
> + manual(expected);
> }
>
> static void test_cleanup(data_t *data) {
> @@ -444,7 +414,7 @@ static int opt_handler(int opt, int opt_index, void *_data)
> int main(int argc, char *argv[])
> {
> const char *help_str =
> - " --no-psr\tRun test without PSR to check the CRC test logic.";
> + " --no-psr\tRun test without PSR.";
> static struct option long_options[] = {
> {"no-psr", 0, 0, 'n'},
> { 0, 0, 0, 0 }
> --
> 2.14.1
>
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
next prev parent reply other threads:[~2018-07-12 23:19 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-12 8:09 [igt-dev] [PATCH i-g-t 1/4] tests/frontbuffer_tracking: Do not test sink crc Dhinakaran Pandiyan
2018-07-12 8:09 ` [igt-dev] [PATCH i-g-t 2/4] tests/kms_psr_sink_crc: " Dhinakaran Pandiyan
2018-07-12 23:19 ` Rodrigo Vivi [this message]
2018-07-12 8:09 ` [igt-dev] [PATCH i-g-t 3/4] tests/kms_psr_sink_crc: Test PSR source HW status before PSR entry Dhinakaran Pandiyan
2018-07-12 23:20 ` Rodrigo Vivi
2018-07-12 8:09 ` [igt-dev] [PATCH i-g-t 4/4] tests/psr: Rename kms_psr_sink_crc.c to kms_psr.c Dhinakaran Pandiyan
2018-07-12 23:21 ` Rodrigo Vivi
2018-07-13 22:32 ` Rodrigo Vivi
2018-07-12 10:27 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/4] tests/frontbuffer_tracking: Do not test sink crc Patchwork
2018-07-12 13:36 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2018-07-12 23:18 ` [igt-dev] [PATCH i-g-t 1/4] " Rodrigo Vivi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180712231944.GH2208@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=daniel@ffwll.ch \
--cc=dhinakaran.pandiyan@intel.com \
--cc=igt-dev@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.