* Re: [PATCH] Idleness DRRS: [not found] <1505724732-17529-1-git-send-email-lohith.bs@intel.com> @ 2017-09-18 19:54 ` Rodrigo Vivi 2017-09-19 10:46 ` Ramalingam C 2017-09-19 10:14 ` [PATCH] Idleness DRRS: Ramalingam C 1 sibling, 1 reply; 59+ messages in thread From: Rodrigo Vivi @ 2017-09-18 19:54 UTC (permalink / raw) To: intel-gfx, daniel.vetter, chris; +Cc: ankit.k.nautiyal, paulo.r.zanoni On Mon, Sep 18, 2017 at 08:52:12AM +0000, wrote: > From: Lohith BS <lohith.bs@intel.com> > > By default the DRRS state will be at DRRS_HIGH_RR. When a Display > content is Idle for more than 1Sec Idleness will be declared and > DRRS_LOW_RR will be invoked, changing the refresh rate to the > lower most refresh rate supported by the panel. As soon as there > is a display content change there will be a DRRS state transition > as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the > highest refresh rate supported by the panel. > > To test this, Idleness DRRS IGT will probe the DRRS state at below > instances and compare with the expected state. > > Instance Expected State > 1. Immediately after rendering the still image DRRS_HIGH_RR > 2. After a delay of 1.2Sec DRRS_LOW_RR > 3. After changing the frame buffer DRRS_HIGH_RR > 4. After a delay of 1.2Sec DRRS_LOW_RR > 5. After changing the frame buffer DRRS_HIGH_RR > 6. After a delay of 1.2Sec DRRS_LOW_RR > > The test checks the driver DRRS state from the debugfs entry. To check the > actual refresh-rate, the number of vblanks received per sec. > The refresh-rate calculated is checked against the expected refresh-rate > with a tolerance value of 2. > > This patch is a continuation of the earlier work > https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness > > DRRS. The code is tested on Broxton BXT_T platform. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, provided by > drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable the DRRS > feature dynamically(as in case of PSR). Hence if the panel supports > DRRS it will be enabled by default. > > This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: Ramalingam C <ramalingam.c@intel.com> > Signed-off-by: Vandana Kannan <vandana.kannan@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > --- > tests/kms_frontbuffer_tracking.c | 161 ++++++++++++++++++++++++++++++++++++--- > 1 file changed, 152 insertions(+), 9 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > index a068c8a..4f44109 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC DRRS and PSR"); > > /* > * One of the aspects of this test is that, for every subtest, we try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 6, > + FEATURE_DEFAULT = 6, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > @@ -180,6 +181,9 @@ struct { > bool can_test; > } psr = { > .can_test = false, > +}, > +drrs = { > + .can_test = false, > }; > > > @@ -822,6 +826,52 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +static bool is_drrs_high(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_HIGH_RR"); > +} > + > +static bool is_drrs_low(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_LOW_RR"); > +} > + > +static bool is_drrs_enabled(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS Supported: Yes"); > +} > + > +static bool is_drrs_inactive(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "No active crtc found"); > +} > + > +static void drrs_print_status(void) > +{ > + char buf[256]; > + > + if (is_drrs_high()) > + igt_info("DRRS STATUS : DRRS HIGH\n"); > + > + if (is_drrs_low()) > + igt_info("DRRS_STATUS : DRRS LOW\n"); > + > + if (is_drrs_inactive()) > + igt_info("DRRS_STATUS : DRRS DISABLED\n"); > +} > + > static struct timespec fbc_get_last_action(void) > { > struct timespec ret = { 0, 0 }; > @@ -1575,6 +1625,25 @@ static void teardown_psr(void) > { > } > > +static void setup_drrs(void) > +{ > + if (get_connector(prim_mode_params.connector_id)->connector_type != > + DRM_MODE_CONNECTOR_eDP) { > + igt_info("Can't test DRRS: no usable eDP screen.\n"); > + return; > + } > + > + if (!is_drrs_enabled()) { > + igt_info("Can't test DRRS: not supported in the driver.\n"); > + return; > + } > + drrs.can_test = true; > +} > + > +static void teardown_drrs(void) > +{ > +} > + > static void setup_environment(void) > { > setup_drm(); > @@ -1582,7 +1651,7 @@ static void setup_environment(void) > > setup_fbc(); > setup_psr(); > - > + setup_drrs(); > setup_crcs(); > } > > @@ -1592,6 +1661,7 @@ static void teardown_environment(void) > > teardown_crcs(); > teardown_psr(); > + teardown_drrs(); > teardown_fbc(); > teardown_modeset(); > teardown_drm(); > @@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t) > #define ASSERT_PSR_ENABLED (1 << 6) > #define ASSERT_PSR_DISABLED (1 << 7) > > +#define DRRS_ASSERT_FLAGS (7 << 8) > +#define ASSERT_DRRS_HIGH (1 << 8) > +#define ASSERT_DRRS_LOW (1 << 9) > +#define ASSERT_DRRS_INACTIVE (1 << 10) > + > static int adjust_assertion_flags(const struct test_mode *t, int flags) > { > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > @@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) > flags |= ASSERT_FBC_ENABLED; > if (!(flags & ASSERT_PSR_DISABLED)) > flags |= ASSERT_PSR_ENABLED; > + if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) { > + flags |= ASSERT_DRRS_HIGH; > + } > } > > if ((t->feature & FEATURE_FBC) == 0) > flags &= ~FBC_ASSERT_FLAGS; > if ((t->feature & FEATURE_PSR) == 0) > flags &= ~PSR_ASSERT_FLAGS; > + if ((t->feature & FEATURE_DRRS) == 0) > + flags &= ~DRRS_ASSERT_FLAGS; > > return flags; > } > @@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags) > return; > } > > + if (flags & ASSERT_DRRS_HIGH) { > + if (!is_drrs_high()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS HIGH\n"); > + } > + } else if (flags & ASSERT_DRRS_LOW) { > + if (!is_drrs_low()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS LOW\n"); > + } > + } else if (flags & ASSERT_DRRS_INACTIVE) { > + if (!is_drrs_inactive()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS DISABLED\n"); > + } > + } > + > if (flags & ASSERT_FBC_ENABLED) { > igt_require(!fbc_not_enough_stolen()); > igt_require(!fbc_stride_not_supported()); > @@ -1850,6 +1947,10 @@ static void check_test_requirements(const struct test_mode *t) > "Can't test PSR without sink CRCs\n"); > } > > + if (t->feature & FEATURE_DRRS) > + igt_require_f(drrs.can_test, > + "Can't test DRRS with the current outputs\n"); > + > if (opt.only_pipes != PIPE_COUNT) > igt_require(t->pipes == opt.only_pipes); > } > @@ -1971,7 +2072,7 @@ static void rte_subtest(const struct test_mode *t) > > unset_all_crtcs(); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > enable_prim_screen_and_wait(t); > set_cursor_for_test(t, &prim_mode_params); > @@ -2008,6 +2109,24 @@ static bool op_disables_psr(const struct test_mode *t, > return false; > } > > +static bool op_sets_drrs_high(const struct test_mode *t, > + enum igt_draw_method method) > +{ > + if (method != IGT_DRAW_MMAP_GTT) > + return false; > + if (t->screen == SCREEN_PRIM) > + return true; > + /* On FBS_SHARED, even if the target is not the DRRS screen > + * (SCREEN_PRIM), all primary planes share the same frontbuffer, so a > + * write to the second screen primary plane - or offscreen plane - will > + * touch the framebuffer that's also used by the primary screen and making > + * DRRS state as high > + */ > + if (t->fbs == FBS_SHARED && t->plane == PLANE_PRI) > + return true; > + return false; > +} > + > /* > * draw - draw a set of rectangles on the screen using the provided method > * > @@ -2063,6 +2182,9 @@ static void draw_subtest(const struct test_mode *t) > if (op_disables_psr(t, t->method)) > assertions |= ASSERT_PSR_DISABLED; > > + if (op_sets_drrs_high(t, t->method)) > + assertions |= ASSERT_DRRS_HIGH; > + > prepare_subtest(t, pattern); > target = pick_target(t, params); > > @@ -2152,6 +2274,10 @@ static void multidraw_subtest(const struct test_mode *t) > !wc_used) > assertions |= ASSERT_PSR_DISABLED; > > + if (op_sets_drrs_high(t, used_method) && > + !wc_used) > + assertions |= ASSERT_DRRS_HIGH; > + > do_assertions(assertions); > } > > @@ -2206,6 +2332,7 @@ static void badformat_subtest(const struct test_mode *t) > { > bool fbc_valid = format_is_valid(FEATURE_FBC, t->format); > bool psr_valid = format_is_valid(FEATURE_PSR, t->format); > + bool drrs_valid = format_is_valid(FEATURE_DRRS, t->format); > int assertions = ASSERT_NO_ACTION_CHANGE; > > prepare_subtest_data(t, NULL); > @@ -2219,6 +2346,9 @@ static void badformat_subtest(const struct test_mode *t) > assertions |= ASSERT_FBC_DISABLED; > if (!psr_valid) > assertions |= ASSERT_PSR_DISABLED; > + if (!drrs_valid) > + assertions |= ASSERT_DRRS_HIGH; > + > do_assertions(assertions); > } > > @@ -2277,7 +2407,15 @@ static void slow_draw_subtest(const struct test_mode *t) > sleep(2); > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > - do_assertions(0); > + if (t->feature & FEATURE_PSR) { > + do_assertions(0); > + } > + > + if (t->feature & FEATURE_DRRS) { > + sleep(1); > + do_assertions(ASSERT_DRRS_LOW); > + } > + > } > } > > @@ -2464,6 +2602,7 @@ static void fliptrack_subtest(const struct test_mode *t, enum flip_type type) > update_wanted_crc(t, &pattern->crcs[t->format][r]); > > do_assertions(ASSERT_PSR_DISABLED); > + do_assertions(ASSERT_DRRS_HIGH); > } > > igt_remove_fb(drm.fd, &fb2); > @@ -2892,7 +3031,7 @@ static void suspend_subtest(const struct test_mode *t) > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > - do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > + do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH | > DONT_ASSERT_CRC); > > set_mode_for_params(params); > @@ -2966,7 +3105,7 @@ static void farfromfence_subtest(const struct test_mode *t) > update_wanted_crc(t, &pattern->crcs[t->format][r]); > > /* GTT draws disable PSR. */ > - do_assertions(assertions | ASSERT_PSR_DISABLED); > + do_assertions(assertions | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH); > } > > igt_remove_fb(drm.fd, &tall_fb); > @@ -3375,6 +3514,10 @@ static const char *feature_str(int feature) > return "psr"; > case FEATURE_FBC | FEATURE_PSR: > return "fbcpsr"; > + case FEATURE_DRRS: > + return "drrs"; > + case FEATURE_FBC | FEATURE_DRRS: > + return "fbcdrrs"; > default: > igt_assert(false); > } > @@ -3639,7 +3782,7 @@ int main(int argc, char *argv[]) > tilingchange_subtest(&t); > } > > - if (t.feature & FEATURE_PSR) > + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) > igt_subtest_f("%s-slowdraw", feature_str(t.feature)) > slow_draw_subtest(&t); I just merged the patch that blocks DRRS if PSR is enabled. I'm not sure if we now need some changes on this behavirou here forcing PSR flag to be disabled when testing DRRS. > > -- > 1.9.1 > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH] Idleness DRRS: 2017-09-18 19:54 ` [PATCH] Idleness DRRS: Rodrigo Vivi @ 2017-09-19 10:46 ` Ramalingam C 2017-09-19 18:12 ` Rodrigo Vivi 0 siblings, 1 reply; 59+ messages in thread From: Ramalingam C @ 2017-09-19 10:46 UTC (permalink / raw) To: Rodrigo Vivi, intel-gfx, daniel.vetter, chris Cc: ankit.k.nautiyal, paulo.r.zanoni On Tuesday 19 September 2017 01:24 AM, Rodrigo Vivi wrote: > On Mon, Sep 18, 2017 at 08:52:12AM +0000, wrote: >> From: Lohith BS <lohith.bs@intel.com> >> >> By default the DRRS state will be at DRRS_HIGH_RR. When a Display >> content is Idle for more than 1Sec Idleness will be declared and >> DRRS_LOW_RR will be invoked, changing the refresh rate to the >> lower most refresh rate supported by the panel. As soon as there >> is a display content change there will be a DRRS state transition >> as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the >> highest refresh rate supported by the panel. >> >> To test this, Idleness DRRS IGT will probe the DRRS state at below >> instances and compare with the expected state. >> >> Instance Expected State >> 1. Immediately after rendering the still image DRRS_HIGH_RR >> 2. After a delay of 1.2Sec DRRS_LOW_RR >> 3. After changing the frame buffer DRRS_HIGH_RR >> 4. After a delay of 1.2Sec DRRS_LOW_RR >> 5. After changing the frame buffer DRRS_HIGH_RR >> 6. After a delay of 1.2Sec DRRS_LOW_RR >> >> The test checks the driver DRRS state from the debugfs entry. To check the >> actual refresh-rate, the number of vblanks received per sec. >> The refresh-rate calculated is checked against the expected refresh-rate >> with a tolerance value of 2. >> >> This patch is a continuation of the earlier work >> https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness >> >> DRRS. The code is tested on Broxton BXT_T platform. >> >> v2: Addressed the comments and suggestions from Vlad, Marius. >> The signoff details from the earlier work are also included. >> >> v3: Modified vblank rate calculation by using reply-sequence, provided by >> drmWaitVBlank, as suggested by Chris Wilson. >> >> v4: As suggested from Chris Wilson and Daniel Vetter >> 1) Avoided using pthread for calculating vblank refresh rate, >> instead used drmWaitVBlank reply sequence. >> 2) Avoided using kernel-specific info like transitional delays, >> instead polling mechanism with timeout is used. >> 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, >> instead of having a separate test. >> >> v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. >> DRRS switch to lower vrefresh rate is tested at slow-draw subtest. >> >> Note: >> 1) Currently kernel doesn't have support to enable and disable the DRRS >> feature dynamically(as in case of PSR). Hence if the panel supports >> DRRS it will be enabled by default. >> >> This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" >> >> Signed-off-by: Lohith BS <lohith.bs@intel.com> >> Signed-off-by: Ramalingam C <ramalingam.c@intel.com> >> Signed-off-by: Vandana Kannan <vandana.kannan@intel.com> >> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> >> --- >> tests/kms_frontbuffer_tracking.c | 161 ++++++++++++++++++++++++++++++++++++--- >> 1 file changed, 152 insertions(+), 9 deletions(-) >> >> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c >> index a068c8a..4f44109 100644 >> --- a/tests/kms_frontbuffer_tracking.c >> +++ b/tests/kms_frontbuffer_tracking.c >> @@ -34,7 +34,7 @@ >> >> >> IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " >> - "its related features: FBC and PSR"); >> + "its related features: FBC DRRS and PSR"); >> >> /* >> * One of the aspects of this test is that, for every subtest, we try different >> @@ -105,8 +105,9 @@ struct test_mode { >> FEATURE_NONE = 0, >> FEATURE_FBC = 1, >> FEATURE_PSR = 2, >> - FEATURE_COUNT = 4, >> - FEATURE_DEFAULT = 4, >> + FEATURE_DRRS = 4, >> + FEATURE_COUNT = 6, >> + FEATURE_DEFAULT = 6, >> } feature; >> >> /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and >> @@ -180,6 +181,9 @@ struct { >> bool can_test; >> } psr = { >> .can_test = false, >> +}, >> +drrs = { >> + .can_test = false, >> }; >> >> >> @@ -822,6 +826,52 @@ static void psr_print_status(void) >> igt_info("PSR status:\n%s\n", buf); >> } >> >> +static bool is_drrs_high(void) >> +{ >> + char buf[256]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_HIGH_RR"); >> +} >> + >> +static bool is_drrs_low(void) >> +{ >> + char buf[256]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_LOW_RR"); >> +} >> + >> +static bool is_drrs_enabled(void) >> +{ >> + char buf[256]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS Supported: Yes"); >> +} >> + >> +static bool is_drrs_inactive(void) >> +{ >> + char buf[256]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "No active crtc found"); >> +} >> + >> +static void drrs_print_status(void) >> +{ >> + char buf[256]; >> + >> + if (is_drrs_high()) >> + igt_info("DRRS STATUS : DRRS HIGH\n"); >> + >> + if (is_drrs_low()) >> + igt_info("DRRS_STATUS : DRRS LOW\n"); >> + >> + if (is_drrs_inactive()) >> + igt_info("DRRS_STATUS : DRRS DISABLED\n"); >> +} >> + >> static struct timespec fbc_get_last_action(void) >> { >> struct timespec ret = { 0, 0 }; >> @@ -1575,6 +1625,25 @@ static void teardown_psr(void) >> { >> } >> >> +static void setup_drrs(void) >> +{ >> + if (get_connector(prim_mode_params.connector_id)->connector_type != >> + DRM_MODE_CONNECTOR_eDP) { >> + igt_info("Can't test DRRS: no usable eDP screen.\n"); >> + return; >> + } >> + >> + if (!is_drrs_enabled()) { >> + igt_info("Can't test DRRS: not supported in the driver.\n"); >> + return; >> + } >> + drrs.can_test = true; >> +} >> + >> +static void teardown_drrs(void) >> +{ >> +} >> + >> static void setup_environment(void) >> { >> setup_drm(); >> @@ -1582,7 +1651,7 @@ static void setup_environment(void) >> >> setup_fbc(); >> setup_psr(); >> - >> + setup_drrs(); >> setup_crcs(); >> } >> >> @@ -1592,6 +1661,7 @@ static void teardown_environment(void) >> >> teardown_crcs(); >> teardown_psr(); >> + teardown_drrs(); >> teardown_fbc(); >> teardown_modeset(); >> teardown_drm(); >> @@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t) >> #define ASSERT_PSR_ENABLED (1 << 6) >> #define ASSERT_PSR_DISABLED (1 << 7) >> >> +#define DRRS_ASSERT_FLAGS (7 << 8) >> +#define ASSERT_DRRS_HIGH (1 << 8) >> +#define ASSERT_DRRS_LOW (1 << 9) >> +#define ASSERT_DRRS_INACTIVE (1 << 10) >> + >> static int adjust_assertion_flags(const struct test_mode *t, int flags) >> { >> if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { >> @@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) >> flags |= ASSERT_FBC_ENABLED; >> if (!(flags & ASSERT_PSR_DISABLED)) >> flags |= ASSERT_PSR_ENABLED; >> + if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) { >> + flags |= ASSERT_DRRS_HIGH; >> + } >> } >> >> if ((t->feature & FEATURE_FBC) == 0) >> flags &= ~FBC_ASSERT_FLAGS; >> if ((t->feature & FEATURE_PSR) == 0) >> flags &= ~PSR_ASSERT_FLAGS; >> + if ((t->feature & FEATURE_DRRS) == 0) >> + flags &= ~DRRS_ASSERT_FLAGS; >> >> return flags; >> } >> @@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags) >> return; >> } >> >> + if (flags & ASSERT_DRRS_HIGH) { >> + if (!is_drrs_high()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS HIGH\n"); >> + } >> + } else if (flags & ASSERT_DRRS_LOW) { >> + if (!is_drrs_low()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS LOW\n"); >> + } >> + } else if (flags & ASSERT_DRRS_INACTIVE) { >> + if (!is_drrs_inactive()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS DISABLED\n"); >> + } >> + } >> + >> if (flags & ASSERT_FBC_ENABLED) { >> igt_require(!fbc_not_enough_stolen()); >> igt_require(!fbc_stride_not_supported()); >> @@ -1850,6 +1947,10 @@ static void check_test_requirements(const struct test_mode *t) >> "Can't test PSR without sink CRCs\n"); >> } >> >> + if (t->feature & FEATURE_DRRS) >> + igt_require_f(drrs.can_test, >> + "Can't test DRRS with the current outputs\n"); >> + >> if (opt.only_pipes != PIPE_COUNT) >> igt_require(t->pipes == opt.only_pipes); >> } >> @@ -1971,7 +2072,7 @@ static void rte_subtest(const struct test_mode *t) >> >> unset_all_crtcs(); >> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> - DONT_ASSERT_CRC); >> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >> >> enable_prim_screen_and_wait(t); >> set_cursor_for_test(t, &prim_mode_params); >> @@ -2008,6 +2109,24 @@ static bool op_disables_psr(const struct test_mode *t, >> return false; >> } >> >> +static bool op_sets_drrs_high(const struct test_mode *t, >> + enum igt_draw_method method) >> +{ >> + if (method != IGT_DRAW_MMAP_GTT) >> + return false; >> + if (t->screen == SCREEN_PRIM) >> + return true; >> + /* On FBS_SHARED, even if the target is not the DRRS screen >> + * (SCREEN_PRIM), all primary planes share the same frontbuffer, so a >> + * write to the second screen primary plane - or offscreen plane - will >> + * touch the framebuffer that's also used by the primary screen and making >> + * DRRS state as high >> + */ >> + if (t->fbs == FBS_SHARED && t->plane == PLANE_PRI) >> + return true; >> + return false; >> +} >> + >> /* >> * draw - draw a set of rectangles on the screen using the provided method >> * >> @@ -2063,6 +2182,9 @@ static void draw_subtest(const struct test_mode *t) >> if (op_disables_psr(t, t->method)) >> assertions |= ASSERT_PSR_DISABLED; >> >> + if (op_sets_drrs_high(t, t->method)) >> + assertions |= ASSERT_DRRS_HIGH; >> + >> prepare_subtest(t, pattern); >> target = pick_target(t, params); >> >> @@ -2152,6 +2274,10 @@ static void multidraw_subtest(const struct test_mode *t) >> !wc_used) >> assertions |= ASSERT_PSR_DISABLED; >> >> + if (op_sets_drrs_high(t, used_method) && >> + !wc_used) >> + assertions |= ASSERT_DRRS_HIGH; >> + >> do_assertions(assertions); >> } >> >> @@ -2206,6 +2332,7 @@ static void badformat_subtest(const struct test_mode *t) >> { >> bool fbc_valid = format_is_valid(FEATURE_FBC, t->format); >> bool psr_valid = format_is_valid(FEATURE_PSR, t->format); >> + bool drrs_valid = format_is_valid(FEATURE_DRRS, t->format); >> int assertions = ASSERT_NO_ACTION_CHANGE; >> >> prepare_subtest_data(t, NULL); >> @@ -2219,6 +2346,9 @@ static void badformat_subtest(const struct test_mode *t) >> assertions |= ASSERT_FBC_DISABLED; >> if (!psr_valid) >> assertions |= ASSERT_PSR_DISABLED; >> + if (!drrs_valid) >> + assertions |= ASSERT_DRRS_HIGH; >> + >> do_assertions(assertions); >> } >> >> @@ -2277,7 +2407,15 @@ static void slow_draw_subtest(const struct test_mode *t) >> sleep(2); >> >> update_wanted_crc(t, &pattern->crcs[t->format][r]); >> - do_assertions(0); >> + if (t->feature & FEATURE_PSR) { >> + do_assertions(0); >> + } >> + >> + if (t->feature & FEATURE_DRRS) { >> + sleep(1); >> + do_assertions(ASSERT_DRRS_LOW); >> + } >> + >> } >> } >> >> @@ -2464,6 +2602,7 @@ static void fliptrack_subtest(const struct test_mode *t, enum flip_type type) >> update_wanted_crc(t, &pattern->crcs[t->format][r]); >> >> do_assertions(ASSERT_PSR_DISABLED); >> + do_assertions(ASSERT_DRRS_HIGH); >> } >> >> igt_remove_fb(drm.fd, &fb2); >> @@ -2892,7 +3031,7 @@ static void suspend_subtest(const struct test_mode *t) >> sleep(5); >> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); >> sleep(5); >> - do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> + do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH | >> DONT_ASSERT_CRC); >> >> set_mode_for_params(params); >> @@ -2966,7 +3105,7 @@ static void farfromfence_subtest(const struct test_mode *t) >> update_wanted_crc(t, &pattern->crcs[t->format][r]); >> >> /* GTT draws disable PSR. */ >> - do_assertions(assertions | ASSERT_PSR_DISABLED); >> + do_assertions(assertions | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH); >> } >> >> igt_remove_fb(drm.fd, &tall_fb); >> @@ -3375,6 +3514,10 @@ static const char *feature_str(int feature) >> return "psr"; >> case FEATURE_FBC | FEATURE_PSR: >> return "fbcpsr"; >> + case FEATURE_DRRS: >> + return "drrs"; >> + case FEATURE_FBC | FEATURE_DRRS: >> + return "fbcdrrs"; >> default: >> igt_assert(false); >> } >> @@ -3639,7 +3782,7 @@ int main(int argc, char *argv[]) >> tilingchange_subtest(&t); >> } >> >> - if (t.feature & FEATURE_PSR) >> + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) >> igt_subtest_f("%s-slowdraw", feature_str(t.feature)) >> slow_draw_subtest(&t); > I just merged the patch that blocks DRRS if PSR is enabled. > > I'm not sure if we now need some changes on this behavirou here forcing PSR flag to be disabled > when testing DRRS. Hi, When PSR is capable on sink and src, this IGT shouldn't test the DRRS. This will be made sure using the drrs.cat_test flag (set to False if PSR.can_test is True) And had a offline discussion with Paulo on adding the DRRS in the frontbuffer tracking test. At present on a setup, If PSR is not capable and DRRS is capable, DRRS is alway enabled. Idleness detection and corresponding Vrefresh change will be ongoing parallel to FBC testing. It is always FBC||DRRS. in Paulo's opinion having a means of dynamically disabling the DRRS is compulsory to find out the regression caused by DRRS. i.e we can test the combination of features(FBC, FBC||(DRRS/PSR) and DRRS/PSR) based on the front buffer tracking, against the combination of features(FBC, FBC||PSR, PSR) excluding the DRRS. Difference in the results will call out whether a regression is caused due to DRRS or not. Untill we add a run time disable option for DRRS in kernel, could we have the functional test for DRRS merged in the front buffer tracking IGT? This wont change the current environment for testing if other features like FBC, that is done in this IGT. And this can't be final shape of the IGT but a intermediate one. Once the disable interface for DRRS is added corresponding tear_down_drrs option can be added to this IGT. --Ram > >> >> -- >> 1.9.1 >> _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH] Idleness DRRS: 2017-09-19 10:46 ` Ramalingam C @ 2017-09-19 18:12 ` Rodrigo Vivi 2017-10-31 9:20 ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C ` (20 more replies) 0 siblings, 21 replies; 59+ messages in thread From: Rodrigo Vivi @ 2017-09-19 18:12 UTC (permalink / raw) To: Ramalingam C; +Cc: paulo.r.zanoni, daniel.vetter, intel-gfx, ankit.k.nautiyal On Tue, Sep 19, 2017 at 10:46:49AM +0000, Ramalingam C wrote: > > > On Tuesday 19 September 2017 01:24 AM, Rodrigo Vivi wrote: > > On Mon, Sep 18, 2017 at 08:52:12AM +0000, wrote: > > > From: Lohith BS <lohith.bs@intel.com> > > > > > > By default the DRRS state will be at DRRS_HIGH_RR. When a Display > > > content is Idle for more than 1Sec Idleness will be declared and > > > DRRS_LOW_RR will be invoked, changing the refresh rate to the > > > lower most refresh rate supported by the panel. As soon as there > > > is a display content change there will be a DRRS state transition > > > as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the > > > highest refresh rate supported by the panel. > > > > > > To test this, Idleness DRRS IGT will probe the DRRS state at below > > > instances and compare with the expected state. > > > > > > Instance Expected State > > > 1. Immediately after rendering the still image DRRS_HIGH_RR > > > 2. After a delay of 1.2Sec DRRS_LOW_RR > > > 3. After changing the frame buffer DRRS_HIGH_RR > > > 4. After a delay of 1.2Sec DRRS_LOW_RR > > > 5. After changing the frame buffer DRRS_HIGH_RR > > > 6. After a delay of 1.2Sec DRRS_LOW_RR > > > > > > The test checks the driver DRRS state from the debugfs entry. To check the > > > actual refresh-rate, the number of vblanks received per sec. > > > The refresh-rate calculated is checked against the expected refresh-rate > > > with a tolerance value of 2. > > > > > > This patch is a continuation of the earlier work > > > https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness > > > > > > DRRS. The code is tested on Broxton BXT_T platform. > > > > > > v2: Addressed the comments and suggestions from Vlad, Marius. > > > The signoff details from the earlier work are also included. > > > > > > v3: Modified vblank rate calculation by using reply-sequence, provided by > > > drmWaitVBlank, as suggested by Chris Wilson. > > > > > > v4: As suggested from Chris Wilson and Daniel Vetter > > > 1) Avoided using pthread for calculating vblank refresh rate, > > > instead used drmWaitVBlank reply sequence. > > > 2) Avoided using kernel-specific info like transitional delays, > > > instead polling mechanism with timeout is used. > > > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > > > instead of having a separate test. > > > > > > v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. > > > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > > > > > Note: > > > 1) Currently kernel doesn't have support to enable and disable the DRRS > > > feature dynamically(as in case of PSR). Hence if the panel supports > > > DRRS it will be enabled by default. > > > > > > This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" > > > > > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > > > Signed-off-by: Ramalingam C <ramalingam.c@intel.com> > > > Signed-off-by: Vandana Kannan <vandana.kannan@intel.com> > > > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > > > --- > > > tests/kms_frontbuffer_tracking.c | 161 ++++++++++++++++++++++++++++++++++++--- > > > 1 file changed, 152 insertions(+), 9 deletions(-) > > > > > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > > > index a068c8a..4f44109 100644 > > > --- a/tests/kms_frontbuffer_tracking.c > > > +++ b/tests/kms_frontbuffer_tracking.c > > > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > > > - "its related features: FBC and PSR"); > > > + "its related features: FBC DRRS and PSR"); > > > /* > > > * One of the aspects of this test is that, for every subtest, we try different > > > @@ -105,8 +105,9 @@ struct test_mode { > > > FEATURE_NONE = 0, > > > FEATURE_FBC = 1, > > > FEATURE_PSR = 2, > > > - FEATURE_COUNT = 4, > > > - FEATURE_DEFAULT = 4, > > > + FEATURE_DRRS = 4, > > > + FEATURE_COUNT = 6, > > > + FEATURE_DEFAULT = 6, > > > } feature; > > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > > > @@ -180,6 +181,9 @@ struct { > > > bool can_test; > > > } psr = { > > > .can_test = false, > > > +}, > > > +drrs = { > > > + .can_test = false, > > > }; > > > @@ -822,6 +826,52 @@ static void psr_print_status(void) > > > igt_info("PSR status:\n%s\n", buf); > > > } > > > +static bool is_drrs_high(void) > > > +{ > > > + char buf[256]; > > > + > > > + debugfs_read("i915_drrs_status", buf); > > > + return strstr(buf, "DRRS_HIGH_RR"); > > > +} > > > + > > > +static bool is_drrs_low(void) > > > +{ > > > + char buf[256]; > > > + > > > + debugfs_read("i915_drrs_status", buf); > > > + return strstr(buf, "DRRS_LOW_RR"); > > > +} > > > + > > > +static bool is_drrs_enabled(void) > > > +{ > > > + char buf[256]; > > > + > > > + debugfs_read("i915_drrs_status", buf); > > > + return strstr(buf, "DRRS Supported: Yes"); > > > +} > > > + > > > +static bool is_drrs_inactive(void) > > > +{ > > > + char buf[256]; > > > + > > > + debugfs_read("i915_drrs_status", buf); > > > + return strstr(buf, "No active crtc found"); > > > +} > > > + > > > +static void drrs_print_status(void) > > > +{ > > > + char buf[256]; > > > + > > > + if (is_drrs_high()) > > > + igt_info("DRRS STATUS : DRRS HIGH\n"); > > > + > > > + if (is_drrs_low()) > > > + igt_info("DRRS_STATUS : DRRS LOW\n"); > > > + > > > + if (is_drrs_inactive()) > > > + igt_info("DRRS_STATUS : DRRS DISABLED\n"); > > > +} > > > + > > > static struct timespec fbc_get_last_action(void) > > > { > > > struct timespec ret = { 0, 0 }; > > > @@ -1575,6 +1625,25 @@ static void teardown_psr(void) > > > { > > > } > > > +static void setup_drrs(void) > > > +{ > > > + if (get_connector(prim_mode_params.connector_id)->connector_type != > > > + DRM_MODE_CONNECTOR_eDP) { > > > + igt_info("Can't test DRRS: no usable eDP screen.\n"); > > > + return; > > > + } > > > + > > > + if (!is_drrs_enabled()) { > > > + igt_info("Can't test DRRS: not supported in the driver.\n"); > > > + return; > > > + } > > > + drrs.can_test = true; > > > +} > > > + > > > +static void teardown_drrs(void) > > > +{ > > > +} > > > + > > > static void setup_environment(void) > > > { > > > setup_drm(); > > > @@ -1582,7 +1651,7 @@ static void setup_environment(void) > > > setup_fbc(); > > > setup_psr(); > > > - > > > + setup_drrs(); > > > setup_crcs(); > > > } > > > @@ -1592,6 +1661,7 @@ static void teardown_environment(void) > > > teardown_crcs(); > > > teardown_psr(); > > > + teardown_drrs(); > > > teardown_fbc(); > > > teardown_modeset(); > > > teardown_drm(); > > > @@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t) > > > #define ASSERT_PSR_ENABLED (1 << 6) > > > #define ASSERT_PSR_DISABLED (1 << 7) > > > +#define DRRS_ASSERT_FLAGS (7 << 8) > > > +#define ASSERT_DRRS_HIGH (1 << 8) > > > +#define ASSERT_DRRS_LOW (1 << 9) > > > +#define ASSERT_DRRS_INACTIVE (1 << 10) > > > + > > > static int adjust_assertion_flags(const struct test_mode *t, int flags) > > > { > > > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > > > @@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) > > > flags |= ASSERT_FBC_ENABLED; > > > if (!(flags & ASSERT_PSR_DISABLED)) > > > flags |= ASSERT_PSR_ENABLED; > > > + if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) { > > > + flags |= ASSERT_DRRS_HIGH; > > > + } > > > } > > > if ((t->feature & FEATURE_FBC) == 0) > > > flags &= ~FBC_ASSERT_FLAGS; > > > if ((t->feature & FEATURE_PSR) == 0) > > > flags &= ~PSR_ASSERT_FLAGS; > > > + if ((t->feature & FEATURE_DRRS) == 0) > > > + flags &= ~DRRS_ASSERT_FLAGS; > > > return flags; > > > } > > > @@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags) > > > return; > > > } > > > + if (flags & ASSERT_DRRS_HIGH) { > > > + if (!is_drrs_high()) { > > > + drrs_print_status(); > > > + igt_assert_f(false, "DRRS HIGH\n"); > > > + } > > > + } else if (flags & ASSERT_DRRS_LOW) { > > > + if (!is_drrs_low()) { > > > + drrs_print_status(); > > > + igt_assert_f(false, "DRRS LOW\n"); > > > + } > > > + } else if (flags & ASSERT_DRRS_INACTIVE) { > > > + if (!is_drrs_inactive()) { > > > + drrs_print_status(); > > > + igt_assert_f(false, "DRRS DISABLED\n"); > > > + } > > > + } > > > + > > > if (flags & ASSERT_FBC_ENABLED) { > > > igt_require(!fbc_not_enough_stolen()); > > > igt_require(!fbc_stride_not_supported()); > > > @@ -1850,6 +1947,10 @@ static void check_test_requirements(const struct test_mode *t) > > > "Can't test PSR without sink CRCs\n"); > > > } > > > + if (t->feature & FEATURE_DRRS) > > > + igt_require_f(drrs.can_test, > > > + "Can't test DRRS with the current outputs\n"); > > > + > > > if (opt.only_pipes != PIPE_COUNT) > > > igt_require(t->pipes == opt.only_pipes); > > > } > > > @@ -1971,7 +2072,7 @@ static void rte_subtest(const struct test_mode *t) > > > unset_all_crtcs(); > > > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > > > - DONT_ASSERT_CRC); > > > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > > enable_prim_screen_and_wait(t); > > > set_cursor_for_test(t, &prim_mode_params); > > > @@ -2008,6 +2109,24 @@ static bool op_disables_psr(const struct test_mode *t, > > > return false; > > > } > > > +static bool op_sets_drrs_high(const struct test_mode *t, > > > + enum igt_draw_method method) > > > +{ > > > + if (method != IGT_DRAW_MMAP_GTT) > > > + return false; > > > + if (t->screen == SCREEN_PRIM) > > > + return true; > > > + /* On FBS_SHARED, even if the target is not the DRRS screen > > > + * (SCREEN_PRIM), all primary planes share the same frontbuffer, so a > > > + * write to the second screen primary plane - or offscreen plane - will > > > + * touch the framebuffer that's also used by the primary screen and making > > > + * DRRS state as high > > > + */ > > > + if (t->fbs == FBS_SHARED && t->plane == PLANE_PRI) > > > + return true; > > > + return false; > > > +} > > > + > > > /* > > > * draw - draw a set of rectangles on the screen using the provided method > > > * > > > @@ -2063,6 +2182,9 @@ static void draw_subtest(const struct test_mode *t) > > > if (op_disables_psr(t, t->method)) > > > assertions |= ASSERT_PSR_DISABLED; > > > + if (op_sets_drrs_high(t, t->method)) > > > + assertions |= ASSERT_DRRS_HIGH; > > > + > > > prepare_subtest(t, pattern); > > > target = pick_target(t, params); > > > @@ -2152,6 +2274,10 @@ static void multidraw_subtest(const struct test_mode *t) > > > !wc_used) > > > assertions |= ASSERT_PSR_DISABLED; > > > + if (op_sets_drrs_high(t, used_method) && > > > + !wc_used) > > > + assertions |= ASSERT_DRRS_HIGH; > > > + > > > do_assertions(assertions); > > > } > > > @@ -2206,6 +2332,7 @@ static void badformat_subtest(const struct test_mode *t) > > > { > > > bool fbc_valid = format_is_valid(FEATURE_FBC, t->format); > > > bool psr_valid = format_is_valid(FEATURE_PSR, t->format); > > > + bool drrs_valid = format_is_valid(FEATURE_DRRS, t->format); > > > int assertions = ASSERT_NO_ACTION_CHANGE; > > > prepare_subtest_data(t, NULL); > > > @@ -2219,6 +2346,9 @@ static void badformat_subtest(const struct test_mode *t) > > > assertions |= ASSERT_FBC_DISABLED; > > > if (!psr_valid) > > > assertions |= ASSERT_PSR_DISABLED; > > > + if (!drrs_valid) > > > + assertions |= ASSERT_DRRS_HIGH; > > > + > > > do_assertions(assertions); > > > } > > > @@ -2277,7 +2407,15 @@ static void slow_draw_subtest(const struct test_mode *t) > > > sleep(2); > > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > > > - do_assertions(0); > > > + if (t->feature & FEATURE_PSR) { > > > + do_assertions(0); > > > + } > > > + > > > + if (t->feature & FEATURE_DRRS) { > > > + sleep(1); > > > + do_assertions(ASSERT_DRRS_LOW); > > > + } > > > + > > > } > > > } > > > @@ -2464,6 +2602,7 @@ static void fliptrack_subtest(const struct test_mode *t, enum flip_type type) > > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > > > do_assertions(ASSERT_PSR_DISABLED); > > > + do_assertions(ASSERT_DRRS_HIGH); > > > } > > > igt_remove_fb(drm.fd, &fb2); > > > @@ -2892,7 +3031,7 @@ static void suspend_subtest(const struct test_mode *t) > > > sleep(5); > > > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > > > sleep(5); > > > - do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > > > + do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH | > > > DONT_ASSERT_CRC); > > > set_mode_for_params(params); > > > @@ -2966,7 +3105,7 @@ static void farfromfence_subtest(const struct test_mode *t) > > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > > > /* GTT draws disable PSR. */ > > > - do_assertions(assertions | ASSERT_PSR_DISABLED); > > > + do_assertions(assertions | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH); > > > } > > > igt_remove_fb(drm.fd, &tall_fb); > > > @@ -3375,6 +3514,10 @@ static const char *feature_str(int feature) > > > return "psr"; > > > case FEATURE_FBC | FEATURE_PSR: > > > return "fbcpsr"; > > > + case FEATURE_DRRS: > > > + return "drrs"; > > > + case FEATURE_FBC | FEATURE_DRRS: > > > + return "fbcdrrs"; > > > default: > > > igt_assert(false); > > > } > > > @@ -3639,7 +3782,7 @@ int main(int argc, char *argv[]) > > > tilingchange_subtest(&t); > > > } > > > - if (t.feature & FEATURE_PSR) > > > + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) > > > igt_subtest_f("%s-slowdraw", feature_str(t.feature)) > > > slow_draw_subtest(&t); > > I just merged the patch that blocks DRRS if PSR is enabled. > > > > I'm not sure if we now need some changes on this behavirou here forcing PSR flag to be disabled > > when testing DRRS. > Hi, > > When PSR is capable on sink and src, this IGT shouldn't test the DRRS. I believe the test case needs to be smarter than that. It should actually always test DRRS, not only when PSR is not capable on sink and src. But disabling i915 param psr_enable and forcing a modeset PSR src will not be ok anymore so DRRS can be tested. So, whenever we enable PSR by default we don't break DRRS tests on CI. > This will be made sure using the drrs.cat_test flag (set to False if > PSR.can_test is True) > > And had a offline discussion with Paulo on adding the DRRS in the > frontbuffer tracking test. > At present on a setup, If PSR is not capable and DRRS is capable, DRRS is > alway enabled. > Idleness detection and corresponding Vrefresh change will be ongoing > parallel to FBC testing. It is always FBC||DRRS. > > in Paulo's opinion having a means of dynamically disabling the DRRS is > compulsory to find out the regression caused by DRRS. > i.e we can test the combination of features(FBC, FBC||(DRRS/PSR) and > DRRS/PSR) based on the front buffer tracking, > against the combination of features(FBC, FBC||PSR, PSR) excluding the DRRS. > Difference in the results will call out whether a regression is caused due > to DRRS or not. > > Untill we add a run time disable option for DRRS in kernel, could we have > the functional test for DRRS merged in the front buffer tracking IGT? > This wont change the current environment for testing if other features like > FBC, that is done in this IGT. > > And this can't be final shape of the IGT but a intermediate one. > Once the disable interface for DRRS is added corresponding tear_down_drrs > option can be added to this IGT. > > > --Ram > > > > > -- > > > 1.9.1 > > > > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT 2017-09-19 18:12 ` Rodrigo Vivi @ 2017-10-31 9:20 ` Ramalingam C 2017-10-31 9:20 ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C ` (2 more replies) 2017-10-31 9:28 ` ✗ Fi.CI.BAT: failure for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS Patchwork ` (19 subsequent siblings) 20 siblings, 3 replies; 59+ messages in thread From: Ramalingam C @ 2017-10-31 9:20 UTC (permalink / raw) To: intel-gfx, rodrigo.vivi, paulo.r.zanoni, chris From: "C, Ramalingam" <ramalingam.c@intel.com> FBC, DRRS and PSR are based on front buffer tracking infra. So the features in this set, needs to be tested for all possible test cases of front buffer tracking, individually and in all combinations of the features. eDP Idleness DRRS is implemented based on front buffer tracking. So DRRS is added as a feature to get tested in kms_frontbuffer_tracking. Till now if DRRS is enabled from VBT(platform) and panel, DRRS will be always enabled and active. Considering PSR's effectiveness over DRRS, recently DRRS is not enabled if PSR is enabled. But to test FBC individually, we need to disable the DRRS and PSR. This series adds the corresponding changes(module param enable_drrs) to kernel, to control the DRRS enable path. With this kernel changes IGT/Userspace will be able to disable the eDP DRRS in runtime. C, Ramalingam (2): drm/i915: Runtime disable for eDP DRRS i915/drrs/debugfs: module param and psr status drivers/gpu/drm/i915/i915_debugfs.c | 11 ++++++++++- drivers/gpu/drm/i915/i915_params.c | 3 +++ drivers/gpu/drm/i915/i915_params.h | 3 ++- drivers/gpu/drm/i915/intel_dp.c | 6 ++++++ 4 files changed, 21 insertions(+), 2 deletions(-) BS, Lohith (1): tests/kms_frontbuffer_tracking: Idleness DRRS coverage tests/kms_frontbuffer_tracking.c | 136 +++++++++++++++++++++++++++++++++++---- 1 file changed, 124 insertions(+), 12 deletions(-) -- 2.7.4 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS 2017-10-31 9:20 ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C @ 2017-10-31 9:20 ` Ramalingam C 2017-10-31 18:57 ` Rodrigo Vivi 2017-10-31 9:20 ` [PATCH 2/2] i915/drrs/debugfs: module param and psr status Ramalingam C 2017-10-31 9:20 ` [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage Ramalingam C 2 siblings, 1 reply; 59+ messages in thread From: Ramalingam C @ 2017-10-31 9:20 UTC (permalink / raw) To: intel-gfx, rodrigo.vivi, paulo.r.zanoni, chris From: "C, Ramalingam" <ramalingam.c@intel.com> Module parameter enable_drrs(Boolean flag) is added to control the eDP Idleness drrs enable flow. Modification to this module parameter will be considered on next eDP_DRRS enable flow. So after module parameter update, a modeset will help to modify the feature state as per the module parameter's current state. Possibility of disabling the DRRS, enables the testing of the frontbuffer tracking based features (FBC, DRRS and PSR) as standalone or any combination of the set. Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> --- drivers/gpu/drm/i915/i915_params.c | 3 +++ drivers/gpu/drm/i915/i915_params.h | 3 ++- drivers/gpu/drm/i915/intel_dp.c | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c index b4faeb6aa2bd..32f06bb74f9d 100644 --- a/drivers/gpu/drm/i915/i915_params.c +++ b/drivers/gpu/drm/i915/i915_params.c @@ -190,3 +190,6 @@ i915_param_named(enable_dpcd_backlight, bool, 0600, i915_param_named(enable_gvt, bool, 0400, "Enable support for Intel GVT-g graphics virtualization host support(default:false)"); + +i915_param_named_unsafe(enable_drrs, bool, 0600, + "Enable DRRS. (True=Enabled, False=Disabled [Default])"); diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h index c7292268ed43..3c6fdce1c122 100644 --- a/drivers/gpu/drm/i915/i915_params.h +++ b/drivers/gpu/drm/i915/i915_params.h @@ -67,7 +67,8 @@ param(bool, nuclear_pageflip, false) \ param(bool, enable_dp_mst, true) \ param(bool, enable_dpcd_backlight, false) \ - param(bool, enable_gvt, false) + param(bool, enable_gvt, false) \ + param(bool, enable_drrs, false) #define MEMBER(T, member, ...) T member; struct i915_params { diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index ca48bce23a6f..ff9964cf15cd 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -5568,6 +5568,11 @@ void intel_edp_drrs_enable(struct intel_dp *intel_dp, return; } + if (!i915_modparams.enable_drrs) { + DRM_DEBUG_KMS("DRRS is disabled from modparams\n"); + return; + } + mutex_lock(&dev_priv->drrs.mutex); if (WARN_ON(dev_priv->drrs.dp)) { DRM_ERROR("DRRS already enabled\n"); @@ -5817,6 +5822,7 @@ intel_dp_drrs_init(struct intel_connector *intel_connector, } dev_priv->drrs.type = dev_priv->vbt.drrs_type; + i915_modparams.enable_drrs = true; dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR; DRM_DEBUG_KMS("seamless DRRS supported for eDP panel.\n"); -- 2.7.4 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* Re: [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS 2017-10-31 9:20 ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C @ 2017-10-31 18:57 ` Rodrigo Vivi 2017-11-01 16:44 ` C, Ramalingam 0 siblings, 1 reply; 59+ messages in thread From: Rodrigo Vivi @ 2017-10-31 18:57 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx, paulo.r.zanoni On Tue, Oct 31, 2017 at 09:20:42AM +0000, Ramalingam C wrote: > From: "C, Ramalingam" <ramalingam.c@intel.com> > > Module parameter enable_drrs(Boolean flag) is added to control the > eDP Idleness drrs enable flow. This goes on the opposite direction of the current trends. Well, I'm a big fan of the parameters, but there's a big effort going on to remove all kernel parameters. I believe it will be just a matter of time that we have to remove fbc and psr as well. So probably not a good idea to add something now that we will have to rework soon. Maybe we could add a on/off toggle on DRRS now and then when we remove the parameter for fbc and psr we also add toggles on debugfs... Thanks, Rodrigo. > > Modification to this module parameter will be considered on next > eDP_DRRS enable flow. So after module parameter update, a modeset > will help to modify the feature state as per the module parameter's > current state. > > Possibility of disabling the DRRS, enables the testing of the > frontbuffer tracking based features (FBC, DRRS and PSR) as standalone > or any combination of the set. > > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> > --- > drivers/gpu/drm/i915/i915_params.c | 3 +++ > drivers/gpu/drm/i915/i915_params.h | 3 ++- > drivers/gpu/drm/i915/intel_dp.c | 6 ++++++ > 3 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c > index b4faeb6aa2bd..32f06bb74f9d 100644 > --- a/drivers/gpu/drm/i915/i915_params.c > +++ b/drivers/gpu/drm/i915/i915_params.c > @@ -190,3 +190,6 @@ i915_param_named(enable_dpcd_backlight, bool, 0600, > > i915_param_named(enable_gvt, bool, 0400, > "Enable support for Intel GVT-g graphics virtualization host support(default:false)"); > + > +i915_param_named_unsafe(enable_drrs, bool, 0600, > + "Enable DRRS. (True=Enabled, False=Disabled [Default])"); > diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h > index c7292268ed43..3c6fdce1c122 100644 > --- a/drivers/gpu/drm/i915/i915_params.h > +++ b/drivers/gpu/drm/i915/i915_params.h > @@ -67,7 +67,8 @@ > param(bool, nuclear_pageflip, false) \ > param(bool, enable_dp_mst, true) \ > param(bool, enable_dpcd_backlight, false) \ > - param(bool, enable_gvt, false) > + param(bool, enable_gvt, false) \ > + param(bool, enable_drrs, false) > > #define MEMBER(T, member, ...) T member; > struct i915_params { > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > index ca48bce23a6f..ff9964cf15cd 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -5568,6 +5568,11 @@ void intel_edp_drrs_enable(struct intel_dp *intel_dp, > return; > } > > + if (!i915_modparams.enable_drrs) { > + DRM_DEBUG_KMS("DRRS is disabled from modparams\n"); > + return; > + } > + > mutex_lock(&dev_priv->drrs.mutex); > if (WARN_ON(dev_priv->drrs.dp)) { > DRM_ERROR("DRRS already enabled\n"); > @@ -5817,6 +5822,7 @@ intel_dp_drrs_init(struct intel_connector *intel_connector, > } > > dev_priv->drrs.type = dev_priv->vbt.drrs_type; > + i915_modparams.enable_drrs = true; > > dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR; > DRM_DEBUG_KMS("seamless DRRS supported for eDP panel.\n"); > -- > 2.7.4 > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS 2017-10-31 18:57 ` Rodrigo Vivi @ 2017-11-01 16:44 ` C, Ramalingam 2017-11-07 18:38 ` [PATCH v2 " Ramalingam C 0 siblings, 1 reply; 59+ messages in thread From: C, Ramalingam @ 2017-11-01 16:44 UTC (permalink / raw) To: Vivi, Rodrigo; +Cc: intel-gfx, Zanoni, Paulo R > -----Original Message----- > From: Vivi, Rodrigo > Sent: Wednesday, November 1, 2017 12:27 AM > To: C, Ramalingam <ramalingam.c@intel.com> > Cc: intel-gfx@lists.freedesktop.org; Zanoni, Paulo R > <paulo.r.zanoni@intel.com>; chris@chris-wilson.co.uk > Subject: Re: [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS > > On Tue, Oct 31, 2017 at 09:20:42AM +0000, Ramalingam C wrote: > > From: "C, Ramalingam" <ramalingam.c@intel.com> > > > > Module parameter enable_drrs(Boolean flag) is added to control the > > eDP Idleness drrs enable flow. > > This goes on the opposite direction of the current trends. > > Well, I'm a big fan of the parameters, but there's a big effort > going on to remove all kernel parameters. I believe it will > be just a matter of time that we have to remove fbc and psr as well. > So probably not a good idea to add something now that we will > have to rework soon. > > Maybe we could add a on/off toggle on DRRS now and then > when we remove the parameter for fbc and psr we also add toggles > on debugfs... Based on our offline discussion, I will use the debugfs to toggle the DRRS instead of modparams. Once the code is ready I will share it for the review. Thanks --Ram > > Thanks, > Rodrigo. > > > > > Modification to this module parameter will be considered on next > > eDP_DRRS enable flow. So after module parameter update, a modeset > > will help to modify the feature state as per the module parameter's > > current state. > > > > Possibility of disabling the DRRS, enables the testing of the > > frontbuffer tracking based features (FBC, DRRS and PSR) as standalone > > or any combination of the set. > > > > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> > > --- > > drivers/gpu/drm/i915/i915_params.c | 3 +++ > > drivers/gpu/drm/i915/i915_params.h | 3 ++- > > drivers/gpu/drm/i915/intel_dp.c | 6 ++++++ > > 3 files changed, 11 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/i915/i915_params.c > b/drivers/gpu/drm/i915/i915_params.c > > index b4faeb6aa2bd..32f06bb74f9d 100644 > > --- a/drivers/gpu/drm/i915/i915_params.c > > +++ b/drivers/gpu/drm/i915/i915_params.c > > @@ -190,3 +190,6 @@ i915_param_named(enable_dpcd_backlight, bool, > 0600, > > > > i915_param_named(enable_gvt, bool, 0400, > > "Enable support for Intel GVT-g graphics virtualization host > support(default:false)"); > > + > > +i915_param_named_unsafe(enable_drrs, bool, 0600, > > + "Enable DRRS. (True=Enabled, False=Disabled [Default])"); > > diff --git a/drivers/gpu/drm/i915/i915_params.h > b/drivers/gpu/drm/i915/i915_params.h > > index c7292268ed43..3c6fdce1c122 100644 > > --- a/drivers/gpu/drm/i915/i915_params.h > > +++ b/drivers/gpu/drm/i915/i915_params.h > > @@ -67,7 +67,8 @@ > > param(bool, nuclear_pageflip, false) \ > > param(bool, enable_dp_mst, true) \ > > param(bool, enable_dpcd_backlight, false) \ > > - param(bool, enable_gvt, false) > > + param(bool, enable_gvt, false) \ > > + param(bool, enable_drrs, false) > > > > #define MEMBER(T, member, ...) T member; > > struct i915_params { > > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > > index ca48bce23a6f..ff9964cf15cd 100644 > > --- a/drivers/gpu/drm/i915/intel_dp.c > > +++ b/drivers/gpu/drm/i915/intel_dp.c > > @@ -5568,6 +5568,11 @@ void intel_edp_drrs_enable(struct intel_dp > *intel_dp, > > return; > > } > > > > + if (!i915_modparams.enable_drrs) { > > + DRM_DEBUG_KMS("DRRS is disabled from modparams\n"); > > + return; > > + } > > + > > mutex_lock(&dev_priv->drrs.mutex); > > if (WARN_ON(dev_priv->drrs.dp)) { > > DRM_ERROR("DRRS already enabled\n"); > > @@ -5817,6 +5822,7 @@ intel_dp_drrs_init(struct intel_connector > *intel_connector, > > } > > > > dev_priv->drrs.type = dev_priv->vbt.drrs_type; > > + i915_modparams.enable_drrs = true; > > > > dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR; > > DRM_DEBUG_KMS("seamless DRRS supported for eDP panel.\n"); > > -- > > 2.7.4 > > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS 2017-11-01 16:44 ` C, Ramalingam @ 2017-11-07 18:38 ` Ramalingam C 2017-11-17 18:53 ` Rodrigo Vivi 0 siblings, 1 reply; 59+ messages in thread From: Ramalingam C @ 2017-11-07 18:38 UTC (permalink / raw) To: paulo.r.zanoni, rodrigo.vivi, intel-gfx From: "C, Ramalingam" <ramalingam.c@intel.com> Debugfs called i915_drrs_ctl is added to enable and disable the eDP DRRS. Writing 0 will disable the feature, whereas non-zero will enable the feature. Possibility of disabling the DRRS, enables the testing of the frontbuffer tracking based features (FBC, DRRS and PSR) as standalone or any combination of the set. [v2]: ctl interface is moved from module parameter to debugfs [Rodrigo] Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> --- drivers/gpu/drm/i915/i915_debugfs.c | 43 ++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 0bb6e01121fc..0c1501fe4c9f 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -4747,6 +4747,46 @@ static const struct file_operations i915_hpd_storm_ctl_fops = { .write = i915_hpd_storm_ctl_write }; +static int i915_drrs_ctl_set(void *data, u64 val) +{ + struct drm_i915_private *dev_priv = data; + struct drm_device *dev = &dev_priv->drm; + struct intel_crtc *intel_crtc; + struct intel_encoder *encoder; + struct intel_dp *intel_dp; + + if (INTEL_GEN(dev_priv) < 7) + return -ENODEV; + + drm_modeset_lock_all(dev); + for_each_intel_crtc(dev, intel_crtc) { + if (!intel_crtc->base.state->active || + !intel_crtc->config->has_drrs) + continue; + + for_each_encoder_on_crtc(dev, &intel_crtc->base, encoder) { + if (encoder->type != INTEL_OUTPUT_EDP) + continue; + + DRM_DEBUG_DRIVER("Manually %sabling DRRS. %llu\n", + val ? "en" : "dis", val); + + intel_dp = enc_to_intel_dp(&encoder->base); + if (val) + intel_edp_drrs_enable(intel_dp, + intel_crtc->config); + else + intel_edp_drrs_disable(intel_dp, + intel_crtc->config); + } + } + drm_modeset_unlock_all(dev); + + return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set, "%llu\n"); + static const struct drm_info_list i915_debugfs_list[] = { {"i915_capabilities", i915_capabilities, 0}, {"i915_gem_objects", i915_gem_object_info, 0}, @@ -4828,7 +4868,8 @@ static const struct i915_debugfs_files { {"i915_dp_test_active", &i915_displayport_test_active_fops}, {"i915_guc_log_control", &i915_guc_log_control_fops}, {"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops}, - {"i915_ipc_status", &i915_ipc_status_fops} + {"i915_ipc_status", &i915_ipc_status_fops}, + {"i915_drrs_ctl", &i915_drrs_ctl_fops} }; int i915_debugfs_register(struct drm_i915_private *dev_priv) -- 2.7.4 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* Re: [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS 2017-11-07 18:38 ` [PATCH v2 " Ramalingam C @ 2017-11-17 18:53 ` Rodrigo Vivi 2017-11-19 14:55 ` C, Ramalingam 0 siblings, 1 reply; 59+ messages in thread From: Rodrigo Vivi @ 2017-11-17 18:53 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx, paulo.r.zanoni On Tue, Nov 07, 2017 at 06:38:23PM +0000, Ramalingam C wrote: > From: "C, Ramalingam" <ramalingam.c@intel.com> > > Debugfs called i915_drrs_ctl is added to enable and disable the > eDP DRRS. Writing 0 will disable the feature, whereas non-zero > will enable the feature. > > Possibility of disabling the DRRS, enables the testing of the > frontbuffer tracking based features (FBC, DRRS and PSR) as > standalone or any combination of the set. > > [v2]: ctl interface is moved from module parameter to debugfs [Rodrigo] Thanks > > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> > --- > drivers/gpu/drm/i915/i915_debugfs.c | 43 ++++++++++++++++++++++++++++++++++++- > 1 file changed, 42 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c > index 0bb6e01121fc..0c1501fe4c9f 100644 > --- a/drivers/gpu/drm/i915/i915_debugfs.c > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > @@ -4747,6 +4747,46 @@ static const struct file_operations i915_hpd_storm_ctl_fops = { > .write = i915_hpd_storm_ctl_write > }; > > +static int i915_drrs_ctl_set(void *data, u64 val) > +{ > + struct drm_i915_private *dev_priv = data; > + struct drm_device *dev = &dev_priv->drm; > + struct intel_crtc *intel_crtc; > + struct intel_encoder *encoder; > + struct intel_dp *intel_dp; > + > + if (INTEL_GEN(dev_priv) < 7) I believe we need to define a HAS_DRRS(dev_priv) which based on what is on intel_cpu_transcoder_set_m_n would be (IS_CHERRYVIEW(dev_priv) || INTEL_GEN(dev_priv) < 8) > + return -ENODEV; > + > + drm_modeset_lock_all(dev); my first reaction to this was: "why do you need to lock all modeset?!" But this simplify a lot the logic here... This assure that drrs is really not getting changed from other places. > + for_each_intel_crtc(dev, intel_crtc) { > + if (!intel_crtc->base.state->active || > + !intel_crtc->config->has_drrs) I was going to say that this check already happens inside enable and disable functions... But I see the reason why to check before the unecessary noise. > + continue; > + > + for_each_encoder_on_crtc(dev, &intel_crtc->base, encoder) { > + if (encoder->type != INTEL_OUTPUT_EDP) > + continue; > + > + DRM_DEBUG_DRIVER("Manually %sabling DRRS. %llu\n", > + val ? "en" : "dis", val); > + > + intel_dp = enc_to_intel_dp(&encoder->base); > + if (val) > + intel_edp_drrs_enable(intel_dp, > + intel_crtc->config); > + else > + intel_edp_drrs_disable(intel_dp, > + intel_crtc->config); > + } > + } > + drm_modeset_unlock_all(dev); > + > + return 0; > +} It seems simple and effective. Simpler than I imagined... My only question is about that HAS_DRRS and when to skip here... > + > +DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set, "%llu\n"); > + > static const struct drm_info_list i915_debugfs_list[] = { > {"i915_capabilities", i915_capabilities, 0}, > {"i915_gem_objects", i915_gem_object_info, 0}, > @@ -4828,7 +4868,8 @@ static const struct i915_debugfs_files { > {"i915_dp_test_active", &i915_displayport_test_active_fops}, > {"i915_guc_log_control", &i915_guc_log_control_fops}, > {"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops}, > - {"i915_ipc_status", &i915_ipc_status_fops} > + {"i915_ipc_status", &i915_ipc_status_fops}, > + {"i915_drrs_ctl", &i915_drrs_ctl_fops} > }; > > int i915_debugfs_register(struct drm_i915_private *dev_priv) > -- > 2.7.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS 2017-11-17 18:53 ` Rodrigo Vivi @ 2017-11-19 14:55 ` C, Ramalingam 2017-11-21 20:59 ` Rodrigo Vivi 0 siblings, 1 reply; 59+ messages in thread From: C, Ramalingam @ 2017-11-19 14:55 UTC (permalink / raw) To: Vivi, Rodrigo; +Cc: intel-gfx, Zanoni, Paulo R Thanks for reviewing these changes Rodrigo. > -----Original Message----- > From: Vivi, Rodrigo > Sent: Saturday, November 18, 2017 12:24 AM > To: C, Ramalingam <ramalingam.c@intel.com> > Cc: Zanoni, Paulo R <paulo.r.zanoni@intel.com>; intel- > gfx@lists.freedesktop.org > Subject: Re: [Intel-gfx] [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS > > On Tue, Nov 07, 2017 at 06:38:23PM +0000, Ramalingam C wrote: > > From: "C, Ramalingam" <ramalingam.c@intel.com> > > > > Debugfs called i915_drrs_ctl is added to enable and disable the eDP > > DRRS. Writing 0 will disable the feature, whereas non-zero will enable > > the feature. > > > > Possibility of disabling the DRRS, enables the testing of the > > frontbuffer tracking based features (FBC, DRRS and PSR) as standalone > > or any combination of the set. > > > > [v2]: ctl interface is moved from module parameter to debugfs > > [Rodrigo] > > Thanks > > > > > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> > > --- > > drivers/gpu/drm/i915/i915_debugfs.c | 43 > > ++++++++++++++++++++++++++++++++++++- > > 1 file changed, 42 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c > > b/drivers/gpu/drm/i915/i915_debugfs.c > > index 0bb6e01121fc..0c1501fe4c9f 100644 > > --- a/drivers/gpu/drm/i915/i915_debugfs.c > > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > > @@ -4747,6 +4747,46 @@ static const struct file_operations > i915_hpd_storm_ctl_fops = { > > .write = i915_hpd_storm_ctl_write > > }; > > > > +static int i915_drrs_ctl_set(void *data, u64 val) { > > + struct drm_i915_private *dev_priv = data; > > + struct drm_device *dev = &dev_priv->drm; > > + struct intel_crtc *intel_crtc; > > + struct intel_encoder *encoder; > > + struct intel_dp *intel_dp; > > + > > + if (INTEL_GEN(dev_priv) < 7) > > I believe we need to define a HAS_DRRS(dev_priv) which based on what is on > intel_cpu_transcoder_set_m_n would be > (IS_CHERRYVIEW(dev_priv) || INTEL_GEN(dev_priv) < 8) Actually programming of pll divider m and n changes between platforms. Hence this check was there. But all the platforms from Gen 7 has the DRRS support. Do we still need a macro for this check? -Ram > > > + return -ENODEV; > > + > > + drm_modeset_lock_all(dev); > > my first reaction to this was: "why do you need to lock all modeset?!" > But this simplify a lot the logic here... > This assure that drrs is really not getting changed from other places. > > > + for_each_intel_crtc(dev, intel_crtc) { > > + if (!intel_crtc->base.state->active || > > + !intel_crtc->config->has_drrs) > > I was going to say that this check already happens inside enable and disable > functions... But I see the reason why to check before the unecessary noise. > > > + continue; > > + > > + for_each_encoder_on_crtc(dev, &intel_crtc->base, encoder) { > > + if (encoder->type != INTEL_OUTPUT_EDP) > > + continue; > > + > > + DRM_DEBUG_DRIVER("Manually %sabling DRRS. > %llu\n", > > + val ? "en" : "dis", val); > > + > > + intel_dp = enc_to_intel_dp(&encoder->base); > > + if (val) > > + intel_edp_drrs_enable(intel_dp, > > + intel_crtc->config); > > + else > > + intel_edp_drrs_disable(intel_dp, > > + intel_crtc->config); > > + } > > + } > > + drm_modeset_unlock_all(dev); > > + > > + return 0; > > +} > > It seems simple and effective. Simpler than I imagined... > My only question is about that HAS_DRRS and when to skip here... > > > + > > +DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set, > > +"%llu\n"); > > + > > static const struct drm_info_list i915_debugfs_list[] = { > > {"i915_capabilities", i915_capabilities, 0}, > > {"i915_gem_objects", i915_gem_object_info, 0}, @@ -4828,7 +4868,8 > @@ > > static const struct i915_debugfs_files { > > {"i915_dp_test_active", &i915_displayport_test_active_fops}, > > {"i915_guc_log_control", &i915_guc_log_control_fops}, > > {"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops}, > > - {"i915_ipc_status", &i915_ipc_status_fops} > > + {"i915_ipc_status", &i915_ipc_status_fops}, > > + {"i915_drrs_ctl", &i915_drrs_ctl_fops} > > }; > > > > int i915_debugfs_register(struct drm_i915_private *dev_priv) > > -- > > 2.7.4 > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS 2017-11-19 14:55 ` C, Ramalingam @ 2017-11-21 20:59 ` Rodrigo Vivi 0 siblings, 0 replies; 59+ messages in thread From: Rodrigo Vivi @ 2017-11-21 20:59 UTC (permalink / raw) To: C, Ramalingam; +Cc: intel-gfx, Zanoni, Paulo R On Sun, Nov 19, 2017 at 02:55:06PM +0000, C, Ramalingam wrote: > Thanks for reviewing these changes Rodrigo. > > > -----Original Message----- > > From: Vivi, Rodrigo > > Sent: Saturday, November 18, 2017 12:24 AM > > To: C, Ramalingam <ramalingam.c@intel.com> > > Cc: Zanoni, Paulo R <paulo.r.zanoni@intel.com>; intel- > > gfx@lists.freedesktop.org > > Subject: Re: [Intel-gfx] [PATCH v2 1/2] drm/i915: Runtime disable for eDP DRRS > > > > On Tue, Nov 07, 2017 at 06:38:23PM +0000, Ramalingam C wrote: > > > From: "C, Ramalingam" <ramalingam.c@intel.com> > > > > > > Debugfs called i915_drrs_ctl is added to enable and disable the eDP > > > DRRS. Writing 0 will disable the feature, whereas non-zero will enable > > > the feature. > > > > > > Possibility of disabling the DRRS, enables the testing of the > > > frontbuffer tracking based features (FBC, DRRS and PSR) as standalone > > > or any combination of the set. > > > > > > [v2]: ctl interface is moved from module parameter to debugfs > > > [Rodrigo] > > > > Thanks > > > > > > > > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> > > > --- > > > drivers/gpu/drm/i915/i915_debugfs.c | 43 > > > ++++++++++++++++++++++++++++++++++++- > > > 1 file changed, 42 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c > > > b/drivers/gpu/drm/i915/i915_debugfs.c > > > index 0bb6e01121fc..0c1501fe4c9f 100644 > > > --- a/drivers/gpu/drm/i915/i915_debugfs.c > > > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > > > @@ -4747,6 +4747,46 @@ static const struct file_operations > > i915_hpd_storm_ctl_fops = { > > > .write = i915_hpd_storm_ctl_write > > > }; > > > > > > +static int i915_drrs_ctl_set(void *data, u64 val) { > > > + struct drm_i915_private *dev_priv = data; > > > + struct drm_device *dev = &dev_priv->drm; > > > + struct intel_crtc *intel_crtc; > > > + struct intel_encoder *encoder; > > > + struct intel_dp *intel_dp; > > > + > > > + if (INTEL_GEN(dev_priv) < 7) > > > > I believe we need to define a HAS_DRRS(dev_priv) which based on what is on > > intel_cpu_transcoder_set_m_n would be > > (IS_CHERRYVIEW(dev_priv) || INTEL_GEN(dev_priv) < 8) > > Actually programming of pll divider m and n changes between platforms. Hence this check was there. > But all the platforms from Gen 7 has the DRRS support. Do we still need a macro for this check? Ohh! just now I noticed that this was actually "< 8" there... Yeap, so no more concerns on this patch. Thanks for the explanation. Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > > -Ram > > > > > + return -ENODEV; > > > + > > > + drm_modeset_lock_all(dev); > > > > my first reaction to this was: "why do you need to lock all modeset?!" > > But this simplify a lot the logic here... > > This assure that drrs is really not getting changed from other places. > > > > > + for_each_intel_crtc(dev, intel_crtc) { > > > + if (!intel_crtc->base.state->active || > > > + !intel_crtc->config->has_drrs) > > > > I was going to say that this check already happens inside enable and disable > > functions... But I see the reason why to check before the unecessary noise. > > > > > + continue; > > > + > > > + for_each_encoder_on_crtc(dev, &intel_crtc->base, encoder) { > > > + if (encoder->type != INTEL_OUTPUT_EDP) > > > + continue; > > > + > > > + DRM_DEBUG_DRIVER("Manually %sabling DRRS. > > %llu\n", > > > + val ? "en" : "dis", val); > > > + > > > + intel_dp = enc_to_intel_dp(&encoder->base); > > > + if (val) > > > + intel_edp_drrs_enable(intel_dp, > > > + intel_crtc->config); > > > + else > > > + intel_edp_drrs_disable(intel_dp, > > > + intel_crtc->config); > > > + } > > > + } > > > + drm_modeset_unlock_all(dev); > > > + > > > + return 0; > > > +} > > > > It seems simple and effective. Simpler than I imagined... > > My only question is about that HAS_DRRS and when to skip here... > > > > > + > > > +DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set, > > > +"%llu\n"); > > > + > > > static const struct drm_info_list i915_debugfs_list[] = { > > > {"i915_capabilities", i915_capabilities, 0}, > > > {"i915_gem_objects", i915_gem_object_info, 0}, @@ -4828,7 +4868,8 > > @@ > > > static const struct i915_debugfs_files { > > > {"i915_dp_test_active", &i915_displayport_test_active_fops}, > > > {"i915_guc_log_control", &i915_guc_log_control_fops}, > > > {"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops}, > > > - {"i915_ipc_status", &i915_ipc_status_fops} > > > + {"i915_ipc_status", &i915_ipc_status_fops}, > > > + {"i915_drrs_ctl", &i915_drrs_ctl_fops} > > > }; > > > > > > int i915_debugfs_register(struct drm_i915_private *dev_priv) > > > -- > > > 2.7.4 > > > > > > _______________________________________________ > > > Intel-gfx mailing list > > > Intel-gfx@lists.freedesktop.org > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* [PATCH 2/2] i915/drrs/debugfs: module param and psr status 2017-10-31 9:20 ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C 2017-10-31 9:20 ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C @ 2017-10-31 9:20 ` Ramalingam C 2017-11-07 18:40 ` [PATCH v2 2/2] i915/drrs/debugfs: crtc id " Ramalingam C 2017-10-31 9:20 ` [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage Ramalingam C 2 siblings, 1 reply; 59+ messages in thread From: Ramalingam C @ 2017-10-31 9:20 UTC (permalink / raw) To: intel-gfx, rodrigo.vivi, paulo.r.zanoni, chris From: "C, Ramalingam" <ramalingam.c@intel.com> When DRRS is disabled, i915_drrs_status is updated with the runtime disable state of drrs due to i915_modparams.enable_drrs - module parameters psr.enabled - psr active status Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> --- drivers/gpu/drm/i915/i915_debugfs.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 5b58d2b897c7..0a0ae22fc9c2 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -3569,7 +3569,16 @@ static void drrs_status_per_crtc(struct seq_file *m, /* disable_drrs() will make drrs->dp NULL */ if (!drrs->dp) { - seq_puts(m, "Idleness DRRS: Disabled"); + seq_puts(m, "Idleness DRRS: Disabled\n"); + + if (!i915_modparams.enable_drrs) + seq_puts(m, + "\tModule parameter enable_drrs is disabled\n"); + + if (dev_priv->psr.enabled) + seq_puts(m, + "\tAs PSR is enabled, DRRS is not enabled\n"); + mutex_unlock(&drrs->mutex); return; } -- 2.7.4 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* [PATCH v2 2/2] i915/drrs/debugfs: crtc id and psr status 2017-10-31 9:20 ` [PATCH 2/2] i915/drrs/debugfs: module param and psr status Ramalingam C @ 2017-11-07 18:40 ` Ramalingam C 2017-11-17 18:56 ` Rodrigo Vivi 0 siblings, 1 reply; 59+ messages in thread From: Ramalingam C @ 2017-11-07 18:40 UTC (permalink / raw) To: paulo.r.zanoni, rodrigo.vivi, chris, intel-gfx From: "C, Ramalingam" <ramalingam.c@intel.com> Existing debugfs entry i915_drrs_status is updated with crtc id and if PSR is cause for DRRS disabled state. [v2]: Dropped the module parameter details as ctl moved from module parameter to debugfs. [Rodrigo] Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> --- drivers/gpu/drm/i915/i915_debugfs.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 0c1501fe4c9f..6c2e8346b9a7 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct seq_file *m, /* disable_drrs() will make drrs->dp NULL */ if (!drrs->dp) { - seq_puts(m, "Idleness DRRS: Disabled"); + seq_puts(m, "Idleness DRRS: Disabled\n"); + if (dev_priv->psr.enabled) + seq_puts(m, + "\tAs PSR is enabled, DRRS is not enabled\n"); mutex_unlock(&drrs->mutex); return; } @@ -3611,7 +3614,7 @@ static int i915_drrs_status(struct seq_file *m, void *unused) for_each_intel_crtc(dev, intel_crtc) { if (intel_crtc->base.state->active) { active_crtc_cnt++; - seq_printf(m, "\nCRTC %d: ", active_crtc_cnt); + seq_printf(m, "\nCRTC %d: ", intel_crtc->base.base.id); drrs_status_per_crtc(m, dev, intel_crtc); } -- 2.7.4 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* Re: [PATCH v2 2/2] i915/drrs/debugfs: crtc id and psr status 2017-11-07 18:40 ` [PATCH v2 2/2] i915/drrs/debugfs: crtc id " Ramalingam C @ 2017-11-17 18:56 ` Rodrigo Vivi 2017-11-20 3:39 ` C, Ramalingam 2017-11-20 4:23 ` [PATCH v3] i915/drrs/debugfs: psr status info addition Ramalingam C 0 siblings, 2 replies; 59+ messages in thread From: Rodrigo Vivi @ 2017-11-17 18:56 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx, paulo.r.zanoni On Tue, Nov 07, 2017 at 06:40:08PM +0000, Ramalingam C wrote: > From: "C, Ramalingam" <ramalingam.c@intel.com> > > Existing debugfs entry i915_drrs_status is updated with crtc id and > if PSR is cause for DRRS disabled state. > > [v2]: Dropped the module parameter details as ctl moved from module > parameter to debugfs. [Rodrigo] > > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> > --- > drivers/gpu/drm/i915/i915_debugfs.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c > index 0c1501fe4c9f..6c2e8346b9a7 100644 > --- a/drivers/gpu/drm/i915/i915_debugfs.c > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > @@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct seq_file *m, > > /* disable_drrs() will make drrs->dp NULL */ > if (!drrs->dp) { > - seq_puts(m, "Idleness DRRS: Disabled"); > + seq_puts(m, "Idleness DRRS: Disabled\n"); > + if (dev_priv->psr.enabled) > + seq_puts(m, > + "\tAs PSR is enabled, DRRS is not enabled\n"); this seems good... > mutex_unlock(&drrs->mutex); > return; > } > @@ -3611,7 +3614,7 @@ static int i915_drrs_status(struct seq_file *m, void *unused) > for_each_intel_crtc(dev, intel_crtc) { > if (intel_crtc->base.state->active) { > active_crtc_cnt++; > - seq_printf(m, "\nCRTC %d: ", active_crtc_cnt); > + seq_printf(m, "\nCRTC %d: ", intel_crtc->base.base.id); this seems for a separated patch... or at least missing an explanation why... > > drrs_status_per_crtc(m, dev, intel_crtc); > } > -- > 2.7.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH v2 2/2] i915/drrs/debugfs: crtc id and psr status 2017-11-17 18:56 ` Rodrigo Vivi @ 2017-11-20 3:39 ` C, Ramalingam 2017-11-20 4:23 ` [PATCH v3] i915/drrs/debugfs: psr status info addition Ramalingam C 1 sibling, 0 replies; 59+ messages in thread From: C, Ramalingam @ 2017-11-20 3:39 UTC (permalink / raw) To: Vivi, Rodrigo; +Cc: intel-gfx, Zanoni, Paulo R > -----Original Message----- > From: Vivi, Rodrigo > Sent: Saturday, November 18, 2017 12:26 AM > To: C, Ramalingam <ramalingam.c@intel.com> > Cc: Zanoni, Paulo R <paulo.r.zanoni@intel.com>; chris@chris-wilson.co.uk; > intel-gfx@lists.freedesktop.org > Subject: Re: [Intel-gfx] [PATCH v2 2/2] i915/drrs/debugfs: crtc id and psr status > > On Tue, Nov 07, 2017 at 06:40:08PM +0000, Ramalingam C wrote: > > From: "C, Ramalingam" <ramalingam.c@intel.com> > > > > Existing debugfs entry i915_drrs_status is updated with crtc id and if > > PSR is cause for DRRS disabled state. > > > > [v2]: Dropped the module parameter details as ctl moved from module > > parameter to debugfs. [Rodrigo] > > > > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> > > --- > > drivers/gpu/drm/i915/i915_debugfs.c | 7 +++++-- > > 1 file changed, 5 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c > > b/drivers/gpu/drm/i915/i915_debugfs.c > > index 0c1501fe4c9f..6c2e8346b9a7 100644 > > --- a/drivers/gpu/drm/i915/i915_debugfs.c > > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > > @@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct > > seq_file *m, > > > > /* disable_drrs() will make drrs->dp NULL */ > > if (!drrs->dp) { > > - seq_puts(m, "Idleness DRRS: Disabled"); > > + seq_puts(m, "Idleness DRRS: Disabled\n"); > > + if (dev_priv->psr.enabled) > > + seq_puts(m, > > + "\tAs PSR is enabled, DRRS is not enabled\n"); > > this seems good... > > > mutex_unlock(&drrs->mutex); > > return; > > } > > @@ -3611,7 +3614,7 @@ static int i915_drrs_status(struct seq_file *m, void > *unused) > > for_each_intel_crtc(dev, intel_crtc) { > > if (intel_crtc->base.state->active) { > > active_crtc_cnt++; > > - seq_printf(m, "\nCRTC %d: ", active_crtc_cnt); > > + seq_printf(m, "\nCRTC %d: ", intel_crtc->base.base.id); > > this seems for a separated patch... > or at least missing an explanation why... This changes not needed for debugfs control of drrs. As of now debugfs provides the crtc index in the active crtc list. Instead providing the crtc id might help to identify the crtc, that the debuginfo is associated to. Anyway as there is no usecase that need this change, I will remove it from this patch. Thanks -Ram > > > > > drrs_status_per_crtc(m, dev, intel_crtc); > > } > > -- > > 2.7.4 > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* [PATCH v3] i915/drrs/debugfs: psr status info addition 2017-11-17 18:56 ` Rodrigo Vivi 2017-11-20 3:39 ` C, Ramalingam @ 2017-11-20 4:23 ` Ramalingam C 2017-11-21 20:56 ` Rodrigo Vivi 1 sibling, 1 reply; 59+ messages in thread From: Ramalingam C @ 2017-11-20 4:23 UTC (permalink / raw) To: rodrigo.vivi, paulo.r.zanoni, intel-gfx From: "C, Ramalingam" <ramalingam.c@intel.com> Existing debugfs entry i915_drrs_status is updated with whether PSR is the cause for DRRS disabled state. [v2]: Dropped the module parameter details as ctl moved from module parameter to debugfs. [Rodrigo] [v3]: Crtc ID information is dropped as there is no immediate usecase. [Rodrigo]. Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> --- drivers/gpu/drm/i915/i915_debugfs.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 0c1501fe4c9f..ea36d4e4d881 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct seq_file *m, /* disable_drrs() will make drrs->dp NULL */ if (!drrs->dp) { - seq_puts(m, "Idleness DRRS: Disabled"); + seq_puts(m, "Idleness DRRS: Disabled\n"); + if (dev_priv->psr.enabled) + seq_puts(m, + "\tAs PSR is enabled, DRRS is not enabled\n"); mutex_unlock(&drrs->mutex); return; } -- 2.7.4 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* Re: [PATCH v3] i915/drrs/debugfs: psr status info addition 2017-11-20 4:23 ` [PATCH v3] i915/drrs/debugfs: psr status info addition Ramalingam C @ 2017-11-21 20:56 ` Rodrigo Vivi 0 siblings, 0 replies; 59+ messages in thread From: Rodrigo Vivi @ 2017-11-21 20:56 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx, paulo.r.zanoni On Mon, Nov 20, 2017 at 04:23:47AM +0000, Ramalingam C wrote: > From: "C, Ramalingam" <ramalingam.c@intel.com> > > Existing debugfs entry i915_drrs_status is updated with whether PSR > is the cause for DRRS disabled state. > > [v2]: Dropped the module parameter details as ctl moved from module > parameter to debugfs. [Rodrigo] > > [v3]: Crtc ID information is dropped as there is no immediate usecase. > [Rodrigo]. > > Signed-off-by: C, Ramalingam <ramalingam.c@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > --- > drivers/gpu/drm/i915/i915_debugfs.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c > index 0c1501fe4c9f..ea36d4e4d881 100644 > --- a/drivers/gpu/drm/i915/i915_debugfs.c > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > @@ -3567,7 +3567,10 @@ static void drrs_status_per_crtc(struct seq_file *m, > > /* disable_drrs() will make drrs->dp NULL */ > if (!drrs->dp) { > - seq_puts(m, "Idleness DRRS: Disabled"); > + seq_puts(m, "Idleness DRRS: Disabled\n"); > + if (dev_priv->psr.enabled) > + seq_puts(m, > + "\tAs PSR is enabled, DRRS is not enabled\n"); > mutex_unlock(&drrs->mutex); > return; > } > -- > 2.7.4 > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage 2017-10-31 9:20 ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C 2017-10-31 9:20 ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C 2017-10-31 9:20 ` [PATCH 2/2] i915/drrs/debugfs: module param and psr status Ramalingam C @ 2017-10-31 9:20 ` Ramalingam C 2017-11-10 16:22 ` [PATCH i-g-t] Idleness DRRS: Lohith BS 2 siblings, 1 reply; 59+ messages in thread From: Ramalingam C @ 2017-10-31 9:20 UTC (permalink / raw) To: intel-gfx, rodrigo.vivi, paulo.r.zanoni, chris From: Lohith BS <lohith.bs@intel.com> By default the DRRS state will be at DRRS_HIGH_RR. When a Display content is Idle for more than 1Sec Idleness will be declared and DRRS_LOW_RR will be invoked, changing the refresh rate to the lower most refresh rate supported by the panel. As soon as there is a display content change there will be a DRRS state transition as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the highest refresh rate supported by the panel. To test this, Idleness DRRS IGT will probe the DRRS state at below instances and compare with the expected state. Instance Expected State 1. Immediately after rendering the still image DRRS_HIGH_RR 2. After a delay of 1.2Sec DRRS_LOW_RR 3. After changing the frame buffer DRRS_HIGH_RR 4. After a delay of 1.2Sec DRRS_LOW_RR 5. After changing the frame buffer DRRS_HIGH_RR 6. After a delay of 1.2Sec DRRS_LOW_RR The test checks the driver DRRS state from the debugfs entry. To check the actual refresh-rate, the number of vblanks received per sec. The refresh-rate calculated is checked against the expected refresh-rate with a tolerance value of 2. This patch is a continuation of the earlier work https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness DRRS. The code is tested on Broxton BXT_T platform. v2: Addressed the comments and suggestions from Vlad, Marius. The signoff details from the earlier work are also included. v3: Modified vblank rate calculation by using reply-sequence, provided by drmWaitVBlank, as suggested by Chris Wilson. v4: As suggested from Chris Wilson and Daniel Vetter 1) Avoided using pthread for calculating vblank refresh rate, instead used drmWaitVBlank reply sequence. 2) Avoided using kernel-specific info like transitional delays, instead polling mechanism with timeout is used. 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, instead of having a separate test. v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. DRRS switch to lower vrefresh rate is tested at slow-draw subtest. This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" v6: This patch adds runtime enable and disable feature for testing DRRS Signed-off-by: Lohith BS <lohith.bs@intel.com> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> --- tests/kms_frontbuffer_tracking.c | 134 +++++++++++++++++++++++++++++++++++---- 1 file changed, 123 insertions(+), 11 deletions(-) diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c index a068c8afb6d8..fdb4f57d4698 100644 --- a/tests/kms_frontbuffer_tracking.c +++ b/tests/kms_frontbuffer_tracking.c @@ -34,7 +34,7 @@ IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " - "its related features: FBC and PSR"); + "its related features: FBC, DRRS and PSR"); /* * One of the aspects of this test is that, for every subtest, we try different @@ -105,8 +105,9 @@ struct test_mode { FEATURE_NONE = 0, FEATURE_FBC = 1, FEATURE_PSR = 2, - FEATURE_COUNT = 4, - FEATURE_DEFAULT = 4, + FEATURE_DRRS = 4, + FEATURE_COUNT = 6, + FEATURE_DEFAULT = 6, } feature; /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and @@ -178,10 +179,8 @@ struct { struct { bool can_test; -} psr = { - .can_test = false, -}; - +} psr = { .can_test = false,}, +drrs = { .can_test = false,}; #define SINK_CRC_SIZE 12 typedef struct { @@ -822,6 +821,54 @@ static void psr_print_status(void) igt_info("PSR status:\n%s\n", buf); } +static bool is_drrs_high(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_HIGH_RR"); +} + +static bool is_drrs_low(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_LOW_RR"); +} + +static bool is_drrs_supported(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS Supported: Yes"); +} + +static bool is_drrs_inactive(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + + if (strstr(buf, "No active crtc found")) + return true; + if (strstr(buf, "Idleness DRRS: Disabled")) + return true; + if (strstr(buf, "DRRS Supported : No")) + return true; + + return false; +} + +static void drrs_print_status(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + igt_info("DRRS STATUS :\n%s\n", buf); +} + static struct timespec fbc_get_last_action(void) { struct timespec ret = { 0, 0 }; @@ -932,10 +979,17 @@ static bool psr_wait_until_enabled(void) return igt_wait(psr_is_enabled(), 5000, 1); } +static bool drrs_wait_until_rr_switch_to_low(void) +{ + return igt_wait(is_drrs_low(), 5000, 1); +} + #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) #define psr_enable() igt_set_module_param_int("enable_psr", 1) #define psr_disable() igt_set_module_param_int("enable_psr", 0) +#define drrs_enable() igt_set_module_param("enable_drrs", "Y") +#define drrs_disable() igt_set_module_param("enable_drrs", "N") static void get_sink_crc(sink_crc_t *crc, bool mandatory) { @@ -1182,6 +1236,7 @@ static void disable_features(const struct test_mode *t) fbc_disable(); psr_disable(); + drrs_disable(); } static void *busy_thread_func(void *data) @@ -1575,6 +1630,21 @@ static void teardown_psr(void) { } +static void setup_drrs(void) +{ + if (get_connector(prim_mode_params.connector_id)->connector_type != + DRM_MODE_CONNECTOR_eDP) { + igt_info("Can't test DRRS: no usable eDP screen.\n"); + return; + } + + if (!is_drrs_supported()) { + igt_info("Can't test DRRS: Not supported.\n"); + return; + } + drrs.can_test = true; +} + static void setup_environment(void) { setup_drm(); @@ -1582,7 +1652,7 @@ static void setup_environment(void) setup_fbc(); setup_psr(); - + setup_drrs(); setup_crcs(); } @@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t) #define ASSERT_PSR_ENABLED (1 << 6) #define ASSERT_PSR_DISABLED (1 << 7) +#define DRRS_ASSERT_FLAGS (7 << 8) +#define ASSERT_DRRS_HIGH (1 << 8) +#define ASSERT_DRRS_LOW (1 << 9) +#define ASSERT_DRRS_INACTIVE (1 << 10) + static int adjust_assertion_flags(const struct test_mode *t, int flags) { if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { @@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) flags |= ASSERT_FBC_ENABLED; if (!(flags & ASSERT_PSR_DISABLED)) flags |= ASSERT_PSR_ENABLED; + if (!((flags & ASSERT_DRRS_LOW) || + (flags & ASSERT_DRRS_INACTIVE))) + flags |= ASSERT_DRRS_HIGH; } if ((t->feature & FEATURE_FBC) == 0) flags &= ~FBC_ASSERT_FLAGS; if ((t->feature & FEATURE_PSR) == 0) flags &= ~PSR_ASSERT_FLAGS; + if ((t->feature & FEATURE_DRRS) == 0) + flags &= ~DRRS_ASSERT_FLAGS; return flags; } @@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags) return; } + if (flags & ASSERT_DRRS_HIGH) { + if (!is_drrs_high()) { + drrs_print_status(); + igt_assert_f(false, "DRRS HIGH\n"); + } + } else if (flags & ASSERT_DRRS_LOW) { + if (!drrs_wait_until_rr_switch_to_low()) { + drrs_print_status(); + igt_assert_f(false, "DRRS LOW\n"); + } + } else if (flags & ASSERT_DRRS_INACTIVE) { + if (!is_drrs_inactive()) { + drrs_print_status(); + igt_assert_f(false, "DRRS INACTIVE\n"); + } + } + if (flags & ASSERT_FBC_ENABLED) { igt_require(!fbc_not_enough_stolen()); igt_require(!fbc_stride_not_supported()); @@ -1831,6 +1928,8 @@ static void enable_features_for_test(const struct test_mode *t) fbc_enable(); if (t->feature & FEATURE_PSR) psr_enable(); + if (t->feature & FEATURE_DRRS) + drrs_enable(); } static void check_test_requirements(const struct test_mode *t) @@ -1850,6 +1949,10 @@ static void check_test_requirements(const struct test_mode *t) "Can't test PSR without sink CRCs\n"); } + if (t->feature & FEATURE_DRRS) + igt_require_f(drrs.can_test, + "Can't test DRRS with the current outputs\n"); + if (opt.only_pipes != PIPE_COUNT) igt_require(t->pipes == opt.only_pipes); } @@ -1971,7 +2074,7 @@ static void rte_subtest(const struct test_mode *t) unset_all_crtcs(); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); enable_prim_screen_and_wait(t); set_cursor_for_test(t, &prim_mode_params); @@ -2219,6 +2322,7 @@ static void badformat_subtest(const struct test_mode *t) assertions |= ASSERT_FBC_DISABLED; if (!psr_valid) assertions |= ASSERT_PSR_DISABLED; + do_assertions(assertions); } @@ -2277,7 +2381,11 @@ static void slow_draw_subtest(const struct test_mode *t) sleep(2); update_wanted_crc(t, &pattern->crcs[t->format][r]); - do_assertions(0); + + if (t->feature & FEATURE_DRRS) + do_assertions(ASSERT_DRRS_LOW); + else + do_assertions(0); } } @@ -3375,6 +3483,10 @@ static const char *feature_str(int feature) return "psr"; case FEATURE_FBC | FEATURE_PSR: return "fbcpsr"; + case FEATURE_DRRS: + return "drrs"; + case FEATURE_FBC | FEATURE_DRRS: + return "fbcdrrs"; default: igt_assert(false); } @@ -3639,7 +3751,7 @@ int main(int argc, char *argv[]) tilingchange_subtest(&t); } - if (t.feature & FEATURE_PSR) + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) igt_subtest_f("%s-slowdraw", feature_str(t.feature)) slow_draw_subtest(&t); -- 2.7.4 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* [PATCH i-g-t] Idleness DRRS: 2017-10-31 9:20 ` [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage Ramalingam C @ 2017-11-10 16:22 ` Lohith BS 2017-12-06 15:13 ` [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage Lohith BS 0 siblings, 1 reply; 59+ messages in thread From: Lohith BS @ 2017-11-10 16:22 UTC (permalink / raw) To: paulo.r.zanoni, rodrigo.vivi, chris, intel-gfx; +Cc: ankit.k.nautiyal By default the DRRS state will be at DRRS_HIGH_RR. When a Display content is Idle for more than 1Sec Idleness will be declared and DRRS_LOW_RR will be invoked, changing the refresh rate to the lower most refresh rate supported by the panel. As soon as there is a display content change there will be a DRRS state transition as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the highest refresh rate supported by the panel. To test this, Idleness DRRS IGT will probe the DRRS state at below instances and compare with the expected state. Instance Expected State 1. Immediately after rendering the still image DRRS_HIGH_RR 2. After a delay of 1.2Sec DRRS_LOW_RR 3. After changing the frame buffer DRRS_HIGH_RR 4. After a delay of 1.2Sec DRRS_LOW_RR 5. After changing the frame buffer DRRS_HIGH_RR 6. After a delay of 1.2Sec DRRS_LOW_RR The test checks the driver DRRS state from the debugfs entry. To check the actual refresh-rate, the number of vblanks received per sec. The refresh-rate calculated is checked against the expected refresh-rate with a tolerance value of 2. This patch is a continuation of the earlier work https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness DRRS. The code is tested on Broxton BXT_T platform. v2: Addressed the comments and suggestions from Vlad, Marius. The signoff details from the earlier work are also included. v3: Modified vblank rate calculation by using reply-sequence, provided by drmWaitVBlank, as suggested by Chris Wilson. v4: As suggested from Chris Wilson and Daniel Vetter 1) Avoided using pthread for calculating vblank refresh rate, instead used drmWaitVBlank reply sequence. 2) Avoided using kernel-specific info like transitional delays, instead polling mechanism with timeout is used. 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, instead of having a separate test. v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. DRRS switch to lower vrefresh rate is tested at slow-draw subtest. Note: 1) Currently kernel doesn't have support to enable and disable the DRRS feature dynamically(as in case of PSR). Hence if the panel supports DRRS it will be enabled by default. This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" v6: This patch adds runtime enable and disable feature for testing DRRS v7: This patch adds runtime enable and disable feature for testing DRRS through debugfs entry "i915_drrs_ctl". Signed-off-by: Lohith BS <lohith.bs@intel.com> Signed-off-by: Ramalingam C <ramalingam.c@intel.com> Signed-off-by: Vandana Kannan <vandana.kannan@intel.com> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> --- tests/kms_frontbuffer_tracking.c | 166 +++++++++++++++++++++++++++++++++++---- 1 file changed, 151 insertions(+), 15 deletions(-) diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c index a068c8a..b06d304 100644 --- a/tests/kms_frontbuffer_tracking.c +++ b/tests/kms_frontbuffer_tracking.c @@ -34,7 +34,7 @@ IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " - "its related features: FBC and PSR"); + "its related features: FBC, DRRS and PSR"); /* * One of the aspects of this test is that, for every subtest, we try different @@ -105,8 +105,9 @@ struct test_mode { FEATURE_NONE = 0, FEATURE_FBC = 1, FEATURE_PSR = 2, - FEATURE_COUNT = 4, - FEATURE_DEFAULT = 4, + FEATURE_DRRS = 4, + FEATURE_COUNT = 6, + FEATURE_DEFAULT = 6, } feature; /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and @@ -156,6 +157,7 @@ struct rect { struct { int fd; int debugfs; + int drrs_debugfs_fd; drmModeResPtr res; drmModeConnectorPtr connectors[MAX_CONNECTORS]; drmModeEncoderPtr encoders[MAX_ENCODERS]; @@ -178,10 +180,8 @@ struct { struct { bool can_test; -} psr = { - .can_test = false, -}; - +} psr = { .can_test = false,}, +drrs = { .can_test = false,}; #define SINK_CRC_SIZE 12 typedef struct { @@ -775,8 +775,8 @@ static bool set_mode_for_params(struct modeset_params *params) int rc; rc = drmModeSetCrtc(drm.fd, params->crtc_id, params->fb.fb->fb_id, - params->fb.x, params->fb.y, - ¶ms->connector_id, 1, params->mode); + params->fb.x, params->fb.y, + ¶ms->connector_id, 1, params->mode); return (rc == 0); } @@ -822,6 +822,63 @@ static void psr_print_status(void) igt_info("PSR status:\n%s\n", buf); } +void drrs_set(unsigned int val) +{ + char buf[16]; + + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); + snprintf(buf, sizeof(buf), "%d", val); + igt_assert_eq(write(drm.drrs_debugfs_fd, buf, strlen(buf)), strlen(buf)); +} + +static bool is_drrs_high(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_HIGH_RR"); +} + +static bool is_drrs_low(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_LOW_RR"); +} + +static bool is_drrs_supported(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS Supported: Yes"); +} + +static bool is_drrs_inactive(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + + if (strstr(buf, "No active crtc found")) + return true; + if (strstr(buf, "Idleness DRRS: Disabled")) + return true; + if (strstr(buf, "DRRS Supported : No")) + return true; + + return false; +} + +static void drrs_print_status(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + igt_info("DRRS STATUS :\n%s\n", buf); +} + static struct timespec fbc_get_last_action(void) { struct timespec ret = { 0, 0 }; @@ -932,10 +989,17 @@ static bool psr_wait_until_enabled(void) return igt_wait(psr_is_enabled(), 5000, 1); } +static bool drrs_wait_until_rr_switch_to_low(void) +{ + return igt_wait(is_drrs_low(), 5000, 1); +} + #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) #define psr_enable() igt_set_module_param_int("enable_psr", 1) #define psr_disable() igt_set_module_param_int("enable_psr", 0) +#define drrs_enable() drrs_set(1) +#define drrs_disable() drrs_set(0) static void get_sink_crc(sink_crc_t *crc, bool mandatory) { @@ -1182,6 +1246,7 @@ static void disable_features(const struct test_mode *t) fbc_disable(); psr_disable(); + drrs_disable(); } static void *busy_thread_func(void *data) @@ -1506,6 +1571,11 @@ static void teardown_crcs(void) igt_pipe_crc_free(pipe_crc); } +static void teardown_drrs(void) +{ + if (drm.drrs_debugfs_fd != -1) + close(drm.drrs_debugfs_fd); +} static bool fbc_supported_on_chipset(void) { char buf[128]; @@ -1575,6 +1645,30 @@ static void teardown_psr(void) { } +static void setup_drrs(void) +{ + int is_drrs_debug_ctl; + if (get_connector(prim_mode_params.connector_id)->connector_type != + DRM_MODE_CONNECTOR_eDP) { + igt_info("Can't test DRRS: no usable eDP screen.\n"); + return; + } + + if (!is_drrs_supported()) { + igt_info("Can't test DRRS: Not supported.\n"); + return; + } + + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); + + if (drm.drrs_debugfs_fd > 0) { + drrs.can_test = true; + } else { + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); + drrs.can_test = false; + } +} + static void setup_environment(void) { setup_drm(); @@ -1582,7 +1676,7 @@ static void setup_environment(void) setup_fbc(); setup_psr(); - + setup_drrs(); setup_crcs(); } @@ -1594,6 +1688,7 @@ static void teardown_environment(void) teardown_psr(); teardown_fbc(); teardown_modeset(); + teardown_drrs(); teardown_drm(); } @@ -1660,6 +1755,11 @@ static void do_flush(const struct test_mode *t) #define ASSERT_PSR_ENABLED (1 << 6) #define ASSERT_PSR_DISABLED (1 << 7) +#define DRRS_ASSERT_FLAGS (7 << 8) +#define ASSERT_DRRS_HIGH (1 << 8) +#define ASSERT_DRRS_LOW (1 << 9) +#define ASSERT_DRRS_INACTIVE (1 << 10) + static int adjust_assertion_flags(const struct test_mode *t, int flags) { if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { @@ -1667,12 +1767,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) flags |= ASSERT_FBC_ENABLED; if (!(flags & ASSERT_PSR_DISABLED)) flags |= ASSERT_PSR_ENABLED; + if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) { + flags |= ASSERT_DRRS_HIGH; + } } if ((t->feature & FEATURE_FBC) == 0) flags &= ~FBC_ASSERT_FLAGS; if ((t->feature & FEATURE_PSR) == 0) flags &= ~PSR_ASSERT_FLAGS; + if ((t->feature & FEATURE_DRRS) == 0) + flags &= ~DRRS_ASSERT_FLAGS; return flags; } @@ -1704,6 +1809,23 @@ static void do_status_assertions(int flags) return; } + if (flags & ASSERT_DRRS_HIGH) { + if (!is_drrs_high()) { + drrs_print_status(); + igt_assert_f(false, "DRRS HIGH\n"); + } + } else if (flags & ASSERT_DRRS_LOW) { + if (!drrs_wait_until_rr_switch_to_low()) { + drrs_print_status(); + igt_assert_f(false, "DRRS LOW\n"); + } + } else if (flags & ASSERT_DRRS_INACTIVE) { + if (!is_drrs_inactive()) { + drrs_print_status(); + igt_assert_f(false, "DRRS INACTIVE\n"); + } + } + if (flags & ASSERT_FBC_ENABLED) { igt_require(!fbc_not_enough_stolen()); igt_require(!fbc_stride_not_supported()); @@ -1831,6 +1953,8 @@ static void enable_features_for_test(const struct test_mode *t) fbc_enable(); if (t->feature & FEATURE_PSR) psr_enable(); + if (t->feature & FEATURE_DRRS) + drrs_enable(); } static void check_test_requirements(const struct test_mode *t) @@ -1850,6 +1974,10 @@ static void check_test_requirements(const struct test_mode *t) "Can't test PSR without sink CRCs\n"); } + if (t->feature & FEATURE_DRRS) + igt_require_f(drrs.can_test, + "Can't test DRRS with the current outputs\n"); + if (opt.only_pipes != PIPE_COUNT) igt_require(t->pipes == opt.only_pipes); } @@ -1971,7 +2099,7 @@ static void rte_subtest(const struct test_mode *t) unset_all_crtcs(); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); enable_prim_screen_and_wait(t); set_cursor_for_test(t, &prim_mode_params); @@ -2219,6 +2347,7 @@ static void badformat_subtest(const struct test_mode *t) assertions |= ASSERT_FBC_DISABLED; if (!psr_valid) assertions |= ASSERT_PSR_DISABLED; + do_assertions(assertions); } @@ -2277,7 +2406,11 @@ static void slow_draw_subtest(const struct test_mode *t) sleep(2); update_wanted_crc(t, &pattern->crcs[t->format][r]); - do_assertions(0); + + if (t->feature & FEATURE_DRRS) + do_assertions(ASSERT_DRRS_LOW); + else + do_assertions(0); } } @@ -2892,8 +3025,7 @@ static void suspend_subtest(const struct test_mode *t) sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); - do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | DONT_ASSERT_CRC); set_mode_for_params(params); do_assertions(0); @@ -3375,6 +3507,10 @@ static const char *feature_str(int feature) return "psr"; case FEATURE_FBC | FEATURE_PSR: return "fbcpsr"; + case FEATURE_DRRS: + return "drrs"; + case FEATURE_FBC | FEATURE_DRRS: + return "fbcdrrs"; default: igt_assert(false); } @@ -3639,7 +3775,7 @@ int main(int argc, char *argv[]) tilingchange_subtest(&t); } - if (t.feature & FEATURE_PSR) + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) igt_subtest_f("%s-slowdraw", feature_str(t.feature)) slow_draw_subtest(&t); -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2017-11-10 16:22 ` [PATCH i-g-t] Idleness DRRS: Lohith BS @ 2017-12-06 15:13 ` Lohith BS 2017-12-06 18:30 ` Paulo Zanoni 2017-12-11 13:12 ` [PATCH i-g-t v9] " Lohith BS 0 siblings, 2 replies; 59+ messages in thread From: Lohith BS @ 2017-12-06 15:13 UTC (permalink / raw) To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris, marius.c.vlad Cc: ankit.k.nautiyal, paulo.r.zanoni Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's refresh rate to the lowest vrefresh supported by panel, when frame is not flipped for more than a Sec. In kernel, DRRS uses the front buffer tracking infrastructure. Hence DRRS test coverage is added along with other frontbuffer tracking based features such as FBC and PSR tests. Here, we are testing DRRS with other features in all possible combinations, in all required test cases, to capture any possible regression. v2: Addressed the comments and suggestions from Vlad, Marius. The signoff details from the earlier work are also included. v3: Modified vblank rate calculation by using reply-sequence, provided by drmWaitVBlank, as suggested by Chris Wilson. v4: As suggested from Chris Wilson and Daniel Vetter 1) Avoided using pthread for calculating vblank refresh rate, instead used drmWaitVBlank reply sequence. 2) Avoided using kernel-specific info like transitional delays, instead polling mechanism with timeout is used. 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, instead of having a separate test. v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. DRRS switch to lower vrefresh rate is tested at slow-draw subtest. Note: 1) Currently kernel doesn't have support to enable and disable the DRRS feature dynamically(as in case of PSR). Hence if the panel supports DRRS it will be enabled by default. This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" v6: This patch adds runtime enable and disable feature for testing DRRS v7: This patch adds runtime enable and disable feature for testing DRRS through debugfs entry "i915_drrs_ctl". v8: Commit message is updated to reflect current implementation. Signed-off-by: Lohith BS <lohith.bs@intel.com> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> --- tests/kms_frontbuffer_tracking.c | 166 +++++++++++++++++++++++++++++++++++---- 1 file changed, 151 insertions(+), 15 deletions(-) diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c index a068c8a..b06d304 100644 --- a/tests/kms_frontbuffer_tracking.c +++ b/tests/kms_frontbuffer_tracking.c @@ -34,7 +34,7 @@ IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " - "its related features: FBC and PSR"); + "its related features: FBC, DRRS and PSR"); /* * One of the aspects of this test is that, for every subtest, we try different @@ -105,8 +105,9 @@ struct test_mode { FEATURE_NONE = 0, FEATURE_FBC = 1, FEATURE_PSR = 2, - FEATURE_COUNT = 4, - FEATURE_DEFAULT = 4, + FEATURE_DRRS = 4, + FEATURE_COUNT = 6, + FEATURE_DEFAULT = 6, } feature; /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and @@ -156,6 +157,7 @@ struct rect { struct { int fd; int debugfs; + int drrs_debugfs_fd; drmModeResPtr res; drmModeConnectorPtr connectors[MAX_CONNECTORS]; drmModeEncoderPtr encoders[MAX_ENCODERS]; @@ -178,10 +180,8 @@ struct { struct { bool can_test; -} psr = { - .can_test = false, -}; - +} psr = { .can_test = false,}, +drrs = { .can_test = false,}; #define SINK_CRC_SIZE 12 typedef struct { @@ -775,8 +775,8 @@ static bool set_mode_for_params(struct modeset_params *params) int rc; rc = drmModeSetCrtc(drm.fd, params->crtc_id, params->fb.fb->fb_id, - params->fb.x, params->fb.y, - ¶ms->connector_id, 1, params->mode); + params->fb.x, params->fb.y, + ¶ms->connector_id, 1, params->mode); return (rc == 0); } @@ -822,6 +822,63 @@ static void psr_print_status(void) igt_info("PSR status:\n%s\n", buf); } +void drrs_set(unsigned int val) +{ + char buf[16]; + + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); + snprintf(buf, sizeof(buf), "%d", val); + igt_assert_eq(write(drm.drrs_debugfs_fd, buf, strlen(buf)), strlen(buf)); +} + +static bool is_drrs_high(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_HIGH_RR"); +} + +static bool is_drrs_low(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_LOW_RR"); +} + +static bool is_drrs_supported(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS Supported: Yes"); +} + +static bool is_drrs_inactive(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + + if (strstr(buf, "No active crtc found")) + return true; + if (strstr(buf, "Idleness DRRS: Disabled")) + return true; + if (strstr(buf, "DRRS Supported : No")) + return true; + + return false; +} + +static void drrs_print_status(void) +{ + char buf[256]; + + debugfs_read("i915_drrs_status", buf); + igt_info("DRRS STATUS :\n%s\n", buf); +} + static struct timespec fbc_get_last_action(void) { struct timespec ret = { 0, 0 }; @@ -932,10 +989,17 @@ static bool psr_wait_until_enabled(void) return igt_wait(psr_is_enabled(), 5000, 1); } +static bool drrs_wait_until_rr_switch_to_low(void) +{ + return igt_wait(is_drrs_low(), 5000, 1); +} + #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) #define psr_enable() igt_set_module_param_int("enable_psr", 1) #define psr_disable() igt_set_module_param_int("enable_psr", 0) +#define drrs_enable() drrs_set(1) +#define drrs_disable() drrs_set(0) static void get_sink_crc(sink_crc_t *crc, bool mandatory) { @@ -1182,6 +1246,7 @@ static void disable_features(const struct test_mode *t) fbc_disable(); psr_disable(); + drrs_disable(); } static void *busy_thread_func(void *data) @@ -1506,6 +1571,11 @@ static void teardown_crcs(void) igt_pipe_crc_free(pipe_crc); } +static void teardown_drrs(void) +{ + if (drm.drrs_debugfs_fd != -1) + close(drm.drrs_debugfs_fd); +} static bool fbc_supported_on_chipset(void) { char buf[128]; @@ -1575,6 +1645,30 @@ static void teardown_psr(void) { } +static void setup_drrs(void) +{ + int is_drrs_debug_ctl; + if (get_connector(prim_mode_params.connector_id)->connector_type != + DRM_MODE_CONNECTOR_eDP) { + igt_info("Can't test DRRS: no usable eDP screen.\n"); + return; + } + + if (!is_drrs_supported()) { + igt_info("Can't test DRRS: Not supported.\n"); + return; + } + + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); + + if (drm.drrs_debugfs_fd > 0) { + drrs.can_test = true; + } else { + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); + drrs.can_test = false; + } +} + static void setup_environment(void) { setup_drm(); @@ -1582,7 +1676,7 @@ static void setup_environment(void) setup_fbc(); setup_psr(); - + setup_drrs(); setup_crcs(); } @@ -1594,6 +1688,7 @@ static void teardown_environment(void) teardown_psr(); teardown_fbc(); teardown_modeset(); + teardown_drrs(); teardown_drm(); } @@ -1660,6 +1755,11 @@ static void do_flush(const struct test_mode *t) #define ASSERT_PSR_ENABLED (1 << 6) #define ASSERT_PSR_DISABLED (1 << 7) +#define DRRS_ASSERT_FLAGS (7 << 8) +#define ASSERT_DRRS_HIGH (1 << 8) +#define ASSERT_DRRS_LOW (1 << 9) +#define ASSERT_DRRS_INACTIVE (1 << 10) + static int adjust_assertion_flags(const struct test_mode *t, int flags) { if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { @@ -1667,12 +1767,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) flags |= ASSERT_FBC_ENABLED; if (!(flags & ASSERT_PSR_DISABLED)) flags |= ASSERT_PSR_ENABLED; + if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) { + flags |= ASSERT_DRRS_HIGH; + } } if ((t->feature & FEATURE_FBC) == 0) flags &= ~FBC_ASSERT_FLAGS; if ((t->feature & FEATURE_PSR) == 0) flags &= ~PSR_ASSERT_FLAGS; + if ((t->feature & FEATURE_DRRS) == 0) + flags &= ~DRRS_ASSERT_FLAGS; return flags; } @@ -1704,6 +1809,23 @@ static void do_status_assertions(int flags) return; } + if (flags & ASSERT_DRRS_HIGH) { + if (!is_drrs_high()) { + drrs_print_status(); + igt_assert_f(false, "DRRS HIGH\n"); + } + } else if (flags & ASSERT_DRRS_LOW) { + if (!drrs_wait_until_rr_switch_to_low()) { + drrs_print_status(); + igt_assert_f(false, "DRRS LOW\n"); + } + } else if (flags & ASSERT_DRRS_INACTIVE) { + if (!is_drrs_inactive()) { + drrs_print_status(); + igt_assert_f(false, "DRRS INACTIVE\n"); + } + } + if (flags & ASSERT_FBC_ENABLED) { igt_require(!fbc_not_enough_stolen()); igt_require(!fbc_stride_not_supported()); @@ -1831,6 +1953,8 @@ static void enable_features_for_test(const struct test_mode *t) fbc_enable(); if (t->feature & FEATURE_PSR) psr_enable(); + if (t->feature & FEATURE_DRRS) + drrs_enable(); } static void check_test_requirements(const struct test_mode *t) @@ -1850,6 +1974,10 @@ static void check_test_requirements(const struct test_mode *t) "Can't test PSR without sink CRCs\n"); } + if (t->feature & FEATURE_DRRS) + igt_require_f(drrs.can_test, + "Can't test DRRS with the current outputs\n"); + if (opt.only_pipes != PIPE_COUNT) igt_require(t->pipes == opt.only_pipes); } @@ -1971,7 +2099,7 @@ static void rte_subtest(const struct test_mode *t) unset_all_crtcs(); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); enable_prim_screen_and_wait(t); set_cursor_for_test(t, &prim_mode_params); @@ -2219,6 +2347,7 @@ static void badformat_subtest(const struct test_mode *t) assertions |= ASSERT_FBC_DISABLED; if (!psr_valid) assertions |= ASSERT_PSR_DISABLED; + do_assertions(assertions); } @@ -2277,7 +2406,11 @@ static void slow_draw_subtest(const struct test_mode *t) sleep(2); update_wanted_crc(t, &pattern->crcs[t->format][r]); - do_assertions(0); + + if (t->feature & FEATURE_DRRS) + do_assertions(ASSERT_DRRS_LOW); + else + do_assertions(0); } } @@ -2892,8 +3025,7 @@ static void suspend_subtest(const struct test_mode *t) sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); - do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | DONT_ASSERT_CRC); set_mode_for_params(params); do_assertions(0); @@ -3375,6 +3507,10 @@ static const char *feature_str(int feature) return "psr"; case FEATURE_FBC | FEATURE_PSR: return "fbcpsr"; + case FEATURE_DRRS: + return "drrs"; + case FEATURE_FBC | FEATURE_DRRS: + return "fbcdrrs"; default: igt_assert(false); } @@ -3639,7 +3775,7 @@ int main(int argc, char *argv[]) tilingchange_subtest(&t); } - if (t.feature & FEATURE_PSR) + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) igt_subtest_f("%s-slowdraw", feature_str(t.feature)) slow_draw_subtest(&t); -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2017-12-06 15:13 ` [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage Lohith BS @ 2017-12-06 18:30 ` Paulo Zanoni 2017-12-11 13:12 ` [PATCH i-g-t v9] " Lohith BS 1 sibling, 0 replies; 59+ messages in thread From: Paulo Zanoni @ 2017-12-06 18:30 UTC (permalink / raw) To: Lohith BS, intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris, marius.c.vlad Cc: ankit.k.nautiyal Em Qua, 2017-12-06 às 20:43 +0530, Lohith BS escreveu: > Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's > refresh rate to the lowest vrefresh supported by panel, when frame is > not flipped for more than a Sec. > > In kernel, DRRS uses the front buffer tracking infrastructure. > Hence DRRS test coverage is added along with other frontbuffer > tracking > based features such as FBC and PSR tests. > > Here, we are testing DRRS with other features in all possible > combinations, in all required test cases, to capture any possible > regression. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, > provided by drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the > kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw > subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable > the DRRS feature dynamically(as in case of PSR). Hence if the > panel supports DRRS it will be enabled by default. > > This is in continuation of last patch > "https://patchwork.freedesktop.org/patch/162726/" > > v6: This patch adds runtime enable and disable feature for testing > DRRS > > v7: This patch adds runtime enable and disable feature for testing > DRRS > through debugfs entry "i915_drrs_ctl". > > v8: Commit message is updated to reflect current implementation. Not a full review, but: coding style and indentation needs to be fixed. There are a few chunks where the only thing the patch does is make indentation wrong. There are chunks that only add blank lines. There are chunks that leave functions without empty lines between them. There are chunks that add code that do not follow the coding style used by the rest of the file (which is the same style used by the Kernel). There are chunks that use white spaces in places where tabs should be used. Please review your own patch before we can review it. FEATURE_COUNT needs to be 8. Any undesired combinations need explicit code to avoid them with a nice comment explaining why. > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > --- > tests/kms_frontbuffer_tracking.c | 166 > +++++++++++++++++++++++++++++++++++---- > 1 file changed, 151 insertions(+), 15 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c > b/tests/kms_frontbuffer_tracking.c > index a068c8a..b06d304 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking > mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC, DRRS and PSR"); > > /* > * One of the aspects of this test is that, for every subtest, we > try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 6, > + FEATURE_DEFAULT = 6, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for > most tests and > @@ -156,6 +157,7 @@ struct rect { > struct { > int fd; > int debugfs; > + int drrs_debugfs_fd; > drmModeResPtr res; > drmModeConnectorPtr connectors[MAX_CONNECTORS]; > drmModeEncoderPtr encoders[MAX_ENCODERS]; > @@ -178,10 +180,8 @@ struct { > > struct { > bool can_test; > -} psr = { > - .can_test = false, > -}; > - > +} psr = { .can_test = false,}, > +drrs = { .can_test = false,}; > > #define SINK_CRC_SIZE 12 > typedef struct { > @@ -775,8 +775,8 @@ static bool set_mode_for_params(struct > modeset_params *params) > int rc; > > rc = drmModeSetCrtc(drm.fd, params->crtc_id, params->fb.fb- > >fb_id, > - params->fb.x, params->fb.y, > - ¶ms->connector_id, 1, params->mode); > + params->fb.x, params->fb.y, > + ¶ms->connector_id, 1, params- > >mode); > return (rc == 0); > } > > @@ -822,6 +822,63 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +void drrs_set(unsigned int val) > +{ > + char buf[16]; > + > + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : > "dis", val); > + snprintf(buf, sizeof(buf), "%d", val); > + igt_assert_eq(write(drm.drrs_debugfs_fd, buf, strlen(buf)), > strlen(buf)); > +} > + > +static bool is_drrs_high(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_HIGH_RR"); > +} > + > +static bool is_drrs_low(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_LOW_RR"); > +} > + > +static bool is_drrs_supported(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS Supported: Yes"); > +} > + > +static bool is_drrs_inactive(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + > + if (strstr(buf, "No active crtc found")) > + return true; > + if (strstr(buf, "Idleness DRRS: Disabled")) > + return true; > + if (strstr(buf, "DRRS Supported : No")) > + return true; > + > + return false; > +} > + > +static void drrs_print_status(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + igt_info("DRRS STATUS :\n%s\n", buf); > +} > + > static struct timespec fbc_get_last_action(void) > { > struct timespec ret = { 0, 0 }; > @@ -932,10 +989,17 @@ static bool psr_wait_until_enabled(void) > return igt_wait(psr_is_enabled(), 5000, 1); > } > > +static bool drrs_wait_until_rr_switch_to_low(void) > +{ > + return igt_wait(is_drrs_low(), 5000, 1); > +} > + > #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) > #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) > #define psr_enable() igt_set_module_param_int("enable_psr", 1) > #define psr_disable() igt_set_module_param_int("enable_psr", 0) > +#define drrs_enable() drrs_set(1) > +#define drrs_disable() drrs_set(0) > > static void get_sink_crc(sink_crc_t *crc, bool mandatory) > { > @@ -1182,6 +1246,7 @@ static void disable_features(const struct > test_mode *t) > > fbc_disable(); > psr_disable(); > + drrs_disable(); > } > > static void *busy_thread_func(void *data) > @@ -1506,6 +1571,11 @@ static void teardown_crcs(void) > igt_pipe_crc_free(pipe_crc); > } > > +static void teardown_drrs(void) > +{ > + if (drm.drrs_debugfs_fd != -1) > + close(drm.drrs_debugfs_fd); > +} > static bool fbc_supported_on_chipset(void) > { > char buf[128]; > @@ -1575,6 +1645,30 @@ static void teardown_psr(void) > { > } > > +static void setup_drrs(void) > +{ > + int is_drrs_debug_ctl; > + if (get_connector(prim_mode_params.connector_id)- > >connector_type != > + DRM_MODE_CONNECTOR_eDP) { > + igt_info("Can't test DRRS: no usable eDP > screen.\n"); > + return; > + } > + > + if (!is_drrs_supported()) { > + igt_info("Can't test DRRS: Not supported.\n"); > + return; > + } > + > + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", > O_WRONLY); > + > + if (drm.drrs_debugfs_fd > 0) { > + drrs.can_test = true; > + } else { > + igt_info("Can't test DRRS: Debugfs entry > i915_drrs_ctl not found.\n"); > + drrs.can_test = false; > + } > +} > + > static void setup_environment(void) > { > setup_drm(); > @@ -1582,7 +1676,7 @@ static void setup_environment(void) > > setup_fbc(); > setup_psr(); > - > + setup_drrs(); > setup_crcs(); > } > > @@ -1594,6 +1688,7 @@ static void teardown_environment(void) > teardown_psr(); > teardown_fbc(); > teardown_modeset(); > + teardown_drrs(); > teardown_drm(); > } > > @@ -1660,6 +1755,11 @@ static void do_flush(const struct test_mode > *t) > #define ASSERT_PSR_ENABLED (1 << 6) > #define ASSERT_PSR_DISABLED (1 << 7) > > +#define DRRS_ASSERT_FLAGS (7 << 8) > +#define ASSERT_DRRS_HIGH (1 << 8) > +#define ASSERT_DRRS_LOW (1 << 9) > +#define ASSERT_DRRS_INACTIVE (1 << 10) > + > static int adjust_assertion_flags(const struct test_mode *t, int > flags) > { > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > @@ -1667,12 +1767,17 @@ static int adjust_assertion_flags(const > struct test_mode *t, int flags) > flags |= ASSERT_FBC_ENABLED; > if (!(flags & ASSERT_PSR_DISABLED)) > flags |= ASSERT_PSR_ENABLED; > + if (!((flags & ASSERT_DRRS_LOW) || (flags & > ASSERT_DRRS_INACTIVE))) { > + flags |= ASSERT_DRRS_HIGH; > + } > } > > if ((t->feature & FEATURE_FBC) == 0) > flags &= ~FBC_ASSERT_FLAGS; > if ((t->feature & FEATURE_PSR) == 0) > flags &= ~PSR_ASSERT_FLAGS; > + if ((t->feature & FEATURE_DRRS) == 0) > + flags &= ~DRRS_ASSERT_FLAGS; > > return flags; > } > @@ -1704,6 +1809,23 @@ static void do_status_assertions(int flags) > return; > } > > + if (flags & ASSERT_DRRS_HIGH) { > + if (!is_drrs_high()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS HIGH\n"); > + } > + } else if (flags & ASSERT_DRRS_LOW) { > + if (!drrs_wait_until_rr_switch_to_low()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS LOW\n"); > + } > + } else if (flags & ASSERT_DRRS_INACTIVE) { > + if (!is_drrs_inactive()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS INACTIVE\n"); > + } > + } > + > if (flags & ASSERT_FBC_ENABLED) { > igt_require(!fbc_not_enough_stolen()); > igt_require(!fbc_stride_not_supported()); > @@ -1831,6 +1953,8 @@ static void enable_features_for_test(const > struct test_mode *t) > fbc_enable(); > if (t->feature & FEATURE_PSR) > psr_enable(); > + if (t->feature & FEATURE_DRRS) > + drrs_enable(); > } > > static void check_test_requirements(const struct test_mode *t) > @@ -1850,6 +1974,10 @@ static void check_test_requirements(const > struct test_mode *t) > "Can't test PSR without sink CRCs\n"); > } > > + if (t->feature & FEATURE_DRRS) > + igt_require_f(drrs.can_test, > + "Can't test DRRS with the current > outputs\n"); > + > if (opt.only_pipes != PIPE_COUNT) > igt_require(t->pipes == opt.only_pipes); > } > @@ -1971,7 +2099,7 @@ static void rte_subtest(const struct test_mode > *t) > > unset_all_crtcs(); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > enable_prim_screen_and_wait(t); > set_cursor_for_test(t, &prim_mode_params); > @@ -2219,6 +2347,7 @@ static void badformat_subtest(const struct > test_mode *t) > assertions |= ASSERT_FBC_DISABLED; > if (!psr_valid) > assertions |= ASSERT_PSR_DISABLED; > + > do_assertions(assertions); > } > > @@ -2277,7 +2406,11 @@ static void slow_draw_subtest(const struct > test_mode *t) > sleep(2); > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > - do_assertions(0); > + > + if (t->feature & FEATURE_DRRS) > + do_assertions(ASSERT_DRRS_LOW); > + else > + do_assertions(0); > } > } > > @@ -2892,8 +3025,7 @@ static void suspend_subtest(const struct > test_mode *t) > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, > SUSPEND_TEST_NONE); > sleep(5); > - do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > DONT_ASSERT_CRC); > > set_mode_for_params(params); > do_assertions(0); > @@ -3375,6 +3507,10 @@ static const char *feature_str(int feature) > return "psr"; > case FEATURE_FBC | FEATURE_PSR: > return "fbcpsr"; > + case FEATURE_DRRS: > + return "drrs"; > + case FEATURE_FBC | FEATURE_DRRS: > + return "fbcdrrs"; > default: > igt_assert(false); > } > @@ -3639,7 +3775,7 @@ int main(int argc, char *argv[]) > tilingchange_subtest(&t); > } > > - if (t.feature & FEATURE_PSR) > + if ((t.feature & FEATURE_PSR) || (t.feature & > FEATURE_DRRS)) > igt_subtest_f("%s-slowdraw", > feature_str(t.feature)) > slow_draw_subtest(&t); > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* [PATCH i-g-t v9] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2017-12-06 15:13 ` [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage Lohith BS 2017-12-06 18:30 ` Paulo Zanoni @ 2017-12-11 13:12 ` Lohith BS 2018-01-01 13:45 ` [PATCH i-g-t v10] " Lohith BS 1 sibling, 1 reply; 59+ messages in thread From: Lohith BS @ 2017-12-11 13:12 UTC (permalink / raw) To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris Cc: ankit.k.nautiyal, paulo.r.zanoni Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's refresh rate to the lowest vrefresh supported by panel, when frame is not flipped for more than a Sec. In kernel, DRRS uses the front buffer tracking infrastructure. Hence DRRS test coverage is added along with other frontbuffer tracking based features such as FBC and PSR tests. Here, we are testing DRRS with other features in all possible combinations, in all required test cases, to capture any possible regression. v2: Addressed the comments and suggestions from Vlad, Marius. The signoff details from the earlier work are also included. v3: Modified vblank rate calculation by using reply-sequence, provided by drmWaitVBlank, as suggested by Chris Wilson. v4: As suggested from Chris Wilson and Daniel Vetter 1) Avoided using pthread for calculating vblank refresh rate, instead used drmWaitVBlank reply sequence. 2) Avoided using kernel-specific info like transitional delays, instead polling mechanism with timeout is used. 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, instead of having a separate test. v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. DRRS switch to lower vrefresh rate is tested at slow-draw subtest. Note: 1) Currently kernel doesn't have support to enable and disable the DRRS feature dynamically(as in case of PSR). Hence if the panel supports DRRS it will be enabled by default. This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" v6: This patch adds runtime enable and disable feature for testing DRRS v7: This patch adds runtime enable and disable feature for testing DRRS through debugfs entry "i915_drrs_ctl". v8: Commit message is updated to reflect current implementation. v9: Addressed Paulo Zanoni comments. Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. Signed-off-by: Lohith BS <lohith.bs@intel.com> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> --- tests/kms_frontbuffer_tracking.c | 183 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 176 insertions(+), 7 deletions(-) diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c index a068c8a..19e38cb 100644 --- a/tests/kms_frontbuffer_tracking.c +++ b/tests/kms_frontbuffer_tracking.c @@ -34,7 +34,7 @@ IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " - "its related features: FBC and PSR"); + "its related features: FBC, PSR and DRRS"); /* * One of the aspects of this test is that, for every subtest, we try different @@ -105,8 +105,9 @@ struct test_mode { FEATURE_NONE = 0, FEATURE_FBC = 1, FEATURE_PSR = 2, - FEATURE_COUNT = 4, - FEATURE_DEFAULT = 4, + FEATURE_DRRS = 4, + FEATURE_COUNT = 8, + FEATURE_DEFAULT = 8, } feature; /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and @@ -156,6 +157,7 @@ struct rect { struct { int fd; int debugfs; + int drrs_debugfs_fd; drmModeResPtr res; drmModeConnectorPtr connectors[MAX_CONNECTORS]; drmModeEncoderPtr encoders[MAX_ENCODERS]; @@ -182,6 +184,15 @@ struct { .can_test = false, }; +#define MAX_DRRS_STATUS_BUF_LEN 256 + +struct { + bool can_test; + bool is_psr_drrs_combo; +} drrs = { + .can_test = false, + .is_psr_drrs_combo = false, +}; #define SINK_CRC_SIZE 12 typedef struct { @@ -822,6 +833,64 @@ static void psr_print_status(void) igt_info("PSR status:\n%s\n", buf); } +void drrs_set(unsigned int val) +{ + char buf[2]; + + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); + snprintf(buf, sizeof(buf), "%d", val); + igt_assert_eq(write(drm.drrs_debugfs_fd, + buf, strlen(buf)), strlen(buf)); +} + +static bool is_drrs_high(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_HIGH_RR"); +} + +static bool is_drrs_low(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_LOW_RR"); +} + +static bool is_drrs_supported(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS Supported: Yes"); +} + +static bool is_drrs_inactive(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + + if (strstr(buf, "No active crtc found")) + return true; + if (strstr(buf, "Idleness DRRS: Disabled")) + return true; + if (strstr(buf, "DRRS Supported : No")) + return true; + + return false; +} + +static void drrs_print_status(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + igt_info("DRRS STATUS :\n%s\n", buf); +} + static struct timespec fbc_get_last_action(void) { struct timespec ret = { 0, 0 }; @@ -932,10 +1001,17 @@ static bool psr_wait_until_enabled(void) return igt_wait(psr_is_enabled(), 5000, 1); } +static bool drrs_wait_until_rr_switch_to_low(void) +{ + return igt_wait(is_drrs_low(), 5000, 1); +} + #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) #define psr_enable() igt_set_module_param_int("enable_psr", 1) #define psr_disable() igt_set_module_param_int("enable_psr", 0) +#define drrs_enable() drrs_set(1) +#define drrs_disable() drrs_set(0) static void get_sink_crc(sink_crc_t *crc, bool mandatory) { @@ -1182,6 +1258,7 @@ static void disable_features(const struct test_mode *t) fbc_disable(); psr_disable(); + drrs_disable(); } static void *busy_thread_func(void *data) @@ -1506,6 +1583,12 @@ static void teardown_crcs(void) igt_pipe_crc_free(pipe_crc); } +static void teardown_drrs(void) +{ + if (drm.drrs_debugfs_fd != -1) + close(drm.drrs_debugfs_fd); +} + static bool fbc_supported_on_chipset(void) { char buf[128]; @@ -1575,6 +1658,29 @@ static void teardown_psr(void) { } +static void setup_drrs(void) +{ + if (get_connector(prim_mode_params.connector_id)->connector_type != + DRM_MODE_CONNECTOR_eDP) { + igt_info("Can't test DRRS: no usable eDP screen.\n"); + return; + } + + if (!is_drrs_supported()) { + igt_info("Can't test DRRS: Not supported.\n"); + return; + } + + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); + + if (drm.drrs_debugfs_fd > 0) { + drrs.can_test = true; + } else { + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); + drrs.can_test = false; + } +} + static void setup_environment(void) { setup_drm(); @@ -1582,7 +1688,7 @@ static void setup_environment(void) setup_fbc(); setup_psr(); - + setup_drrs(); setup_crcs(); } @@ -1594,6 +1700,7 @@ static void teardown_environment(void) teardown_psr(); teardown_fbc(); teardown_modeset(); + teardown_drrs(); teardown_drm(); } @@ -1660,6 +1767,11 @@ static void do_flush(const struct test_mode *t) #define ASSERT_PSR_ENABLED (1 << 6) #define ASSERT_PSR_DISABLED (1 << 7) +#define DRRS_ASSERT_FLAGS (7 << 8) +#define ASSERT_DRRS_HIGH (1 << 8) +#define ASSERT_DRRS_LOW (1 << 9) +#define ASSERT_DRRS_INACTIVE (1 << 10) + static int adjust_assertion_flags(const struct test_mode *t, int flags) { if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { @@ -1667,12 +1779,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) flags |= ASSERT_FBC_ENABLED; if (!(flags & ASSERT_PSR_DISABLED)) flags |= ASSERT_PSR_ENABLED; + if (!((flags & ASSERT_DRRS_LOW) || + (flags & ASSERT_DRRS_INACTIVE))) + flags |= ASSERT_DRRS_HIGH; } if ((t->feature & FEATURE_FBC) == 0) flags &= ~FBC_ASSERT_FLAGS; if ((t->feature & FEATURE_PSR) == 0) flags &= ~PSR_ASSERT_FLAGS; + if ((t->feature & FEATURE_DRRS) == 0) + flags &= ~DRRS_ASSERT_FLAGS; return flags; } @@ -1704,6 +1821,23 @@ static void do_status_assertions(int flags) return; } + if (flags & ASSERT_DRRS_HIGH) { + if (!is_drrs_high()) { + drrs_print_status(); + igt_assert_f(false, "DRRS HIGH\n"); + } + } else if (flags & ASSERT_DRRS_LOW) { + if (!drrs_wait_until_rr_switch_to_low()) { + drrs_print_status(); + igt_assert_f(false, "DRRS LOW\n"); + } + } else if (flags & ASSERT_DRRS_INACTIVE) { + if (!is_drrs_inactive()) { + drrs_print_status(); + igt_assert_f(false, "DRRS INACTIVE\n"); + } + } + if (flags & ASSERT_FBC_ENABLED) { igt_require(!fbc_not_enough_stolen()); igt_require(!fbc_stride_not_supported()); @@ -1831,6 +1965,8 @@ static void enable_features_for_test(const struct test_mode *t) fbc_enable(); if (t->feature & FEATURE_PSR) psr_enable(); + if (t->feature & FEATURE_DRRS) + drrs_enable(); } static void check_test_requirements(const struct test_mode *t) @@ -1850,6 +1986,20 @@ static void check_test_requirements(const struct test_mode *t) "Can't test PSR without sink CRCs\n"); } + if (t->feature & FEATURE_DRRS) + igt_require_f(drrs.can_test, + "Can't test DRRS with the current outputs\n"); + + /* + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test + * case needs DRRS + PSR enabled, that will be skipped. + */ + drrs.is_psr_drrs_combo = ((t->feature & FEATURE_PSR) && + (t->feature & FEATURE_DRRS)); + + igt_require_f(!drrs.is_psr_drrs_combo, + "Can't test PSR and DRRS together\n"); + if (opt.only_pipes != PIPE_COUNT) igt_require(t->pipes == opt.only_pipes); } @@ -1971,7 +2121,7 @@ static void rte_subtest(const struct test_mode *t) unset_all_crtcs(); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); enable_prim_screen_and_wait(t); set_cursor_for_test(t, &prim_mode_params); @@ -2063,6 +2213,13 @@ static void draw_subtest(const struct test_mode *t) if (op_disables_psr(t, t->method)) assertions |= ASSERT_PSR_DISABLED; + /* + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the + * current frambuffer. Hence assert for DRRS_LOW. + */ + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) + assertions |= ASSERT_DRRS_LOW; + prepare_subtest(t, pattern); target = pick_target(t, params); @@ -2277,7 +2434,11 @@ static void slow_draw_subtest(const struct test_mode *t) sleep(2); update_wanted_crc(t, &pattern->crcs[t->format][r]); - do_assertions(0); + + if (t->feature & FEATURE_DRRS) + do_assertions(ASSERT_DRRS_LOW); + else + do_assertions(0); } } @@ -3375,6 +3536,14 @@ static const char *feature_str(int feature) return "psr"; case FEATURE_FBC | FEATURE_PSR: return "fbcpsr"; + case FEATURE_DRRS: + return "drrs"; + case FEATURE_FBC | FEATURE_DRRS: + return "fbcdrrs"; + case FEATURE_PSR | FEATURE_DRRS: + return "psrdrrs"; + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: + return "fbcpsrdrrs"; default: igt_assert(false); } @@ -3639,7 +3808,7 @@ int main(int argc, char *argv[]) tilingchange_subtest(&t); } - if (t.feature & FEATURE_PSR) + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) igt_subtest_f("%s-slowdraw", feature_str(t.feature)) slow_draw_subtest(&t); -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* [PATCH i-g-t v10] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2017-12-11 13:12 ` [PATCH i-g-t v9] " Lohith BS @ 2018-01-01 13:45 ` Lohith BS 2018-01-02 20:34 ` Rodrigo Vivi 2018-01-03 15:02 ` [PATCH i-g-t v11] " Lohith BS 0 siblings, 2 replies; 59+ messages in thread From: Lohith BS @ 2018-01-01 13:45 UTC (permalink / raw) To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris, marius.c.vlad, jari.tahvanainen Cc: ankit.k.nautiyal, paulo.r.zanoni Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's refresh rate to the lowest vrefresh supported by panel, when frame is not flipped for more than a Sec. In kernel, DRRS uses the front buffer tracking infrastructure. Hence DRRS test coverage is added along with other frontbuffer tracking based features such as FBC and PSR tests. Here, we are testing DRRS with other features in all possible combinations, in all required test cases, to capture any possible regression. v2: Addressed the comments and suggestions from Vlad, Marius. The signoff details from the earlier work are also included. v3: Modified vblank rate calculation by using reply-sequence, provided by drmWaitVBlank, as suggested by Chris Wilson. v4: As suggested from Chris Wilson and Daniel Vetter 1) Avoided using pthread for calculating vblank refresh rate, instead used drmWaitVBlank reply sequence. 2) Avoided using kernel-specific info like transitional delays, instead polling mechanism with timeout is used. 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, instead of having a separate test. v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. DRRS switch to lower vrefresh rate is tested at slow-draw subtest. Note: 1) Currently kernel doesn't have support to enable and disable the DRRS feature dynamically(as in case of PSR). Hence if the panel supports DRRS it will be enabled by default. This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" v6: This patch adds runtime enable and disable feature for testing DRRS v7: This patch adds runtime enable and disable feature for testing DRRS through debugfs entry "i915_drrs_ctl". v8: Commit message is updated to reflect current implementation. v9: Addressed Paulo Zanoni comments. Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. v10: Corrected DRRS state expectation in suspend related subtests. Signed-off-by: Lohith BS <lohith.bs@intel.com> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> --- tests/kms_frontbuffer_tracking.c | 188 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 179 insertions(+), 9 deletions(-) diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c index 1601cab..1039c9e 100644 --- a/tests/kms_frontbuffer_tracking.c +++ b/tests/kms_frontbuffer_tracking.c @@ -34,7 +34,7 @@ IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " - "its related features: FBC and PSR"); + "its related features: FBC, PSR and DRRS"); /* * One of the aspects of this test is that, for every subtest, we try different @@ -105,8 +105,9 @@ struct test_mode { FEATURE_NONE = 0, FEATURE_FBC = 1, FEATURE_PSR = 2, - FEATURE_COUNT = 4, - FEATURE_DEFAULT = 4, + FEATURE_DRRS = 4, + FEATURE_COUNT = 8, + FEATURE_DEFAULT = 8, } feature; /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and @@ -156,6 +157,7 @@ struct rect { struct { int fd; int debugfs; + int drrs_debugfs_fd; drmModeResPtr res; drmModeConnectorPtr connectors[MAX_CONNECTORS]; drmModeEncoderPtr encoders[MAX_ENCODERS]; @@ -182,6 +184,15 @@ struct { .can_test = false, }; +#define MAX_DRRS_STATUS_BUF_LEN 256 + +struct { + bool can_test; + bool is_psr_drrs_combo; +} drrs = { + .can_test = false, + .is_psr_drrs_combo = false, +}; #define SINK_CRC_SIZE 12 typedef struct { @@ -825,6 +836,64 @@ static void psr_print_status(void) igt_info("PSR status:\n%s\n", buf); } +void drrs_set(unsigned int val) +{ + char buf[2]; + + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); + snprintf(buf, sizeof(buf), "%d", val); + igt_assert_eq(write(drm.drrs_debugfs_fd, + buf, strlen(buf)), strlen(buf)); +} + +static bool is_drrs_high(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_HIGH_RR"); +} + +static bool is_drrs_low(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_LOW_RR"); +} + +static bool is_drrs_supported(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS Supported: Yes"); +} + +static bool is_drrs_inactive(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + + if (strstr(buf, "No active crtc found")) + return true; + if (strstr(buf, "Idleness DRRS: Disabled")) + return true; + if (strstr(buf, "DRRS Supported : No")) + return true; + + return false; +} + +static void drrs_print_status(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + igt_info("DRRS STATUS :\n%s\n", buf); +} + static struct timespec fbc_get_last_action(void) { struct timespec ret = { 0, 0 }; @@ -935,10 +1004,17 @@ static bool psr_wait_until_enabled(void) return igt_wait(psr_is_enabled(), 5000, 1); } +static bool drrs_wait_until_rr_switch_to_low(void) +{ + return igt_wait(is_drrs_low(), 5000, 1); +} + #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) #define psr_enable() igt_set_module_param_int("enable_psr", 1) #define psr_disable() igt_set_module_param_int("enable_psr", 0) +#define drrs_enable() drrs_set(1) +#define drrs_disable() drrs_set(0) static void get_sink_crc(sink_crc_t *crc, bool mandatory) { @@ -1184,6 +1260,7 @@ static void disable_features(const struct test_mode *t) fbc_disable(); psr_disable(); + drrs_disable(); } static void *busy_thread_func(void *data) @@ -1508,6 +1585,12 @@ static void teardown_crcs(void) igt_pipe_crc_free(pipe_crc); } +static void teardown_drrs(void) +{ + if (drm.drrs_debugfs_fd != -1) + close(drm.drrs_debugfs_fd); +} + static bool fbc_supported_on_chipset(void) { char buf[128]; @@ -1577,6 +1660,29 @@ static void teardown_psr(void) { } +static void setup_drrs(void) +{ + if (get_connector(prim_mode_params.connector_id)->connector_type != + DRM_MODE_CONNECTOR_eDP) { + igt_info("Can't test DRRS: no usable eDP screen.\n"); + return; + } + + if (!is_drrs_supported()) { + igt_info("Can't test DRRS: Not supported.\n"); + return; + } + + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); + + if (drm.drrs_debugfs_fd > 0) { + drrs.can_test = true; + } else { + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); + drrs.can_test = false; + } +} + static void setup_environment(void) { setup_drm(); @@ -1584,6 +1690,7 @@ static void setup_environment(void) setup_fbc(); setup_psr(); + setup_drrs(); setup_crcs(); } @@ -1596,6 +1703,7 @@ static void teardown_environment(void) teardown_psr(); teardown_fbc(); teardown_modeset(); + teardown_drrs(); teardown_drm(); } @@ -1662,6 +1770,11 @@ static void do_flush(const struct test_mode *t) #define ASSERT_PSR_ENABLED (1 << 6) #define ASSERT_PSR_DISABLED (1 << 7) +#define DRRS_ASSERT_FLAGS (7 << 8) +#define ASSERT_DRRS_HIGH (1 << 8) +#define ASSERT_DRRS_LOW (1 << 9) +#define ASSERT_DRRS_INACTIVE (1 << 10) + static int adjust_assertion_flags(const struct test_mode *t, int flags) { if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { @@ -1669,12 +1782,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) flags |= ASSERT_FBC_ENABLED; if (!(flags & ASSERT_PSR_DISABLED)) flags |= ASSERT_PSR_ENABLED; + if (!((flags & ASSERT_DRRS_LOW) || + (flags & ASSERT_DRRS_INACTIVE))) + flags |= ASSERT_DRRS_HIGH; } if ((t->feature & FEATURE_FBC) == 0) flags &= ~FBC_ASSERT_FLAGS; if ((t->feature & FEATURE_PSR) == 0) flags &= ~PSR_ASSERT_FLAGS; + if ((t->feature & FEATURE_DRRS) == 0) + flags &= ~DRRS_ASSERT_FLAGS; return flags; } @@ -1706,6 +1824,23 @@ static void do_status_assertions(int flags) return; } + if (flags & ASSERT_DRRS_HIGH) { + if (!is_drrs_high()) { + drrs_print_status(); + igt_assert_f(false, "DRRS HIGH\n"); + } + } else if (flags & ASSERT_DRRS_LOW) { + if (!drrs_wait_until_rr_switch_to_low()) { + drrs_print_status(); + igt_assert_f(false, "DRRS LOW\n"); + } + } else if (flags & ASSERT_DRRS_INACTIVE) { + if (!is_drrs_inactive()) { + drrs_print_status(); + igt_assert_f(false, "DRRS INACTIVE\n"); + } + } + if (flags & ASSERT_FBC_ENABLED) { igt_require(!fbc_not_enough_stolen()); igt_require(!fbc_stride_not_supported()); @@ -1833,6 +1968,8 @@ static void enable_features_for_test(const struct test_mode *t) fbc_enable(); if (t->feature & FEATURE_PSR) psr_enable(); + if (t->feature & FEATURE_DRRS) + drrs_enable(); } static void check_test_requirements(const struct test_mode *t) @@ -1852,6 +1989,20 @@ static void check_test_requirements(const struct test_mode *t) "Can't test PSR without sink CRCs\n"); } + if (t->feature & FEATURE_DRRS) + igt_require_f(drrs.can_test, + "Can't test DRRS with the current outputs\n"); + + /* + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test + * case needs DRRS + PSR enabled, that will be skipped. + */ + drrs.is_psr_drrs_combo = ((t->feature & FEATURE_PSR) && + (t->feature & FEATURE_DRRS)); + + igt_require_f(!drrs.is_psr_drrs_combo, + "Can't test PSR and DRRS together\n"); + if (opt.only_pipes != PIPE_COUNT) igt_require(t->pipes == opt.only_pipes); } @@ -1973,7 +2124,7 @@ static void rte_subtest(const struct test_mode *t) unset_all_crtcs(); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); enable_prim_screen_and_wait(t); set_cursor_for_test(t, &prim_mode_params); @@ -2065,6 +2216,13 @@ static void draw_subtest(const struct test_mode *t) if (op_disables_psr(t, t->method)) assertions |= ASSERT_PSR_DISABLED; + /* + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the + * current frambuffer. Hence assert for DRRS_LOW. + */ + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) + assertions |= ASSERT_DRRS_LOW; + prepare_subtest(t, pattern); target = pick_target(t, params); @@ -2273,7 +2431,11 @@ static void slow_draw_subtest(const struct test_mode *t) sleep(2); update_wanted_crc(t, &pattern->crcs[t->format][r]); - do_assertions(0); + + if (t->feature & FEATURE_DRRS) + do_assertions(ASSERT_DRRS_LOW); + else + do_assertions(0); } } @@ -2882,17 +3044,17 @@ static void suspend_subtest(const struct test_mode *t) sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); - do_assertions(0); + do_assertions(ASSERT_DRRS_LOW); unset_all_crtcs(); sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); set_mode_for_params(params); - do_assertions(0); + do_assertions(ASSERT_DRRS_HIGH); } /** @@ -3371,6 +3533,14 @@ static const char *feature_str(int feature) return "psr"; case FEATURE_FBC | FEATURE_PSR: return "fbcpsr"; + case FEATURE_DRRS: + return "drrs"; + case FEATURE_FBC | FEATURE_DRRS: + return "fbcdrrs"; + case FEATURE_PSR | FEATURE_DRRS: + return "psrdrrs"; + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: + return "fbcpsrdrrs"; default: igt_assert(false); } @@ -3635,7 +3805,7 @@ int main(int argc, char *argv[]) tilingchange_subtest(&t); } - if (t.feature & FEATURE_PSR) + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) igt_subtest_f("%s-slowdraw", feature_str(t.feature)) slow_draw_subtest(&t); -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v10] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-01 13:45 ` [PATCH i-g-t v10] " Lohith BS @ 2018-01-02 20:34 ` Rodrigo Vivi 2018-01-03 16:02 ` Bs, Lohith 2018-01-03 15:02 ` [PATCH i-g-t v11] " Lohith BS 1 sibling, 1 reply; 59+ messages in thread From: Rodrigo Vivi @ 2018-01-02 20:34 UTC (permalink / raw) To: Lohith BS Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx, marius.c.vlad, ankit.k.nautiyal On Mon, Jan 01, 2018 at 01:45:32PM +0000, Lohith BS wrote: > Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's > refresh rate to the lowest vrefresh supported by panel, when frame is > not flipped for more than a Sec. > > In kernel, DRRS uses the front buffer tracking infrastructure. > Hence DRRS test coverage is added along with other frontbuffer tracking > based features such as FBC and PSR tests. > > Here, we are testing DRRS with other features in all possible > combinations, in all required test cases, to capture any possible > regression. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, > provided by drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the > kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable > the DRRS feature dynamically(as in case of PSR). Hence if the > panel supports DRRS it will be enabled by default. > > This is in continuation of last patch > "https://patchwork.freedesktop.org/patch/162726/" > > v6: This patch adds runtime enable and disable feature for testing DRRS > > v7: This patch adds runtime enable and disable feature for testing DRRS > through debugfs entry "i915_drrs_ctl". > > v8: Commit message is updated to reflect current implementation. > > v9: Addressed Paulo Zanoni comments. > Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. > > v10: Corrected DRRS state expectation in suspend related subtests. > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > --- > tests/kms_frontbuffer_tracking.c | 188 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 179 insertions(+), 9 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > index 1601cab..1039c9e 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC, PSR and DRRS"); > > /* > * One of the aspects of this test is that, for every subtest, we try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 8, > + FEATURE_DEFAULT = 8, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > @@ -156,6 +157,7 @@ struct rect { > struct { > int fd; > int debugfs; > + int drrs_debugfs_fd; > drmModeResPtr res; > drmModeConnectorPtr connectors[MAX_CONNECTORS]; > drmModeEncoderPtr encoders[MAX_ENCODERS]; > @@ -182,6 +184,15 @@ struct { > .can_test = false, > }; > > +#define MAX_DRRS_STATUS_BUF_LEN 256 > + > +struct { > + bool can_test; > + bool is_psr_drrs_combo; Why do you need this is_psr_drrs_combo at all? > +} drrs = { > + .can_test = false, > + .is_psr_drrs_combo = false, > +}; > > #define SINK_CRC_SIZE 12 > typedef struct { > @@ -825,6 +836,64 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +void drrs_set(unsigned int val) > +{ > + char buf[2]; > + > + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); > + snprintf(buf, sizeof(buf), "%d", val); > + igt_assert_eq(write(drm.drrs_debugfs_fd, > + buf, strlen(buf)), strlen(buf)); > +} > + > +static bool is_drrs_high(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_HIGH_RR"); > +} > + > +static bool is_drrs_low(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_LOW_RR"); > +} > + > +static bool is_drrs_supported(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS Supported: Yes"); > +} > + > +static bool is_drrs_inactive(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + > + if (strstr(buf, "No active crtc found")) > + return true; > + if (strstr(buf, "Idleness DRRS: Disabled")) > + return true; > + if (strstr(buf, "DRRS Supported : No")) > + return true; > + > + return false; > +} > + > +static void drrs_print_status(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + igt_info("DRRS STATUS :\n%s\n", buf); > +} > + > static struct timespec fbc_get_last_action(void) > { > struct timespec ret = { 0, 0 }; > @@ -935,10 +1004,17 @@ static bool psr_wait_until_enabled(void) > return igt_wait(psr_is_enabled(), 5000, 1); > } > > +static bool drrs_wait_until_rr_switch_to_low(void) > +{ > + return igt_wait(is_drrs_low(), 5000, 1); > +} > + > #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) > #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) > #define psr_enable() igt_set_module_param_int("enable_psr", 1) > #define psr_disable() igt_set_module_param_int("enable_psr", 0) > +#define drrs_enable() drrs_set(1) > +#define drrs_disable() drrs_set(0) > > static void get_sink_crc(sink_crc_t *crc, bool mandatory) > { > @@ -1184,6 +1260,7 @@ static void disable_features(const struct test_mode *t) > > fbc_disable(); > psr_disable(); > + drrs_disable(); > } > > static void *busy_thread_func(void *data) > @@ -1508,6 +1585,12 @@ static void teardown_crcs(void) > igt_pipe_crc_free(pipe_crc); > } > > +static void teardown_drrs(void) > +{ > + if (drm.drrs_debugfs_fd != -1) > + close(drm.drrs_debugfs_fd); > +} > + > static bool fbc_supported_on_chipset(void) > { > char buf[128]; > @@ -1577,6 +1660,29 @@ static void teardown_psr(void) > { > } > > +static void setup_drrs(void) > +{ > + if (get_connector(prim_mode_params.connector_id)->connector_type != > + DRM_MODE_CONNECTOR_eDP) { > + igt_info("Can't test DRRS: no usable eDP screen.\n"); > + return; > + } > + > + if (!is_drrs_supported()) { > + igt_info("Can't test DRRS: Not supported.\n"); > + return; > + } > + > + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); > + > + if (drm.drrs_debugfs_fd > 0) { > + drrs.can_test = true; > + } else { > + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); > + drrs.can_test = false; > + } > +} > + > static void setup_environment(void) > { > setup_drm(); > @@ -1584,6 +1690,7 @@ static void setup_environment(void) > > setup_fbc(); > setup_psr(); > + setup_drrs(); > > setup_crcs(); > } > @@ -1596,6 +1703,7 @@ static void teardown_environment(void) > teardown_psr(); > teardown_fbc(); > teardown_modeset(); > + teardown_drrs(); > teardown_drm(); > } > > @@ -1662,6 +1770,11 @@ static void do_flush(const struct test_mode *t) > #define ASSERT_PSR_ENABLED (1 << 6) > #define ASSERT_PSR_DISABLED (1 << 7) > > +#define DRRS_ASSERT_FLAGS (7 << 8) > +#define ASSERT_DRRS_HIGH (1 << 8) > +#define ASSERT_DRRS_LOW (1 << 9) > +#define ASSERT_DRRS_INACTIVE (1 << 10) > + > static int adjust_assertion_flags(const struct test_mode *t, int flags) > { > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > @@ -1669,12 +1782,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) > flags |= ASSERT_FBC_ENABLED; > if (!(flags & ASSERT_PSR_DISABLED)) > flags |= ASSERT_PSR_ENABLED; > + if (!((flags & ASSERT_DRRS_LOW) || > + (flags & ASSERT_DRRS_INACTIVE))) > + flags |= ASSERT_DRRS_HIGH; > } > > if ((t->feature & FEATURE_FBC) == 0) > flags &= ~FBC_ASSERT_FLAGS; > if ((t->feature & FEATURE_PSR) == 0) > flags &= ~PSR_ASSERT_FLAGS; > + if ((t->feature & FEATURE_DRRS) == 0) > + flags &= ~DRRS_ASSERT_FLAGS; > > return flags; > } > @@ -1706,6 +1824,23 @@ static void do_status_assertions(int flags) > return; > } > > + if (flags & ASSERT_DRRS_HIGH) { > + if (!is_drrs_high()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS HIGH\n"); > + } > + } else if (flags & ASSERT_DRRS_LOW) { > + if (!drrs_wait_until_rr_switch_to_low()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS LOW\n"); > + } > + } else if (flags & ASSERT_DRRS_INACTIVE) { > + if (!is_drrs_inactive()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS INACTIVE\n"); > + } > + } > + > if (flags & ASSERT_FBC_ENABLED) { > igt_require(!fbc_not_enough_stolen()); > igt_require(!fbc_stride_not_supported()); > @@ -1833,6 +1968,8 @@ static void enable_features_for_test(const struct test_mode *t) > fbc_enable(); > if (t->feature & FEATURE_PSR) > psr_enable(); > + if (t->feature & FEATURE_DRRS) > + drrs_enable(); > } > > static void check_test_requirements(const struct test_mode *t) > @@ -1852,6 +1989,20 @@ static void check_test_requirements(const struct test_mode *t) > "Can't test PSR without sink CRCs\n"); > } > > + if (t->feature & FEATURE_DRRS) > + igt_require_f(drrs.can_test, > + "Can't test DRRS with the current outputs\n"); > + > + /* > + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test > + * case needs DRRS + PSR enabled, that will be skipped. > + */ > + drrs.is_psr_drrs_combo = ((t->feature & FEATURE_PSR) && > + (t->feature & FEATURE_DRRS)); > + > + igt_require_f(!drrs.is_psr_drrs_combo, > + "Can't test PSR and DRRS together\n"); it seems you don't have to save that on global scruct for this local usage only. but also why not just /* * In kernel, When PSR is enabled, DRRS will be disabled. So If a test * case needs DRRS + PSR enabled, that will be skipped. */ igt_require_f(!((t->feature & FEATURE_PSR) && (t->feature & FEATURE_DRRS)), "Can't test PSR and DRRS together\n"); everything else lgtm... > + > if (opt.only_pipes != PIPE_COUNT) > igt_require(t->pipes == opt.only_pipes); > } > @@ -1973,7 +2124,7 @@ static void rte_subtest(const struct test_mode *t) > > unset_all_crtcs(); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > enable_prim_screen_and_wait(t); > set_cursor_for_test(t, &prim_mode_params); > @@ -2065,6 +2216,13 @@ static void draw_subtest(const struct test_mode *t) > if (op_disables_psr(t, t->method)) > assertions |= ASSERT_PSR_DISABLED; > > + /* > + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the > + * current frambuffer. Hence assert for DRRS_LOW. > + */ > + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) > + assertions |= ASSERT_DRRS_LOW; > + > prepare_subtest(t, pattern); > target = pick_target(t, params); > > @@ -2273,7 +2431,11 @@ static void slow_draw_subtest(const struct test_mode *t) > sleep(2); > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > - do_assertions(0); > + > + if (t->feature & FEATURE_DRRS) > + do_assertions(ASSERT_DRRS_LOW); > + else > + do_assertions(0); > } > } > > @@ -2882,17 +3044,17 @@ static void suspend_subtest(const struct test_mode *t) > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > - do_assertions(0); > + do_assertions(ASSERT_DRRS_LOW); > > unset_all_crtcs(); > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > set_mode_for_params(params); > - do_assertions(0); > + do_assertions(ASSERT_DRRS_HIGH); > } > > /** > @@ -3371,6 +3533,14 @@ static const char *feature_str(int feature) > return "psr"; > case FEATURE_FBC | FEATURE_PSR: > return "fbcpsr"; > + case FEATURE_DRRS: > + return "drrs"; > + case FEATURE_FBC | FEATURE_DRRS: > + return "fbcdrrs"; > + case FEATURE_PSR | FEATURE_DRRS: > + return "psrdrrs"; > + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: > + return "fbcpsrdrrs"; > default: > igt_assert(false); > } > @@ -3635,7 +3805,7 @@ int main(int argc, char *argv[]) > tilingchange_subtest(&t); > } > > - if (t.feature & FEATURE_PSR) > + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) > igt_subtest_f("%s-slowdraw", feature_str(t.feature)) > slow_draw_subtest(&t); > > -- > 1.9.1 > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v10] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-02 20:34 ` Rodrigo Vivi @ 2018-01-03 16:02 ` Bs, Lohith 0 siblings, 0 replies; 59+ messages in thread From: Bs, Lohith @ 2018-01-03 16:02 UTC (permalink / raw) To: Rodrigo Vivi Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx, marius.c.vlad, ankit.k.nautiyal [-- Attachment #1.1: Type: text/plain, Size: 14052 bytes --] Hi Rodrigo, Thank you for your valuable comments, the same has been addressed and a new patch had been pushed with the changes. Request you to have a look at the new patch-set[v11] and provide your comments if any. On 1/3/2018 2:04 AM, Rodrigo Vivi wrote: > On Mon, Jan 01, 2018 at 01:45:32PM +0000, Lohith BS wrote: >> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's >> refresh rate to the lowest vrefresh supported by panel, when frame is >> not flipped for more than a Sec. >> >> In kernel, DRRS uses the front buffer tracking infrastructure. >> Hence DRRS test coverage is added along with other frontbuffer tracking >> based features such as FBC and PSR tests. >> >> Here, we are testing DRRS with other features in all possible >> combinations, in all required test cases, to capture any possible >> regression. >> >> v2: Addressed the comments and suggestions from Vlad, Marius. >> The signoff details from the earlier work are also included. >> >> v3: Modified vblank rate calculation by using reply-sequence, >> provided by drmWaitVBlank, as suggested by Chris Wilson. >> >> v4: As suggested from Chris Wilson and Daniel Vetter >> 1) Avoided using pthread for calculating vblank refresh rate, >> instead used drmWaitVBlank reply sequence. >> 2) Avoided using kernel-specific info like transitional delays, >> instead polling mechanism with timeout is used. >> 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, >> instead of having a separate test. >> >> v5: This patch adds DRRS as a new feature in the >> kms_frontbuffer_tracking IGT. >> DRRS switch to lower vrefresh rate is tested at slow-draw subtest. >> >> Note: >> 1) Currently kernel doesn't have support to enable and disable >> the DRRS feature dynamically(as in case of PSR). Hence if the >> panel supports DRRS it will be enabled by default. >> >> This is in continuation of last patch >> "https://patchwork.freedesktop.org/patch/162726/" >> >> v6: This patch adds runtime enable and disable feature for testing DRRS >> >> v7: This patch adds runtime enable and disable feature for testing DRRS >> through debugfs entry "i915_drrs_ctl". >> >> v8: Commit message is updated to reflect current implementation. >> >> v9: Addressed Paulo Zanoni comments. >> Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. >> >> v10: Corrected DRRS state expectation in suspend related subtests. >> >> Signed-off-by: Lohith BS <lohith.bs@intel.com> >> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> >> --- >> tests/kms_frontbuffer_tracking.c | 188 +++++++++++++++++++++++++++++++++++++-- >> 1 file changed, 179 insertions(+), 9 deletions(-) >> >> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c >> index 1601cab..1039c9e 100644 >> --- a/tests/kms_frontbuffer_tracking.c >> +++ b/tests/kms_frontbuffer_tracking.c >> @@ -34,7 +34,7 @@ >> >> >> IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " >> - "its related features: FBC and PSR"); >> + "its related features: FBC, PSR and DRRS"); >> >> /* >> * One of the aspects of this test is that, for every subtest, we try different >> @@ -105,8 +105,9 @@ struct test_mode { >> FEATURE_NONE = 0, >> FEATURE_FBC = 1, >> FEATURE_PSR = 2, >> - FEATURE_COUNT = 4, >> - FEATURE_DEFAULT = 4, >> + FEATURE_DRRS = 4, >> + FEATURE_COUNT = 8, >> + FEATURE_DEFAULT = 8, >> } feature; >> >> /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and >> @@ -156,6 +157,7 @@ struct rect { >> struct { >> int fd; >> int debugfs; >> + int drrs_debugfs_fd; >> drmModeResPtr res; >> drmModeConnectorPtr connectors[MAX_CONNECTORS]; >> drmModeEncoderPtr encoders[MAX_ENCODERS]; >> @@ -182,6 +184,15 @@ struct { >> .can_test = false, >> }; >> >> +#define MAX_DRRS_STATUS_BUF_LEN 256 >> + >> +struct { >> + bool can_test; >> + bool is_psr_drrs_combo; > Why do you need this is_psr_drrs_combo at all? > >> +} drrs = { >> + .can_test = false, >> + .is_psr_drrs_combo = false, >> +}; >> >> #define SINK_CRC_SIZE 12 >> typedef struct { >> @@ -825,6 +836,64 @@ static void psr_print_status(void) >> igt_info("PSR status:\n%s\n", buf); >> } >> >> +void drrs_set(unsigned int val) >> +{ >> + char buf[2]; >> + >> + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); >> + snprintf(buf, sizeof(buf), "%d", val); >> + igt_assert_eq(write(drm.drrs_debugfs_fd, >> + buf, strlen(buf)), strlen(buf)); >> +} >> + >> +static bool is_drrs_high(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_HIGH_RR"); >> +} >> + >> +static bool is_drrs_low(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_LOW_RR"); >> +} >> + >> +static bool is_drrs_supported(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS Supported: Yes"); >> +} >> + >> +static bool is_drrs_inactive(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + >> + if (strstr(buf, "No active crtc found")) >> + return true; >> + if (strstr(buf, "Idleness DRRS: Disabled")) >> + return true; >> + if (strstr(buf, "DRRS Supported : No")) >> + return true; >> + >> + return false; >> +} >> + >> +static void drrs_print_status(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + igt_info("DRRS STATUS :\n%s\n", buf); >> +} >> + >> static struct timespec fbc_get_last_action(void) >> { >> struct timespec ret = { 0, 0 }; >> @@ -935,10 +1004,17 @@ static bool psr_wait_until_enabled(void) >> return igt_wait(psr_is_enabled(), 5000, 1); >> } >> >> +static bool drrs_wait_until_rr_switch_to_low(void) >> +{ >> + return igt_wait(is_drrs_low(), 5000, 1); >> +} >> + >> #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) >> #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) >> #define psr_enable() igt_set_module_param_int("enable_psr", 1) >> #define psr_disable() igt_set_module_param_int("enable_psr", 0) >> +#define drrs_enable() drrs_set(1) >> +#define drrs_disable() drrs_set(0) >> >> static void get_sink_crc(sink_crc_t *crc, bool mandatory) >> { >> @@ -1184,6 +1260,7 @@ static void disable_features(const struct test_mode *t) >> >> fbc_disable(); >> psr_disable(); >> + drrs_disable(); >> } >> >> static void *busy_thread_func(void *data) >> @@ -1508,6 +1585,12 @@ static void teardown_crcs(void) >> igt_pipe_crc_free(pipe_crc); >> } >> >> +static void teardown_drrs(void) >> +{ >> + if (drm.drrs_debugfs_fd != -1) >> + close(drm.drrs_debugfs_fd); >> +} >> + >> static bool fbc_supported_on_chipset(void) >> { >> char buf[128]; >> @@ -1577,6 +1660,29 @@ static void teardown_psr(void) >> { >> } >> >> +static void setup_drrs(void) >> +{ >> + if (get_connector(prim_mode_params.connector_id)->connector_type != >> + DRM_MODE_CONNECTOR_eDP) { >> + igt_info("Can't test DRRS: no usable eDP screen.\n"); >> + return; >> + } >> + >> + if (!is_drrs_supported()) { >> + igt_info("Can't test DRRS: Not supported.\n"); >> + return; >> + } >> + >> + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); >> + >> + if (drm.drrs_debugfs_fd > 0) { >> + drrs.can_test = true; >> + } else { >> + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); >> + drrs.can_test = false; >> + } >> +} >> + >> static void setup_environment(void) >> { >> setup_drm(); >> @@ -1584,6 +1690,7 @@ static void setup_environment(void) >> >> setup_fbc(); >> setup_psr(); >> + setup_drrs(); >> >> setup_crcs(); >> } >> @@ -1596,6 +1703,7 @@ static void teardown_environment(void) >> teardown_psr(); >> teardown_fbc(); >> teardown_modeset(); >> + teardown_drrs(); >> teardown_drm(); >> } >> >> @@ -1662,6 +1770,11 @@ static void do_flush(const struct test_mode *t) >> #define ASSERT_PSR_ENABLED (1 << 6) >> #define ASSERT_PSR_DISABLED (1 << 7) >> >> +#define DRRS_ASSERT_FLAGS (7 << 8) >> +#define ASSERT_DRRS_HIGH (1 << 8) >> +#define ASSERT_DRRS_LOW (1 << 9) >> +#define ASSERT_DRRS_INACTIVE (1 << 10) >> + >> static int adjust_assertion_flags(const struct test_mode *t, int flags) >> { >> if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { >> @@ -1669,12 +1782,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) >> flags |= ASSERT_FBC_ENABLED; >> if (!(flags & ASSERT_PSR_DISABLED)) >> flags |= ASSERT_PSR_ENABLED; >> + if (!((flags & ASSERT_DRRS_LOW) || >> + (flags & ASSERT_DRRS_INACTIVE))) >> + flags |= ASSERT_DRRS_HIGH; >> } >> >> if ((t->feature & FEATURE_FBC) == 0) >> flags &= ~FBC_ASSERT_FLAGS; >> if ((t->feature & FEATURE_PSR) == 0) >> flags &= ~PSR_ASSERT_FLAGS; >> + if ((t->feature & FEATURE_DRRS) == 0) >> + flags &= ~DRRS_ASSERT_FLAGS; >> >> return flags; >> } >> @@ -1706,6 +1824,23 @@ static void do_status_assertions(int flags) >> return; >> } >> >> + if (flags & ASSERT_DRRS_HIGH) { >> + if (!is_drrs_high()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS HIGH\n"); >> + } >> + } else if (flags & ASSERT_DRRS_LOW) { >> + if (!drrs_wait_until_rr_switch_to_low()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS LOW\n"); >> + } >> + } else if (flags & ASSERT_DRRS_INACTIVE) { >> + if (!is_drrs_inactive()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS INACTIVE\n"); >> + } >> + } >> + >> if (flags & ASSERT_FBC_ENABLED) { >> igt_require(!fbc_not_enough_stolen()); >> igt_require(!fbc_stride_not_supported()); >> @@ -1833,6 +1968,8 @@ static void enable_features_for_test(const struct test_mode *t) >> fbc_enable(); >> if (t->feature & FEATURE_PSR) >> psr_enable(); >> + if (t->feature & FEATURE_DRRS) >> + drrs_enable(); >> } >> >> static void check_test_requirements(const struct test_mode *t) >> @@ -1852,6 +1989,20 @@ static void check_test_requirements(const struct test_mode *t) >> "Can't test PSR without sink CRCs\n"); >> } >> >> + if (t->feature & FEATURE_DRRS) >> + igt_require_f(drrs.can_test, >> + "Can't test DRRS with the current outputs\n"); >> + >> + /* >> + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test >> + * case needs DRRS + PSR enabled, that will be skipped. >> + */ >> + drrs.is_psr_drrs_combo = ((t->feature & FEATURE_PSR) && >> + (t->feature & FEATURE_DRRS)); >> + >> + igt_require_f(!drrs.is_psr_drrs_combo, >> + "Can't test PSR and DRRS together\n"); > it seems you don't have to save that on global scruct for this local > usage only. > > but also why not just > > /* > * In kernel, When PSR is enabled, DRRS will be disabled. So If a test > * case needs DRRS + PSR enabled, that will be skipped. > */ > igt_require_f(!((t->feature & FEATURE_PSR) && > (t->feature & FEATURE_DRRS)), > "Can't test PSR and DRRS together\n"); > > > everything else lgtm... > >> + >> if (opt.only_pipes != PIPE_COUNT) >> igt_require(t->pipes == opt.only_pipes); >> } >> @@ -1973,7 +2124,7 @@ static void rte_subtest(const struct test_mode *t) >> >> unset_all_crtcs(); >> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> - DONT_ASSERT_CRC); >> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >> >> enable_prim_screen_and_wait(t); >> set_cursor_for_test(t, &prim_mode_params); >> @@ -2065,6 +2216,13 @@ static void draw_subtest(const struct test_mode *t) >> if (op_disables_psr(t, t->method)) >> assertions |= ASSERT_PSR_DISABLED; >> >> + /* >> + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the >> + * current frambuffer. Hence assert for DRRS_LOW. >> + */ >> + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) >> + assertions |= ASSERT_DRRS_LOW; >> + >> prepare_subtest(t, pattern); >> target = pick_target(t, params); >> >> @@ -2273,7 +2431,11 @@ static void slow_draw_subtest(const struct test_mode *t) >> sleep(2); >> >> update_wanted_crc(t, &pattern->crcs[t->format][r]); >> - do_assertions(0); >> + >> + if (t->feature & FEATURE_DRRS) >> + do_assertions(ASSERT_DRRS_LOW); >> + else >> + do_assertions(0); >> } >> } >> >> @@ -2882,17 +3044,17 @@ static void suspend_subtest(const struct test_mode *t) >> sleep(5); >> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); >> sleep(5); >> - do_assertions(0); >> + do_assertions(ASSERT_DRRS_LOW); >> >> unset_all_crtcs(); >> sleep(5); >> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); >> sleep(5); >> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> - DONT_ASSERT_CRC); >> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >> >> set_mode_for_params(params); >> - do_assertions(0); >> + do_assertions(ASSERT_DRRS_HIGH); >> } >> >> /** >> @@ -3371,6 +3533,14 @@ static const char *feature_str(int feature) >> return "psr"; >> case FEATURE_FBC | FEATURE_PSR: >> return "fbcpsr"; >> + case FEATURE_DRRS: >> + return "drrs"; >> + case FEATURE_FBC | FEATURE_DRRS: >> + return "fbcdrrs"; >> + case FEATURE_PSR | FEATURE_DRRS: >> + return "psrdrrs"; >> + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: >> + return "fbcpsrdrrs"; >> default: >> igt_assert(false); >> } >> @@ -3635,7 +3805,7 @@ int main(int argc, char *argv[]) >> tilingchange_subtest(&t); >> } >> >> - if (t.feature & FEATURE_PSR) >> + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) >> igt_subtest_f("%s-slowdraw", feature_str(t.feature)) >> slow_draw_subtest(&t); >> >> -- >> 1.9.1 >> [-- Attachment #1.2: Type: text/html, Size: 48864 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] 59+ messages in thread
* [PATCH i-g-t v11] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-01 13:45 ` [PATCH i-g-t v10] " Lohith BS 2018-01-02 20:34 ` Rodrigo Vivi @ 2018-01-03 15:02 ` Lohith BS 2018-01-03 19:21 ` Rodrigo Vivi 2018-01-05 11:40 ` [PATCH i-g-t v12] " Lohith BS 1 sibling, 2 replies; 59+ messages in thread From: Lohith BS @ 2018-01-03 15:02 UTC (permalink / raw) To: intel-gfx, paulo.r.zanoni, rodrigo.vivi, jani.saarinen, daniel.vetter, chris, jari.tahvanainen Cc: ankit.k.nautiyal Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's refresh rate to the lowest vrefresh supported by panel, when frame is not flipped for more than a Sec. In kernel, DRRS uses the front buffer tracking infrastructure. Hence DRRS test coverage is added along with other frontbuffer tracking based features such as FBC and PSR tests. Here, we are testing DRRS with other features in all possible combinations, in all required test cases, to capture any possible regression. v2: Addressed the comments and suggestions from Vlad, Marius. The signoff details from the earlier work are also included. v3: Modified vblank rate calculation by using reply-sequence, provided by drmWaitVBlank, as suggested by Chris Wilson. v4: As suggested from Chris Wilson and Daniel Vetter 1) Avoided using pthread for calculating vblank refresh rate, instead used drmWaitVBlank reply sequence. 2) Avoided using kernel-specific info like transitional delays, instead polling mechanism with timeout is used. 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, instead of having a separate test. v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. DRRS switch to lower vrefresh rate is tested at slow-draw subtest. Note: 1) Currently kernel doesn't have support to enable and disable the DRRS feature dynamically(as in case of PSR). Hence if the panel supports DRRS it will be enabled by default. This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" v6: This patch adds runtime enable and disable feature for testing DRRS v7: This patch adds runtime enable and disable feature for testing DRRS through debugfs entry "i915_drrs_ctl". v8: Commit message is updated to reflect current implementation. v9: Addressed Paulo Zanoni comments. Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. v10: Corrected DRRS state expectation in suspend related subtests. v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. Signed-off-by: Lohith BS <lohith.bs@intel.com> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> --- tests/kms_frontbuffer_tracking.c | 184 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 175 insertions(+), 9 deletions(-) diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c index 1601cab..7876a12 100644 --- a/tests/kms_frontbuffer_tracking.c +++ b/tests/kms_frontbuffer_tracking.c @@ -34,7 +34,7 @@ IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " - "its related features: FBC and PSR"); + "its related features: FBC, PSR and DRRS"); /* * One of the aspects of this test is that, for every subtest, we try different @@ -105,8 +105,9 @@ struct test_mode { FEATURE_NONE = 0, FEATURE_FBC = 1, FEATURE_PSR = 2, - FEATURE_COUNT = 4, - FEATURE_DEFAULT = 4, + FEATURE_DRRS = 4, + FEATURE_COUNT = 8, + FEATURE_DEFAULT = 8, } feature; /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and @@ -156,6 +157,7 @@ struct rect { struct { int fd; int debugfs; + int drrs_debugfs_fd; drmModeResPtr res; drmModeConnectorPtr connectors[MAX_CONNECTORS]; drmModeEncoderPtr encoders[MAX_ENCODERS]; @@ -182,6 +184,13 @@ struct { .can_test = false, }; +#define MAX_DRRS_STATUS_BUF_LEN 256 + +struct { + bool can_test; +} drrs = { + .can_test = false, +}; #define SINK_CRC_SIZE 12 typedef struct { @@ -825,6 +834,64 @@ static void psr_print_status(void) igt_info("PSR status:\n%s\n", buf); } +void drrs_set(unsigned int val) +{ + char buf[2]; + + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); + snprintf(buf, sizeof(buf), "%d", val); + igt_assert_eq(write(drm.drrs_debugfs_fd, + buf, strlen(buf)), strlen(buf)); +} + +static bool is_drrs_high(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_HIGH_RR"); +} + +static bool is_drrs_low(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_LOW_RR"); +} + +static bool is_drrs_supported(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS Supported: Yes"); +} + +static bool is_drrs_inactive(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + + if (strstr(buf, "No active crtc found")) + return true; + if (strstr(buf, "Idleness DRRS: Disabled")) + return true; + if (strstr(buf, "DRRS Supported : No")) + return true; + + return false; +} + +static void drrs_print_status(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + igt_info("DRRS STATUS :\n%s\n", buf); +} + static struct timespec fbc_get_last_action(void) { struct timespec ret = { 0, 0 }; @@ -935,10 +1002,17 @@ static bool psr_wait_until_enabled(void) return igt_wait(psr_is_enabled(), 5000, 1); } +static bool drrs_wait_until_rr_switch_to_low(void) +{ + return igt_wait(is_drrs_low(), 5000, 1); +} + #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) #define psr_enable() igt_set_module_param_int("enable_psr", 1) #define psr_disable() igt_set_module_param_int("enable_psr", 0) +#define drrs_enable() drrs_set(1) +#define drrs_disable() drrs_set(0) static void get_sink_crc(sink_crc_t *crc, bool mandatory) { @@ -1184,6 +1258,7 @@ static void disable_features(const struct test_mode *t) fbc_disable(); psr_disable(); + drrs_disable(); } static void *busy_thread_func(void *data) @@ -1508,6 +1583,12 @@ static void teardown_crcs(void) igt_pipe_crc_free(pipe_crc); } +static void teardown_drrs(void) +{ + if (drm.drrs_debugfs_fd != -1) + close(drm.drrs_debugfs_fd); +} + static bool fbc_supported_on_chipset(void) { char buf[128]; @@ -1577,6 +1658,29 @@ static void teardown_psr(void) { } +static void setup_drrs(void) +{ + if (get_connector(prim_mode_params.connector_id)->connector_type != + DRM_MODE_CONNECTOR_eDP) { + igt_info("Can't test DRRS: no usable eDP screen.\n"); + return; + } + + if (!is_drrs_supported()) { + igt_info("Can't test DRRS: Not supported.\n"); + return; + } + + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); + + if (drm.drrs_debugfs_fd > 0) { + drrs.can_test = true; + } else { + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); + drrs.can_test = false; + } +} + static void setup_environment(void) { setup_drm(); @@ -1584,6 +1688,7 @@ static void setup_environment(void) setup_fbc(); setup_psr(); + setup_drrs(); setup_crcs(); } @@ -1596,6 +1701,7 @@ static void teardown_environment(void) teardown_psr(); teardown_fbc(); teardown_modeset(); + teardown_drrs(); teardown_drm(); } @@ -1662,6 +1768,11 @@ static void do_flush(const struct test_mode *t) #define ASSERT_PSR_ENABLED (1 << 6) #define ASSERT_PSR_DISABLED (1 << 7) +#define DRRS_ASSERT_FLAGS (7 << 8) +#define ASSERT_DRRS_HIGH (1 << 8) +#define ASSERT_DRRS_LOW (1 << 9) +#define ASSERT_DRRS_INACTIVE (1 << 10) + static int adjust_assertion_flags(const struct test_mode *t, int flags) { if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { @@ -1669,12 +1780,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) flags |= ASSERT_FBC_ENABLED; if (!(flags & ASSERT_PSR_DISABLED)) flags |= ASSERT_PSR_ENABLED; + if (!((flags & ASSERT_DRRS_LOW) || + (flags & ASSERT_DRRS_INACTIVE))) + flags |= ASSERT_DRRS_HIGH; } if ((t->feature & FEATURE_FBC) == 0) flags &= ~FBC_ASSERT_FLAGS; if ((t->feature & FEATURE_PSR) == 0) flags &= ~PSR_ASSERT_FLAGS; + if ((t->feature & FEATURE_DRRS) == 0) + flags &= ~DRRS_ASSERT_FLAGS; return flags; } @@ -1706,6 +1822,23 @@ static void do_status_assertions(int flags) return; } + if (flags & ASSERT_DRRS_HIGH) { + if (!is_drrs_high()) { + drrs_print_status(); + igt_assert_f(false, "DRRS HIGH\n"); + } + } else if (flags & ASSERT_DRRS_LOW) { + if (!drrs_wait_until_rr_switch_to_low()) { + drrs_print_status(); + igt_assert_f(false, "DRRS LOW\n"); + } + } else if (flags & ASSERT_DRRS_INACTIVE) { + if (!is_drrs_inactive()) { + drrs_print_status(); + igt_assert_f(false, "DRRS INACTIVE\n"); + } + } + if (flags & ASSERT_FBC_ENABLED) { igt_require(!fbc_not_enough_stolen()); igt_require(!fbc_stride_not_supported()); @@ -1833,6 +1966,8 @@ static void enable_features_for_test(const struct test_mode *t) fbc_enable(); if (t->feature & FEATURE_PSR) psr_enable(); + if (t->feature & FEATURE_DRRS) + drrs_enable(); } static void check_test_requirements(const struct test_mode *t) @@ -1852,6 +1987,18 @@ static void check_test_requirements(const struct test_mode *t) "Can't test PSR without sink CRCs\n"); } + if (t->feature & FEATURE_DRRS) + igt_require_f(drrs.can_test, + "Can't test DRRS with the current outputs\n"); + + /* + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test + * case needs DRRS + PSR enabled, that will be skipped. + */ + igt_require_f(!((t->feature & FEATURE_PSR) && + (t->feature & FEATURE_DRRS)), + "Can't test PSR and DRRS together\n"); + if (opt.only_pipes != PIPE_COUNT) igt_require(t->pipes == opt.only_pipes); } @@ -1973,7 +2120,7 @@ static void rte_subtest(const struct test_mode *t) unset_all_crtcs(); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); enable_prim_screen_and_wait(t); set_cursor_for_test(t, &prim_mode_params); @@ -2065,6 +2212,13 @@ static void draw_subtest(const struct test_mode *t) if (op_disables_psr(t, t->method)) assertions |= ASSERT_PSR_DISABLED; + /* + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the + * current frambuffer. Hence assert for DRRS_LOW. + */ + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) + assertions |= ASSERT_DRRS_LOW; + prepare_subtest(t, pattern); target = pick_target(t, params); @@ -2273,7 +2427,11 @@ static void slow_draw_subtest(const struct test_mode *t) sleep(2); update_wanted_crc(t, &pattern->crcs[t->format][r]); - do_assertions(0); + + if (t->feature & FEATURE_DRRS) + do_assertions(ASSERT_DRRS_LOW); + else + do_assertions(0); } } @@ -2882,17 +3040,17 @@ static void suspend_subtest(const struct test_mode *t) sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); - do_assertions(0); + do_assertions(ASSERT_DRRS_LOW); unset_all_crtcs(); sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); set_mode_for_params(params); - do_assertions(0); + do_assertions(ASSERT_DRRS_HIGH); } /** @@ -3371,6 +3529,14 @@ static const char *feature_str(int feature) return "psr"; case FEATURE_FBC | FEATURE_PSR: return "fbcpsr"; + case FEATURE_DRRS: + return "drrs"; + case FEATURE_FBC | FEATURE_DRRS: + return "fbcdrrs"; + case FEATURE_PSR | FEATURE_DRRS: + return "psrdrrs"; + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: + return "fbcpsrdrrs"; default: igt_assert(false); } @@ -3635,7 +3801,7 @@ int main(int argc, char *argv[]) tilingchange_subtest(&t); } - if (t.feature & FEATURE_PSR) + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) igt_subtest_f("%s-slowdraw", feature_str(t.feature)) slow_draw_subtest(&t); -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v11] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-03 15:02 ` [PATCH i-g-t v11] " Lohith BS @ 2018-01-03 19:21 ` Rodrigo Vivi 2018-01-03 22:14 ` Ramalingam C 2018-01-05 11:40 ` [PATCH i-g-t v12] " Lohith BS 1 sibling, 1 reply; 59+ messages in thread From: Rodrigo Vivi @ 2018-01-03 19:21 UTC (permalink / raw) To: Lohith BS Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx, ankit.k.nautiyal On Wed, Jan 03, 2018 at 03:02:07PM +0000, Lohith BS wrote: > Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's > refresh rate to the lowest vrefresh supported by panel, when frame is > not flipped for more than a Sec. > > In kernel, DRRS uses the front buffer tracking infrastructure. > Hence DRRS test coverage is added along with other frontbuffer tracking > based features such as FBC and PSR tests. > > Here, we are testing DRRS with other features in all possible > combinations, in all required test cases, to capture any possible > regression. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, > provided by drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the > kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable > the DRRS feature dynamically(as in case of PSR). Hence if the > panel supports DRRS it will be enabled by default. > > This is in continuation of last patch > "https://patchwork.freedesktop.org/patch/162726/" > > v6: This patch adds runtime enable and disable feature for testing DRRS > > v7: This patch adds runtime enable and disable feature for testing DRRS > through debugfs entry "i915_drrs_ctl". > > v8: Commit message is updated to reflect current implementation. > > v9: Addressed Paulo Zanoni comments. > Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. > > v10: Corrected DRRS state expectation in suspend related subtests. > > v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > --- > tests/kms_frontbuffer_tracking.c | 184 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 175 insertions(+), 9 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > index 1601cab..7876a12 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC, PSR and DRRS"); > > /* > * One of the aspects of this test is that, for every subtest, we try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 8, > + FEATURE_DEFAULT = 8, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > @@ -156,6 +157,7 @@ struct rect { > struct { > int fd; > int debugfs; > + int drrs_debugfs_fd; > drmModeResPtr res; > drmModeConnectorPtr connectors[MAX_CONNECTORS]; > drmModeEncoderPtr encoders[MAX_ENCODERS]; > @@ -182,6 +184,13 @@ struct { > .can_test = false, > }; > > +#define MAX_DRRS_STATUS_BUF_LEN 256 > + > +struct { > + bool can_test; > +} drrs = { > + .can_test = false, > +}; > > #define SINK_CRC_SIZE 12 > typedef struct { > @@ -825,6 +834,64 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +void drrs_set(unsigned int val) > +{ > + char buf[2]; > + > + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); > + snprintf(buf, sizeof(buf), "%d", val); > + igt_assert_eq(write(drm.drrs_debugfs_fd, > + buf, strlen(buf)), strlen(buf)); > +} > + > +static bool is_drrs_high(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_HIGH_RR"); > +} > + > +static bool is_drrs_low(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_LOW_RR"); > +} > + > +static bool is_drrs_supported(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS Supported: Yes"); > +} > + > +static bool is_drrs_inactive(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + > + if (strstr(buf, "No active crtc found")) > + return true; > + if (strstr(buf, "Idleness DRRS: Disabled")) > + return true; > + if (strstr(buf, "DRRS Supported : No")) sorry for not asking on the previous email, but since drrs status print this for other connected outputs I believe this will cause a false positive in the case you have CRTC 1: DP-1: VBT: DRRS_type: None DRRS Supported : No CRTC 2: eDP-1: VBT: DRRS_type: whatever DRRS Supported : Yes won't it? > + return true; > + > + return false; > +} > + > +static void drrs_print_status(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + igt_info("DRRS STATUS :\n%s\n", buf); > +} > + > static struct timespec fbc_get_last_action(void) > { > struct timespec ret = { 0, 0 }; > @@ -935,10 +1002,17 @@ static bool psr_wait_until_enabled(void) > return igt_wait(psr_is_enabled(), 5000, 1); > } > > +static bool drrs_wait_until_rr_switch_to_low(void) > +{ > + return igt_wait(is_drrs_low(), 5000, 1); > +} > + > #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) > #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) > #define psr_enable() igt_set_module_param_int("enable_psr", 1) > #define psr_disable() igt_set_module_param_int("enable_psr", 0) > +#define drrs_enable() drrs_set(1) > +#define drrs_disable() drrs_set(0) > > static void get_sink_crc(sink_crc_t *crc, bool mandatory) > { > @@ -1184,6 +1258,7 @@ static void disable_features(const struct test_mode *t) > > fbc_disable(); > psr_disable(); > + drrs_disable(); > } > > static void *busy_thread_func(void *data) > @@ -1508,6 +1583,12 @@ static void teardown_crcs(void) > igt_pipe_crc_free(pipe_crc); > } > > +static void teardown_drrs(void) > +{ > + if (drm.drrs_debugfs_fd != -1) > + close(drm.drrs_debugfs_fd); > +} > + > static bool fbc_supported_on_chipset(void) > { > char buf[128]; > @@ -1577,6 +1658,29 @@ static void teardown_psr(void) > { > } > > +static void setup_drrs(void) > +{ > + if (get_connector(prim_mode_params.connector_id)->connector_type != > + DRM_MODE_CONNECTOR_eDP) { > + igt_info("Can't test DRRS: no usable eDP screen.\n"); > + return; > + } > + > + if (!is_drrs_supported()) { > + igt_info("Can't test DRRS: Not supported.\n"); > + return; > + } > + > + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); > + > + if (drm.drrs_debugfs_fd > 0) { > + drrs.can_test = true; > + } else { > + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); > + drrs.can_test = false; > + } > +} > + > static void setup_environment(void) > { > setup_drm(); > @@ -1584,6 +1688,7 @@ static void setup_environment(void) > > setup_fbc(); > setup_psr(); > + setup_drrs(); > > setup_crcs(); > } > @@ -1596,6 +1701,7 @@ static void teardown_environment(void) > teardown_psr(); > teardown_fbc(); > teardown_modeset(); > + teardown_drrs(); > teardown_drm(); > } > > @@ -1662,6 +1768,11 @@ static void do_flush(const struct test_mode *t) > #define ASSERT_PSR_ENABLED (1 << 6) > #define ASSERT_PSR_DISABLED (1 << 7) > > +#define DRRS_ASSERT_FLAGS (7 << 8) > +#define ASSERT_DRRS_HIGH (1 << 8) > +#define ASSERT_DRRS_LOW (1 << 9) > +#define ASSERT_DRRS_INACTIVE (1 << 10) > + > static int adjust_assertion_flags(const struct test_mode *t, int flags) > { > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > @@ -1669,12 +1780,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) > flags |= ASSERT_FBC_ENABLED; > if (!(flags & ASSERT_PSR_DISABLED)) > flags |= ASSERT_PSR_ENABLED; > + if (!((flags & ASSERT_DRRS_LOW) || > + (flags & ASSERT_DRRS_INACTIVE))) > + flags |= ASSERT_DRRS_HIGH; > } > > if ((t->feature & FEATURE_FBC) == 0) > flags &= ~FBC_ASSERT_FLAGS; > if ((t->feature & FEATURE_PSR) == 0) > flags &= ~PSR_ASSERT_FLAGS; > + if ((t->feature & FEATURE_DRRS) == 0) > + flags &= ~DRRS_ASSERT_FLAGS; > > return flags; > } > @@ -1706,6 +1822,23 @@ static void do_status_assertions(int flags) > return; > } > > + if (flags & ASSERT_DRRS_HIGH) { > + if (!is_drrs_high()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS HIGH\n"); > + } > + } else if (flags & ASSERT_DRRS_LOW) { > + if (!drrs_wait_until_rr_switch_to_low()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS LOW\n"); > + } > + } else if (flags & ASSERT_DRRS_INACTIVE) { > + if (!is_drrs_inactive()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS INACTIVE\n"); > + } > + } > + > if (flags & ASSERT_FBC_ENABLED) { > igt_require(!fbc_not_enough_stolen()); > igt_require(!fbc_stride_not_supported()); > @@ -1833,6 +1966,8 @@ static void enable_features_for_test(const struct test_mode *t) > fbc_enable(); > if (t->feature & FEATURE_PSR) > psr_enable(); > + if (t->feature & FEATURE_DRRS) > + drrs_enable(); > } > > static void check_test_requirements(const struct test_mode *t) > @@ -1852,6 +1987,18 @@ static void check_test_requirements(const struct test_mode *t) > "Can't test PSR without sink CRCs\n"); > } > > + if (t->feature & FEATURE_DRRS) > + igt_require_f(drrs.can_test, > + "Can't test DRRS with the current outputs\n"); > + > + /* > + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test > + * case needs DRRS + PSR enabled, that will be skipped. > + */ > + igt_require_f(!((t->feature & FEATURE_PSR) && > + (t->feature & FEATURE_DRRS)), > + "Can't test PSR and DRRS together\n"); > + > if (opt.only_pipes != PIPE_COUNT) > igt_require(t->pipes == opt.only_pipes); > } > @@ -1973,7 +2120,7 @@ static void rte_subtest(const struct test_mode *t) > > unset_all_crtcs(); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > enable_prim_screen_and_wait(t); > set_cursor_for_test(t, &prim_mode_params); > @@ -2065,6 +2212,13 @@ static void draw_subtest(const struct test_mode *t) > if (op_disables_psr(t, t->method)) > assertions |= ASSERT_PSR_DISABLED; > > + /* > + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the > + * current frambuffer. Hence assert for DRRS_LOW. > + */ > + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) > + assertions |= ASSERT_DRRS_LOW; > + > prepare_subtest(t, pattern); > target = pick_target(t, params); > > @@ -2273,7 +2427,11 @@ static void slow_draw_subtest(const struct test_mode *t) > sleep(2); > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > - do_assertions(0); > + > + if (t->feature & FEATURE_DRRS) > + do_assertions(ASSERT_DRRS_LOW); > + else > + do_assertions(0); > } > } > > @@ -2882,17 +3040,17 @@ static void suspend_subtest(const struct test_mode *t) > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > - do_assertions(0); > + do_assertions(ASSERT_DRRS_LOW); > > unset_all_crtcs(); > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > set_mode_for_params(params); > - do_assertions(0); > + do_assertions(ASSERT_DRRS_HIGH); I don't understand why we had this do_assertions(0) here, but how sure you are that this is high and previous is low? > } > > /** > @@ -3371,6 +3529,14 @@ static const char *feature_str(int feature) > return "psr"; > case FEATURE_FBC | FEATURE_PSR: > return "fbcpsr"; > + case FEATURE_DRRS: > + return "drrs"; > + case FEATURE_FBC | FEATURE_DRRS: > + return "fbcdrrs"; > + case FEATURE_PSR | FEATURE_DRRS: > + return "psrdrrs"; > + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: > + return "fbcpsrdrrs"; > default: > igt_assert(false); > } > @@ -3635,7 +3801,7 @@ int main(int argc, char *argv[]) > tilingchange_subtest(&t); > } > > - if (t.feature & FEATURE_PSR) > + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) > igt_subtest_f("%s-slowdraw", feature_str(t.feature)) > slow_draw_subtest(&t); > > -- > 1.9.1 > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v11] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-03 19:21 ` Rodrigo Vivi @ 2018-01-03 22:14 ` Ramalingam C 0 siblings, 0 replies; 59+ messages in thread From: Ramalingam C @ 2018-01-03 22:14 UTC (permalink / raw) To: Rodrigo Vivi, Lohith BS Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx, ankit.k.nautiyal On Thursday 04 January 2018 12:51 AM, Rodrigo Vivi wrote: > On Wed, Jan 03, 2018 at 03:02:07PM +0000, Lohith BS wrote: >> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's >> refresh rate to the lowest vrefresh supported by panel, when frame is >> not flipped for more than a Sec. >> >> In kernel, DRRS uses the front buffer tracking infrastructure. >> Hence DRRS test coverage is added along with other frontbuffer tracking >> based features such as FBC and PSR tests. >> >> Here, we are testing DRRS with other features in all possible >> combinations, in all required test cases, to capture any possible >> regression. >> >> v2: Addressed the comments and suggestions from Vlad, Marius. >> The signoff details from the earlier work are also included. >> >> v3: Modified vblank rate calculation by using reply-sequence, >> provided by drmWaitVBlank, as suggested by Chris Wilson. >> >> v4: As suggested from Chris Wilson and Daniel Vetter >> 1) Avoided using pthread for calculating vblank refresh rate, >> instead used drmWaitVBlank reply sequence. >> 2) Avoided using kernel-specific info like transitional delays, >> instead polling mechanism with timeout is used. >> 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, >> instead of having a separate test. >> >> v5: This patch adds DRRS as a new feature in the >> kms_frontbuffer_tracking IGT. >> DRRS switch to lower vrefresh rate is tested at slow-draw subtest. >> >> Note: >> 1) Currently kernel doesn't have support to enable and disable >> the DRRS feature dynamically(as in case of PSR). Hence if the >> panel supports DRRS it will be enabled by default. >> >> This is in continuation of last patch >> "https://patchwork.freedesktop.org/patch/162726/" >> >> v6: This patch adds runtime enable and disable feature for testing DRRS >> >> v7: This patch adds runtime enable and disable feature for testing DRRS >> through debugfs entry "i915_drrs_ctl". >> >> v8: Commit message is updated to reflect current implementation. >> >> v9: Addressed Paulo Zanoni comments. >> Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. >> >> v10: Corrected DRRS state expectation in suspend related subtests. >> >> v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. >> >> Signed-off-by: Lohith BS <lohith.bs@intel.com> >> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> >> --- >> tests/kms_frontbuffer_tracking.c | 184 +++++++++++++++++++++++++++++++++++++-- >> 1 file changed, 175 insertions(+), 9 deletions(-) >> >> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c >> index 1601cab..7876a12 100644 >> --- a/tests/kms_frontbuffer_tracking.c >> +++ b/tests/kms_frontbuffer_tracking.c >> @@ -34,7 +34,7 @@ >> >> >> IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " >> - "its related features: FBC and PSR"); >> + "its related features: FBC, PSR and DRRS"); >> >> /* >> * One of the aspects of this test is that, for every subtest, we try different >> @@ -105,8 +105,9 @@ struct test_mode { >> FEATURE_NONE = 0, >> FEATURE_FBC = 1, >> FEATURE_PSR = 2, >> - FEATURE_COUNT = 4, >> - FEATURE_DEFAULT = 4, >> + FEATURE_DRRS = 4, >> + FEATURE_COUNT = 8, >> + FEATURE_DEFAULT = 8, >> } feature; >> >> /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and >> @@ -156,6 +157,7 @@ struct rect { >> struct { >> int fd; >> int debugfs; >> + int drrs_debugfs_fd; >> drmModeResPtr res; >> drmModeConnectorPtr connectors[MAX_CONNECTORS]; >> drmModeEncoderPtr encoders[MAX_ENCODERS]; >> @@ -182,6 +184,13 @@ struct { >> .can_test = false, >> }; >> >> +#define MAX_DRRS_STATUS_BUF_LEN 256 >> + >> +struct { >> + bool can_test; >> +} drrs = { >> + .can_test = false, >> +}; >> >> #define SINK_CRC_SIZE 12 >> typedef struct { >> @@ -825,6 +834,64 @@ static void psr_print_status(void) >> igt_info("PSR status:\n%s\n", buf); >> } >> >> +void drrs_set(unsigned int val) >> +{ >> + char buf[2]; >> + >> + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); >> + snprintf(buf, sizeof(buf), "%d", val); >> + igt_assert_eq(write(drm.drrs_debugfs_fd, >> + buf, strlen(buf)), strlen(buf)); >> +} >> + >> +static bool is_drrs_high(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_HIGH_RR"); >> +} >> + >> +static bool is_drrs_low(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_LOW_RR"); >> +} >> + >> +static bool is_drrs_supported(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS Supported: Yes"); >> +} >> + >> +static bool is_drrs_inactive(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + >> + if (strstr(buf, "No active crtc found")) >> + return true; >> + if (strstr(buf, "Idleness DRRS: Disabled")) >> + return true; >> + if (strstr(buf, "DRRS Supported : No")) > sorry for not asking on the previous email, but since drrs status > print this for other connected outputs I believe this will cause a > false positive in the case you have > > CRTC 1: DP-1: > VBT: DRRS_type: None > > DRRS Supported : No > > CRTC 2: eDP-1: > VBT: DRRS_type: whatever > > DRRS Supported : Yes > > > won't it? Thats a good catch. We should not be deciding inactiveness based on DRRS_Supported state. as that will be populated for all active crtcs with yes and nos. our tests didn't catch as they were having single edp display. so how about alternatively detecting the drrs_inactive state by negating the active state of the DRRS. DRRS active state is possible only on one crtc which has eDP connector. so func should look like static bool is_drrs_inactive(void) { char buf[MAX_DRRS_STATUS_BUF_LEN]; debugfs_read("i915_drrs_status", buf); if (strstr(buf, "DRRS_State: ")) return false; return true; } >> + return true; >> + >> + return false; >> +} >> + >> +static void drrs_print_status(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + igt_info("DRRS STATUS :\n%s\n", buf); >> +} >> + >> static struct timespec fbc_get_last_action(void) >> { >> struct timespec ret = { 0, 0 }; >> @@ -935,10 +1002,17 @@ static bool psr_wait_until_enabled(void) >> return igt_wait(psr_is_enabled(), 5000, 1); >> } >> >> +static bool drrs_wait_until_rr_switch_to_low(void) >> +{ >> + return igt_wait(is_drrs_low(), 5000, 1); >> +} >> + >> #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) >> #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) >> #define psr_enable() igt_set_module_param_int("enable_psr", 1) >> #define psr_disable() igt_set_module_param_int("enable_psr", 0) >> +#define drrs_enable() drrs_set(1) >> +#define drrs_disable() drrs_set(0) >> >> static void get_sink_crc(sink_crc_t *crc, bool mandatory) >> { >> @@ -1184,6 +1258,7 @@ static void disable_features(const struct test_mode *t) >> >> fbc_disable(); >> psr_disable(); >> + drrs_disable(); >> } >> >> static void *busy_thread_func(void *data) >> @@ -1508,6 +1583,12 @@ static void teardown_crcs(void) >> igt_pipe_crc_free(pipe_crc); >> } >> >> +static void teardown_drrs(void) >> +{ >> + if (drm.drrs_debugfs_fd != -1) >> + close(drm.drrs_debugfs_fd); >> +} >> + >> static bool fbc_supported_on_chipset(void) >> { >> char buf[128]; >> @@ -1577,6 +1658,29 @@ static void teardown_psr(void) >> { >> } >> >> +static void setup_drrs(void) >> +{ >> + if (get_connector(prim_mode_params.connector_id)->connector_type != >> + DRM_MODE_CONNECTOR_eDP) { >> + igt_info("Can't test DRRS: no usable eDP screen.\n"); >> + return; >> + } >> + >> + if (!is_drrs_supported()) { >> + igt_info("Can't test DRRS: Not supported.\n"); >> + return; >> + } >> + >> + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); >> + >> + if (drm.drrs_debugfs_fd > 0) { >> + drrs.can_test = true; >> + } else { >> + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); >> + drrs.can_test = false; >> + } >> +} >> + >> static void setup_environment(void) >> { >> setup_drm(); >> @@ -1584,6 +1688,7 @@ static void setup_environment(void) >> >> setup_fbc(); >> setup_psr(); >> + setup_drrs(); >> >> setup_crcs(); >> } >> @@ -1596,6 +1701,7 @@ static void teardown_environment(void) >> teardown_psr(); >> teardown_fbc(); >> teardown_modeset(); >> + teardown_drrs(); >> teardown_drm(); >> } >> >> @@ -1662,6 +1768,11 @@ static void do_flush(const struct test_mode *t) >> #define ASSERT_PSR_ENABLED (1 << 6) >> #define ASSERT_PSR_DISABLED (1 << 7) >> >> +#define DRRS_ASSERT_FLAGS (7 << 8) >> +#define ASSERT_DRRS_HIGH (1 << 8) >> +#define ASSERT_DRRS_LOW (1 << 9) >> +#define ASSERT_DRRS_INACTIVE (1 << 10) >> + >> static int adjust_assertion_flags(const struct test_mode *t, int flags) >> { >> if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { >> @@ -1669,12 +1780,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) >> flags |= ASSERT_FBC_ENABLED; >> if (!(flags & ASSERT_PSR_DISABLED)) >> flags |= ASSERT_PSR_ENABLED; >> + if (!((flags & ASSERT_DRRS_LOW) || >> + (flags & ASSERT_DRRS_INACTIVE))) >> + flags |= ASSERT_DRRS_HIGH; >> } >> >> if ((t->feature & FEATURE_FBC) == 0) >> flags &= ~FBC_ASSERT_FLAGS; >> if ((t->feature & FEATURE_PSR) == 0) >> flags &= ~PSR_ASSERT_FLAGS; >> + if ((t->feature & FEATURE_DRRS) == 0) >> + flags &= ~DRRS_ASSERT_FLAGS; >> >> return flags; >> } >> @@ -1706,6 +1822,23 @@ static void do_status_assertions(int flags) >> return; >> } >> >> + if (flags & ASSERT_DRRS_HIGH) { >> + if (!is_drrs_high()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS HIGH\n"); >> + } >> + } else if (flags & ASSERT_DRRS_LOW) { >> + if (!drrs_wait_until_rr_switch_to_low()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS LOW\n"); >> + } >> + } else if (flags & ASSERT_DRRS_INACTIVE) { >> + if (!is_drrs_inactive()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS INACTIVE\n"); >> + } >> + } >> + >> if (flags & ASSERT_FBC_ENABLED) { >> igt_require(!fbc_not_enough_stolen()); >> igt_require(!fbc_stride_not_supported()); >> @@ -1833,6 +1966,8 @@ static void enable_features_for_test(const struct test_mode *t) >> fbc_enable(); >> if (t->feature & FEATURE_PSR) >> psr_enable(); >> + if (t->feature & FEATURE_DRRS) >> + drrs_enable(); >> } >> >> static void check_test_requirements(const struct test_mode *t) >> @@ -1852,6 +1987,18 @@ static void check_test_requirements(const struct test_mode *t) >> "Can't test PSR without sink CRCs\n"); >> } >> >> + if (t->feature & FEATURE_DRRS) >> + igt_require_f(drrs.can_test, >> + "Can't test DRRS with the current outputs\n"); >> + >> + /* >> + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test >> + * case needs DRRS + PSR enabled, that will be skipped. >> + */ >> + igt_require_f(!((t->feature & FEATURE_PSR) && >> + (t->feature & FEATURE_DRRS)), >> + "Can't test PSR and DRRS together\n"); >> + >> if (opt.only_pipes != PIPE_COUNT) >> igt_require(t->pipes == opt.only_pipes); >> } >> @@ -1973,7 +2120,7 @@ static void rte_subtest(const struct test_mode *t) >> >> unset_all_crtcs(); >> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> - DONT_ASSERT_CRC); >> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >> >> enable_prim_screen_and_wait(t); >> set_cursor_for_test(t, &prim_mode_params); >> @@ -2065,6 +2212,13 @@ static void draw_subtest(const struct test_mode *t) >> if (op_disables_psr(t, t->method)) >> assertions |= ASSERT_PSR_DISABLED; >> >> + /* >> + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the >> + * current frambuffer. Hence assert for DRRS_LOW. >> + */ >> + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) >> + assertions |= ASSERT_DRRS_LOW; >> + >> prepare_subtest(t, pattern); >> target = pick_target(t, params); >> >> @@ -2273,7 +2427,11 @@ static void slow_draw_subtest(const struct test_mode *t) >> sleep(2); >> >> update_wanted_crc(t, &pattern->crcs[t->format][r]); >> - do_assertions(0); >> + >> + if (t->feature & FEATURE_DRRS) >> + do_assertions(ASSERT_DRRS_LOW); >> + else >> + do_assertions(0); >> } >> } >> >> @@ -2882,17 +3040,17 @@ static void suspend_subtest(const struct test_mode *t) >> sleep(5); >> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); >> sleep(5); >> - do_assertions(0); >> + do_assertions(ASSERT_DRRS_LOW); >> >> unset_all_crtcs(); >> sleep(5); >> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); >> sleep(5); >> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> - DONT_ASSERT_CRC); >> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >> >> set_mode_for_params(params); >> - do_assertions(0); >> + do_assertions(ASSERT_DRRS_HIGH); > I don't understand why we had this do_assertions(0) here, > but how sure you are that this is high and previous is low? Actually passing 0 or ASSERT_DRRS_HIGH to do_assertion is same. if DRRS is enabled and assert flag doesn't have DRRS_LOW || DRRS_INACTIVE, adjust_assertion_flags() will set ASSERT_DRRS_HIGH in the flag. i.e If a feature is enabled but no assert flag is passed for that feature adjust_assertion_flags() sets the default state of the features as assert flag. so yes do_assertions(0) shouldn't be touched at its last occurrence. regarding high and low state expectation: at earlier stage we have the delay of 5Sec after resume with all crtcs on. so if DRRS is enabled, its state will be DRRS_LOW. In middle stage, since no active crtc, DRRS will be inactive. And in later stage after mode set there is not enough delay to enter into DRRS_LOW so DRRS_HIGH should be expected. Above DRRS state expectation theory is tested to be correct on GLK and other platforms. -Ram > >> } >> >> /** >> @@ -3371,6 +3529,14 @@ static const char *feature_str(int feature) >> return "psr"; >> case FEATURE_FBC | FEATURE_PSR: >> return "fbcpsr"; >> + case FEATURE_DRRS: >> + return "drrs"; >> + case FEATURE_FBC | FEATURE_DRRS: >> + return "fbcdrrs"; >> + case FEATURE_PSR | FEATURE_DRRS: >> + return "psrdrrs"; >> + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: >> + return "fbcpsrdrrs"; >> default: >> igt_assert(false); >> } >> @@ -3635,7 +3801,7 @@ int main(int argc, char *argv[]) >> tilingchange_subtest(&t); >> } >> >> - if (t.feature & FEATURE_PSR) >> + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) >> igt_subtest_f("%s-slowdraw", feature_str(t.feature)) >> slow_draw_subtest(&t); >> >> -- >> 1.9.1 >> _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* [PATCH i-g-t v12] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-03 15:02 ` [PATCH i-g-t v11] " Lohith BS 2018-01-03 19:21 ` Rodrigo Vivi @ 2018-01-05 11:40 ` Lohith BS 2018-01-05 17:55 ` Rodrigo Vivi 2018-01-10 14:47 ` [PATCH i-g-t v13] " Lohith BS 1 sibling, 2 replies; 59+ messages in thread From: Lohith BS @ 2018-01-05 11:40 UTC (permalink / raw) To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris, jari.tahvanainen Cc: ankit.k.nautiyal, paulo.r.zanoni Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's refresh rate to the lowest vrefresh supported by panel, when frame is not flipped for more than a Sec. In kernel, DRRS uses the front buffer tracking infrastructure. Hence DRRS test coverage is added along with other frontbuffer tracking based features such as FBC and PSR tests. Here, we are testing DRRS with other features in all possible combinations, in all required test cases, to capture any possible regression. v2: Addressed the comments and suggestions from Vlad, Marius. The signoff details from the earlier work are also included. v3: Modified vblank rate calculation by using reply-sequence, provided by drmWaitVBlank, as suggested by Chris Wilson. v4: As suggested from Chris Wilson and Daniel Vetter 1) Avoided using pthread for calculating vblank refresh rate, instead used drmWaitVBlank reply sequence. 2) Avoided using kernel-specific info like transitional delays, instead polling mechanism with timeout is used. 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, instead of having a separate test. v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. DRRS switch to lower vrefresh rate is tested at slow-draw subtest. Note: 1) Currently kernel doesn't have support to enable and disable the DRRS feature dynamically(as in case of PSR). Hence if the panel supports DRRS it will be enabled by default. This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" v6: This patch adds runtime enable and disable feature for testing DRRS v7: This patch adds runtime enable and disable feature for testing DRRS through debugfs entry "i915_drrs_ctl". v8: Commit message is updated to reflect current implementation. v9: Addressed Paulo Zanoni comments. Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. v10: Corrected DRRS state expectation in suspend related subtests. v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. v12: Rewriting the DRRS inactive deduction [Rodrigo]. Signed-off-by: Lohith BS <lohith.bs@intel.com> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> --- tests/kms_frontbuffer_tracking.c | 178 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 170 insertions(+), 8 deletions(-) diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c index 1601cab..4b87273 100644 --- a/tests/kms_frontbuffer_tracking.c +++ b/tests/kms_frontbuffer_tracking.c @@ -34,7 +34,7 @@ IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " - "its related features: FBC and PSR"); + "its related features: FBC, PSR and DRRS"); /* * One of the aspects of this test is that, for every subtest, we try different @@ -105,8 +105,9 @@ struct test_mode { FEATURE_NONE = 0, FEATURE_FBC = 1, FEATURE_PSR = 2, - FEATURE_COUNT = 4, - FEATURE_DEFAULT = 4, + FEATURE_DRRS = 4, + FEATURE_COUNT = 8, + FEATURE_DEFAULT = 8, } feature; /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and @@ -156,6 +157,7 @@ struct rect { struct { int fd; int debugfs; + int drrs_debugfs_fd; drmModeResPtr res; drmModeConnectorPtr connectors[MAX_CONNECTORS]; drmModeEncoderPtr encoders[MAX_ENCODERS]; @@ -182,6 +184,13 @@ struct { .can_test = false, }; +#define MAX_DRRS_STATUS_BUF_LEN 256 + +struct { + bool can_test; +} drrs = { + .can_test = false, +}; #define SINK_CRC_SIZE 12 typedef struct { @@ -825,6 +834,60 @@ static void psr_print_status(void) igt_info("PSR status:\n%s\n", buf); } +void drrs_set(unsigned int val) +{ + char buf[2]; + + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); + snprintf(buf, sizeof(buf), "%d", val); + igt_assert_eq(write(drm.drrs_debugfs_fd, + buf, strlen(buf)), strlen(buf)); +} + +static bool is_drrs_high(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_HIGH_RR"); +} + +static bool is_drrs_low(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_LOW_RR"); +} + +static bool is_drrs_supported(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS Supported: Yes"); +} + +static bool is_drrs_inactive(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + + if (strstr(buf, "DRRS_State: ")) + return false; + + return true; +} + +static void drrs_print_status(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + igt_info("DRRS STATUS :\n%s\n", buf); +} + static struct timespec fbc_get_last_action(void) { struct timespec ret = { 0, 0 }; @@ -935,10 +998,17 @@ static bool psr_wait_until_enabled(void) return igt_wait(psr_is_enabled(), 5000, 1); } +static bool drrs_wait_until_rr_switch_to_low(void) +{ + return igt_wait(is_drrs_low(), 5000, 1); +} + #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) #define psr_enable() igt_set_module_param_int("enable_psr", 1) #define psr_disable() igt_set_module_param_int("enable_psr", 0) +#define drrs_enable() drrs_set(1) +#define drrs_disable() drrs_set(0) static void get_sink_crc(sink_crc_t *crc, bool mandatory) { @@ -1184,6 +1254,7 @@ static void disable_features(const struct test_mode *t) fbc_disable(); psr_disable(); + drrs_disable(); } static void *busy_thread_func(void *data) @@ -1508,6 +1579,12 @@ static void teardown_crcs(void) igt_pipe_crc_free(pipe_crc); } +static void teardown_drrs(void) +{ + if (drm.drrs_debugfs_fd != -1) + close(drm.drrs_debugfs_fd); +} + static bool fbc_supported_on_chipset(void) { char buf[128]; @@ -1577,6 +1654,29 @@ static void teardown_psr(void) { } +static void setup_drrs(void) +{ + if (get_connector(prim_mode_params.connector_id)->connector_type != + DRM_MODE_CONNECTOR_eDP) { + igt_info("Can't test DRRS: no usable eDP screen.\n"); + return; + } + + if (!is_drrs_supported()) { + igt_info("Can't test DRRS: Not supported.\n"); + return; + } + + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); + + if (drm.drrs_debugfs_fd > 0) { + drrs.can_test = true; + } else { + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); + drrs.can_test = false; + } +} + static void setup_environment(void) { setup_drm(); @@ -1584,6 +1684,7 @@ static void setup_environment(void) setup_fbc(); setup_psr(); + setup_drrs(); setup_crcs(); } @@ -1596,6 +1697,7 @@ static void teardown_environment(void) teardown_psr(); teardown_fbc(); teardown_modeset(); + teardown_drrs(); teardown_drm(); } @@ -1662,6 +1764,11 @@ static void do_flush(const struct test_mode *t) #define ASSERT_PSR_ENABLED (1 << 6) #define ASSERT_PSR_DISABLED (1 << 7) +#define DRRS_ASSERT_FLAGS (7 << 8) +#define ASSERT_DRRS_HIGH (1 << 8) +#define ASSERT_DRRS_LOW (1 << 9) +#define ASSERT_DRRS_INACTIVE (1 << 10) + static int adjust_assertion_flags(const struct test_mode *t, int flags) { if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { @@ -1669,12 +1776,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) flags |= ASSERT_FBC_ENABLED; if (!(flags & ASSERT_PSR_DISABLED)) flags |= ASSERT_PSR_ENABLED; + if (!((flags & ASSERT_DRRS_LOW) || + (flags & ASSERT_DRRS_INACTIVE))) + flags |= ASSERT_DRRS_HIGH; } if ((t->feature & FEATURE_FBC) == 0) flags &= ~FBC_ASSERT_FLAGS; if ((t->feature & FEATURE_PSR) == 0) flags &= ~PSR_ASSERT_FLAGS; + if ((t->feature & FEATURE_DRRS) == 0) + flags &= ~DRRS_ASSERT_FLAGS; return flags; } @@ -1706,6 +1818,23 @@ static void do_status_assertions(int flags) return; } + if (flags & ASSERT_DRRS_HIGH) { + if (!is_drrs_high()) { + drrs_print_status(); + igt_assert_f(false, "DRRS HIGH\n"); + } + } else if (flags & ASSERT_DRRS_LOW) { + if (!drrs_wait_until_rr_switch_to_low()) { + drrs_print_status(); + igt_assert_f(false, "DRRS LOW\n"); + } + } else if (flags & ASSERT_DRRS_INACTIVE) { + if (!is_drrs_inactive()) { + drrs_print_status(); + igt_assert_f(false, "DRRS INACTIVE\n"); + } + } + if (flags & ASSERT_FBC_ENABLED) { igt_require(!fbc_not_enough_stolen()); igt_require(!fbc_stride_not_supported()); @@ -1833,6 +1962,8 @@ static void enable_features_for_test(const struct test_mode *t) fbc_enable(); if (t->feature & FEATURE_PSR) psr_enable(); + if (t->feature & FEATURE_DRRS) + drrs_enable(); } static void check_test_requirements(const struct test_mode *t) @@ -1852,6 +1983,18 @@ static void check_test_requirements(const struct test_mode *t) "Can't test PSR without sink CRCs\n"); } + if (t->feature & FEATURE_DRRS) + igt_require_f(drrs.can_test, + "Can't test DRRS with the current outputs\n"); + + /* + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test + * case needs DRRS + PSR enabled, that will be skipped. + */ + igt_require_f(!((t->feature & FEATURE_PSR) && + (t->feature & FEATURE_DRRS)), + "Can't test PSR and DRRS together\n"); + if (opt.only_pipes != PIPE_COUNT) igt_require(t->pipes == opt.only_pipes); } @@ -1973,7 +2116,7 @@ static void rte_subtest(const struct test_mode *t) unset_all_crtcs(); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); enable_prim_screen_and_wait(t); set_cursor_for_test(t, &prim_mode_params); @@ -2065,6 +2208,13 @@ static void draw_subtest(const struct test_mode *t) if (op_disables_psr(t, t->method)) assertions |= ASSERT_PSR_DISABLED; + /* + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the + * current frambuffer. Hence assert for DRRS_LOW. + */ + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) + assertions |= ASSERT_DRRS_LOW; + prepare_subtest(t, pattern); target = pick_target(t, params); @@ -2273,7 +2423,11 @@ static void slow_draw_subtest(const struct test_mode *t) sleep(2); update_wanted_crc(t, &pattern->crcs[t->format][r]); - do_assertions(0); + + if (t->feature & FEATURE_DRRS) + do_assertions(ASSERT_DRRS_LOW); + else + do_assertions(0); } } @@ -2882,14 +3036,14 @@ static void suspend_subtest(const struct test_mode *t) sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); - do_assertions(0); + do_assertions(ASSERT_DRRS_LOW); unset_all_crtcs(); sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); set_mode_for_params(params); do_assertions(0); @@ -3371,6 +3525,14 @@ static const char *feature_str(int feature) return "psr"; case FEATURE_FBC | FEATURE_PSR: return "fbcpsr"; + case FEATURE_DRRS: + return "drrs"; + case FEATURE_FBC | FEATURE_DRRS: + return "fbcdrrs"; + case FEATURE_PSR | FEATURE_DRRS: + return "psrdrrs"; + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: + return "fbcpsrdrrs"; default: igt_assert(false); } @@ -3635,7 +3797,7 @@ int main(int argc, char *argv[]) tilingchange_subtest(&t); } - if (t.feature & FEATURE_PSR) + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) igt_subtest_f("%s-slowdraw", feature_str(t.feature)) slow_draw_subtest(&t); -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v12] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-05 11:40 ` [PATCH i-g-t v12] " Lohith BS @ 2018-01-05 17:55 ` Rodrigo Vivi 2018-01-06 10:48 ` Ramalingam C 2018-01-10 14:47 ` [PATCH i-g-t v13] " Lohith BS 1 sibling, 1 reply; 59+ messages in thread From: Rodrigo Vivi @ 2018-01-05 17:55 UTC (permalink / raw) To: Lohith BS Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx, ankit.k.nautiyal On Fri, Jan 05, 2018 at 11:40:29AM +0000, Lohith BS wrote: > Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's > refresh rate to the lowest vrefresh supported by panel, when frame is > not flipped for more than a Sec. > > In kernel, DRRS uses the front buffer tracking infrastructure. > Hence DRRS test coverage is added along with other frontbuffer tracking > based features such as FBC and PSR tests. > > Here, we are testing DRRS with other features in all possible > combinations, in all required test cases, to capture any possible > regression. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, > provided by drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the > kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable > the DRRS feature dynamically(as in case of PSR). Hence if the > panel supports DRRS it will be enabled by default. > > This is in continuation of last patch > "https://patchwork.freedesktop.org/patch/162726/" > > v6: This patch adds runtime enable and disable feature for testing DRRS > > v7: This patch adds runtime enable and disable feature for testing DRRS > through debugfs entry "i915_drrs_ctl". > > v8: Commit message is updated to reflect current implementation. > > v9: Addressed Paulo Zanoni comments. > Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. > > v10: Corrected DRRS state expectation in suspend related subtests. > > v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. > > v12: Rewriting the DRRS inactive deduction [Rodrigo]. > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> I was almost adding the rv-b here, but I will step back while CI is not fully happy with the patch: https://patchwork.freedesktop.org/series/32888/ regressed many sub-tests on snb and hsw... > --- > tests/kms_frontbuffer_tracking.c | 178 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 170 insertions(+), 8 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > index 1601cab..4b87273 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC, PSR and DRRS"); > > /* > * One of the aspects of this test is that, for every subtest, we try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 8, > + FEATURE_DEFAULT = 8, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > @@ -156,6 +157,7 @@ struct rect { > struct { > int fd; > int debugfs; > + int drrs_debugfs_fd; > drmModeResPtr res; > drmModeConnectorPtr connectors[MAX_CONNECTORS]; > drmModeEncoderPtr encoders[MAX_ENCODERS]; > @@ -182,6 +184,13 @@ struct { > .can_test = false, > }; > > +#define MAX_DRRS_STATUS_BUF_LEN 256 > + > +struct { > + bool can_test; > +} drrs = { > + .can_test = false, > +}; > > #define SINK_CRC_SIZE 12 > typedef struct { > @@ -825,6 +834,60 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +void drrs_set(unsigned int val) > +{ > + char buf[2]; > + > + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); > + snprintf(buf, sizeof(buf), "%d", val); > + igt_assert_eq(write(drm.drrs_debugfs_fd, > + buf, strlen(buf)), strlen(buf)); > +} > + > +static bool is_drrs_high(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_HIGH_RR"); > +} > + > +static bool is_drrs_low(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_LOW_RR"); > +} > + > +static bool is_drrs_supported(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS Supported: Yes"); > +} > + > +static bool is_drrs_inactive(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + > + if (strstr(buf, "DRRS_State: ")) > + return false; > + > + return true; > +} > + > +static void drrs_print_status(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + igt_info("DRRS STATUS :\n%s\n", buf); > +} > + > static struct timespec fbc_get_last_action(void) > { > struct timespec ret = { 0, 0 }; > @@ -935,10 +998,17 @@ static bool psr_wait_until_enabled(void) > return igt_wait(psr_is_enabled(), 5000, 1); > } > > +static bool drrs_wait_until_rr_switch_to_low(void) > +{ > + return igt_wait(is_drrs_low(), 5000, 1); > +} > + > #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) > #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) > #define psr_enable() igt_set_module_param_int("enable_psr", 1) > #define psr_disable() igt_set_module_param_int("enable_psr", 0) > +#define drrs_enable() drrs_set(1) > +#define drrs_disable() drrs_set(0) > > static void get_sink_crc(sink_crc_t *crc, bool mandatory) > { > @@ -1184,6 +1254,7 @@ static void disable_features(const struct test_mode *t) > > fbc_disable(); > psr_disable(); > + drrs_disable(); > } > > static void *busy_thread_func(void *data) > @@ -1508,6 +1579,12 @@ static void teardown_crcs(void) > igt_pipe_crc_free(pipe_crc); > } > > +static void teardown_drrs(void) > +{ > + if (drm.drrs_debugfs_fd != -1) > + close(drm.drrs_debugfs_fd); > +} > + > static bool fbc_supported_on_chipset(void) > { > char buf[128]; > @@ -1577,6 +1654,29 @@ static void teardown_psr(void) > { > } > > +static void setup_drrs(void) > +{ > + if (get_connector(prim_mode_params.connector_id)->connector_type != > + DRM_MODE_CONNECTOR_eDP) { > + igt_info("Can't test DRRS: no usable eDP screen.\n"); > + return; > + } > + > + if (!is_drrs_supported()) { > + igt_info("Can't test DRRS: Not supported.\n"); > + return; > + } > + > + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); > + > + if (drm.drrs_debugfs_fd > 0) { > + drrs.can_test = true; > + } else { > + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); > + drrs.can_test = false; > + } > +} > + > static void setup_environment(void) > { > setup_drm(); > @@ -1584,6 +1684,7 @@ static void setup_environment(void) > > setup_fbc(); > setup_psr(); > + setup_drrs(); > > setup_crcs(); > } > @@ -1596,6 +1697,7 @@ static void teardown_environment(void) > teardown_psr(); > teardown_fbc(); > teardown_modeset(); > + teardown_drrs(); > teardown_drm(); > } > > @@ -1662,6 +1764,11 @@ static void do_flush(const struct test_mode *t) > #define ASSERT_PSR_ENABLED (1 << 6) > #define ASSERT_PSR_DISABLED (1 << 7) > > +#define DRRS_ASSERT_FLAGS (7 << 8) > +#define ASSERT_DRRS_HIGH (1 << 8) > +#define ASSERT_DRRS_LOW (1 << 9) > +#define ASSERT_DRRS_INACTIVE (1 << 10) > + > static int adjust_assertion_flags(const struct test_mode *t, int flags) > { > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > @@ -1669,12 +1776,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) > flags |= ASSERT_FBC_ENABLED; > if (!(flags & ASSERT_PSR_DISABLED)) > flags |= ASSERT_PSR_ENABLED; > + if (!((flags & ASSERT_DRRS_LOW) || > + (flags & ASSERT_DRRS_INACTIVE))) > + flags |= ASSERT_DRRS_HIGH; > } > > if ((t->feature & FEATURE_FBC) == 0) > flags &= ~FBC_ASSERT_FLAGS; > if ((t->feature & FEATURE_PSR) == 0) > flags &= ~PSR_ASSERT_FLAGS; > + if ((t->feature & FEATURE_DRRS) == 0) > + flags &= ~DRRS_ASSERT_FLAGS; > > return flags; > } > @@ -1706,6 +1818,23 @@ static void do_status_assertions(int flags) > return; > } > > + if (flags & ASSERT_DRRS_HIGH) { > + if (!is_drrs_high()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS HIGH\n"); > + } > + } else if (flags & ASSERT_DRRS_LOW) { > + if (!drrs_wait_until_rr_switch_to_low()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS LOW\n"); > + } > + } else if (flags & ASSERT_DRRS_INACTIVE) { > + if (!is_drrs_inactive()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS INACTIVE\n"); > + } > + } > + > if (flags & ASSERT_FBC_ENABLED) { > igt_require(!fbc_not_enough_stolen()); > igt_require(!fbc_stride_not_supported()); > @@ -1833,6 +1962,8 @@ static void enable_features_for_test(const struct test_mode *t) > fbc_enable(); > if (t->feature & FEATURE_PSR) > psr_enable(); > + if (t->feature & FEATURE_DRRS) > + drrs_enable(); > } > > static void check_test_requirements(const struct test_mode *t) > @@ -1852,6 +1983,18 @@ static void check_test_requirements(const struct test_mode *t) > "Can't test PSR without sink CRCs\n"); > } > > + if (t->feature & FEATURE_DRRS) > + igt_require_f(drrs.can_test, > + "Can't test DRRS with the current outputs\n"); > + > + /* > + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test > + * case needs DRRS + PSR enabled, that will be skipped. > + */ > + igt_require_f(!((t->feature & FEATURE_PSR) && > + (t->feature & FEATURE_DRRS)), > + "Can't test PSR and DRRS together\n"); > + > if (opt.only_pipes != PIPE_COUNT) > igt_require(t->pipes == opt.only_pipes); > } > @@ -1973,7 +2116,7 @@ static void rte_subtest(const struct test_mode *t) > > unset_all_crtcs(); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > enable_prim_screen_and_wait(t); > set_cursor_for_test(t, &prim_mode_params); > @@ -2065,6 +2208,13 @@ static void draw_subtest(const struct test_mode *t) > if (op_disables_psr(t, t->method)) > assertions |= ASSERT_PSR_DISABLED; > > + /* > + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the > + * current frambuffer. Hence assert for DRRS_LOW. > + */ > + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) > + assertions |= ASSERT_DRRS_LOW; > + > prepare_subtest(t, pattern); > target = pick_target(t, params); > > @@ -2273,7 +2423,11 @@ static void slow_draw_subtest(const struct test_mode *t) > sleep(2); > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > - do_assertions(0); > + > + if (t->feature & FEATURE_DRRS) > + do_assertions(ASSERT_DRRS_LOW); > + else > + do_assertions(0); > } > } > > @@ -2882,14 +3036,14 @@ static void suspend_subtest(const struct test_mode *t) > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > - do_assertions(0); > + do_assertions(ASSERT_DRRS_LOW); > > unset_all_crtcs(); > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > set_mode_for_params(params); > do_assertions(0); > @@ -3371,6 +3525,14 @@ static const char *feature_str(int feature) > return "psr"; > case FEATURE_FBC | FEATURE_PSR: > return "fbcpsr"; > + case FEATURE_DRRS: > + return "drrs"; > + case FEATURE_FBC | FEATURE_DRRS: > + return "fbcdrrs"; > + case FEATURE_PSR | FEATURE_DRRS: > + return "psrdrrs"; > + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: > + return "fbcpsrdrrs"; > default: > igt_assert(false); > } > @@ -3635,7 +3797,7 @@ int main(int argc, char *argv[]) > tilingchange_subtest(&t); > } > > - if (t.feature & FEATURE_PSR) > + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) > igt_subtest_f("%s-slowdraw", feature_str(t.feature)) > slow_draw_subtest(&t); > > -- > 1.9.1 > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v12] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-05 17:55 ` Rodrigo Vivi @ 2018-01-06 10:48 ` Ramalingam C 2018-01-06 13:37 ` Ramalingam C 0 siblings, 1 reply; 59+ messages in thread From: Ramalingam C @ 2018-01-06 10:48 UTC (permalink / raw) To: Rodrigo Vivi, Lohith BS Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx, ankit.k.nautiyal On Friday 05 January 2018 11:25 PM, Rodrigo Vivi wrote: > On Fri, Jan 05, 2018 at 11:40:29AM +0000, Lohith BS wrote: >> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's >> refresh rate to the lowest vrefresh supported by panel, when frame is >> not flipped for more than a Sec. >> >> In kernel, DRRS uses the front buffer tracking infrastructure. >> Hence DRRS test coverage is added along with other frontbuffer tracking >> based features such as FBC and PSR tests. >> >> Here, we are testing DRRS with other features in all possible >> combinations, in all required test cases, to capture any possible >> regression. >> >> v2: Addressed the comments and suggestions from Vlad, Marius. >> The signoff details from the earlier work are also included. >> >> v3: Modified vblank rate calculation by using reply-sequence, >> provided by drmWaitVBlank, as suggested by Chris Wilson. >> >> v4: As suggested from Chris Wilson and Daniel Vetter >> 1) Avoided using pthread for calculating vblank refresh rate, >> instead used drmWaitVBlank reply sequence. >> 2) Avoided using kernel-specific info like transitional delays, >> instead polling mechanism with timeout is used. >> 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, >> instead of having a separate test. >> >> v5: This patch adds DRRS as a new feature in the >> kms_frontbuffer_tracking IGT. >> DRRS switch to lower vrefresh rate is tested at slow-draw subtest. >> >> Note: >> 1) Currently kernel doesn't have support to enable and disable >> the DRRS feature dynamically(as in case of PSR). Hence if the >> panel supports DRRS it will be enabled by default. >> >> This is in continuation of last patch >> "https://patchwork.freedesktop.org/patch/162726/" >> >> v6: This patch adds runtime enable and disable feature for testing DRRS >> >> v7: This patch adds runtime enable and disable feature for testing DRRS >> through debugfs entry "i915_drrs_ctl". >> >> v8: Commit message is updated to reflect current implementation. >> >> v9: Addressed Paulo Zanoni comments. >> Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. >> >> v10: Corrected DRRS state expectation in suspend related subtests. >> >> v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. >> >> v12: Rewriting the DRRS inactive deduction [Rodrigo]. >> >> Signed-off-by: Lohith BS <lohith.bs@intel.com> >> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > I was almost adding the rv-b here, but I will step back while CI is not > fully happy with the patch: > > https://patchwork.freedesktop.org/series/32888/ > > regressed many sub-tests on snb and hsw... Rodrigo, please share the logs for regressions. We will analyze it. Thanks -Ram > >> --- >> tests/kms_frontbuffer_tracking.c | 178 +++++++++++++++++++++++++++++++++++++-- >> 1 file changed, 170 insertions(+), 8 deletions(-) >> >> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c >> index 1601cab..4b87273 100644 >> --- a/tests/kms_frontbuffer_tracking.c >> +++ b/tests/kms_frontbuffer_tracking.c >> @@ -34,7 +34,7 @@ >> >> >> IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " >> - "its related features: FBC and PSR"); >> + "its related features: FBC, PSR and DRRS"); >> >> /* >> * One of the aspects of this test is that, for every subtest, we try different >> @@ -105,8 +105,9 @@ struct test_mode { >> FEATURE_NONE = 0, >> FEATURE_FBC = 1, >> FEATURE_PSR = 2, >> - FEATURE_COUNT = 4, >> - FEATURE_DEFAULT = 4, >> + FEATURE_DRRS = 4, >> + FEATURE_COUNT = 8, >> + FEATURE_DEFAULT = 8, >> } feature; >> >> /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and >> @@ -156,6 +157,7 @@ struct rect { >> struct { >> int fd; >> int debugfs; >> + int drrs_debugfs_fd; >> drmModeResPtr res; >> drmModeConnectorPtr connectors[MAX_CONNECTORS]; >> drmModeEncoderPtr encoders[MAX_ENCODERS]; >> @@ -182,6 +184,13 @@ struct { >> .can_test = false, >> }; >> >> +#define MAX_DRRS_STATUS_BUF_LEN 256 >> + >> +struct { >> + bool can_test; >> +} drrs = { >> + .can_test = false, >> +}; >> >> #define SINK_CRC_SIZE 12 >> typedef struct { >> @@ -825,6 +834,60 @@ static void psr_print_status(void) >> igt_info("PSR status:\n%s\n", buf); >> } >> >> +void drrs_set(unsigned int val) >> +{ >> + char buf[2]; >> + >> + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); >> + snprintf(buf, sizeof(buf), "%d", val); >> + igt_assert_eq(write(drm.drrs_debugfs_fd, >> + buf, strlen(buf)), strlen(buf)); >> +} >> + >> +static bool is_drrs_high(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_HIGH_RR"); >> +} >> + >> +static bool is_drrs_low(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_LOW_RR"); >> +} >> + >> +static bool is_drrs_supported(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS Supported: Yes"); >> +} >> + >> +static bool is_drrs_inactive(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + >> + if (strstr(buf, "DRRS_State: ")) >> + return false; >> + >> + return true; >> +} >> + >> +static void drrs_print_status(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + igt_info("DRRS STATUS :\n%s\n", buf); >> +} >> + >> static struct timespec fbc_get_last_action(void) >> { >> struct timespec ret = { 0, 0 }; >> @@ -935,10 +998,17 @@ static bool psr_wait_until_enabled(void) >> return igt_wait(psr_is_enabled(), 5000, 1); >> } >> >> +static bool drrs_wait_until_rr_switch_to_low(void) >> +{ >> + return igt_wait(is_drrs_low(), 5000, 1); >> +} >> + >> #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) >> #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) >> #define psr_enable() igt_set_module_param_int("enable_psr", 1) >> #define psr_disable() igt_set_module_param_int("enable_psr", 0) >> +#define drrs_enable() drrs_set(1) >> +#define drrs_disable() drrs_set(0) >> >> static void get_sink_crc(sink_crc_t *crc, bool mandatory) >> { >> @@ -1184,6 +1254,7 @@ static void disable_features(const struct test_mode *t) >> >> fbc_disable(); >> psr_disable(); >> + drrs_disable(); >> } >> >> static void *busy_thread_func(void *data) >> @@ -1508,6 +1579,12 @@ static void teardown_crcs(void) >> igt_pipe_crc_free(pipe_crc); >> } >> >> +static void teardown_drrs(void) >> +{ >> + if (drm.drrs_debugfs_fd != -1) >> + close(drm.drrs_debugfs_fd); >> +} >> + >> static bool fbc_supported_on_chipset(void) >> { >> char buf[128]; >> @@ -1577,6 +1654,29 @@ static void teardown_psr(void) >> { >> } >> >> +static void setup_drrs(void) >> +{ >> + if (get_connector(prim_mode_params.connector_id)->connector_type != >> + DRM_MODE_CONNECTOR_eDP) { >> + igt_info("Can't test DRRS: no usable eDP screen.\n"); >> + return; >> + } >> + >> + if (!is_drrs_supported()) { >> + igt_info("Can't test DRRS: Not supported.\n"); >> + return; >> + } >> + >> + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", O_WRONLY); >> + >> + if (drm.drrs_debugfs_fd > 0) { >> + drrs.can_test = true; >> + } else { >> + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not found.\n"); >> + drrs.can_test = false; >> + } >> +} >> + >> static void setup_environment(void) >> { >> setup_drm(); >> @@ -1584,6 +1684,7 @@ static void setup_environment(void) >> >> setup_fbc(); >> setup_psr(); >> + setup_drrs(); >> >> setup_crcs(); >> } >> @@ -1596,6 +1697,7 @@ static void teardown_environment(void) >> teardown_psr(); >> teardown_fbc(); >> teardown_modeset(); >> + teardown_drrs(); >> teardown_drm(); >> } >> >> @@ -1662,6 +1764,11 @@ static void do_flush(const struct test_mode *t) >> #define ASSERT_PSR_ENABLED (1 << 6) >> #define ASSERT_PSR_DISABLED (1 << 7) >> >> +#define DRRS_ASSERT_FLAGS (7 << 8) >> +#define ASSERT_DRRS_HIGH (1 << 8) >> +#define ASSERT_DRRS_LOW (1 << 9) >> +#define ASSERT_DRRS_INACTIVE (1 << 10) >> + >> static int adjust_assertion_flags(const struct test_mode *t, int flags) >> { >> if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { >> @@ -1669,12 +1776,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) >> flags |= ASSERT_FBC_ENABLED; >> if (!(flags & ASSERT_PSR_DISABLED)) >> flags |= ASSERT_PSR_ENABLED; >> + if (!((flags & ASSERT_DRRS_LOW) || >> + (flags & ASSERT_DRRS_INACTIVE))) >> + flags |= ASSERT_DRRS_HIGH; >> } >> >> if ((t->feature & FEATURE_FBC) == 0) >> flags &= ~FBC_ASSERT_FLAGS; >> if ((t->feature & FEATURE_PSR) == 0) >> flags &= ~PSR_ASSERT_FLAGS; >> + if ((t->feature & FEATURE_DRRS) == 0) >> + flags &= ~DRRS_ASSERT_FLAGS; >> >> return flags; >> } >> @@ -1706,6 +1818,23 @@ static void do_status_assertions(int flags) >> return; >> } >> >> + if (flags & ASSERT_DRRS_HIGH) { >> + if (!is_drrs_high()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS HIGH\n"); >> + } >> + } else if (flags & ASSERT_DRRS_LOW) { >> + if (!drrs_wait_until_rr_switch_to_low()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS LOW\n"); >> + } >> + } else if (flags & ASSERT_DRRS_INACTIVE) { >> + if (!is_drrs_inactive()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS INACTIVE\n"); >> + } >> + } >> + >> if (flags & ASSERT_FBC_ENABLED) { >> igt_require(!fbc_not_enough_stolen()); >> igt_require(!fbc_stride_not_supported()); >> @@ -1833,6 +1962,8 @@ static void enable_features_for_test(const struct test_mode *t) >> fbc_enable(); >> if (t->feature & FEATURE_PSR) >> psr_enable(); >> + if (t->feature & FEATURE_DRRS) >> + drrs_enable(); >> } >> >> static void check_test_requirements(const struct test_mode *t) >> @@ -1852,6 +1983,18 @@ static void check_test_requirements(const struct test_mode *t) >> "Can't test PSR without sink CRCs\n"); >> } >> >> + if (t->feature & FEATURE_DRRS) >> + igt_require_f(drrs.can_test, >> + "Can't test DRRS with the current outputs\n"); >> + >> + /* >> + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test >> + * case needs DRRS + PSR enabled, that will be skipped. >> + */ >> + igt_require_f(!((t->feature & FEATURE_PSR) && >> + (t->feature & FEATURE_DRRS)), >> + "Can't test PSR and DRRS together\n"); >> + >> if (opt.only_pipes != PIPE_COUNT) >> igt_require(t->pipes == opt.only_pipes); >> } >> @@ -1973,7 +2116,7 @@ static void rte_subtest(const struct test_mode *t) >> >> unset_all_crtcs(); >> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> - DONT_ASSERT_CRC); >> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >> >> enable_prim_screen_and_wait(t); >> set_cursor_for_test(t, &prim_mode_params); >> @@ -2065,6 +2208,13 @@ static void draw_subtest(const struct test_mode *t) >> if (op_disables_psr(t, t->method)) >> assertions |= ASSERT_PSR_DISABLED; >> >> + /* >> + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the >> + * current frambuffer. Hence assert for DRRS_LOW. >> + */ >> + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) >> + assertions |= ASSERT_DRRS_LOW; >> + >> prepare_subtest(t, pattern); >> target = pick_target(t, params); >> >> @@ -2273,7 +2423,11 @@ static void slow_draw_subtest(const struct test_mode *t) >> sleep(2); >> >> update_wanted_crc(t, &pattern->crcs[t->format][r]); >> - do_assertions(0); >> + >> + if (t->feature & FEATURE_DRRS) >> + do_assertions(ASSERT_DRRS_LOW); >> + else >> + do_assertions(0); >> } >> } >> >> @@ -2882,14 +3036,14 @@ static void suspend_subtest(const struct test_mode *t) >> sleep(5); >> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); >> sleep(5); >> - do_assertions(0); >> + do_assertions(ASSERT_DRRS_LOW); >> >> unset_all_crtcs(); >> sleep(5); >> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); >> sleep(5); >> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> - DONT_ASSERT_CRC); >> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >> >> set_mode_for_params(params); >> do_assertions(0); >> @@ -3371,6 +3525,14 @@ static const char *feature_str(int feature) >> return "psr"; >> case FEATURE_FBC | FEATURE_PSR: >> return "fbcpsr"; >> + case FEATURE_DRRS: >> + return "drrs"; >> + case FEATURE_FBC | FEATURE_DRRS: >> + return "fbcdrrs"; >> + case FEATURE_PSR | FEATURE_DRRS: >> + return "psrdrrs"; >> + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: >> + return "fbcpsrdrrs"; >> default: >> igt_assert(false); >> } >> @@ -3635,7 +3797,7 @@ int main(int argc, char *argv[]) >> tilingchange_subtest(&t); >> } >> >> - if (t.feature & FEATURE_PSR) >> + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) >> igt_subtest_f("%s-slowdraw", feature_str(t.feature)) >> slow_draw_subtest(&t); >> >> -- >> 1.9.1 >> _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v12] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-06 10:48 ` Ramalingam C @ 2018-01-06 13:37 ` Ramalingam C 0 siblings, 0 replies; 59+ messages in thread From: Ramalingam C @ 2018-01-06 13:37 UTC (permalink / raw) To: Rodrigo Vivi, Lohith BS Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx, ankit.k.nautiyal On Saturday 06 January 2018 04:18 PM, Ramalingam C wrote: > > > On Friday 05 January 2018 11:25 PM, Rodrigo Vivi wrote: >> On Fri, Jan 05, 2018 at 11:40:29AM +0000, Lohith BS wrote: >>> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's >>> refresh rate to the lowest vrefresh supported by panel, when frame is >>> not flipped for more than a Sec. >>> >>> In kernel, DRRS uses the front buffer tracking infrastructure. >>> Hence DRRS test coverage is added along with other frontbuffer tracking >>> based features such as FBC and PSR tests. >>> >>> Here, we are testing DRRS with other features in all possible >>> combinations, in all required test cases, to capture any possible >>> regression. >>> >>> v2: Addressed the comments and suggestions from Vlad, Marius. >>> The signoff details from the earlier work are also included. >>> >>> v3: Modified vblank rate calculation by using reply-sequence, >>> provided by drmWaitVBlank, as suggested by Chris Wilson. >>> >>> v4: As suggested from Chris Wilson and Daniel Vetter >>> 1) Avoided using pthread for calculating vblank refresh rate, >>> instead used drmWaitVBlank reply sequence. >>> 2) Avoided using kernel-specific info like transitional delays, >>> instead polling mechanism with timeout is used. >>> 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, >>> instead of having a separate test. >>> >>> v5: This patch adds DRRS as a new feature in the >>> kms_frontbuffer_tracking IGT. >>> DRRS switch to lower vrefresh rate is tested at slow-draw subtest. >>> >>> Note: >>> 1) Currently kernel doesn't have support to enable and disable >>> the DRRS feature dynamically(as in case of PSR). Hence if the >>> panel supports DRRS it will be enabled by default. >>> >>> This is in continuation of last patch >>> "https://patchwork.freedesktop.org/patch/162726/" >>> >>> v6: This patch adds runtime enable and disable feature for testing DRRS >>> >>> v7: This patch adds runtime enable and disable feature for testing DRRS >>> through debugfs entry "i915_drrs_ctl". >>> >>> v8: Commit message is updated to reflect current implementation. >>> >>> v9: Addressed Paulo Zanoni comments. >>> Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. >>> >>> v10: Corrected DRRS state expectation in suspend related subtests. >>> >>> v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. >>> >>> v12: Rewriting the DRRS inactive deduction [Rodrigo]. >>> >>> Signed-off-by: Lohith BS <lohith.bs@intel.com> >>> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> >> I was almost adding the rv-b here, but I will step back while CI is not >> fully happy with the patch: >> >> https://patchwork.freedesktop.org/series/32888/ >> >> regressed many sub-tests on snb and hsw... > Rodrigo, please share the logs for regressions. We will analyze it. Please ignore this. found in the already shared link. -Ram > > Thanks > -Ram >> >>> --- >>> tests/kms_frontbuffer_tracking.c | 178 >>> +++++++++++++++++++++++++++++++++++++-- >>> 1 file changed, 170 insertions(+), 8 deletions(-) >>> >>> diff --git a/tests/kms_frontbuffer_tracking.c >>> b/tests/kms_frontbuffer_tracking.c >>> index 1601cab..4b87273 100644 >>> --- a/tests/kms_frontbuffer_tracking.c >>> +++ b/tests/kms_frontbuffer_tracking.c >>> @@ -34,7 +34,7 @@ >>> IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking >>> mechanism and " >>> - "its related features: FBC and PSR"); >>> + "its related features: FBC, PSR and DRRS"); >>> /* >>> * One of the aspects of this test is that, for every subtest, we >>> try different >>> @@ -105,8 +105,9 @@ struct test_mode { >>> FEATURE_NONE = 0, >>> FEATURE_FBC = 1, >>> FEATURE_PSR = 2, >>> - FEATURE_COUNT = 4, >>> - FEATURE_DEFAULT = 4, >>> + FEATURE_DRRS = 4, >>> + FEATURE_COUNT = 8, >>> + FEATURE_DEFAULT = 8, >>> } feature; >>> /* Possible pixel formats. We just use FORMAT_DEFAULT for >>> most tests and >>> @@ -156,6 +157,7 @@ struct rect { >>> struct { >>> int fd; >>> int debugfs; >>> + int drrs_debugfs_fd; >>> drmModeResPtr res; >>> drmModeConnectorPtr connectors[MAX_CONNECTORS]; >>> drmModeEncoderPtr encoders[MAX_ENCODERS]; >>> @@ -182,6 +184,13 @@ struct { >>> .can_test = false, >>> }; >>> +#define MAX_DRRS_STATUS_BUF_LEN 256 >>> + >>> +struct { >>> + bool can_test; >>> +} drrs = { >>> + .can_test = false, >>> +}; >>> #define SINK_CRC_SIZE 12 >>> typedef struct { >>> @@ -825,6 +834,60 @@ static void psr_print_status(void) >>> igt_info("PSR status:\n%s\n", buf); >>> } >>> +void drrs_set(unsigned int val) >>> +{ >>> + char buf[2]; >>> + >>> + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", >>> val); >>> + snprintf(buf, sizeof(buf), "%d", val); >>> + igt_assert_eq(write(drm.drrs_debugfs_fd, >>> + buf, strlen(buf)), strlen(buf)); >>> +} >>> + >>> +static bool is_drrs_high(void) >>> +{ >>> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >>> + >>> + debugfs_read("i915_drrs_status", buf); >>> + return strstr(buf, "DRRS_HIGH_RR"); >>> +} >>> + >>> +static bool is_drrs_low(void) >>> +{ >>> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >>> + >>> + debugfs_read("i915_drrs_status", buf); >>> + return strstr(buf, "DRRS_LOW_RR"); >>> +} >>> + >>> +static bool is_drrs_supported(void) >>> +{ >>> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >>> + >>> + debugfs_read("i915_drrs_status", buf); >>> + return strstr(buf, "DRRS Supported: Yes"); >>> +} >>> + >>> +static bool is_drrs_inactive(void) >>> +{ >>> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >>> + >>> + debugfs_read("i915_drrs_status", buf); >>> + >>> + if (strstr(buf, "DRRS_State: ")) >>> + return false; >>> + >>> + return true; >>> +} >>> + >>> +static void drrs_print_status(void) >>> +{ >>> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >>> + >>> + debugfs_read("i915_drrs_status", buf); >>> + igt_info("DRRS STATUS :\n%s\n", buf); >>> +} >>> + >>> static struct timespec fbc_get_last_action(void) >>> { >>> struct timespec ret = { 0, 0 }; >>> @@ -935,10 +998,17 @@ static bool psr_wait_until_enabled(void) >>> return igt_wait(psr_is_enabled(), 5000, 1); >>> } >>> +static bool drrs_wait_until_rr_switch_to_low(void) >>> +{ >>> + return igt_wait(is_drrs_low(), 5000, 1); >>> +} >>> + >>> #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) >>> #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) >>> #define psr_enable() igt_set_module_param_int("enable_psr", 1) >>> #define psr_disable() igt_set_module_param_int("enable_psr", 0) >>> +#define drrs_enable() drrs_set(1) >>> +#define drrs_disable() drrs_set(0) >>> static void get_sink_crc(sink_crc_t *crc, bool mandatory) >>> { >>> @@ -1184,6 +1254,7 @@ static void disable_features(const struct >>> test_mode *t) >>> fbc_disable(); >>> psr_disable(); >>> + drrs_disable(); >>> } >>> static void *busy_thread_func(void *data) >>> @@ -1508,6 +1579,12 @@ static void teardown_crcs(void) >>> igt_pipe_crc_free(pipe_crc); >>> } >>> +static void teardown_drrs(void) >>> +{ >>> + if (drm.drrs_debugfs_fd != -1) >>> + close(drm.drrs_debugfs_fd); >>> +} >>> + >>> static bool fbc_supported_on_chipset(void) >>> { >>> char buf[128]; >>> @@ -1577,6 +1654,29 @@ static void teardown_psr(void) >>> { >>> } >>> +static void setup_drrs(void) >>> +{ >>> + if >>> (get_connector(prim_mode_params.connector_id)->connector_type != >>> + DRM_MODE_CONNECTOR_eDP) { >>> + igt_info("Can't test DRRS: no usable eDP screen.\n"); >>> + return; >>> + } >>> + >>> + if (!is_drrs_supported()) { >>> + igt_info("Can't test DRRS: Not supported.\n"); >>> + return; >>> + } >>> + >>> + drm.drrs_debugfs_fd = openat(drm.debugfs, "i915_drrs_ctl", >>> O_WRONLY); >>> + >>> + if (drm.drrs_debugfs_fd > 0) { >>> + drrs.can_test = true; >>> + } else { >>> + igt_info("Can't test DRRS: Debugfs entry i915_drrs_ctl not >>> found.\n"); >>> + drrs.can_test = false; >>> + } >>> +} >>> + >>> static void setup_environment(void) >>> { >>> setup_drm(); >>> @@ -1584,6 +1684,7 @@ static void setup_environment(void) >>> setup_fbc(); >>> setup_psr(); >>> + setup_drrs(); >>> setup_crcs(); >>> } >>> @@ -1596,6 +1697,7 @@ static void teardown_environment(void) >>> teardown_psr(); >>> teardown_fbc(); >>> teardown_modeset(); >>> + teardown_drrs(); >>> teardown_drm(); >>> } >>> @@ -1662,6 +1764,11 @@ static void do_flush(const struct test_mode >>> *t) >>> #define ASSERT_PSR_ENABLED (1 << 6) >>> #define ASSERT_PSR_DISABLED (1 << 7) >>> +#define DRRS_ASSERT_FLAGS (7 << 8) >>> +#define ASSERT_DRRS_HIGH (1 << 8) >>> +#define ASSERT_DRRS_LOW (1 << 9) >>> +#define ASSERT_DRRS_INACTIVE (1 << 10) >>> + >>> static int adjust_assertion_flags(const struct test_mode *t, int >>> flags) >>> { >>> if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { >>> @@ -1669,12 +1776,17 @@ static int adjust_assertion_flags(const >>> struct test_mode *t, int flags) >>> flags |= ASSERT_FBC_ENABLED; >>> if (!(flags & ASSERT_PSR_DISABLED)) >>> flags |= ASSERT_PSR_ENABLED; >>> + if (!((flags & ASSERT_DRRS_LOW) || >>> + (flags & ASSERT_DRRS_INACTIVE))) >>> + flags |= ASSERT_DRRS_HIGH; >>> } >>> if ((t->feature & FEATURE_FBC) == 0) >>> flags &= ~FBC_ASSERT_FLAGS; >>> if ((t->feature & FEATURE_PSR) == 0) >>> flags &= ~PSR_ASSERT_FLAGS; >>> + if ((t->feature & FEATURE_DRRS) == 0) >>> + flags &= ~DRRS_ASSERT_FLAGS; >>> return flags; >>> } >>> @@ -1706,6 +1818,23 @@ static void do_status_assertions(int flags) >>> return; >>> } >>> + if (flags & ASSERT_DRRS_HIGH) { >>> + if (!is_drrs_high()) { >>> + drrs_print_status(); >>> + igt_assert_f(false, "DRRS HIGH\n"); >>> + } >>> + } else if (flags & ASSERT_DRRS_LOW) { >>> + if (!drrs_wait_until_rr_switch_to_low()) { >>> + drrs_print_status(); >>> + igt_assert_f(false, "DRRS LOW\n"); >>> + } >>> + } else if (flags & ASSERT_DRRS_INACTIVE) { >>> + if (!is_drrs_inactive()) { >>> + drrs_print_status(); >>> + igt_assert_f(false, "DRRS INACTIVE\n"); >>> + } >>> + } >>> + >>> if (flags & ASSERT_FBC_ENABLED) { >>> igt_require(!fbc_not_enough_stolen()); >>> igt_require(!fbc_stride_not_supported()); >>> @@ -1833,6 +1962,8 @@ static void enable_features_for_test(const >>> struct test_mode *t) >>> fbc_enable(); >>> if (t->feature & FEATURE_PSR) >>> psr_enable(); >>> + if (t->feature & FEATURE_DRRS) >>> + drrs_enable(); >>> } >>> static void check_test_requirements(const struct test_mode *t) >>> @@ -1852,6 +1983,18 @@ static void check_test_requirements(const >>> struct test_mode *t) >>> "Can't test PSR without sink CRCs\n"); >>> } >>> + if (t->feature & FEATURE_DRRS) >>> + igt_require_f(drrs.can_test, >>> + "Can't test DRRS with the current outputs\n"); >>> + >>> + /* >>> + * In kernel, When PSR is enabled, DRRS will be disabled. So If >>> a test >>> + * case needs DRRS + PSR enabled, that will be skipped. >>> + */ >>> + igt_require_f(!((t->feature & FEATURE_PSR) && >>> + (t->feature & FEATURE_DRRS)), >>> + "Can't test PSR and DRRS together\n"); >>> + >>> if (opt.only_pipes != PIPE_COUNT) >>> igt_require(t->pipes == opt.only_pipes); >>> } >>> @@ -1973,7 +2116,7 @@ static void rte_subtest(const struct test_mode >>> *t) >>> unset_all_crtcs(); >>> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >>> - DONT_ASSERT_CRC); >>> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >>> enable_prim_screen_and_wait(t); >>> set_cursor_for_test(t, &prim_mode_params); >>> @@ -2065,6 +2208,13 @@ static void draw_subtest(const struct >>> test_mode *t) >>> if (op_disables_psr(t, t->method)) >>> assertions |= ASSERT_PSR_DISABLED; >>> + /* >>> + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the >>> + * current frambuffer. Hence assert for DRRS_LOW. >>> + */ >>> + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) >>> + assertions |= ASSERT_DRRS_LOW; >>> + >>> prepare_subtest(t, pattern); >>> target = pick_target(t, params); >>> @@ -2273,7 +2423,11 @@ static void slow_draw_subtest(const struct >>> test_mode *t) >>> sleep(2); >>> update_wanted_crc(t, &pattern->crcs[t->format][r]); >>> - do_assertions(0); >>> + >>> + if (t->feature & FEATURE_DRRS) >>> + do_assertions(ASSERT_DRRS_LOW); >>> + else >>> + do_assertions(0); >>> } >>> } >>> @@ -2882,14 +3036,14 @@ static void suspend_subtest(const struct >>> test_mode *t) >>> sleep(5); >>> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, >>> SUSPEND_TEST_NONE); >>> sleep(5); >>> - do_assertions(0); >>> + do_assertions(ASSERT_DRRS_LOW); >>> unset_all_crtcs(); >>> sleep(5); >>> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, >>> SUSPEND_TEST_NONE); >>> sleep(5); >>> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >>> - DONT_ASSERT_CRC); >>> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >>> set_mode_for_params(params); >>> do_assertions(0); >>> @@ -3371,6 +3525,14 @@ static const char *feature_str(int feature) >>> return "psr"; >>> case FEATURE_FBC | FEATURE_PSR: >>> return "fbcpsr"; >>> + case FEATURE_DRRS: >>> + return "drrs"; >>> + case FEATURE_FBC | FEATURE_DRRS: >>> + return "fbcdrrs"; >>> + case FEATURE_PSR | FEATURE_DRRS: >>> + return "psrdrrs"; >>> + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: >>> + return "fbcpsrdrrs"; >>> default: >>> igt_assert(false); >>> } >>> @@ -3635,7 +3797,7 @@ int main(int argc, char *argv[]) >>> tilingchange_subtest(&t); >>> } >>> - if (t.feature & FEATURE_PSR) >>> + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) >>> igt_subtest_f("%s-slowdraw", feature_str(t.feature)) >>> slow_draw_subtest(&t); >>> -- >>> 1.9.1 >>> > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-05 11:40 ` [PATCH i-g-t v12] " Lohith BS 2018-01-05 17:55 ` Rodrigo Vivi @ 2018-01-10 14:47 ` Lohith BS 2018-01-10 18:15 ` Rodrigo Vivi ` (2 more replies) 1 sibling, 3 replies; 59+ messages in thread From: Lohith BS @ 2018-01-10 14:47 UTC (permalink / raw) To: intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris, jari.tahvanainen Cc: ankit.k.nautiyal, paulo.r.zanoni Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's refresh rate to the lowest vrefresh supported by panel, when frame is not flipped for more than a Sec. In kernel, DRRS uses the front buffer tracking infrastructure. Hence DRRS test coverage is added along with other frontbuffer tracking based features such as FBC and PSR tests. Here, we are testing DRRS with other features in all possible combinations, in all required test cases, to capture any possible regression. v2: Addressed the comments and suggestions from Vlad, Marius. The signoff details from the earlier work are also included. v3: Modified vblank rate calculation by using reply-sequence, provided by drmWaitVBlank, as suggested by Chris Wilson. v4: As suggested from Chris Wilson and Daniel Vetter 1) Avoided using pthread for calculating vblank refresh rate, instead used drmWaitVBlank reply sequence. 2) Avoided using kernel-specific info like transitional delays, instead polling mechanism with timeout is used. 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, instead of having a separate test. v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. DRRS switch to lower vrefresh rate is tested at slow-draw subtest. Note: 1) Currently kernel doesn't have support to enable and disable the DRRS feature dynamically(as in case of PSR). Hence if the panel supports DRRS it will be enabled by default. This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" v6: This patch adds runtime enable and disable feature for testing DRRS v7: This patch adds runtime enable and disable feature for testing DRRS through debugfs entry "i915_drrs_ctl". v8: Commit message is updated to reflect current implementation. v9: Addressed Paulo Zanoni comments. Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. v10: Corrected DRRS state expectation in suspend related subtests. v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. v12: Rewriting the DRRS inactive deduction [Rodrigo]. v13: En/Dis-able DRRS only when DRRS is capable on the setup. Signed-off-by: Lohith BS <lohith.bs@intel.com> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> --- tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 164 insertions(+), 8 deletions(-) diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c index 1601cab..6b2299b 100644 --- a/tests/kms_frontbuffer_tracking.c +++ b/tests/kms_frontbuffer_tracking.c @@ -34,7 +34,7 @@ IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " - "its related features: FBC and PSR"); + "its related features: FBC, PSR and DRRS"); /* * One of the aspects of this test is that, for every subtest, we try different @@ -105,8 +105,9 @@ struct test_mode { FEATURE_NONE = 0, FEATURE_FBC = 1, FEATURE_PSR = 2, - FEATURE_COUNT = 4, - FEATURE_DEFAULT = 4, + FEATURE_DRRS = 4, + FEATURE_COUNT = 8, + FEATURE_DEFAULT = 8, } feature; /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and @@ -182,6 +183,13 @@ struct { .can_test = false, }; +#define MAX_DRRS_STATUS_BUF_LEN 256 + +struct { + bool can_test; +} drrs = { + .can_test = false, +}; #define SINK_CRC_SIZE 12 typedef struct { @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len) buf[len] = '\0'; } +static void __debugfs_write(const char *param, char *buf, int len) +{ + igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1), + len - 1); +} + #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr)) +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr)) static bool fbc_is_enabled(void) { @@ -825,6 +840,62 @@ static void psr_print_status(void) igt_info("PSR status:\n%s\n", buf); } +void drrs_set(unsigned int val) +{ + char buf[2]; + + if (!drrs.can_test) + return; + + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); + snprintf(buf, sizeof(buf), "%d", val); + debugfs_write("i915_drrs_ctl", buf); +} + +static bool is_drrs_high(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_HIGH_RR"); +} + +static bool is_drrs_low(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS_LOW_RR"); +} + +static bool is_drrs_supported(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + return strstr(buf, "DRRS Supported: Yes"); +} + +static bool is_drrs_inactive(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + + if (strstr(buf, "DRRS_State: ")) + return false; + + return true; +} + +static void drrs_print_status(void) +{ + char buf[MAX_DRRS_STATUS_BUF_LEN]; + + debugfs_read("i915_drrs_status", buf); + igt_info("DRRS STATUS :\n%s\n", buf); +} + static struct timespec fbc_get_last_action(void) { struct timespec ret = { 0, 0 }; @@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void) return igt_wait(psr_is_enabled(), 5000, 1); } +static bool drrs_wait_until_rr_switch_to_low(void) +{ + return igt_wait(is_drrs_low(), 5000, 1); +} + #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) #define psr_enable() igt_set_module_param_int("enable_psr", 1) #define psr_disable() igt_set_module_param_int("enable_psr", 0) +#define drrs_enable() drrs_set(1) +#define drrs_disable() drrs_set(0) static void get_sink_crc(sink_crc_t *crc, bool mandatory) { @@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t) fbc_disable(); psr_disable(); + drrs_disable(); } static void *busy_thread_func(void *data) @@ -1577,6 +1656,22 @@ static void teardown_psr(void) { } +static void setup_drrs(void) +{ + if (get_connector(prim_mode_params.connector_id)->connector_type != + DRM_MODE_CONNECTOR_eDP) { + igt_info("Can't test DRRS: no usable eDP screen.\n"); + return; + } + + if (!is_drrs_supported()) { + igt_info("Can't test DRRS: Not supported.\n"); + return; + } + + drrs.can_test = true; +} + static void setup_environment(void) { setup_drm(); @@ -1584,6 +1679,7 @@ static void setup_environment(void) setup_fbc(); setup_psr(); + setup_drrs(); setup_crcs(); } @@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t) #define ASSERT_PSR_ENABLED (1 << 6) #define ASSERT_PSR_DISABLED (1 << 7) +#define DRRS_ASSERT_FLAGS (7 << 8) +#define ASSERT_DRRS_HIGH (1 << 8) +#define ASSERT_DRRS_LOW (1 << 9) +#define ASSERT_DRRS_INACTIVE (1 << 10) + static int adjust_assertion_flags(const struct test_mode *t, int flags) { if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { @@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) flags |= ASSERT_FBC_ENABLED; if (!(flags & ASSERT_PSR_DISABLED)) flags |= ASSERT_PSR_ENABLED; + if (!((flags & ASSERT_DRRS_LOW) || + (flags & ASSERT_DRRS_INACTIVE))) + flags |= ASSERT_DRRS_HIGH; } if ((t->feature & FEATURE_FBC) == 0) flags &= ~FBC_ASSERT_FLAGS; if ((t->feature & FEATURE_PSR) == 0) flags &= ~PSR_ASSERT_FLAGS; + if ((t->feature & FEATURE_DRRS) == 0) + flags &= ~DRRS_ASSERT_FLAGS; return flags; } @@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags) return; } + if (flags & ASSERT_DRRS_HIGH) { + if (!is_drrs_high()) { + drrs_print_status(); + igt_assert_f(false, "DRRS HIGH\n"); + } + } else if (flags & ASSERT_DRRS_LOW) { + if (!drrs_wait_until_rr_switch_to_low()) { + drrs_print_status(); + igt_assert_f(false, "DRRS LOW\n"); + } + } else if (flags & ASSERT_DRRS_INACTIVE) { + if (!is_drrs_inactive()) { + drrs_print_status(); + igt_assert_f(false, "DRRS INACTIVE\n"); + } + } + if (flags & ASSERT_FBC_ENABLED) { igt_require(!fbc_not_enough_stolen()); igt_require(!fbc_stride_not_supported()); @@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t) fbc_enable(); if (t->feature & FEATURE_PSR) psr_enable(); + if (t->feature & FEATURE_DRRS) + drrs_enable(); } static void check_test_requirements(const struct test_mode *t) @@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t) "Can't test PSR without sink CRCs\n"); } + if (t->feature & FEATURE_DRRS) + igt_require_f(drrs.can_test, + "Can't test DRRS with the current outputs\n"); + + /* + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test + * case needs DRRS + PSR enabled, that will be skipped. + */ + igt_require_f(!((t->feature & FEATURE_PSR) && + (t->feature & FEATURE_DRRS)), + "Can't test PSR and DRRS together\n"); + if (opt.only_pipes != PIPE_COUNT) igt_require(t->pipes == opt.only_pipes); } @@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t) unset_all_crtcs(); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); enable_prim_screen_and_wait(t); set_cursor_for_test(t, &prim_mode_params); @@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t) if (op_disables_psr(t, t->method)) assertions |= ASSERT_PSR_DISABLED; + /* + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the + * current frambuffer. Hence assert for DRRS_LOW. + */ + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) + assertions |= ASSERT_DRRS_LOW; + prepare_subtest(t, pattern); target = pick_target(t, params); @@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t) sleep(2); update_wanted_crc(t, &pattern->crcs[t->format][r]); - do_assertions(0); + + if (t->feature & FEATURE_DRRS) + do_assertions(ASSERT_DRRS_LOW); + else + do_assertions(0); } } @@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t) sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); - do_assertions(0); + do_assertions(ASSERT_DRRS_LOW); unset_all_crtcs(); sleep(5); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); sleep(5); do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | - DONT_ASSERT_CRC); + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); set_mode_for_params(params); do_assertions(0); @@ -3371,6 +3519,14 @@ static const char *feature_str(int feature) return "psr"; case FEATURE_FBC | FEATURE_PSR: return "fbcpsr"; + case FEATURE_DRRS: + return "drrs"; + case FEATURE_FBC | FEATURE_DRRS: + return "fbcdrrs"; + case FEATURE_PSR | FEATURE_DRRS: + return "psrdrrs"; + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: + return "fbcpsrdrrs"; default: igt_assert(false); } @@ -3635,7 +3791,7 @@ int main(int argc, char *argv[]) tilingchange_subtest(&t); } - if (t.feature & FEATURE_PSR) + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) igt_subtest_f("%s-slowdraw", feature_str(t.feature)) slow_draw_subtest(&t); -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-10 14:47 ` [PATCH i-g-t v13] " Lohith BS @ 2018-01-10 18:15 ` Rodrigo Vivi 2018-01-11 5:27 ` Ramalingam C 2018-01-11 8:40 ` Daniel Vetter 2018-01-17 5:05 ` Ramalingam C 2 siblings, 1 reply; 59+ messages in thread From: Rodrigo Vivi @ 2018-01-10 18:15 UTC (permalink / raw) To: Lohith BS Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx, ankit.k.nautiyal On Wed, Jan 10, 2018 at 02:47:00PM +0000, Lohith BS wrote: > Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's > refresh rate to the lowest vrefresh supported by panel, when frame is > not flipped for more than a Sec. > > In kernel, DRRS uses the front buffer tracking infrastructure. > Hence DRRS test coverage is added along with other frontbuffer tracking > based features such as FBC and PSR tests. > > Here, we are testing DRRS with other features in all possible > combinations, in all required test cases, to capture any possible > regression. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, > provided by drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the > kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable > the DRRS feature dynamically(as in case of PSR). Hence if the > panel supports DRRS it will be enabled by default. > > This is in continuation of last patch > "https://patchwork.freedesktop.org/patch/162726/" > > v6: This patch adds runtime enable and disable feature for testing DRRS > > v7: This patch adds runtime enable and disable feature for testing DRRS > through debugfs entry "i915_drrs_ctl". > > v8: Commit message is updated to reflect current implementation. > > v9: Addressed Paulo Zanoni comments. > Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. > > v10: Corrected DRRS state expectation in suspend related subtests. > > v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. > > v12: Rewriting the DRRS inactive deduction [Rodrigo]. > > v13: En/Dis-able DRRS only when DRRS is capable on the setup. > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > --- > tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 164 insertions(+), 8 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > index 1601cab..6b2299b 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC, PSR and DRRS"); > > /* > * One of the aspects of this test is that, for every subtest, we try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 8, > + FEATURE_DEFAULT = 8, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > @@ -182,6 +183,13 @@ struct { > .can_test = false, > }; > > +#define MAX_DRRS_STATUS_BUF_LEN 256 > + > +struct { > + bool can_test; > +} drrs = { > + .can_test = false, > +}; > > #define SINK_CRC_SIZE 12 > typedef struct { > @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len) > buf[len] = '\0'; > } > > +static void __debugfs_write(const char *param, char *buf, int len) > +{ > + igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1), > + len - 1); > +} > + > #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr)) > +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr)) > > static bool fbc_is_enabled(void) > { > @@ -825,6 +840,62 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +void drrs_set(unsigned int val) > +{ > + char buf[2]; > + > + if (!drrs.can_test) > + return; Can you please elaborate more about this solution here? I couldn't find the logs anymore. What was the issue that CI caught? What happens if a regular user on HSW with no DRRS monitor (same configuration as CI) write to this debugfs enabling DRRS? What I wonder is if this is the right place for this solution or on the kernel side. Also if it is a testcase I wonder if it shouldn't have a skip handling somewhere instead of a blind return.... Thanks, Rodrigo. > + > + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); > + snprintf(buf, sizeof(buf), "%d", val); > + debugfs_write("i915_drrs_ctl", buf); > +} > + > +static bool is_drrs_high(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_HIGH_RR"); > +} > + > +static bool is_drrs_low(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_LOW_RR"); > +} > + > +static bool is_drrs_supported(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS Supported: Yes"); > +} > + > +static bool is_drrs_inactive(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + > + if (strstr(buf, "DRRS_State: ")) > + return false; > + > + return true; > +} > + > +static void drrs_print_status(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + igt_info("DRRS STATUS :\n%s\n", buf); > +} > + > static struct timespec fbc_get_last_action(void) > { > struct timespec ret = { 0, 0 }; > @@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void) > return igt_wait(psr_is_enabled(), 5000, 1); > } > > +static bool drrs_wait_until_rr_switch_to_low(void) > +{ > + return igt_wait(is_drrs_low(), 5000, 1); > +} > + > #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) > #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) > #define psr_enable() igt_set_module_param_int("enable_psr", 1) > #define psr_disable() igt_set_module_param_int("enable_psr", 0) > +#define drrs_enable() drrs_set(1) > +#define drrs_disable() drrs_set(0) > > static void get_sink_crc(sink_crc_t *crc, bool mandatory) > { > @@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t) > > fbc_disable(); > psr_disable(); > + drrs_disable(); > } > > static void *busy_thread_func(void *data) > @@ -1577,6 +1656,22 @@ static void teardown_psr(void) > { > } > > +static void setup_drrs(void) > +{ > + if (get_connector(prim_mode_params.connector_id)->connector_type != > + DRM_MODE_CONNECTOR_eDP) { > + igt_info("Can't test DRRS: no usable eDP screen.\n"); > + return; > + } > + > + if (!is_drrs_supported()) { > + igt_info("Can't test DRRS: Not supported.\n"); > + return; > + } > + > + drrs.can_test = true; > +} > + > static void setup_environment(void) > { > setup_drm(); > @@ -1584,6 +1679,7 @@ static void setup_environment(void) > > setup_fbc(); > setup_psr(); > + setup_drrs(); > > setup_crcs(); > } > @@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t) > #define ASSERT_PSR_ENABLED (1 << 6) > #define ASSERT_PSR_DISABLED (1 << 7) > > +#define DRRS_ASSERT_FLAGS (7 << 8) > +#define ASSERT_DRRS_HIGH (1 << 8) > +#define ASSERT_DRRS_LOW (1 << 9) > +#define ASSERT_DRRS_INACTIVE (1 << 10) > + > static int adjust_assertion_flags(const struct test_mode *t, int flags) > { > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > @@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) > flags |= ASSERT_FBC_ENABLED; > if (!(flags & ASSERT_PSR_DISABLED)) > flags |= ASSERT_PSR_ENABLED; > + if (!((flags & ASSERT_DRRS_LOW) || > + (flags & ASSERT_DRRS_INACTIVE))) > + flags |= ASSERT_DRRS_HIGH; > } > > if ((t->feature & FEATURE_FBC) == 0) > flags &= ~FBC_ASSERT_FLAGS; > if ((t->feature & FEATURE_PSR) == 0) > flags &= ~PSR_ASSERT_FLAGS; > + if ((t->feature & FEATURE_DRRS) == 0) > + flags &= ~DRRS_ASSERT_FLAGS; > > return flags; > } > @@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags) > return; > } > > + if (flags & ASSERT_DRRS_HIGH) { > + if (!is_drrs_high()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS HIGH\n"); > + } > + } else if (flags & ASSERT_DRRS_LOW) { > + if (!drrs_wait_until_rr_switch_to_low()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS LOW\n"); > + } > + } else if (flags & ASSERT_DRRS_INACTIVE) { > + if (!is_drrs_inactive()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS INACTIVE\n"); > + } > + } > + > if (flags & ASSERT_FBC_ENABLED) { > igt_require(!fbc_not_enough_stolen()); > igt_require(!fbc_stride_not_supported()); > @@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t) > fbc_enable(); > if (t->feature & FEATURE_PSR) > psr_enable(); > + if (t->feature & FEATURE_DRRS) > + drrs_enable(); > } > > static void check_test_requirements(const struct test_mode *t) > @@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t) > "Can't test PSR without sink CRCs\n"); > } > > + if (t->feature & FEATURE_DRRS) > + igt_require_f(drrs.can_test, > + "Can't test DRRS with the current outputs\n"); > + > + /* > + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test > + * case needs DRRS + PSR enabled, that will be skipped. > + */ > + igt_require_f(!((t->feature & FEATURE_PSR) && > + (t->feature & FEATURE_DRRS)), > + "Can't test PSR and DRRS together\n"); > + > if (opt.only_pipes != PIPE_COUNT) > igt_require(t->pipes == opt.only_pipes); > } > @@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t) > > unset_all_crtcs(); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > enable_prim_screen_and_wait(t); > set_cursor_for_test(t, &prim_mode_params); > @@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t) > if (op_disables_psr(t, t->method)) > assertions |= ASSERT_PSR_DISABLED; > > + /* > + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the > + * current frambuffer. Hence assert for DRRS_LOW. > + */ > + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) > + assertions |= ASSERT_DRRS_LOW; > + > prepare_subtest(t, pattern); > target = pick_target(t, params); > > @@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t) > sleep(2); > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > - do_assertions(0); > + > + if (t->feature & FEATURE_DRRS) > + do_assertions(ASSERT_DRRS_LOW); > + else > + do_assertions(0); > } > } > > @@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t) > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > - do_assertions(0); > + do_assertions(ASSERT_DRRS_LOW); > > unset_all_crtcs(); > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > set_mode_for_params(params); > do_assertions(0); > @@ -3371,6 +3519,14 @@ static const char *feature_str(int feature) > return "psr"; > case FEATURE_FBC | FEATURE_PSR: > return "fbcpsr"; > + case FEATURE_DRRS: > + return "drrs"; > + case FEATURE_FBC | FEATURE_DRRS: > + return "fbcdrrs"; > + case FEATURE_PSR | FEATURE_DRRS: > + return "psrdrrs"; > + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: > + return "fbcpsrdrrs"; > default: > igt_assert(false); > } > @@ -3635,7 +3791,7 @@ int main(int argc, char *argv[]) > tilingchange_subtest(&t); > } > > - if (t.feature & FEATURE_PSR) > + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) > igt_subtest_f("%s-slowdraw", feature_str(t.feature)) > slow_draw_subtest(&t); > > -- > 1.9.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-10 18:15 ` Rodrigo Vivi @ 2018-01-11 5:27 ` Ramalingam C 2018-01-11 20:22 ` Rodrigo Vivi 0 siblings, 1 reply; 59+ messages in thread From: Ramalingam C @ 2018-01-11 5:27 UTC (permalink / raw) To: intel-gfx, Rodrigo Vivi Cc: Daniel Vetter, Nautiyal, Ankit K, Paulo Zanoni, jari.tahvanainen [-- Attachment #1.1: Type: text/plain, Size: 15058 bytes --] On Wednesday 10 January 2018 11:45 PM, Rodrigo Vivi wrote: > On Wed, Jan 10, 2018 at 02:47:00PM +0000, Lohith BS wrote: >> Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's >> refresh rate to the lowest vrefresh supported by panel, when frame is >> not flipped for more than a Sec. >> >> In kernel, DRRS uses the front buffer tracking infrastructure. >> Hence DRRS test coverage is added along with other frontbuffer tracking >> based features such as FBC and PSR tests. >> >> Here, we are testing DRRS with other features in all possible >> combinations, in all required test cases, to capture any possible >> regression. >> >> v2: Addressed the comments and suggestions from Vlad, Marius. >> The signoff details from the earlier work are also included. >> >> v3: Modified vblank rate calculation by using reply-sequence, >> provided by drmWaitVBlank, as suggested by Chris Wilson. >> >> v4: As suggested from Chris Wilson and Daniel Vetter >> 1) Avoided using pthread for calculating vblank refresh rate, >> instead used drmWaitVBlank reply sequence. >> 2) Avoided using kernel-specific info like transitional delays, >> instead polling mechanism with timeout is used. >> 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, >> instead of having a separate test. >> >> v5: This patch adds DRRS as a new feature in the >> kms_frontbuffer_tracking IGT. >> DRRS switch to lower vrefresh rate is tested at slow-draw subtest. >> >> Note: >> 1) Currently kernel doesn't have support to enable and disable >> the DRRS feature dynamically(as in case of PSR). Hence if the >> panel supports DRRS it will be enabled by default. >> >> This is in continuation of last patch >> "https://patchwork.freedesktop.org/patch/162726/" >> >> v6: This patch adds runtime enable and disable feature for testing DRRS >> >> v7: This patch adds runtime enable and disable feature for testing DRRS >> through debugfs entry "i915_drrs_ctl". >> >> v8: Commit message is updated to reflect current implementation. >> >> v9: Addressed Paulo Zanoni comments. >> Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. >> >> v10: Corrected DRRS state expectation in suspend related subtests. >> >> v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. >> >> v12: Rewriting the DRRS inactive deduction [Rodrigo]. >> >> v13: En/Dis-able DRRS only when DRRS is capable on the setup. >> >> Signed-off-by: Lohith BS <lohith.bs@intel.com> >> Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> >> --- >> tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++-- >> 1 file changed, 164 insertions(+), 8 deletions(-) >> >> diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c >> index 1601cab..6b2299b 100644 >> --- a/tests/kms_frontbuffer_tracking.c >> +++ b/tests/kms_frontbuffer_tracking.c >> @@ -34,7 +34,7 @@ >> >> >> IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " >> - "its related features: FBC and PSR"); >> + "its related features: FBC, PSR and DRRS"); >> >> /* >> * One of the aspects of this test is that, for every subtest, we try different >> @@ -105,8 +105,9 @@ struct test_mode { >> FEATURE_NONE = 0, >> FEATURE_FBC = 1, >> FEATURE_PSR = 2, >> - FEATURE_COUNT = 4, >> - FEATURE_DEFAULT = 4, >> + FEATURE_DRRS = 4, >> + FEATURE_COUNT = 8, >> + FEATURE_DEFAULT = 8, >> } feature; >> >> /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and >> @@ -182,6 +183,13 @@ struct { >> .can_test = false, >> }; >> >> +#define MAX_DRRS_STATUS_BUF_LEN 256 >> + >> +struct { >> + bool can_test; >> +} drrs = { >> + .can_test = false, >> +}; >> >> #define SINK_CRC_SIZE 12 >> typedef struct { >> @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len) >> buf[len] = '\0'; >> } >> >> +static void __debugfs_write(const char *param, char *buf, int len) >> +{ >> + igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1), >> + len - 1); >> +} >> + >> #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr)) >> +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr)) >> >> static bool fbc_is_enabled(void) >> { >> @@ -825,6 +840,62 @@ static void psr_print_status(void) >> igt_info("PSR status:\n%s\n", buf); >> } >> >> +void drrs_set(unsigned int val) >> +{ >> + char buf[2]; >> + >> + if (!drrs.can_test) >> + return; > Can you please elaborate more about this solution here? > > I couldn't find the logs anymore. What was the issue that CI caught? CI failure were caused due to two reasons: * Error from kernel on debugfs write when the platform doesn't support DRRS (<gen7). This can be addressed either from kernel by returning success from i915_drrs_ctl_set instead of -ENODEV for <gen7, or by not En/Disable the drrs feature when you already knew that feature is not supported. * Non Availability of debugfs_fd for debugfs write for DRRS when eDP panel was not there. This is handled by adding debugfs_write. Which will open and close the file as and when it is required using igt_sysfs_write. Similar to already existing debugfs_read. > > What happens if a regular user on HSW with no DRRS monitor (same configuration as CI) > write to this debugfs enabling DRRS? Basically this debugfs writein kernel on >=gen7 for drrs enable req: will enable drrs if there is any DRRS capable eDP panel. for drrs disable req: will disable drrs if there is any DRRS capable eDP panel in enabled state. on <gen7 returns -ENODEV. Not sure whether we should just skip all operations and return success on <gen7 also. This patch skips any write into the drrs ctrl debugfs. > > What I wonder is if this is the right place for this solution or on the > kernel side. > > Also if it is a testcase I wonder if it shouldn't have a skip handling > somewhere instead of a blind return.... In this IGT before every subtest, all the features are disabled and only the features required for that subtest is enabled. So we though its good to validate the en/Disable call at the implementation of drrs_set than at calling place. Please suggest if you think otherway. -Ram > > Thanks, > Rodrigo. > >> + >> + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); >> + snprintf(buf, sizeof(buf), "%d", val); >> + debugfs_write("i915_drrs_ctl", buf); >> +} >> + >> +static bool is_drrs_high(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_HIGH_RR"); >> +} >> + >> +static bool is_drrs_low(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS_LOW_RR"); >> +} >> + >> +static bool is_drrs_supported(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + return strstr(buf, "DRRS Supported: Yes"); >> +} >> + >> +static bool is_drrs_inactive(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + >> + if (strstr(buf, "DRRS_State: ")) >> + return false; >> + >> + return true; >> +} >> + >> +static void drrs_print_status(void) >> +{ >> + char buf[MAX_DRRS_STATUS_BUF_LEN]; >> + >> + debugfs_read("i915_drrs_status", buf); >> + igt_info("DRRS STATUS :\n%s\n", buf); >> +} >> + >> static struct timespec fbc_get_last_action(void) >> { >> struct timespec ret = { 0, 0 }; >> @@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void) >> return igt_wait(psr_is_enabled(), 5000, 1); >> } >> >> +static bool drrs_wait_until_rr_switch_to_low(void) >> +{ >> + return igt_wait(is_drrs_low(), 5000, 1); >> +} >> + >> #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) >> #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) >> #define psr_enable() igt_set_module_param_int("enable_psr", 1) >> #define psr_disable() igt_set_module_param_int("enable_psr", 0) >> +#define drrs_enable() drrs_set(1) >> +#define drrs_disable() drrs_set(0) >> >> static void get_sink_crc(sink_crc_t *crc, bool mandatory) >> { >> @@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t) >> >> fbc_disable(); >> psr_disable(); >> + drrs_disable(); >> } >> >> static void *busy_thread_func(void *data) >> @@ -1577,6 +1656,22 @@ static void teardown_psr(void) >> { >> } >> >> +static void setup_drrs(void) >> +{ >> + if (get_connector(prim_mode_params.connector_id)->connector_type != >> + DRM_MODE_CONNECTOR_eDP) { >> + igt_info("Can't test DRRS: no usable eDP screen.\n"); >> + return; >> + } >> + >> + if (!is_drrs_supported()) { >> + igt_info("Can't test DRRS: Not supported.\n"); >> + return; >> + } >> + >> + drrs.can_test = true; >> +} >> + >> static void setup_environment(void) >> { >> setup_drm(); >> @@ -1584,6 +1679,7 @@ static void setup_environment(void) >> >> setup_fbc(); >> setup_psr(); >> + setup_drrs(); >> >> setup_crcs(); >> } >> @@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t) >> #define ASSERT_PSR_ENABLED (1 << 6) >> #define ASSERT_PSR_DISABLED (1 << 7) >> >> +#define DRRS_ASSERT_FLAGS (7 << 8) >> +#define ASSERT_DRRS_HIGH (1 << 8) >> +#define ASSERT_DRRS_LOW (1 << 9) >> +#define ASSERT_DRRS_INACTIVE (1 << 10) >> + >> static int adjust_assertion_flags(const struct test_mode *t, int flags) >> { >> if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { >> @@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) >> flags |= ASSERT_FBC_ENABLED; >> if (!(flags & ASSERT_PSR_DISABLED)) >> flags |= ASSERT_PSR_ENABLED; >> + if (!((flags & ASSERT_DRRS_LOW) || >> + (flags & ASSERT_DRRS_INACTIVE))) >> + flags |= ASSERT_DRRS_HIGH; >> } >> >> if ((t->feature & FEATURE_FBC) == 0) >> flags &= ~FBC_ASSERT_FLAGS; >> if ((t->feature & FEATURE_PSR) == 0) >> flags &= ~PSR_ASSERT_FLAGS; >> + if ((t->feature & FEATURE_DRRS) == 0) >> + flags &= ~DRRS_ASSERT_FLAGS; >> >> return flags; >> } >> @@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags) >> return; >> } >> >> + if (flags & ASSERT_DRRS_HIGH) { >> + if (!is_drrs_high()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS HIGH\n"); >> + } >> + } else if (flags & ASSERT_DRRS_LOW) { >> + if (!drrs_wait_until_rr_switch_to_low()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS LOW\n"); >> + } >> + } else if (flags & ASSERT_DRRS_INACTIVE) { >> + if (!is_drrs_inactive()) { >> + drrs_print_status(); >> + igt_assert_f(false, "DRRS INACTIVE\n"); >> + } >> + } >> + >> if (flags & ASSERT_FBC_ENABLED) { >> igt_require(!fbc_not_enough_stolen()); >> igt_require(!fbc_stride_not_supported()); >> @@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t) >> fbc_enable(); >> if (t->feature & FEATURE_PSR) >> psr_enable(); >> + if (t->feature & FEATURE_DRRS) >> + drrs_enable(); >> } >> >> static void check_test_requirements(const struct test_mode *t) >> @@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t) >> "Can't test PSR without sink CRCs\n"); >> } >> >> + if (t->feature & FEATURE_DRRS) >> + igt_require_f(drrs.can_test, >> + "Can't test DRRS with the current outputs\n"); >> + >> + /* >> + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test >> + * case needs DRRS + PSR enabled, that will be skipped. >> + */ >> + igt_require_f(!((t->feature & FEATURE_PSR) && >> + (t->feature & FEATURE_DRRS)), >> + "Can't test PSR and DRRS together\n"); >> + >> if (opt.only_pipes != PIPE_COUNT) >> igt_require(t->pipes == opt.only_pipes); >> } >> @@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t) >> >> unset_all_crtcs(); >> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> - DONT_ASSERT_CRC); >> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >> >> enable_prim_screen_and_wait(t); >> set_cursor_for_test(t, &prim_mode_params); >> @@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t) >> if (op_disables_psr(t, t->method)) >> assertions |= ASSERT_PSR_DISABLED; >> >> + /* >> + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the >> + * current frambuffer. Hence assert for DRRS_LOW. >> + */ >> + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) >> + assertions |= ASSERT_DRRS_LOW; >> + >> prepare_subtest(t, pattern); >> target = pick_target(t, params); >> >> @@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t) >> sleep(2); >> >> update_wanted_crc(t, &pattern->crcs[t->format][r]); >> - do_assertions(0); >> + >> + if (t->feature & FEATURE_DRRS) >> + do_assertions(ASSERT_DRRS_LOW); >> + else >> + do_assertions(0); >> } >> } >> >> @@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t) >> sleep(5); >> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); >> sleep(5); >> - do_assertions(0); >> + do_assertions(ASSERT_DRRS_LOW); >> >> unset_all_crtcs(); >> sleep(5); >> igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); >> sleep(5); >> do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | >> - DONT_ASSERT_CRC); >> + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); >> >> set_mode_for_params(params); >> do_assertions(0); >> @@ -3371,6 +3519,14 @@ static const char *feature_str(int feature) >> return "psr"; >> case FEATURE_FBC | FEATURE_PSR: >> return "fbcpsr"; >> + case FEATURE_DRRS: >> + return "drrs"; >> + case FEATURE_FBC | FEATURE_DRRS: >> + return "fbcdrrs"; >> + case FEATURE_PSR | FEATURE_DRRS: >> + return "psrdrrs"; >> + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: >> + return "fbcpsrdrrs"; >> default: >> igt_assert(false); >> } >> @@ -3635,7 +3791,7 @@ int main(int argc, char *argv[]) >> tilingchange_subtest(&t); >> } >> >> - if (t.feature & FEATURE_PSR) >> + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) >> igt_subtest_f("%s-slowdraw", feature_str(t.feature)) >> slow_draw_subtest(&t); >> >> -- >> 1.9.1 >> >> _______________________________________________ >> Intel-gfx mailing list >> Intel-gfx@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx [-- Attachment #1.2: Type: text/html, Size: 16058 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] 59+ messages in thread
* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-11 5:27 ` Ramalingam C @ 2018-01-11 20:22 ` Rodrigo Vivi 0 siblings, 0 replies; 59+ messages in thread From: Rodrigo Vivi @ 2018-01-11 20:22 UTC (permalink / raw) To: Ramalingam C Cc: Paulo Zanoni, jari.tahvanainen, intel-gfx, Daniel Vetter, Nautiyal, Ankit K On Thu, Jan 11, 2018 at 05:27:52AM +0000, Ramalingam C wrote: > > > On Wednesday 10 January 2018 11:45 PM, Rodrigo Vivi wrote: > > On Wed, Jan 10, 2018 at 02:47:00PM +0000, Lohith BS wrote: > > Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's > refresh rate to the lowest vrefresh supported by panel, when frame is > not flipped for more than a Sec. > > In kernel, DRRS uses the front buffer tracking infrastructure. > Hence DRRS test coverage is added along with other frontbuffer tracking > based features such as FBC and PSR tests. > > Here, we are testing DRRS with other features in all possible > combinations, in all required test cases, to capture any possible > regression. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, > provided by drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the > kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable > the DRRS feature dynamically(as in case of PSR). Hence if the > panel supports DRRS it will be enabled by default. > > This is in continuation of last patch > "https://patchwork.freedesktop.org/patch/162726/" > > v6: This patch adds runtime enable and disable feature for testing DRRS > > v7: This patch adds runtime enable and disable feature for testing DRRS > through debugfs entry "i915_drrs_ctl". > > v8: Commit message is updated to reflect current implementation. > > v9: Addressed Paulo Zanoni comments. > Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. > > v10: Corrected DRRS state expectation in suspend related subtests. > > v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. > > v12: Rewriting the DRRS inactive deduction [Rodrigo]. > > v13: En/Dis-able DRRS only when DRRS is capable on the setup. > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > --- > tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 164 insertions(+), 8 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > index 1601cab..6b2299b 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC, PSR and DRRS"); > > /* > * One of the aspects of this test is that, for every subtest, we try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 8, > + FEATURE_DEFAULT = 8, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > @@ -182,6 +183,13 @@ struct { > .can_test = false, > }; > > +#define MAX_DRRS_STATUS_BUF_LEN 256 > + > +struct { > + bool can_test; > +} drrs = { > + .can_test = false, > +}; > > #define SINK_CRC_SIZE 12 > typedef struct { > @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len) > buf[len] = '\0'; > } > > +static void __debugfs_write(const char *param, char *buf, int len) > +{ > + igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1), > + len - 1); > +} > + > #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr)) > +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr)) > > static bool fbc_is_enabled(void) > { > @@ -825,6 +840,62 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +void drrs_set(unsigned int val) > +{ > + char buf[2]; > + > + if (!drrs.can_test) > + return; > > Can you please elaborate more about this solution here? > > I couldn't find the logs anymore. What was the issue that CI caught? > > > CI failure were caused due to two reasons: > > • Error from kernel on debugfs write when the platform doesn't support DRRS (<gen7). > > This can be addressed either from kernel by returning success from > i915_drrs_ctl_set instead of -ENODEV for <gen7, -ENODEV is better, but then igt test skip when handling this -ENODEV explicitly instead of a random return on !can_test. > or by not En/Disable the drrs feature when you already knew that feature is > not supported. > > • Non Availability of debugfs_fd for debugfs write for DRRS when eDP panel was not > there. > > This is handled by adding debugfs_write. Which will open and close the file > as and when it is required using igt_sysfs_write. > Similar to already existing debugfs_read. > > > What happens if a regular user on HSW with no DRRS monitor (same configuration as CI) > write to this debugfs enabling DRRS? > > > Basically this debugfs write in kernel > on >=gen7 > for drrs enable req: will enable drrs if there is any DRRS capable eDP panel. > for drrs disable req: will disable drrs if there is any DRRS capable eDP > panel in enabled state. > on <gen7 > returns -ENODEV. Not sure whether we should just skip all operations and > return success on <gen7 also. > > This patch skips any write into the drrs ctrl debugfs. > > > What I wonder is if this is the right place for this solution or on the > kernel side. > > Also if it is a testcase I wonder if it shouldn't have a skip handling > somewhere instead of a blind return.... > > In this IGT before every subtest, all the features are disabled and only the features > required for that subtest is enabled. > So we though its good to validate the en/Disable call at the implementation of drrs_set > than at calling place. Please suggest if you think otherway. my suggestion is to keep -ENODEV and igt check explicitly for this return value and skip testcase if -ENODEV is returned. > > -Ram > > > Thanks, > Rodrigo. > > > + > + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); > + snprintf(buf, sizeof(buf), "%d", val); > + debugfs_write("i915_drrs_ctl", buf); > +} > + > +static bool is_drrs_high(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_HIGH_RR"); > +} > + > +static bool is_drrs_low(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_LOW_RR"); > +} > + > +static bool is_drrs_supported(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS Supported: Yes"); > +} > + > +static bool is_drrs_inactive(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + > + if (strstr(buf, "DRRS_State: ")) > + return false; > + > + return true; > +} > + > +static void drrs_print_status(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + igt_info("DRRS STATUS :\n%s\n", buf); > +} > + > static struct timespec fbc_get_last_action(void) > { > struct timespec ret = { 0, 0 }; > @@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void) > return igt_wait(psr_is_enabled(), 5000, 1); > } > > +static bool drrs_wait_until_rr_switch_to_low(void) > +{ > + return igt_wait(is_drrs_low(), 5000, 1); > +} > + > #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) > #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) > #define psr_enable() igt_set_module_param_int("enable_psr", 1) > #define psr_disable() igt_set_module_param_int("enable_psr", 0) > +#define drrs_enable() drrs_set(1) > +#define drrs_disable() drrs_set(0) > > static void get_sink_crc(sink_crc_t *crc, bool mandatory) > { > @@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t) > > fbc_disable(); > psr_disable(); > + drrs_disable(); > } > > static void *busy_thread_func(void *data) > @@ -1577,6 +1656,22 @@ static void teardown_psr(void) > { > } > > +static void setup_drrs(void) > +{ > + if (get_connector(prim_mode_params.connector_id)->connector_type != > + DRM_MODE_CONNECTOR_eDP) { > + igt_info("Can't test DRRS: no usable eDP screen.\n"); > + return; > + } > + > + if (!is_drrs_supported()) { > + igt_info("Can't test DRRS: Not supported.\n"); > + return; > + } > + > + drrs.can_test = true; > +} > + > static void setup_environment(void) > { > setup_drm(); > @@ -1584,6 +1679,7 @@ static void setup_environment(void) > > setup_fbc(); > setup_psr(); > + setup_drrs(); > > setup_crcs(); > } > @@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t) > #define ASSERT_PSR_ENABLED (1 << 6) > #define ASSERT_PSR_DISABLED (1 << 7) > > +#define DRRS_ASSERT_FLAGS (7 << 8) > +#define ASSERT_DRRS_HIGH (1 << 8) > +#define ASSERT_DRRS_LOW (1 << 9) > +#define ASSERT_DRRS_INACTIVE (1 << 10) > + > static int adjust_assertion_flags(const struct test_mode *t, int flags) > { > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > @@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) > flags |= ASSERT_FBC_ENABLED; > if (!(flags & ASSERT_PSR_DISABLED)) > flags |= ASSERT_PSR_ENABLED; > + if (!((flags & ASSERT_DRRS_LOW) || > + (flags & ASSERT_DRRS_INACTIVE))) > + flags |= ASSERT_DRRS_HIGH; > } > > if ((t->feature & FEATURE_FBC) == 0) > flags &= ~FBC_ASSERT_FLAGS; > if ((t->feature & FEATURE_PSR) == 0) > flags &= ~PSR_ASSERT_FLAGS; > + if ((t->feature & FEATURE_DRRS) == 0) > + flags &= ~DRRS_ASSERT_FLAGS; > > return flags; > } > @@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags) > return; > } > > + if (flags & ASSERT_DRRS_HIGH) { > + if (!is_drrs_high()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS HIGH\n"); > + } > + } else if (flags & ASSERT_DRRS_LOW) { > + if (!drrs_wait_until_rr_switch_to_low()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS LOW\n"); > + } > + } else if (flags & ASSERT_DRRS_INACTIVE) { > + if (!is_drrs_inactive()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS INACTIVE\n"); > + } > + } > + > if (flags & ASSERT_FBC_ENABLED) { > igt_require(!fbc_not_enough_stolen()); > igt_require(!fbc_stride_not_supported()); > @@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t) > fbc_enable(); > if (t->feature & FEATURE_PSR) > psr_enable(); > + if (t->feature & FEATURE_DRRS) > + drrs_enable(); > } > > static void check_test_requirements(const struct test_mode *t) > @@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t) > "Can't test PSR without sink CRCs\n"); > } > > + if (t->feature & FEATURE_DRRS) > + igt_require_f(drrs.can_test, > + "Can't test DRRS with the current outputs\n"); > + > + /* > + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test > + * case needs DRRS + PSR enabled, that will be skipped. > + */ > + igt_require_f(!((t->feature & FEATURE_PSR) && > + (t->feature & FEATURE_DRRS)), > + "Can't test PSR and DRRS together\n"); > + > if (opt.only_pipes != PIPE_COUNT) > igt_require(t->pipes == opt.only_pipes); > } > @@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t) > > unset_all_crtcs(); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > enable_prim_screen_and_wait(t); > set_cursor_for_test(t, &prim_mode_params); > @@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t) > if (op_disables_psr(t, t->method)) > assertions |= ASSERT_PSR_DISABLED; > > + /* > + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the > + * current frambuffer. Hence assert for DRRS_LOW. > + */ > + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) > + assertions |= ASSERT_DRRS_LOW; > + > prepare_subtest(t, pattern); > target = pick_target(t, params); > > @@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t) > sleep(2); > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > - do_assertions(0); > + > + if (t->feature & FEATURE_DRRS) > + do_assertions(ASSERT_DRRS_LOW); > + else > + do_assertions(0); > } > } > > @@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t) > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > - do_assertions(0); > + do_assertions(ASSERT_DRRS_LOW); > > unset_all_crtcs(); > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > set_mode_for_params(params); > do_assertions(0); > @@ -3371,6 +3519,14 @@ static const char *feature_str(int feature) > return "psr"; > case FEATURE_FBC | FEATURE_PSR: > return "fbcpsr"; > + case FEATURE_DRRS: > + return "drrs"; > + case FEATURE_FBC | FEATURE_DRRS: > + return "fbcdrrs"; > + case FEATURE_PSR | FEATURE_DRRS: > + return "psrdrrs"; > + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: > + return "fbcpsrdrrs"; > default: > igt_assert(false); > } > @@ -3635,7 +3791,7 @@ int main(int argc, char *argv[]) > tilingchange_subtest(&t); > } > > - if (t.feature & FEATURE_PSR) > + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) > igt_subtest_f("%s-slowdraw", feature_str(t.feature)) > slow_draw_subtest(&t); > > -- > 1.9.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-10 14:47 ` [PATCH i-g-t v13] " Lohith BS 2018-01-10 18:15 ` Rodrigo Vivi @ 2018-01-11 8:40 ` Daniel Vetter 2018-01-17 5:05 ` Ramalingam C 2 siblings, 0 replies; 59+ messages in thread From: Daniel Vetter @ 2018-01-11 8:40 UTC (permalink / raw) To: Lohith BS Cc: paulo.r.zanoni, jari.tahvanainen, daniel.vetter, intel-gfx, rodrigo.vivi, ankit.k.nautiyal On Wed, Jan 10, 2018 at 08:17:00PM +0530, Lohith BS wrote: > Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's > refresh rate to the lowest vrefresh supported by panel, when frame is > not flipped for more than a Sec. > > In kernel, DRRS uses the front buffer tracking infrastructure. > Hence DRRS test coverage is added along with other frontbuffer tracking > based features such as FBC and PSR tests. > > Here, we are testing DRRS with other features in all possible > combinations, in all required test cases, to capture any possible > regression. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, > provided by drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the > kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable > the DRRS feature dynamically(as in case of PSR). Hence if the > panel supports DRRS it will be enabled by default. > > This is in continuation of last patch > "https://patchwork.freedesktop.org/patch/162726/" > > v6: This patch adds runtime enable and disable feature for testing DRRS > > v7: This patch adds runtime enable and disable feature for testing DRRS > through debugfs entry "i915_drrs_ctl". > > v8: Commit message is updated to reflect current implementation. > > v9: Addressed Paulo Zanoni comments. > Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. > > v10: Corrected DRRS state expectation in suspend related subtests. > > v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. > > v12: Rewriting the DRRS inactive deduction [Rodrigo]. > > v13: En/Dis-able DRRS only when DRRS is capable on the setup. > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> Btw pls resubmit new versions as a new thread, it tends to confuse patchwork a bit if you in-reply-to forever. in-reply-to is kinda just to update individual patches in a big patch series while it's being discussed. Thanks, Daniel > --- > tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 164 insertions(+), 8 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > index 1601cab..6b2299b 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC, PSR and DRRS"); > > /* > * One of the aspects of this test is that, for every subtest, we try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 8, > + FEATURE_DEFAULT = 8, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > @@ -182,6 +183,13 @@ struct { > .can_test = false, > }; > > +#define MAX_DRRS_STATUS_BUF_LEN 256 > + > +struct { > + bool can_test; > +} drrs = { > + .can_test = false, > +}; > > #define SINK_CRC_SIZE 12 > typedef struct { > @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len) > buf[len] = '\0'; > } > > +static void __debugfs_write(const char *param, char *buf, int len) > +{ > + igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1), > + len - 1); > +} > + > #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr)) > +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr)) > > static bool fbc_is_enabled(void) > { > @@ -825,6 +840,62 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +void drrs_set(unsigned int val) > +{ > + char buf[2]; > + > + if (!drrs.can_test) > + return; > + > + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); > + snprintf(buf, sizeof(buf), "%d", val); > + debugfs_write("i915_drrs_ctl", buf); > +} > + > +static bool is_drrs_high(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_HIGH_RR"); > +} > + > +static bool is_drrs_low(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_LOW_RR"); > +} > + > +static bool is_drrs_supported(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS Supported: Yes"); > +} > + > +static bool is_drrs_inactive(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + > + if (strstr(buf, "DRRS_State: ")) > + return false; > + > + return true; > +} > + > +static void drrs_print_status(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > + > + debugfs_read("i915_drrs_status", buf); > + igt_info("DRRS STATUS :\n%s\n", buf); > +} > + > static struct timespec fbc_get_last_action(void) > { > struct timespec ret = { 0, 0 }; > @@ -935,10 +1006,17 @@ static bool psr_wait_until_enabled(void) > return igt_wait(psr_is_enabled(), 5000, 1); > } > > +static bool drrs_wait_until_rr_switch_to_low(void) > +{ > + return igt_wait(is_drrs_low(), 5000, 1); > +} > + > #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) > #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) > #define psr_enable() igt_set_module_param_int("enable_psr", 1) > #define psr_disable() igt_set_module_param_int("enable_psr", 0) > +#define drrs_enable() drrs_set(1) > +#define drrs_disable() drrs_set(0) > > static void get_sink_crc(sink_crc_t *crc, bool mandatory) > { > @@ -1184,6 +1262,7 @@ static void disable_features(const struct test_mode *t) > > fbc_disable(); > psr_disable(); > + drrs_disable(); > } > > static void *busy_thread_func(void *data) > @@ -1577,6 +1656,22 @@ static void teardown_psr(void) > { > } > > +static void setup_drrs(void) > +{ > + if (get_connector(prim_mode_params.connector_id)->connector_type != > + DRM_MODE_CONNECTOR_eDP) { > + igt_info("Can't test DRRS: no usable eDP screen.\n"); > + return; > + } > + > + if (!is_drrs_supported()) { > + igt_info("Can't test DRRS: Not supported.\n"); > + return; > + } > + > + drrs.can_test = true; > +} > + > static void setup_environment(void) > { > setup_drm(); > @@ -1584,6 +1679,7 @@ static void setup_environment(void) > > setup_fbc(); > setup_psr(); > + setup_drrs(); > > setup_crcs(); > } > @@ -1662,6 +1758,11 @@ static void do_flush(const struct test_mode *t) > #define ASSERT_PSR_ENABLED (1 << 6) > #define ASSERT_PSR_DISABLED (1 << 7) > > +#define DRRS_ASSERT_FLAGS (7 << 8) > +#define ASSERT_DRRS_HIGH (1 << 8) > +#define ASSERT_DRRS_LOW (1 << 9) > +#define ASSERT_DRRS_INACTIVE (1 << 10) > + > static int adjust_assertion_flags(const struct test_mode *t, int flags) > { > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > @@ -1669,12 +1770,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) > flags |= ASSERT_FBC_ENABLED; > if (!(flags & ASSERT_PSR_DISABLED)) > flags |= ASSERT_PSR_ENABLED; > + if (!((flags & ASSERT_DRRS_LOW) || > + (flags & ASSERT_DRRS_INACTIVE))) > + flags |= ASSERT_DRRS_HIGH; > } > > if ((t->feature & FEATURE_FBC) == 0) > flags &= ~FBC_ASSERT_FLAGS; > if ((t->feature & FEATURE_PSR) == 0) > flags &= ~PSR_ASSERT_FLAGS; > + if ((t->feature & FEATURE_DRRS) == 0) > + flags &= ~DRRS_ASSERT_FLAGS; > > return flags; > } > @@ -1706,6 +1812,23 @@ static void do_status_assertions(int flags) > return; > } > > + if (flags & ASSERT_DRRS_HIGH) { > + if (!is_drrs_high()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS HIGH\n"); > + } > + } else if (flags & ASSERT_DRRS_LOW) { > + if (!drrs_wait_until_rr_switch_to_low()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS LOW\n"); > + } > + } else if (flags & ASSERT_DRRS_INACTIVE) { > + if (!is_drrs_inactive()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS INACTIVE\n"); > + } > + } > + > if (flags & ASSERT_FBC_ENABLED) { > igt_require(!fbc_not_enough_stolen()); > igt_require(!fbc_stride_not_supported()); > @@ -1833,6 +1956,8 @@ static void enable_features_for_test(const struct test_mode *t) > fbc_enable(); > if (t->feature & FEATURE_PSR) > psr_enable(); > + if (t->feature & FEATURE_DRRS) > + drrs_enable(); > } > > static void check_test_requirements(const struct test_mode *t) > @@ -1852,6 +1977,18 @@ static void check_test_requirements(const struct test_mode *t) > "Can't test PSR without sink CRCs\n"); > } > > + if (t->feature & FEATURE_DRRS) > + igt_require_f(drrs.can_test, > + "Can't test DRRS with the current outputs\n"); > + > + /* > + * In kernel, When PSR is enabled, DRRS will be disabled. So If a test > + * case needs DRRS + PSR enabled, that will be skipped. > + */ > + igt_require_f(!((t->feature & FEATURE_PSR) && > + (t->feature & FEATURE_DRRS)), > + "Can't test PSR and DRRS together\n"); > + > if (opt.only_pipes != PIPE_COUNT) > igt_require(t->pipes == opt.only_pipes); > } > @@ -1973,7 +2110,7 @@ static void rte_subtest(const struct test_mode *t) > > unset_all_crtcs(); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > enable_prim_screen_and_wait(t); > set_cursor_for_test(t, &prim_mode_params); > @@ -2065,6 +2202,13 @@ static void draw_subtest(const struct test_mode *t) > if (op_disables_psr(t, t->method)) > assertions |= ASSERT_PSR_DISABLED; > > + /* > + * On FBS_INDIVIDUAL, write to offscreen plane will not touch the > + * current frambuffer. Hence assert for DRRS_LOW. > + */ > + if ((t->fbs == FBS_INDIVIDUAL) && (t->screen == SCREEN_OFFSCREEN)) > + assertions |= ASSERT_DRRS_LOW; > + > prepare_subtest(t, pattern); > target = pick_target(t, params); > > @@ -2273,7 +2417,11 @@ static void slow_draw_subtest(const struct test_mode *t) > sleep(2); > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > - do_assertions(0); > + > + if (t->feature & FEATURE_DRRS) > + do_assertions(ASSERT_DRRS_LOW); > + else > + do_assertions(0); > } > } > > @@ -2882,14 +3030,14 @@ static void suspend_subtest(const struct test_mode *t) > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > - do_assertions(0); > + do_assertions(ASSERT_DRRS_LOW); > > unset_all_crtcs(); > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > set_mode_for_params(params); > do_assertions(0); > @@ -3371,6 +3519,14 @@ static const char *feature_str(int feature) > return "psr"; > case FEATURE_FBC | FEATURE_PSR: > return "fbcpsr"; > + case FEATURE_DRRS: > + return "drrs"; > + case FEATURE_FBC | FEATURE_DRRS: > + return "fbcdrrs"; > + case FEATURE_PSR | FEATURE_DRRS: > + return "psrdrrs"; > + case FEATURE_FBC | FEATURE_PSR | FEATURE_DRRS: > + return "fbcpsrdrrs"; > default: > igt_assert(false); > } > @@ -3635,7 +3791,7 @@ int main(int argc, char *argv[]) > tilingchange_subtest(&t); > } > > - if (t.feature & FEATURE_PSR) > + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) > igt_subtest_f("%s-slowdraw", feature_str(t.feature)) > slow_draw_subtest(&t); > > -- > 1.9.1 > -- 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] 59+ messages in thread
* Re: [PATCH i-g-t v13] tests/kms_frontbuffer_tracking: Including DRRS test coverage 2018-01-10 14:47 ` [PATCH i-g-t v13] " Lohith BS 2018-01-10 18:15 ` Rodrigo Vivi 2018-01-11 8:40 ` Daniel Vetter @ 2018-01-17 5:05 ` Ramalingam C 2 siblings, 0 replies; 59+ messages in thread From: Ramalingam C @ 2018-01-17 5:05 UTC (permalink / raw) To: Lohith BS, intel-gfx, rodrigo.vivi, jani.saarinen, daniel.vetter, chris, jari.tahvanainen Cc: ankit.k.nautiyal, paulo.r.zanoni Summary from IRC discussions with Rodrigo: drrs_disable will get called on all test setups(including the drrs non-capable). So we cant fail/skip the sub_test based on the return value from drrs_set(0) drrs_enable will get called only when the test setup is capable of drrs. And also after the request for enabling drrs, drrs state is verified through i915_drrs_status. So functionally it is not necessary to validate the debugfs_write return value. But no harm in double checking the error state for drrs_set(1). Rodrigo, as per above understanding i have mentioned the expected deltas inline. If you confirm, we will submit the next version. Thanks for the time. On Wednesday 10 January 2018 08:17 PM, Lohith BS wrote: > Dynamic Refresh Rate Switch(DRRS) is used to switch the panel's > refresh rate to the lowest vrefresh supported by panel, when frame is > not flipped for more than a Sec. > > In kernel, DRRS uses the front buffer tracking infrastructure. > Hence DRRS test coverage is added along with other frontbuffer tracking > based features such as FBC and PSR tests. > > Here, we are testing DRRS with other features in all possible > combinations, in all required test cases, to capture any possible > regression. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, > provided by drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the > kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable > the DRRS feature dynamically(as in case of PSR). Hence if the > panel supports DRRS it will be enabled by default. > > This is in continuation of last patch > "https://patchwork.freedesktop.org/patch/162726/" > > v6: This patch adds runtime enable and disable feature for testing DRRS > > v7: This patch adds runtime enable and disable feature for testing DRRS > through debugfs entry "i915_drrs_ctl". > > v8: Commit message is updated to reflect current implementation. > > v9: Addressed Paulo Zanoni comments. > Check for DRRS_LOW at tests with OFFSCREEN + FBS_INDIVIDUAL. > > v10: Corrected DRRS state expectation in suspend related subtests. > > v11: Removing the global flag is_psr_drrs_combo [Rodrigo]. > > v12: Rewriting the DRRS inactive deduction [Rodrigo]. > > v13: En/Dis-able DRRS only when DRRS is capable on the setup. > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > --- > tests/kms_frontbuffer_tracking.c | 172 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 164 insertions(+), 8 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > index 1601cab..6b2299b 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC, PSR and DRRS"); > > /* > * One of the aspects of this test is that, for every subtest, we try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 8, > + FEATURE_DEFAULT = 8, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > @@ -182,6 +183,13 @@ struct { > .can_test = false, > }; > > +#define MAX_DRRS_STATUS_BUF_LEN 256 > + > +struct { > + bool can_test; > +} drrs = { > + .can_test = false, > +}; > > #define SINK_CRC_SIZE 12 > typedef struct { > @@ -790,7 +798,14 @@ static void __debugfs_read(const char *param, char *buf, int len) > buf[len] = '\0'; > } > > +static void __debugfs_write(const char *param, char *buf, int len) > +{ > + igt_assert_eq(igt_sysfs_write(drm.debugfs, param, buf, len - 1), > + len - 1); > +} > + redefining the __debugfs_write() as below: static int __debugfs_write(const char *param, char *buf, int len) { return igt_sysfs_write(drm.debugfs, param, buf, len - 1); } > #define debugfs_read(p, arr) __debugfs_read(p, arr, sizeof(arr)) > +#define debugfs_write(p, arr) __debugfs_write(p, arr, sizeof(arr)) > > static bool fbc_is_enabled(void) > { > @@ -825,6 +840,62 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +void drrs_set(unsigned int val) > +{ > + char buf[2]; > + > + if (!drrs.can_test) > + return; removing above two lines. > + > + igt_debug("Manually %sabling DRRS. %llu\n", val ? "en" : "dis", val); > + snprintf(buf, sizeof(buf), "%d", val); > + debugfs_write("i915_drrs_ctl", buf); replacing above line with below code ret = debugfs_write("i915_drrs_ctl", buf); /* drrs_enable can't fail, as that is called on drrs capable setup only. */ if (val) igt_assert_eq(ret, sizeof(buf) - 1); --Ram > +} > + > +static bool is_drrs_high(void) > +{ > + char buf[MAX_DRRS_STATUS_BUF_LEN]; > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.BAT: failure for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS 2017-09-19 18:12 ` Rodrigo Vivi 2017-10-31 9:20 ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C @ 2017-10-31 9:28 ` Patchwork 2017-10-31 9:48 ` ✓ Fi.CI.BAT: success " Patchwork ` (18 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-10-31 9:28 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx == Series Details == Series: series starting with [1/2] drm/i915: Runtime disable for eDP DRRS URL : https://patchwork.freedesktop.org/series/32887/ State : failure == Summary == HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf scripts/kconfig/conf --silentoldconfig Kconfig *** *** Configuration file ".config" not found! *** *** Please run some configurator (e.g. "make oldconfig" or *** "make menuconfig" or "make xconfig"). *** scripts/kconfig/Makefile:37: recipe for target 'silentoldconfig' failed make[2]: *** [silentoldconfig] Error 1 Makefile:547: recipe for target 'silentoldconfig' failed make[1]: *** [silentoldconfig] Error 2 SYSTBL arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h SYSHDR arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_32.h SYSHDR arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_64.h SYSHDR arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_x32.h HOSTCC arch/x86/tools/relocs_32.o HOSTCC arch/x86/tools/relocs_64.o HOSTCC arch/x86/tools/relocs_common.o HOSTLD arch/x86/tools/relocs make: *** No rule to make target 'include/config/auto.conf', needed by 'include/config/kernel.release'. Stop. _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS 2017-09-19 18:12 ` Rodrigo Vivi 2017-10-31 9:20 ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C 2017-10-31 9:28 ` ✗ Fi.CI.BAT: failure for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS Patchwork @ 2017-10-31 9:48 ` Patchwork 2017-10-31 10:33 ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage Patchwork ` (17 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-10-31 9:48 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx == Series Details == Series: series starting with [1/2] drm/i915: Runtime disable for eDP DRRS URL : https://patchwork.freedesktop.org/series/32887/ State : success == Summary == Series 32887v1 series starting with [1/2] drm/i915: Runtime disable for eDP DRRS https://patchwork.freedesktop.org/api/1.0/series/32887/revisions/1/mbox/ Test chamelium: Subgroup dp-crc-fast: fail -> PASS (fi-kbl-7500u) fdo#102514 Test kms_pipe_crc_basic: Subgroup suspend-read-crc-pipe-a: pass -> INCOMPLETE (fi-kbl-7560u) fdo#102846 fdo#102514 https://bugs.freedesktop.org/show_bug.cgi?id=102514 fdo#102846 https://bugs.freedesktop.org/show_bug.cgi?id=102846 fi-bdw-5557u total:289 pass:266 dwarn:0 dfail:0 fail:2 skip:21 time:458s fi-bdw-gvtdvm total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:450s fi-blb-e6850 total:289 pass:223 dwarn:1 dfail:0 fail:0 skip:65 time:375s fi-bsw-n3050 total:289 pass:241 dwarn:0 dfail:0 fail:2 skip:46 time:543s fi-bwr-2160 total:289 pass:183 dwarn:0 dfail:0 fail:0 skip:106 time:264s fi-bxt-dsi total:289 pass:257 dwarn:0 dfail:0 fail:2 skip:30 time:507s fi-bxt-j4205 total:289 pass:258 dwarn:0 dfail:0 fail:2 skip:29 time:505s fi-byt-j1900 total:289 pass:251 dwarn:1 dfail:0 fail:2 skip:35 time:510s fi-byt-n2820 total:289 pass:247 dwarn:1 dfail:0 fail:2 skip:39 time:485s fi-cfl-s total:289 pass:251 dwarn:4 dfail:0 fail:2 skip:32 time:572s fi-elk-e7500 total:289 pass:229 dwarn:0 dfail:0 fail:0 skip:60 time:421s fi-glk-1 total:289 pass:259 dwarn:0 dfail:0 fail:2 skip:28 time:588s fi-hsw-4770 total:289 pass:260 dwarn:0 dfail:0 fail:2 skip:27 time:448s fi-hsw-4770r total:289 pass:260 dwarn:0 dfail:0 fail:2 skip:27 time:444s fi-ilk-650 total:289 pass:228 dwarn:0 dfail:0 fail:0 skip:61 time:419s fi-ivb-3520m total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:501s fi-ivb-3770 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:462s fi-kbl-7500u total:289 pass:262 dwarn:1 dfail:0 fail:2 skip:24 time:505s fi-kbl-7560u total:245 pass:228 dwarn:0 dfail:0 fail:0 skip:16 fi-kbl-7567u total:289 pass:267 dwarn:0 dfail:0 fail:2 skip:20 time:499s fi-kbl-r total:289 pass:260 dwarn:0 dfail:0 fail:2 skip:27 time:592s fi-pnv-d510 total:289 pass:222 dwarn:1 dfail:0 fail:0 skip:66 time:545s fi-skl-6260u total:289 pass:267 dwarn:0 dfail:0 fail:2 skip:20 time:465s fi-skl-6600u total:289 pass:260 dwarn:0 dfail:0 fail:2 skip:27 time:598s fi-skl-6700hq total:289 pass:261 dwarn:0 dfail:0 fail:2 skip:26 time:660s fi-skl-6700k total:289 pass:263 dwarn:0 dfail:0 fail:2 skip:24 time:535s fi-skl-6770hq total:289 pass:267 dwarn:0 dfail:0 fail:2 skip:20 time:515s fi-skl-gvtdvm total:289 pass:266 dwarn:0 dfail:0 fail:0 skip:23 time:458s fi-snb-2520m total:289 pass:250 dwarn:0 dfail:0 fail:0 skip:39 time:559s fi-snb-2600 total:289 pass:249 dwarn:0 dfail:0 fail:0 skip:40 time:415s fi-gdg-551 failed to connect after reboot 5cbec54b8fde4142d7e3f09e62fc9e17fb9fe516 drm-tip: 2017y-10m-31d-00h-01m-01s UTC integration manifest ca8a42579aef i915/drrs/debugfs: module param and psr status c958c8e33a91 drm/i915: Runtime disable for eDP DRRS == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_6273/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage 2017-09-19 18:12 ` Rodrigo Vivi ` (2 preceding siblings ...) 2017-10-31 9:48 ` ✓ Fi.CI.BAT: success " Patchwork @ 2017-10-31 10:33 ` Patchwork 2017-11-08 7:26 ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) Patchwork ` (16 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-10-31 10:33 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage URL : https://patchwork.freedesktop.org/series/32888/ State : warning == Summary == IGT patchset tested on top of latest successful build 7aac0e88606ce453b111ce80419dc58519db05ad assembler: Fix bashism in run-test.sh with latest DRM-Tip kernel build CI_DRM_3300 dfe1410689e6 drm-tip: 2017y-10m-31d-09h-42m-59s UTC integration manifest Testlist changes: +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-1p-pri-indfb-multidraw +igt@kms_frontbuffer_tracking@drrs-1p-rte +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw +igt@kms_frontbuffer_tracking@drrs-2p-rte +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-farfromfence +igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary +igt@kms_frontbuffer_tracking@drrs-modesetfrombusy +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-blt +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-render +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-blt +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-render +igt@kms_frontbuffer_tracking@drrs-shrfb-scaledprimary +igt@kms_frontbuffer_tracking@drrs-slowdraw +igt@kms_frontbuffer_tracking@drrs-suspend +igt@kms_frontbuffer_tracking@fbcdrrs-1p-indfb-fliptrack +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw +igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte +igt@kms_frontbuffer_tracking@fbcdrrs-1p-shrfb-fliptrack +igt@kms_frontbuffer_tracking@fbcdrrs-2p-indfb-fliptrack +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-2p-pri-indfb-multidraw +igt@kms_frontbuffer_tracking@fbcdrrs-2p-rte +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-2p-shrfb-fliptrack +igt@kms_frontbuffer_tracking@fbcdrrs-badstride +igt@kms_frontbuffer_tracking@fbcdrrs-farfromfence +igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary +igt@kms_frontbuffer_tracking@fbcdrrs-modesetfrombusy +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-shrfb-scaledprimary +igt@kms_frontbuffer_tracking@fbcdrrs-slowdraw +igt@kms_frontbuffer_tracking@fbcdrrs-stridechange +igt@kms_frontbuffer_tracking@fbcdrrs-suspend +igt@kms_frontbuffer_tracking@fbcdrrs-tilingchange Test kms_frontbuffer_tracking: Subgroup basic: pass -> SKIP (fi-snb-2520m) pass -> SKIP (fi-snb-2600) pass -> SKIP (fi-ivb-3520m) pass -> SKIP (fi-ivb-3770) pass -> SKIP (fi-byt-j1900) pass -> SKIP (fi-hsw-4770) pass -> SKIP (fi-hsw-4770r) pass -> SKIP (fi-bdw-5557u) fdo#102473 pass -> SKIP (fi-bdw-gvtdvm) pass -> SKIP (fi-bsw-n3050) pass -> SKIP (fi-skl-6260u) pass -> SKIP (fi-skl-6600u) == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_449/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) 2017-09-19 18:12 ` Rodrigo Vivi ` (3 preceding siblings ...) 2017-10-31 10:33 ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage Patchwork @ 2017-11-08 7:26 ` Patchwork 2017-11-08 8:11 ` ✗ Fi.CI.IGT: warning " Patchwork ` (15 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-11-08 7:26 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx == Series Details == Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) URL : https://patchwork.freedesktop.org/series/32887/ State : success == Summary == Series 32887v3 series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS https://patchwork.freedesktop.org/api/1.0/series/32887/revisions/3/mbox/ Test core_auth: Subgroup basic-auth: pass -> DMESG-WARN (fi-bsw-n3050) fdo#103479 Test gem_exec_reloc: Subgroup basic-cpu-gtt-active: pass -> FAIL (fi-gdg-551) fdo#102582 +1 Test kms_cursor_legacy: Subgroup basic-busy-flip-before-cursor-legacy: pass -> FAIL (fi-gdg-551) fdo#102618 Test kms_pipe_crc_basic: Subgroup read-crc-pipe-b: skip -> PASS (fi-hsw-4770r) fdo#103479 https://bugs.freedesktop.org/show_bug.cgi?id=103479 fdo#102582 https://bugs.freedesktop.org/show_bug.cgi?id=102582 fdo#102618 https://bugs.freedesktop.org/show_bug.cgi?id=102618 fi-bdw-5557u total:289 pass:268 dwarn:0 dfail:0 fail:0 skip:21 time:451s fi-bdw-gvtdvm total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:455s fi-blb-e6850 total:289 pass:223 dwarn:1 dfail:0 fail:0 skip:65 time:380s fi-bsw-n3050 total:289 pass:242 dwarn:1 dfail:0 fail:0 skip:46 time:544s fi-bwr-2160 total:289 pass:183 dwarn:0 dfail:0 fail:0 skip:106 time:276s fi-bxt-dsi total:289 pass:259 dwarn:0 dfail:0 fail:0 skip:30 time:507s fi-bxt-j4205 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:504s fi-byt-j1900 total:289 pass:253 dwarn:1 dfail:0 fail:0 skip:35 time:513s fi-byt-n2820 total:289 pass:249 dwarn:1 dfail:0 fail:0 skip:39 time:487s fi-cfl-s total:289 pass:254 dwarn:3 dfail:0 fail:0 skip:32 time:553s fi-cnl-y total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:608s fi-elk-e7500 total:289 pass:229 dwarn:0 dfail:0 fail:0 skip:60 time:430s fi-gdg-551 total:289 pass:175 dwarn:1 dfail:0 fail:4 skip:109 time:271s fi-glk-1 total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:588s fi-glk-dsi total:289 pass:258 dwarn:0 dfail:0 fail:1 skip:30 time:492s fi-hsw-4770 total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:431s fi-hsw-4770r total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:434s fi-ilk-650 total:289 pass:228 dwarn:0 dfail:0 fail:0 skip:61 time:427s fi-ivb-3520m total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:500s fi-ivb-3770 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:459s fi-kbl-7500u total:289 pass:264 dwarn:1 dfail:0 fail:0 skip:24 time:502s fi-kbl-7560u total:289 pass:270 dwarn:0 dfail:0 fail:0 skip:19 time:575s fi-kbl-7567u total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:480s fi-kbl-r total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:588s fi-pnv-d510 total:289 pass:222 dwarn:1 dfail:0 fail:0 skip:66 time:571s fi-skl-6260u total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:454s fi-skl-6600u total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:591s fi-skl-6700hq total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:652s fi-skl-6700k total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:518s fi-skl-6770hq total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:506s fi-skl-gvtdvm total:289 pass:266 dwarn:0 dfail:0 fail:0 skip:23 time:463s fi-snb-2520m total:289 pass:250 dwarn:0 dfail:0 fail:0 skip:39 time:572s fi-snb-2600 total:289 pass:249 dwarn:0 dfail:0 fail:0 skip:40 time:424s eb031b266f224a2b9ded3b0b5c425991fea8f8c5 drm-tip: 2017y-11m-07d-14h-27m-25s UTC integration manifest c3f6b5f63bb0 i915/drrs/debugfs: crtc id and psr status eb9c483dfade drm/i915: Runtime disable for eDP DRRS == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_6998/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.IGT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) 2017-09-19 18:12 ` Rodrigo Vivi ` (4 preceding siblings ...) 2017-11-08 7:26 ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) Patchwork @ 2017-11-08 8:11 ` Patchwork 2017-11-10 16:49 ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2) Patchwork ` (14 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-11-08 8:11 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx == Series Details == Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) URL : https://patchwork.freedesktop.org/series/32887/ State : warning == Summary == Test kms_setmode: Subgroup basic: fail -> PASS (shard-hsw) fdo#99912 Test drv_module_reload: Subgroup basic-reload: dmesg-warn -> PASS (shard-hsw) fdo#102707 Test kms_cursor_crc: Subgroup cursor-128x42-offscreen: pass -> SKIP (shard-hsw) Test drm_read: Subgroup invalid-buffer: pass -> SKIP (shard-hsw) fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912 fdo#102707 https://bugs.freedesktop.org/show_bug.cgi?id=102707 shard-hsw total:2540 pass:1431 dwarn:1 dfail:0 fail:9 skip:1099 time:9230s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_6998/shards.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2) 2017-09-19 18:12 ` Rodrigo Vivi ` (5 preceding siblings ...) 2017-11-08 8:11 ` ✗ Fi.CI.IGT: warning " Patchwork @ 2017-11-10 16:49 ` Patchwork 2017-11-20 4:46 ` ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork ` (13 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-11-10 16:49 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2) URL : https://patchwork.freedesktop.org/series/32888/ State : warning == Summary == IGT patchset tested on top of latest successful build 7d75119b7f23fb49af52463da9bcd62e64fe6a6f lib: Always enable ftrace-dump-on-oops with latest DRM-Tip kernel build CI_DRM_3331 6f3dca38f7a9 drm-tip: 2017y-11m-10d-12h-56m-44s UTC integration manifest Testlist changes: +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-1p-pri-indfb-multidraw +igt@kms_frontbuffer_tracking@drrs-1p-rte +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw +igt@kms_frontbuffer_tracking@drrs-2p-rte +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@drrs-farfromfence +igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary +igt@kms_frontbuffer_tracking@drrs-modesetfrombusy +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-blt +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-rgb565-draw-render +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-blt +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-cpu +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-gtt +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-pwrite +igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-render +igt@kms_frontbuffer_tracking@drrs-shrfb-scaledprimary +igt@kms_frontbuffer_tracking@drrs-slowdraw +igt@kms_frontbuffer_tracking@drrs-suspend +igt@kms_frontbuffer_tracking@fbcdrrs-1p-indfb-fliptrack +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw +igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte +igt@kms_frontbuffer_tracking@fbcdrrs-1p-shrfb-fliptrack +igt@kms_frontbuffer_tracking@fbcdrrs-2p-indfb-fliptrack +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-2p-pri-indfb-multidraw +igt@kms_frontbuffer_tracking@fbcdrrs-2p-rte +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-msflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-pgflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-plflip-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-fullscreen +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-move +igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-onoff +igt@kms_frontbuffer_tracking@fbcdrrs-2p-shrfb-fliptrack +igt@kms_frontbuffer_tracking@fbcdrrs-badstride +igt@kms_frontbuffer_tracking@fbcdrrs-farfromfence +igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary +igt@kms_frontbuffer_tracking@fbcdrrs-modesetfrombusy +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-rgb565-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-blt +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-cpu +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-gtt +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-pwrite +igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-render +igt@kms_frontbuffer_tracking@fbcdrrs-shrfb-scaledprimary +igt@kms_frontbuffer_tracking@fbcdrrs-slowdraw +igt@kms_frontbuffer_tracking@fbcdrrs-stridechange +igt@kms_frontbuffer_tracking@fbcdrrs-suspend +igt@kms_frontbuffer_tracking@fbcdrrs-tilingchange Test gem_exec_suspend: Subgroup basic-s3: dmesg-fail -> PASS (fi-kbl-7560u) fdo#103039 Subgroup basic-s4-devices: dmesg-fail -> PASS (fi-kbl-7560u) fdo#102846 Test gem_flink_basic: Subgroup bad-flink: dmesg-warn -> PASS (fi-kbl-7560u) fdo#103049 +4 Test gem_linear_blits: Subgroup basic: incomplete -> PASS (fi-kbl-7560u) fdo#103163 Test kms_frontbuffer_tracking: Subgroup basic: pass -> SKIP (fi-snb-2520m) pass -> SKIP (fi-snb-2600) pass -> SKIP (fi-ivb-3520m) pass -> SKIP (fi-ivb-3770) == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_490/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) 2017-09-19 18:12 ` Rodrigo Vivi ` (6 preceding siblings ...) 2017-11-10 16:49 ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2) Patchwork @ 2017-11-20 4:46 ` Patchwork 2017-12-06 16:32 ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3) Patchwork ` (12 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-11-20 4:46 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx == Series Details == Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) URL : https://patchwork.freedesktop.org/series/32887/ State : warning == Summary == Series 32887v4 series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS https://patchwork.freedesktop.org/api/1.0/series/32887/revisions/4/mbox/ Test kms_pipe_crc_basic: Subgroup suspend-read-crc-pipe-b: incomplete -> PASS (fi-snb-2520m) fdo#103713 Test pm_rpm: Subgroup basic-rte: pass -> SKIP (fi-hsw-4770r) fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713 fi-bdw-5557u total:289 pass:268 dwarn:0 dfail:0 fail:0 skip:21 time:442s fi-bdw-gvtdvm total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:463s fi-blb-e6850 total:289 pass:223 dwarn:1 dfail:0 fail:0 skip:65 time:379s fi-bsw-n3050 total:289 pass:243 dwarn:0 dfail:0 fail:0 skip:46 time:542s fi-bwr-2160 total:289 pass:183 dwarn:0 dfail:0 fail:0 skip:106 time:278s fi-bxt-dsi total:289 pass:259 dwarn:0 dfail:0 fail:0 skip:30 time:508s fi-bxt-j4205 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:509s fi-byt-j1900 total:289 pass:254 dwarn:0 dfail:0 fail:0 skip:35 time:501s fi-byt-n2820 total:289 pass:250 dwarn:0 dfail:0 fail:0 skip:39 time:497s fi-gdg-551 total:289 pass:178 dwarn:1 dfail:0 fail:1 skip:109 time:267s fi-glk-1 total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:537s fi-hsw-4770 total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:429s fi-hsw-4770r total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:441s fi-ilk-650 total:289 pass:228 dwarn:0 dfail:0 fail:0 skip:61 time:433s fi-ivb-3520m total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:472s fi-ivb-3770 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:457s fi-kbl-7500u total:289 pass:264 dwarn:1 dfail:0 fail:0 skip:24 time:486s fi-kbl-7560u total:289 pass:270 dwarn:0 dfail:0 fail:0 skip:19 time:518s fi-kbl-7567u total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:478s fi-kbl-r total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:535s fi-pnv-d510 total:289 pass:222 dwarn:1 dfail:0 fail:0 skip:66 time:581s fi-skl-6260u total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:455s fi-skl-6600u total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:549s fi-skl-6700hq total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:573s fi-skl-6700k total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:527s fi-skl-6770hq total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:497s fi-skl-gvtdvm total:289 pass:266 dwarn:0 dfail:0 fail:0 skip:23 time:460s fi-snb-2520m total:289 pass:250 dwarn:0 dfail:0 fail:0 skip:39 time:557s fi-snb-2600 total:289 pass:249 dwarn:0 dfail:0 fail:0 skip:40 time:422s Blacklisted hosts: fi-cfl-s2 total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:607s fi-glk-dsi total:156 pass:133 dwarn:0 dfail:0 fail:0 skip:22 b4da24717364bc69bb981a1536be64413a582f3a drm-tip: 2017y-11m-17d-22h-46m-53s UTC integration manifest 6141dfec7eab i915/drrs/debugfs: psr status info addition 3907c7962b59 drm/i915: Runtime disable for eDP DRRS == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7196/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3) 2017-09-19 18:12 ` Rodrigo Vivi ` (7 preceding siblings ...) 2017-11-20 4:46 ` ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork @ 2017-12-06 16:32 ` Patchwork 2017-12-11 15:56 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) Patchwork ` (11 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-12-06 16:32 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3) URL : https://patchwork.freedesktop.org/series/32888/ State : warning == Summary == IGT patchset tested on top of latest successful build 1db12466cb5ad8483cd469753d2e312a62d717b7 meson: build a full dependency for lib_igt_perf with latest DRM-Tip kernel build CI_DRM_3465 01b30547063a drm-tip: 2017y-12m-06d-15h-18m-33s UTC integration manifest Testlist changes: +++ 285 lines --- 0 lines Test debugfs_test: Subgroup read_all_entries: dmesg-warn -> DMESG-FAIL (fi-elk-e7500) fdo#103989 +1 Test kms_frontbuffer_tracking: Subgroup basic: pass -> SKIP (fi-snb-2520m) pass -> SKIP (fi-snb-2600) pass -> SKIP (fi-ivb-3520m) pass -> SKIP (fi-ivb-3770) pass -> SKIP (fi-byt-j1900) pass -> SKIP (fi-byt-n2820) pass -> SKIP (fi-hsw-4770) pass -> SKIP (fi-bdw-5557u) fdo#102473 pass -> SKIP (fi-bsw-n3050) pass -> SKIP (fi-skl-6260u) pass -> SKIP (fi-skl-6600u) pass -> SKIP (fi-skl-6700hq) pass -> SKIP (fi-skl-6700k) fdo#103735 pass -> SKIP (fi-skl-6770hq) pass -> SKIP (fi-bxt-dsi) pass -> SKIP (fi-bxt-j4205) pass -> SKIP (fi-kbl-7560u) pass -> SKIP (fi-kbl-7567u) pass -> SKIP (fi-kbl-r) pass -> SKIP (fi-glk-1) fdo#103167 Test kms_pipe_crc_basic: Subgroup hang-read-crc-pipe-a: notrun -> INCOMPLETE (fi-elk-e7500) Subgroup suspend-read-crc-pipe-b: pass -> INCOMPLETE (fi-snb-2520m) fdo#103713 fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989 fdo#102473 https://bugs.freedesktop.org/show_bug.cgi?id=102473 fdo#103735 https://bugs.freedesktop.org/show_bug.cgi?id=103735 fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167 fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713 fi-bdw-5557u total:288 pass:266 dwarn:0 dfail:0 fail:0 skip:22 time:439s fi-blb-e6850 total:288 pass:223 dwarn:1 dfail:0 fail:0 skip:64 time:392s fi-bsw-n3050 total:288 pass:241 dwarn:0 dfail:0 fail:0 skip:47 time:519s fi-bwr-2160 total:288 pass:183 dwarn:0 dfail:0 fail:0 skip:105 time:284s fi-bxt-dsi total:288 pass:257 dwarn:0 dfail:0 fail:0 skip:31 time:508s fi-bxt-j4205 total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:510s fi-byt-j1900 total:288 pass:252 dwarn:0 dfail:0 fail:0 skip:36 time:488s fi-byt-n2820 total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:477s fi-elk-e7500 total:229 pass:167 dwarn:14 dfail:1 fail:0 skip:46 fi-gdg-551 total:288 pass:178 dwarn:1 dfail:0 fail:1 skip:108 time:269s fi-glk-1 total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:530s fi-hsw-4770 total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:369s fi-hsw-4770r total:288 pass:224 dwarn:0 dfail:0 fail:0 skip:64 time:260s fi-ivb-3520m total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:479s fi-ivb-3770 total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:455s fi-kbl-7560u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:523s fi-kbl-7567u total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:475s fi-kbl-r total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:530s fi-skl-6260u total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:458s fi-skl-6600u total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:539s fi-skl-6700hq total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:554s fi-skl-6700k total:288 pass:263 dwarn:0 dfail:0 fail:0 skip:25 time:513s fi-skl-6770hq total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:493s fi-snb-2520m total:245 pass:210 dwarn:0 dfail:0 fail:0 skip:34 fi-snb-2600 total:288 pass:247 dwarn:0 dfail:0 fail:0 skip:41 time:424s Blacklisted hosts: fi-cfl-s2 total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:611s fi-cnl-y total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:615s fi-glk-dsi total:288 pass:257 dwarn:0 dfail:0 fail:0 skip:31 time:490s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_601/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) 2017-09-19 18:12 ` Rodrigo Vivi ` (8 preceding siblings ...) 2017-12-06 16:32 ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3) Patchwork @ 2017-12-11 15:56 ` Patchwork 2017-12-11 17:11 ` ✗ Fi.CI.IGT: failure " Patchwork ` (10 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-12-11 15:56 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) URL : https://patchwork.freedesktop.org/series/32888/ State : success == Summary == IGT patchset tested on top of latest successful build 4d40a6776f08dd87b7e007da691b73d45a9bf1fa igt_fb: Add support for drawing to non-32bit Y/Yf tiled FBs with latest DRM-Tip kernel build CI_DRM_3497 bb55ba9311de drm-tip: 2017y-12m-11d-11h-51m-11s UTC integration manifest Testlist changes: +++ 570 lines --- 0 lines Test debugfs_test: Subgroup read_all_entries: dmesg-fail -> FAIL (fi-elk-e7500) fdo#103989 +1 fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989 fi-bdw-5557u total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:440s fi-bdw-gvtdvm total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:447s fi-blb-e6850 total:288 pass:223 dwarn:1 dfail:0 fail:0 skip:64 time:382s fi-bsw-n3050 total:288 pass:242 dwarn:0 dfail:0 fail:0 skip:46 time:519s fi-bwr-2160 total:288 pass:183 dwarn:0 dfail:0 fail:0 skip:105 time:280s fi-bxt-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:503s fi-bxt-j4205 total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:508s fi-byt-j1900 total:288 pass:253 dwarn:0 dfail:0 fail:0 skip:35 time:486s fi-byt-n2820 total:288 pass:249 dwarn:0 dfail:0 fail:0 skip:39 time:483s fi-elk-e7500 total:224 pass:162 dwarn:15 dfail:0 fail:1 skip:45 fi-gdg-551 total:288 pass:178 dwarn:1 dfail:0 fail:1 skip:108 time:271s fi-glk-1 total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:539s fi-hsw-4770 total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:371s fi-hsw-4770r total:288 pass:224 dwarn:0 dfail:0 fail:0 skip:64 time:259s fi-ilk-650 total:288 pass:228 dwarn:0 dfail:0 fail:0 skip:60 time:395s fi-ivb-3770 total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:456s fi-kbl-7500u total:288 pass:263 dwarn:1 dfail:0 fail:0 skip:24 time:486s fi-kbl-7560u total:288 pass:269 dwarn:0 dfail:0 fail:0 skip:19 time:528s fi-kbl-7567u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:474s fi-pnv-d510 total:288 pass:222 dwarn:1 dfail:0 fail:0 skip:65 time:603s fi-skl-6600u total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:541s fi-skl-6700hq total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:567s fi-skl-6700k total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:516s fi-skl-6770hq total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:493s fi-skl-gvtdvm total:288 pass:265 dwarn:0 dfail:0 fail:0 skip:23 time:447s fi-snb-2520m total:288 pass:249 dwarn:0 dfail:0 fail:0 skip:39 time:552s fi-snb-2600 total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:417s Blacklisted hosts: fi-cfl-s2 total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:607s fi-cnl-y total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:639s fi-glk-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:490s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_643/issues.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.IGT: failure for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) 2017-09-19 18:12 ` Rodrigo Vivi ` (9 preceding siblings ...) 2017-12-11 15:56 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) Patchwork @ 2017-12-11 17:11 ` Patchwork 2017-12-28 15:59 ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork ` (9 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-12-11 17:11 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) URL : https://patchwork.freedesktop.org/series/32888/ State : failure == Summary == Test kms_frontbuffer_tracking: Subgroup fbc-1p-primscrn-spr-indfb-fullscreen: pass -> FAIL (shard-snb) fdo#101623 +58 Subgroup fbc-rgb565-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-indfb-plflip-blt: pass -> FAIL (shard-snb) fdo#103167 +42 Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-spr-indfb-move: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-mmap-gtt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-tilingchange: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-onoff: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-spr-indfb-onoff: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-suspend: pass -> FAIL (shard-hsw) fdo#103540 Subgroup fbc-rgb101010-draw-blt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Test kms_flip: Subgroup vblank-vs-suspend-interruptible: incomplete -> PASS (shard-hsw) fdo#100368 Subgroup flip-vs-modeset-vs-hang: pass -> DMESG-WARN (shard-snb) fdo#103821 Subgroup vblank-vs-modeset-suspend: pass -> INCOMPLETE (shard-hsw) Test drv_suspend: Subgroup debugfs-reader: pass -> SKIP (shard-snb) Test gem_eio: Subgroup in-flight-suspend: skip -> PASS (shard-snb) pass -> INCOMPLETE (shard-hsw) Test perf: Subgroup oa-formats: pass -> FAIL (shard-hsw) fdo#104151 Subgroup blocking: pass -> FAIL (shard-hsw) fdo#102252 Test gem_softpin: Subgroup noreloc-s4: dmesg-fail -> FAIL (shard-hsw) fdo#103375 +1 Test gem_tiled_swapping: Subgroup non-threaded: incomplete -> PASS (shard-hsw) fdo#104009 fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623 fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167 fdo#103540 https://bugs.freedesktop.org/show_bug.cgi?id=103540 fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368 fdo#103821 https://bugs.freedesktop.org/show_bug.cgi?id=103821 fdo#104151 https://bugs.freedesktop.org/show_bug.cgi?id=104151 fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252 fdo#103375 https://bugs.freedesktop.org/show_bug.cgi?id=103375 fdo#104009 https://bugs.freedesktop.org/show_bug.cgi?id=104009 shard-hsw total:3222 pass:1444 dwarn:1 dfail:0 fail:81 skip:1694 time:8674s shard-snb total:3262 pass:1241 dwarn:2 dfail:0 fail:79 skip:1940 time:8062s Blacklisted hosts: shard-apl total:3262 pass:1616 dwarn:1 dfail:0 fail:94 skip:1550 time:13728s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_643/shards.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) 2017-09-19 18:12 ` Rodrigo Vivi ` (10 preceding siblings ...) 2017-12-11 17:11 ` ✗ Fi.CI.IGT: failure " Patchwork @ 2017-12-28 15:59 ` Patchwork 2017-12-28 16:45 ` ✓ Fi.CI.IGT: " Patchwork ` (8 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-12-28 15:59 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx == Series Details == Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) URL : https://patchwork.freedesktop.org/series/32887/ State : success == Summary == Series 32887v4 series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS https://patchwork.freedesktop.org/api/1.0/series/32887/revisions/4/mbox/ Test debugfs_test: Subgroup read_all_entries: dmesg-fail -> DMESG-WARN (fi-elk-e7500) fdo#103989 Test kms_pipe_crc_basic: Subgroup suspend-read-crc-pipe-b: pass -> DMESG-WARN (fi-kbl-r) fdo#104172 fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989 fdo#104172 https://bugs.freedesktop.org/show_bug.cgi?id=104172 fi-bdw-5557u total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:433s fi-blb-e6850 total:288 pass:223 dwarn:1 dfail:0 fail:0 skip:64 time:383s fi-bsw-n3050 total:288 pass:242 dwarn:0 dfail:0 fail:0 skip:46 time:495s fi-bwr-2160 total:288 pass:183 dwarn:0 dfail:0 fail:0 skip:105 time:276s fi-bxt-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:492s fi-bxt-j4205 total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:495s fi-byt-j1900 total:288 pass:253 dwarn:0 dfail:0 fail:0 skip:35 time:474s fi-byt-n2820 total:288 pass:249 dwarn:0 dfail:0 fail:0 skip:39 time:463s fi-elk-e7500 total:224 pass:163 dwarn:15 dfail:0 fail:0 skip:45 fi-gdg-551 total:288 pass:179 dwarn:0 dfail:0 fail:1 skip:108 time:265s fi-glk-1 total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:530s fi-hsw-4770 total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:406s fi-hsw-4770r total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:411s fi-ilk-650 total:288 pass:228 dwarn:0 dfail:0 fail:0 skip:60 time:421s fi-ivb-3520m total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:473s fi-ivb-3770 total:288 pass:255 dwarn:0 dfail:0 fail:0 skip:33 time:425s fi-kbl-7500u total:288 pass:263 dwarn:1 dfail:0 fail:0 skip:24 time:475s fi-kbl-7560u total:288 pass:268 dwarn:1 dfail:0 fail:0 skip:19 time:525s fi-kbl-7567u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:467s fi-kbl-r total:288 pass:260 dwarn:1 dfail:0 fail:0 skip:27 time:521s fi-pnv-d510 total:288 pass:222 dwarn:1 dfail:0 fail:0 skip:65 time:576s fi-skl-6260u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:447s fi-skl-6600u total:288 pass:260 dwarn:1 dfail:0 fail:0 skip:27 time:530s fi-skl-6700hq total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:548s fi-skl-6700k2 total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:511s fi-skl-6770hq total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:486s fi-skl-gvtdvm total:288 pass:265 dwarn:0 dfail:0 fail:0 skip:23 time:444s fi-snb-2520m total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:548s fi-snb-2600 total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:413s Blacklisted hosts: fi-cfl-s2 total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:597s fi-glk-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:477s 42a41a56eb45fc94c3beec3968faffb97ba3e375 drm-tip: 2017y-12m-27d-14h-36m-54s UTC integration manifest 0126beb4cc7e i915/drrs/debugfs: psr status info addition f7d75ffe3b38 drm/i915: Runtime disable for eDP DRRS == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7587/issues.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.IGT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) 2017-09-19 18:12 ` Rodrigo Vivi ` (11 preceding siblings ...) 2017-12-28 15:59 ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork @ 2017-12-28 16:45 ` Patchwork 2018-01-02 10:37 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) Patchwork ` (7 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2017-12-28 16:45 UTC (permalink / raw) To: Ramalingam C; +Cc: intel-gfx == Series Details == Series: series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) URL : https://patchwork.freedesktop.org/series/32887/ State : success == Summary == Test gem_tiled_swapping: Subgroup non-threaded: incomplete -> PASS (shard-hsw) fdo#104218 fdo#104218 https://bugs.freedesktop.org/show_bug.cgi?id=104218 shard-hsw total:2713 pass:1538 dwarn:1 dfail:0 fail:10 skip:1164 time:9467s shard-snb total:2713 pass:1311 dwarn:1 dfail:1 fail:9 skip:1391 time:8048s Blacklisted hosts: shard-apl total:2713 pass:1686 dwarn:2 dfail:0 fail:23 skip:1001 time:13784s shard-kbl total:2713 pass:1803 dwarn:3 dfail:0 fail:26 skip:881 time:11097s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7587/shards.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) 2017-09-19 18:12 ` Rodrigo Vivi ` (12 preceding siblings ...) 2017-12-28 16:45 ` ✓ Fi.CI.IGT: " Patchwork @ 2018-01-02 10:37 ` Patchwork 2018-01-02 13:26 ` ✗ Fi.CI.IGT: failure " Patchwork ` (6 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2018-01-02 10:37 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) URL : https://patchwork.freedesktop.org/series/32888/ State : success == Summary == IGT patchset tested on top of latest successful build 4cd4cc4873fc1c916b6bf7b058b12294e16dfd98 lib: Convert sw_sync to use sync_file uapi imported from the kernel with latest DRM-Tip kernel build CI_DRM_3586 16432d39f2cb drm-tip: 2017y-12m-30d-02h-25m-26s UTC integration manifest Testlist changes: +++ 570 lines --- 0 lines Test debugfs_test: Subgroup read_all_entries: pass -> INCOMPLETE (fi-snb-2520m) fdo#103713 Test kms_pipe_crc_basic: Subgroup suspend-read-crc-pipe-a: dmesg-warn -> PASS (fi-kbl-r) fdo#104172 +1 fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713 fdo#104172 https://bugs.freedesktop.org/show_bug.cgi?id=104172 fi-bdw-5557u total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:438s fi-bdw-gvtdvm total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:437s fi-blb-e6850 total:288 pass:223 dwarn:1 dfail:0 fail:0 skip:64 time:381s fi-bsw-n3050 total:288 pass:242 dwarn:0 dfail:0 fail:0 skip:46 time:498s fi-bwr-2160 total:288 pass:183 dwarn:0 dfail:0 fail:0 skip:105 time:277s fi-bxt-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:500s fi-bxt-j4205 total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:486s fi-byt-j1900 total:288 pass:253 dwarn:0 dfail:0 fail:0 skip:35 time:479s fi-byt-n2820 total:288 pass:249 dwarn:0 dfail:0 fail:0 skip:39 time:469s fi-elk-e7500 total:224 pass:163 dwarn:14 dfail:1 fail:0 skip:45 fi-gdg-551 total:288 pass:179 dwarn:0 dfail:0 fail:1 skip:108 time:265s fi-glk-1 total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:540s fi-hsw-4770 total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:406s fi-hsw-4770r total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:413s fi-ilk-650 total:288 pass:228 dwarn:0 dfail:0 fail:0 skip:60 time:429s fi-ivb-3520m total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:479s fi-ivb-3770 total:288 pass:255 dwarn:0 dfail:0 fail:0 skip:33 time:431s fi-kbl-7500u total:288 pass:263 dwarn:1 dfail:0 fail:0 skip:24 time:482s fi-kbl-7560u total:288 pass:268 dwarn:1 dfail:0 fail:0 skip:19 time:521s fi-kbl-7567u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:465s fi-kbl-r total:288 pass:260 dwarn:1 dfail:0 fail:0 skip:27 time:521s fi-pnv-d510 total:288 pass:222 dwarn:1 dfail:0 fail:0 skip:65 time:594s fi-skl-6260u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:452s fi-skl-6600u total:288 pass:260 dwarn:1 dfail:0 fail:0 skip:27 time:530s fi-skl-6700hq total:288 pass:261 dwarn:1 dfail:0 fail:0 skip:26 time:557s fi-skl-6700k2 total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:517s fi-skl-6770hq total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:504s fi-skl-gvtdvm total:288 pass:265 dwarn:0 dfail:0 fail:0 skip:23 time:442s fi-snb-2520m total:3 pass:2 dwarn:0 dfail:0 fail:0 skip:0 fi-snb-2600 total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:417s Blacklisted hosts: fi-cfl-s2 total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:596s fi-cnl-y total:265 pass:239 dwarn:0 dfail:0 fail:0 skip:25 fi-glk-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:481s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_734/issues.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.IGT: failure for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) 2017-09-19 18:12 ` Rodrigo Vivi ` (13 preceding siblings ...) 2018-01-02 10:37 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) Patchwork @ 2018-01-02 13:26 ` Patchwork 2018-01-03 15:30 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) Patchwork ` (5 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2018-01-02 13:26 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) URL : https://patchwork.freedesktop.org/series/32888/ State : failure == Summary == Test kms_frontbuffer_tracking: Subgroup fbc-rgb565-draw-mmap-wc: pass -> FAIL (shard-snb) fdo#101623 +60 Subgroup fbc-rgb101010-draw-mmap-cpu: pass -> FAIL (shard-snb) fdo#103167 +43 Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-onoff: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-blt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-tilingchange: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-spr-indfb-onoff: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb565-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-mmap-gtt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-suspend: pass -> FAIL (shard-hsw) fdo#103540 Test kms_flip: Subgroup wf_vblank-vs-modeset-interruptible: dmesg-warn -> PASS (shard-hsw) fdo#102614 Test gem_tiled_swapping: Subgroup non-threaded: pass -> INCOMPLETE (shard-snb) fdo#104218 Test drv_suspend: Subgroup fence-restore-tiled2untiled-hibernate: dmesg-fail -> FAIL (shard-snb) fdo#103375 fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623 fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167 fdo#103540 https://bugs.freedesktop.org/show_bug.cgi?id=103540 fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614 fdo#104218 https://bugs.freedesktop.org/show_bug.cgi?id=104218 fdo#103375 https://bugs.freedesktop.org/show_bug.cgi?id=103375 shard-hsw total:3283 pass:1470 dwarn:1 dfail:0 fail:79 skip:1733 time:9220s shard-snb total:3242 pass:1230 dwarn:1 dfail:0 fail:78 skip:1932 time:7792s Blacklisted hosts: shard-apl total:3261 pass:1591 dwarn:1 dfail:0 fail:97 skip:1570 time:13183s shard-kbl total:3265 pass:1672 dwarn:42 dfail:2 fail:98 skip:1450 time:10596s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_734/shards.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) 2017-09-19 18:12 ` Rodrigo Vivi ` (14 preceding siblings ...) 2018-01-02 13:26 ` ✗ Fi.CI.IGT: failure " Patchwork @ 2018-01-03 15:30 ` Patchwork 2018-01-03 18:49 ` ✗ Fi.CI.IGT: failure " Patchwork ` (4 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2018-01-03 15:30 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) URL : https://patchwork.freedesktop.org/series/32888/ State : success == Summary == IGT patchset tested on top of latest successful build 58bd37d347d1369ecd272ff778057ee8004d6b15 kms_atomic_transition: Remove skip_on_unsupported_nonblocking_modeset. with latest DRM-Tip kernel build CI_DRM_3594 c7b14d3fc187 drm-tip: 2018y-01m-03d-14h-04m-27s UTC integration manifest Testlist changes: +++ 570 lines --- 0 lines fi-bdw-5557u total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:435s fi-bdw-gvtdvm total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:443s fi-blb-e6850 total:288 pass:223 dwarn:1 dfail:0 fail:0 skip:64 time:393s fi-bsw-n3050 total:288 pass:242 dwarn:0 dfail:0 fail:0 skip:46 time:505s fi-bwr-2160 total:288 pass:183 dwarn:0 dfail:0 fail:0 skip:105 time:276s fi-bxt-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:494s fi-bxt-j4205 total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:494s fi-byt-j1900 total:288 pass:253 dwarn:0 dfail:0 fail:0 skip:35 time:483s fi-byt-n2820 total:288 pass:249 dwarn:0 dfail:0 fail:0 skip:39 time:470s fi-elk-e7500 total:224 pass:168 dwarn:10 dfail:0 fail:0 skip:45 fi-gdg-551 total:288 pass:179 dwarn:0 dfail:0 fail:1 skip:108 time:264s fi-glk-1 total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:525s fi-hsw-4770 total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:404s fi-hsw-4770r total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:418s fi-ilk-650 total:288 pass:228 dwarn:0 dfail:0 fail:0 skip:60 time:426s fi-ivb-3520m total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:473s fi-ivb-3770 total:288 pass:255 dwarn:0 dfail:0 fail:0 skip:33 time:430s fi-kbl-7500u total:288 pass:263 dwarn:1 dfail:0 fail:0 skip:24 time:482s fi-kbl-7560u total:288 pass:268 dwarn:1 dfail:0 fail:0 skip:19 time:511s fi-kbl-7567u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:466s fi-kbl-r total:288 pass:260 dwarn:1 dfail:0 fail:0 skip:27 time:514s fi-pnv-d510 total:288 pass:222 dwarn:1 dfail:0 fail:0 skip:65 time:588s fi-skl-6260u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:458s fi-skl-6600u total:288 pass:260 dwarn:1 dfail:0 fail:0 skip:27 time:524s fi-skl-6700hq total:288 pass:261 dwarn:1 dfail:0 fail:0 skip:26 time:542s fi-skl-6700k2 total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:510s fi-skl-6770hq total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:510s fi-skl-gvtdvm total:288 pass:265 dwarn:0 dfail:0 fail:0 skip:23 time:449s fi-snb-2520m total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:543s fi-snb-2600 total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:413s Blacklisted hosts: fi-cfl-s2 total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:572s fi-glk-dsi total:288 pass:257 dwarn:0 dfail:0 fail:1 skip:30 time:501s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_737/issues.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.IGT: failure for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) 2017-09-19 18:12 ` Rodrigo Vivi ` (15 preceding siblings ...) 2018-01-03 15:30 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) Patchwork @ 2018-01-03 18:49 ` Patchwork 2018-01-05 12:04 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) Patchwork ` (3 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2018-01-03 18:49 UTC (permalink / raw) To: Bs, Lohith; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) URL : https://patchwork.freedesktop.org/series/32888/ State : failure == Summary == Test kms_frontbuffer_tracking: Subgroup fbc-rgb101010-draw-mmap-gtt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-shrfb-pgflip-blt: pass -> FAIL (shard-snb) fdo#101623 +59 Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-wc: pass -> FAIL (shard-snb) fdo#103167 +42 Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-onoff: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-spr-indfb-onoff: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-blt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-suspend: pass -> FAIL (shard-hsw) fdo#103540 Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb565-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-tilingchange: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Test kms_pipe_crc_basic: Subgroup suspend-read-crc-pipe-b: pass -> SKIP (shard-snb) fdo#103375 Test kms_draw_crc: Subgroup draw-method-xrgb2101010-blt-untiled: skip -> PASS (shard-hsw) Test kms_flip: Subgroup flip-vs-dpms-off-vs-modeset-interruptible: skip -> PASS (shard-hsw) Test kms_chv_cursor_fail: Subgroup pipe-a-128x128-right-edge: skip -> PASS (shard-hsw) Test kms_busy: Subgroup basic-flip-b: skip -> PASS (shard-hsw) Test kms_cursor_crc: Subgroup cursor-128x128-sliding: skip -> PASS (shard-hsw) fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623 fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167 fdo#103540 https://bugs.freedesktop.org/show_bug.cgi?id=103540 fdo#103375 https://bugs.freedesktop.org/show_bug.cgi?id=103375 shard-hsw total:3256 pass:1458 dwarn:1 dfail:0 fail:79 skip:1717 time:8960s shard-snb total:3283 pass:1242 dwarn:1 dfail:0 fail:79 skip:1961 time:7956s Blacklisted hosts: shard-apl total:3261 pass:1594 dwarn:1 dfail:0 fail:95 skip:1570 time:13183s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_737/shards.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) 2017-09-19 18:12 ` Rodrigo Vivi ` (16 preceding siblings ...) 2018-01-03 18:49 ` ✗ Fi.CI.IGT: failure " Patchwork @ 2018-01-05 12:04 ` Patchwork 2018-01-05 13:25 ` ✗ Fi.CI.IGT: failure " Patchwork ` (2 subsequent siblings) 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2018-01-05 12:04 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) URL : https://patchwork.freedesktop.org/series/32888/ State : success == Summary == IGT patchset tested on top of latest successful build 6db24416fdcdf5571125f9005089241cc6ba2652 lib/gem: Reset the global seqno at the start of each test with latest DRM-Tip kernel build CI_DRM_3604 914d61a8fb5f drm-tip: 2018y-01m-05d-09h-12m-18s UTC integration manifest Testlist changes: +++ 570 lines --- 0 lines Test gem_exec_suspend: Subgroup basic-s4-devices: pass -> DMESG-WARN (fi-elk-e7500) fdo#103989 Test kms_pipe_crc_basic: Subgroup suspend-read-crc-pipe-a: pass -> DMESG-WARN (fi-snb-2600) fdo#102365 pass -> DMESG-WARN (fi-kbl-r) fdo#104172 +1 Test kms_psr_sink_crc: Subgroup psr_basic: dmesg-warn -> PASS (fi-skl-6700hq) fdo#104260 fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989 fdo#102365 https://bugs.freedesktop.org/show_bug.cgi?id=102365 fdo#104172 https://bugs.freedesktop.org/show_bug.cgi?id=104172 fdo#104260 https://bugs.freedesktop.org/show_bug.cgi?id=104260 fi-bdw-5557u total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:426s fi-bdw-gvtdvm total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:424s fi-blb-e6850 total:288 pass:223 dwarn:1 dfail:0 fail:0 skip:64 time:368s fi-bsw-n3050 total:288 pass:242 dwarn:0 dfail:0 fail:0 skip:46 time:487s fi-bwr-2160 total:288 pass:183 dwarn:0 dfail:0 fail:0 skip:105 time:278s fi-bxt-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:478s fi-bxt-j4205 total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:492s fi-byt-j1900 total:288 pass:253 dwarn:0 dfail:0 fail:0 skip:35 time:466s fi-byt-n2820 total:288 pass:249 dwarn:0 dfail:0 fail:0 skip:39 time:460s fi-elk-e7500 total:224 pass:168 dwarn:10 dfail:0 fail:0 skip:45 fi-glk-1 total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:511s fi-hsw-4770 total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:393s fi-hsw-4770r total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:402s fi-ilk-650 total:288 pass:228 dwarn:0 dfail:0 fail:0 skip:60 time:412s fi-ivb-3520m total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:460s fi-ivb-3770 total:288 pass:255 dwarn:0 dfail:0 fail:0 skip:33 time:411s fi-kbl-7500u total:288 pass:263 dwarn:1 dfail:0 fail:0 skip:24 time:467s fi-kbl-7560u total:288 pass:268 dwarn:1 dfail:0 fail:0 skip:19 time:500s fi-kbl-7567u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:452s fi-kbl-r total:288 pass:260 dwarn:1 dfail:0 fail:0 skip:27 time:500s fi-pnv-d510 total:288 pass:222 dwarn:1 dfail:0 fail:0 skip:65 time:578s fi-skl-6260u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:433s fi-skl-6600u total:288 pass:260 dwarn:1 dfail:0 fail:0 skip:27 time:508s fi-skl-6700hq total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:531s fi-skl-6700k2 total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:494s fi-skl-6770hq total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:491s fi-skl-gvtdvm total:288 pass:265 dwarn:0 dfail:0 fail:0 skip:23 time:434s fi-snb-2520m total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:521s fi-snb-2600 total:288 pass:247 dwarn:1 dfail:0 fail:0 skip:40 time:399s Blacklisted hosts: fi-cfl-s2 total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:566s fi-cnl-y total:224 pass:199 dwarn:0 dfail:0 fail:0 skip:24 == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_749/issues.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✗ Fi.CI.IGT: failure for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) 2017-09-19 18:12 ` Rodrigo Vivi ` (17 preceding siblings ...) 2018-01-05 12:04 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) Patchwork @ 2018-01-05 13:25 ` Patchwork 2018-01-10 15:11 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) Patchwork 2018-01-10 16:14 ` ✓ Fi.CI.IGT: " Patchwork 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2018-01-05 13:25 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) URL : https://patchwork.freedesktop.org/series/32888/ State : failure == Summary == Test kms_frontbuffer_tracking: Subgroup fbc-1p-pri-indfb-multidraw: pass -> FAIL (shard-snb) fdo#103167 +43 Subgroup fbc-stridechange: pass -> FAIL (shard-snb) fdo#101623 +61 Subgroup fbc-tilingchange: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb565-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-blt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-onoff: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-suspend: pass -> FAIL (shard-hsw) fdo#103540 Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-spr-indfb-onoff: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-pwrite: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-rgb101010-draw-mmap-gtt: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu: pass -> FAIL (shard-snb) pass -> FAIL (shard-hsw) Test kms_flip: Subgroup basic-flip-vs-dpms: dmesg-warn -> PASS (shard-hsw) fdo#102614 Subgroup vblank-vs-modeset-suspend-interruptible: skip -> PASS (shard-snb) Test perf: Subgroup polling: pass -> FAIL (shard-hsw) fdo#102252 Test kms_busy: Subgroup extended-modeset-hang-oldfb-with-reset-render-a: skip -> PASS (shard-snb) Test kms_setmode: Subgroup basic: pass -> FAIL (shard-hsw) fdo#99912 Test gem_tiled_swapping: Subgroup non-threaded: incomplete -> PASS (shard-hsw) fdo#104218 Test kms_cursor_legacy: Subgroup cursor-vs-flip-toggle: skip -> PASS (shard-hsw) fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167 fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623 fdo#103540 https://bugs.freedesktop.org/show_bug.cgi?id=103540 fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614 fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252 fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912 fdo#104218 https://bugs.freedesktop.org/show_bug.cgi?id=104218 shard-hsw total:3283 pass:1469 dwarn:1 dfail:0 fail:80 skip:1733 time:8832s shard-snb total:3283 pass:1243 dwarn:1 dfail:0 fail:79 skip:1960 time:7729s Blacklisted hosts: shard-apl total:3283 pass:1612 dwarn:1 dfail:0 fail:99 skip:1571 time:13272s shard-kbl total:3283 pass:1738 dwarn:1 dfail:0 fail:96 skip:1448 time:10400s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_749/shards.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) 2017-09-19 18:12 ` Rodrigo Vivi ` (18 preceding siblings ...) 2018-01-05 13:25 ` ✗ Fi.CI.IGT: failure " Patchwork @ 2018-01-10 15:11 ` Patchwork 2018-01-10 16:14 ` ✓ Fi.CI.IGT: " Patchwork 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2018-01-10 15:11 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) URL : https://patchwork.freedesktop.org/series/32888/ State : success == Summary == IGT patchset tested on top of latest successful build 19c6c040b11d7a7068c66ae918a88c150243279b lib/igt_kms.c: Unconditionally include poll.h with latest DRM-Tip kernel build CI_DRM_3619 4269b88bf52f drm-tip: 2018y-01m-10d-14h-03m-47s UTC integration manifest Testlist changes: +++ 570 lines --- 0 lines Test debugfs_test: Subgroup read_all_entries: dmesg-fail -> DMESG-WARN (fi-elk-e7500) fdo#103989 Test gem_exec_fence: Subgroup await-hang-default: dmesg-fail -> PASS (fi-pnv-d510) fdo#104572 Test kms_pipe_crc_basic: Subgroup suspend-read-crc-pipe-a: pass -> DMESG-WARN (fi-kbl-r) fdo#104172 +1 fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989 fdo#104572 https://bugs.freedesktop.org/show_bug.cgi?id=104572 fdo#104172 https://bugs.freedesktop.org/show_bug.cgi?id=104172 fi-bdw-5557u total:288 pass:267 dwarn:0 dfail:0 fail:0 skip:21 time:423s fi-blb-e6850 total:288 pass:223 dwarn:1 dfail:0 fail:0 skip:64 time:381s fi-bsw-n3050 total:288 pass:242 dwarn:0 dfail:0 fail:0 skip:46 time:500s fi-bwr-2160 total:288 pass:183 dwarn:0 dfail:0 fail:0 skip:105 time:280s fi-bxt-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:490s fi-bxt-j4205 total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:493s fi-byt-j1900 total:288 pass:253 dwarn:0 dfail:0 fail:0 skip:35 time:471s fi-byt-n2820 total:288 pass:249 dwarn:0 dfail:0 fail:0 skip:39 time:459s fi-elk-e7500 total:224 pass:168 dwarn:10 dfail:0 fail:0 skip:45 fi-gdg-551 total:288 pass:179 dwarn:0 dfail:0 fail:1 skip:108 time:277s fi-glk-1 total:288 pass:260 dwarn:0 dfail:0 fail:0 skip:28 time:514s fi-hsw-4770 total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:391s fi-hsw-4770r total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:405s fi-ilk-650 total:288 pass:228 dwarn:0 dfail:0 fail:0 skip:60 time:411s fi-ivb-3520m total:288 pass:259 dwarn:0 dfail:0 fail:0 skip:29 time:460s fi-ivb-3770 total:288 pass:255 dwarn:0 dfail:0 fail:0 skip:33 time:415s fi-kbl-7500u total:288 pass:263 dwarn:1 dfail:0 fail:0 skip:24 time:468s fi-kbl-7560u total:288 pass:269 dwarn:0 dfail:0 fail:0 skip:19 time:502s fi-kbl-7567u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:453s fi-kbl-r total:288 pass:260 dwarn:1 dfail:0 fail:0 skip:27 time:502s fi-pnv-d510 total:288 pass:222 dwarn:1 dfail:0 fail:0 skip:65 time:579s fi-skl-6260u total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:432s fi-skl-6600u total:288 pass:261 dwarn:0 dfail:0 fail:0 skip:27 time:510s fi-skl-6700hq total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:526s fi-skl-6700k2 total:288 pass:264 dwarn:0 dfail:0 fail:0 skip:24 time:498s fi-skl-6770hq total:288 pass:268 dwarn:0 dfail:0 fail:0 skip:20 time:504s fi-skl-gvtdvm total:288 pass:265 dwarn:0 dfail:0 fail:0 skip:23 time:432s fi-snb-2520m total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:537s fi-snb-2600 total:288 pass:248 dwarn:0 dfail:0 fail:0 skip:40 time:402s Blacklisted hosts: fi-cfl-s2 total:288 pass:262 dwarn:0 dfail:0 fail:0 skip:26 time:566s fi-glk-dsi total:288 pass:258 dwarn:0 dfail:0 fail:0 skip:30 time:471s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_765/issues.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* ✓ Fi.CI.IGT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) 2017-09-19 18:12 ` Rodrigo Vivi ` (19 preceding siblings ...) 2018-01-10 15:11 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) Patchwork @ 2018-01-10 16:14 ` Patchwork 20 siblings, 0 replies; 59+ messages in thread From: Patchwork @ 2018-01-10 16:14 UTC (permalink / raw) To: Lohith BS; +Cc: intel-gfx == Series Details == Series: tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) URL : https://patchwork.freedesktop.org/series/32888/ State : success == Summary == Test gem_tiled_swapping: Subgroup non-threaded: pass -> DMESG-FAIL (shard-snb) fdo#104218 Test gem_eio: Subgroup in-flight-contexts: pass -> DMESG-WARN (shard-snb) fdo#104058 Test perf: Subgroup polling: fail -> PASS (shard-hsw) fdo#102252 Test kms_flip: Subgroup blocking-wf_vblank: fail -> PASS (shard-hsw) fdo#103928 fdo#104218 https://bugs.freedesktop.org/show_bug.cgi?id=104218 fdo#104058 https://bugs.freedesktop.org/show_bug.cgi?id=104058 fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252 fdo#103928 https://bugs.freedesktop.org/show_bug.cgi?id=103928 shard-hsw total:3200 pass:1489 dwarn:1 dfail:0 fail:10 skip:1699 time:8951s shard-snb total:3200 pass:1269 dwarn:2 dfail:1 fail:12 skip:1915 time:7894s Blacklisted hosts: shard-apl total:3283 pass:1683 dwarn:1 dfail:0 fail:27 skip:1571 time:13748s shard-kbl total:3223 pass:1765 dwarn:7 dfail:2 fail:28 skip:1420 time:10381s == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_765/shards.html _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
* Re: [PATCH] Idleness DRRS: [not found] <1505724732-17529-1-git-send-email-lohith.bs@intel.com> 2017-09-18 19:54 ` [PATCH] Idleness DRRS: Rodrigo Vivi @ 2017-09-19 10:14 ` Ramalingam C 1 sibling, 0 replies; 59+ messages in thread From: Ramalingam C @ 2017-09-19 10:14 UTC (permalink / raw) To: Lohith BS, intel-gfx, daniel.vetter, chris, rodrigo.vivi Cc: ankit.k.nautiyal, paulo.r.zanoni On Monday 18 September 2017 02:22 PM, Lohith BS wrote: > From: Lohith BS <lohith.bs@intel.com> > > By default the DRRS state will be at DRRS_HIGH_RR. When a Display > content is Idle for more than 1Sec Idleness will be declared and > DRRS_LOW_RR will be invoked, changing the refresh rate to the > lower most refresh rate supported by the panel. As soon as there > is a display content change there will be a DRRS state transition > as DRRS_LOW_RR--> DRRS_HIGH_RR, changing the refresh rate to the > highest refresh rate supported by the panel. > > To test this, Idleness DRRS IGT will probe the DRRS state at below > instances and compare with the expected state. > > Instance Expected State > 1. Immediately after rendering the still image DRRS_HIGH_RR > 2. After a delay of 1.2Sec DRRS_LOW_RR > 3. After changing the frame buffer DRRS_HIGH_RR > 4. After a delay of 1.2Sec DRRS_LOW_RR > 5. After changing the frame buffer DRRS_HIGH_RR > 6. After a delay of 1.2Sec DRRS_LOW_RR > > The test checks the driver DRRS state from the debugfs entry. To check the > actual refresh-rate, the number of vblanks received per sec. > The refresh-rate calculated is checked against the expected refresh-rate > with a tolerance value of 2. > > This patch is a continuation of the earlier work > https://patchwork.freedesktop.org/patch/45472/ towards igt for idleness > > DRRS. The code is tested on Broxton BXT_T platform. > > v2: Addressed the comments and suggestions from Vlad, Marius. > The signoff details from the earlier work are also included. > > v3: Modified vblank rate calculation by using reply-sequence, provided by > drmWaitVBlank, as suggested by Chris Wilson. > > v4: As suggested from Chris Wilson and Daniel Vetter > 1) Avoided using pthread for calculating vblank refresh rate, > instead used drmWaitVBlank reply sequence. > 2) Avoided using kernel-specific info like transitional delays, > instead polling mechanism with timeout is used. > 3) Included edp-DRRS as a subtest in kms_frontbuffer_tracking.c, > instead of having a separate test. > > v5: This patch adds DRRS as a new feature in the kms_frontbuffer_tracking IGT. > DRRS switch to lower vrefresh rate is tested at slow-draw subtest. > > Note: > 1) Currently kernel doesn't have support to enable and disable the DRRS > feature dynamically(as in case of PSR). Hence if the panel supports > DRRS it will be enabled by default. > > This is in continuation of last patch "https://patchwork.freedesktop.org/patch/162726/" > > Signed-off-by: Lohith BS <lohith.bs@intel.com> > Signed-off-by: Ramalingam C <ramalingam.c@intel.com> > Signed-off-by: Vandana Kannan <vandana.kannan@intel.com> > Signed-off-by: aknautiy <ankit.k.nautiyal@intel.com> > --- > tests/kms_frontbuffer_tracking.c | 161 ++++++++++++++++++++++++++++++++++++--- > 1 file changed, 152 insertions(+), 9 deletions(-) > > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c > index a068c8a..4f44109 100644 > --- a/tests/kms_frontbuffer_tracking.c > +++ b/tests/kms_frontbuffer_tracking.c > @@ -34,7 +34,7 @@ > > > IGT_TEST_DESCRIPTION("Test the Kernel's frontbuffer tracking mechanism and " > - "its related features: FBC and PSR"); > + "its related features: FBC DRRS and PSR"); As DRRS and PSR cant be tested together it will be more meaningful to write as "its related features: FBC and PSR/DRRS"); > > /* > * One of the aspects of this test is that, for every subtest, we try different > @@ -105,8 +105,9 @@ struct test_mode { > FEATURE_NONE = 0, > FEATURE_FBC = 1, > FEATURE_PSR = 2, > - FEATURE_COUNT = 4, > - FEATURE_DEFAULT = 4, > + FEATURE_DRRS = 4, > + FEATURE_COUNT = 6, > + FEATURE_DEFAULT = 6, > } feature; > > /* Possible pixel formats. We just use FORMAT_DEFAULT for most tests and > @@ -180,6 +181,9 @@ struct { > bool can_test; > } psr = { > .can_test = false, > +}, > +drrs = { > + .can_test = false, > }; > > > @@ -822,6 +826,52 @@ static void psr_print_status(void) > igt_info("PSR status:\n%s\n", buf); > } > > +static bool is_drrs_high(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_HIGH_RR"); > +} > + > +static bool is_drrs_low(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS_LOW_RR"); > +} > + > +static bool is_drrs_enabled(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "DRRS Supported: Yes"); > +} > + > +static bool is_drrs_inactive(void) > +{ > + char buf[256]; > + > + debugfs_read("i915_drrs_status", buf); > + return strstr(buf, "No active crtc found"); > +} > + > +static void drrs_print_status(void) > +{ > + char buf[256]; > + > + if (is_drrs_high()) > + igt_info("DRRS STATUS : DRRS HIGH\n"); > + > + if (is_drrs_low()) > + igt_info("DRRS_STATUS : DRRS LOW\n"); > + > + if (is_drrs_inactive()) > + igt_info("DRRS_STATUS : DRRS DISABLED\n"); > +} > + > static struct timespec fbc_get_last_action(void) > { > struct timespec ret = { 0, 0 }; > @@ -1575,6 +1625,25 @@ static void teardown_psr(void) > { > } > > +static void setup_drrs(void) > +{ > + if (get_connector(prim_mode_params.connector_id)->connector_type != > + DRM_MODE_CONNECTOR_eDP) { > + igt_info("Can't test DRRS: no usable eDP screen.\n"); > + return; > + } > + > + if (!is_drrs_enabled()) { > + igt_info("Can't test DRRS: not supported in the driver.\n"); > + return; > + } > + drrs.can_test = true; As PSR is capable on a sink and src, DRRS wont be used. So drrs.can_test is false if psr.can_test is true. > +} > + > +static void teardown_drrs(void) > +{ > +} > + We can add this if we have means of disabling the DRRS in run time. We should remove this. > static void setup_environment(void) > { > setup_drm(); > @@ -1582,7 +1651,7 @@ static void setup_environment(void) > > setup_fbc(); > setup_psr(); > - > + setup_drrs(); > setup_crcs(); > } > > @@ -1592,6 +1661,7 @@ static void teardown_environment(void) > > teardown_crcs(); > teardown_psr(); > + teardown_drrs(); I dont think we need this function call. --Ram > teardown_fbc(); > teardown_modeset(); > teardown_drm(); > @@ -1660,6 +1730,11 @@ static void do_flush(const struct test_mode *t) > #define ASSERT_PSR_ENABLED (1 << 6) > #define ASSERT_PSR_DISABLED (1 << 7) > > +#define DRRS_ASSERT_FLAGS (7 << 8) > +#define ASSERT_DRRS_HIGH (1 << 8) > +#define ASSERT_DRRS_LOW (1 << 9) > +#define ASSERT_DRRS_INACTIVE (1 << 10) > + > static int adjust_assertion_flags(const struct test_mode *t, int flags) > { > if (!(flags & DONT_ASSERT_FEATURE_STATUS)) { > @@ -1667,12 +1742,17 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) > flags |= ASSERT_FBC_ENABLED; > if (!(flags & ASSERT_PSR_DISABLED)) > flags |= ASSERT_PSR_ENABLED; > + if (!((flags & ASSERT_DRRS_LOW) || (flags & ASSERT_DRRS_INACTIVE))) { > + flags |= ASSERT_DRRS_HIGH; > + } > } > > if ((t->feature & FEATURE_FBC) == 0) > flags &= ~FBC_ASSERT_FLAGS; > if ((t->feature & FEATURE_PSR) == 0) > flags &= ~PSR_ASSERT_FLAGS; > + if ((t->feature & FEATURE_DRRS) == 0) > + flags &= ~DRRS_ASSERT_FLAGS; > > return flags; > } > @@ -1704,6 +1784,23 @@ static void do_status_assertions(int flags) > return; > } > > + if (flags & ASSERT_DRRS_HIGH) { > + if (!is_drrs_high()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS HIGH\n"); > + } > + } else if (flags & ASSERT_DRRS_LOW) { > + if (!is_drrs_low()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS LOW\n"); > + } > + } else if (flags & ASSERT_DRRS_INACTIVE) { > + if (!is_drrs_inactive()) { > + drrs_print_status(); > + igt_assert_f(false, "DRRS DISABLED\n"); > + } > + } > + > if (flags & ASSERT_FBC_ENABLED) { > igt_require(!fbc_not_enough_stolen()); > igt_require(!fbc_stride_not_supported()); > @@ -1850,6 +1947,10 @@ static void check_test_requirements(const struct test_mode *t) > "Can't test PSR without sink CRCs\n"); > } > > + if (t->feature & FEATURE_DRRS) > + igt_require_f(drrs.can_test, > + "Can't test DRRS with the current outputs\n"); > + > if (opt.only_pipes != PIPE_COUNT) > igt_require(t->pipes == opt.only_pipes); > } > @@ -1971,7 +2072,7 @@ static void rte_subtest(const struct test_mode *t) > > unset_all_crtcs(); > do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > - DONT_ASSERT_CRC); > + DONT_ASSERT_CRC | ASSERT_DRRS_INACTIVE); > > enable_prim_screen_and_wait(t); > set_cursor_for_test(t, &prim_mode_params); > @@ -2008,6 +2109,24 @@ static bool op_disables_psr(const struct test_mode *t, > return false; > } > > +static bool op_sets_drrs_high(const struct test_mode *t, > + enum igt_draw_method method) > +{ > + if (method != IGT_DRAW_MMAP_GTT) > + return false; > + if (t->screen == SCREEN_PRIM) > + return true; > + /* On FBS_SHARED, even if the target is not the DRRS screen > + * (SCREEN_PRIM), all primary planes share the same frontbuffer, so a > + * write to the second screen primary plane - or offscreen plane - will > + * touch the framebuffer that's also used by the primary screen and making > + * DRRS state as high > + */ > + if (t->fbs == FBS_SHARED && t->plane == PLANE_PRI) > + return true; > + return false; > +} > + > /* > * draw - draw a set of rectangles on the screen using the provided method > * > @@ -2063,6 +2182,9 @@ static void draw_subtest(const struct test_mode *t) > if (op_disables_psr(t, t->method)) > assertions |= ASSERT_PSR_DISABLED; > > + if (op_sets_drrs_high(t, t->method)) > + assertions |= ASSERT_DRRS_HIGH; > + > prepare_subtest(t, pattern); > target = pick_target(t, params); > > @@ -2152,6 +2274,10 @@ static void multidraw_subtest(const struct test_mode *t) > !wc_used) > assertions |= ASSERT_PSR_DISABLED; > > + if (op_sets_drrs_high(t, used_method) && > + !wc_used) > + assertions |= ASSERT_DRRS_HIGH; > + > do_assertions(assertions); > } > > @@ -2206,6 +2332,7 @@ static void badformat_subtest(const struct test_mode *t) > { > bool fbc_valid = format_is_valid(FEATURE_FBC, t->format); > bool psr_valid = format_is_valid(FEATURE_PSR, t->format); > + bool drrs_valid = format_is_valid(FEATURE_DRRS, t->format); > int assertions = ASSERT_NO_ACTION_CHANGE; > > prepare_subtest_data(t, NULL); > @@ -2219,6 +2346,9 @@ static void badformat_subtest(const struct test_mode *t) > assertions |= ASSERT_FBC_DISABLED; > if (!psr_valid) > assertions |= ASSERT_PSR_DISABLED; > + if (!drrs_valid) > + assertions |= ASSERT_DRRS_HIGH; > + > do_assertions(assertions); > } > > @@ -2277,7 +2407,15 @@ static void slow_draw_subtest(const struct test_mode *t) > sleep(2); > > update_wanted_crc(t, &pattern->crcs[t->format][r]); > - do_assertions(0); > + if (t->feature & FEATURE_PSR) { > + do_assertions(0); > + } > + > + if (t->feature & FEATURE_DRRS) { > + sleep(1); > + do_assertions(ASSERT_DRRS_LOW); > + } > + > } > } > > @@ -2464,6 +2602,7 @@ static void fliptrack_subtest(const struct test_mode *t, enum flip_type type) > update_wanted_crc(t, &pattern->crcs[t->format][r]); > > do_assertions(ASSERT_PSR_DISABLED); > + do_assertions(ASSERT_DRRS_HIGH); > } > > igt_remove_fb(drm.fd, &fb2); > @@ -2892,7 +3031,7 @@ static void suspend_subtest(const struct test_mode *t) > sleep(5); > igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); > sleep(5); > - do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | > + do_assertions(ASSERT_FBC_DISABLED | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH | > DONT_ASSERT_CRC); > > set_mode_for_params(params); > @@ -2966,7 +3105,7 @@ static void farfromfence_subtest(const struct test_mode *t) > update_wanted_crc(t, &pattern->crcs[t->format][r]); > > /* GTT draws disable PSR. */ > - do_assertions(assertions | ASSERT_PSR_DISABLED); > + do_assertions(assertions | ASSERT_PSR_DISABLED | ASSERT_DRRS_HIGH); > } > > igt_remove_fb(drm.fd, &tall_fb); > @@ -3375,6 +3514,10 @@ static const char *feature_str(int feature) > return "psr"; > case FEATURE_FBC | FEATURE_PSR: > return "fbcpsr"; > + case FEATURE_DRRS: > + return "drrs"; > + case FEATURE_FBC | FEATURE_DRRS: > + return "fbcdrrs"; > default: > igt_assert(false); > } > @@ -3639,7 +3782,7 @@ int main(int argc, char *argv[]) > tilingchange_subtest(&t); > } > > - if (t.feature & FEATURE_PSR) > + if ((t.feature & FEATURE_PSR) || (t.feature & FEATURE_DRRS)) > igt_subtest_f("%s-slowdraw", feature_str(t.feature)) > slow_draw_subtest(&t); > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 59+ messages in thread
end of thread, other threads:[~2018-01-17 5:09 UTC | newest] Thread overview: 59+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <1505724732-17529-1-git-send-email-lohith.bs@intel.com> 2017-09-18 19:54 ` [PATCH] Idleness DRRS: Rodrigo Vivi 2017-09-19 10:46 ` Ramalingam C 2017-09-19 18:12 ` Rodrigo Vivi 2017-10-31 9:20 ` [PATCH 0/2] DRRS coverage in frontbuffer tracking IGT Ramalingam C 2017-10-31 9:20 ` [PATCH 1/2] drm/i915: Runtime disable for eDP DRRS Ramalingam C 2017-10-31 18:57 ` Rodrigo Vivi 2017-11-01 16:44 ` C, Ramalingam 2017-11-07 18:38 ` [PATCH v2 " Ramalingam C 2017-11-17 18:53 ` Rodrigo Vivi 2017-11-19 14:55 ` C, Ramalingam 2017-11-21 20:59 ` Rodrigo Vivi 2017-10-31 9:20 ` [PATCH 2/2] i915/drrs/debugfs: module param and psr status Ramalingam C 2017-11-07 18:40 ` [PATCH v2 2/2] i915/drrs/debugfs: crtc id " Ramalingam C 2017-11-17 18:56 ` Rodrigo Vivi 2017-11-20 3:39 ` C, Ramalingam 2017-11-20 4:23 ` [PATCH v3] i915/drrs/debugfs: psr status info addition Ramalingam C 2017-11-21 20:56 ` Rodrigo Vivi 2017-10-31 9:20 ` [PATCH i-g-t] tests/kms_frontbuffer_tracking: Idleness DRRS coverage Ramalingam C 2017-11-10 16:22 ` [PATCH i-g-t] Idleness DRRS: Lohith BS 2017-12-06 15:13 ` [PATCH i-g-t v8] tests/kms_frontbuffer_tracking: Including DRRS test coverage Lohith BS 2017-12-06 18:30 ` Paulo Zanoni 2017-12-11 13:12 ` [PATCH i-g-t v9] " Lohith BS 2018-01-01 13:45 ` [PATCH i-g-t v10] " Lohith BS 2018-01-02 20:34 ` Rodrigo Vivi 2018-01-03 16:02 ` Bs, Lohith 2018-01-03 15:02 ` [PATCH i-g-t v11] " Lohith BS 2018-01-03 19:21 ` Rodrigo Vivi 2018-01-03 22:14 ` Ramalingam C 2018-01-05 11:40 ` [PATCH i-g-t v12] " Lohith BS 2018-01-05 17:55 ` Rodrigo Vivi 2018-01-06 10:48 ` Ramalingam C 2018-01-06 13:37 ` Ramalingam C 2018-01-10 14:47 ` [PATCH i-g-t v13] " Lohith BS 2018-01-10 18:15 ` Rodrigo Vivi 2018-01-11 5:27 ` Ramalingam C 2018-01-11 20:22 ` Rodrigo Vivi 2018-01-11 8:40 ` Daniel Vetter 2018-01-17 5:05 ` Ramalingam C 2017-10-31 9:28 ` ✗ Fi.CI.BAT: failure for series starting with [1/2] drm/i915: Runtime disable for eDP DRRS Patchwork 2017-10-31 9:48 ` ✓ Fi.CI.BAT: success " Patchwork 2017-10-31 10:33 ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage Patchwork 2017-11-08 7:26 ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev3) Patchwork 2017-11-08 8:11 ` ✗ Fi.CI.IGT: warning " Patchwork 2017-11-10 16:49 ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev2) Patchwork 2017-11-20 4:46 ` ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork 2017-12-06 16:32 ` ✗ Fi.CI.BAT: warning for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev3) Patchwork 2017-12-11 15:56 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev4) Patchwork 2017-12-11 17:11 ` ✗ Fi.CI.IGT: failure " Patchwork 2017-12-28 15:59 ` ✓ Fi.CI.BAT: success for series starting with [v2,1/2] drm/i915: Runtime disable for eDP DRRS (rev4) Patchwork 2017-12-28 16:45 ` ✓ Fi.CI.IGT: " Patchwork 2018-01-02 10:37 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev5) Patchwork 2018-01-02 13:26 ` ✗ Fi.CI.IGT: failure " Patchwork 2018-01-03 15:30 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev6) Patchwork 2018-01-03 18:49 ` ✗ Fi.CI.IGT: failure " Patchwork 2018-01-05 12:04 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev7) Patchwork 2018-01-05 13:25 ` ✗ Fi.CI.IGT: failure " Patchwork 2018-01-10 15:11 ` ✓ Fi.CI.BAT: success for tests/kms_frontbuffer_tracking: Idleness DRRS coverage (rev8) Patchwork 2018-01-10 16:14 ` ✓ Fi.CI.IGT: " Patchwork 2017-09-19 10:14 ` [PATCH] Idleness DRRS: Ramalingam C
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.