[Intel-gfx] [PATCH IGT v2 4/6] tests/kms_frontbuffer_tracking: Refactor to use IGT PSR library functions
Jim Bride
jim.bride at linux.intel.com
Fri Jul 7 22:30:20 UTC 2017
On Fri, Jun 30, 2017 at 01:19:57PM -0700, Rodrigo Vivi wrote:
> I believe it would be better to create the psr lib with only one
> function at time and on every patch that adds the new function already
> removes that from here and from frontbuffer tracking test as well...
>
> easier to review and to make sure that we are not changing the behaviour.
I'm testing a new series with the requested structural changes and review
feedback to-date. I hope to send them out on Monday (testing takes a while.)
Jim
> also...
>
> On Fri, Jun 30, 2017 at 12:12 PM, Jim Bride <jim.bride at linux.intel.com> wrote:
> > v2: * Minor functional tweaks and bug fixes
> > * Rebase
> >
> > Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> > Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
> > Signed-off-by: Jim Bride <jim.bride at linux.intel.com>
> > ---
> > tests/kms_frontbuffer_tracking.c | 119 +++++++--------------------------------
> > 1 file changed, 19 insertions(+), 100 deletions(-)
> >
> > diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
> > index c24e4a8..3a8b754 100644
> > --- a/tests/kms_frontbuffer_tracking.c
> > +++ b/tests/kms_frontbuffer_tracking.c
> > @@ -183,7 +183,7 @@ struct {
> > };
> >
> >
> > -#define SINK_CRC_SIZE 12
> > +#define SINK_CRC_SIZE 6
>
> I believe this deserves a separated patch...
>
> > typedef struct {
> > char data[SINK_CRC_SIZE];
> > } sink_crc_t;
> > @@ -327,28 +327,6 @@ drmModeModeInfo std_1024_mode = {
> > .name = "Custom 1024x768",
> > };
> >
> > -static drmModeModeInfoPtr get_connector_smallest_mode(drmModeConnectorPtr c)
> > -{
> > - int i;
> > - drmModeModeInfoPtr smallest = NULL;
> > -
> > - for (i = 0; i < c->count_modes; i++) {
> > - drmModeModeInfoPtr mode = &c->modes[i];
> > -
> > - if (!smallest)
> > - smallest = mode;
> > -
> > - if (mode->hdisplay * mode->vdisplay <
> > - smallest->hdisplay * smallest->vdisplay)
> > - smallest = mode;
> > - }
> > -
> > - if (c->connector_type == DRM_MODE_CONNECTOR_eDP)
> > - smallest = &std_1024_mode;
> > -
> > - return smallest;
> > -}
> > -
> > static drmModeConnectorPtr get_connector(uint32_t id)
> > {
> > int i;
> > @@ -421,30 +399,6 @@ static void init_mode_params(struct modeset_params *params, uint32_t crtc_id,
> > params->sprite.h = 64;
> > }
> >
> > -static bool connector_get_mode(drmModeConnectorPtr c, drmModeModeInfoPtr *mode)
> > -{
> > - *mode = NULL;
> > -
> > - if (c->connection != DRM_MODE_CONNECTED || !c->count_modes)
> > - return false;
> > -
> > - if (c->connector_type == DRM_MODE_CONNECTOR_eDP && opt.no_edp)
> > - return false;
> > -
> > - if (opt.small_modes)
> > - *mode = get_connector_smallest_mode(c);
> > - else
> > - *mode = &c->modes[0];
> > -
> > - /* On HSW the CRC WA is so awful that it makes you think everything is
> > - * bugged. */
> > - if (IS_HASWELL(intel_get_drm_devid(drm.fd)) &&
> > - c->connector_type == DRM_MODE_CONNECTOR_eDP)
> > - *mode = &std_1024_mode;
> > -
> > - return true;
> > -}
> > -
> > static bool connector_supports_pipe_a(drmModeConnectorPtr connector)
> > {
> > int i;
> > @@ -473,7 +427,7 @@ static bool find_connector(bool edp_only, bool pipe_a, uint32_t forbidden_id,
> > continue;
> > if (c->connector_id == forbidden_id)
> > continue;
> > - if (!connector_get_mode(c, &mode))
> > + if (!igt_psr_find_good_mode(c, &mode))
> > continue;
> >
> > *ret_connector = c;
> > @@ -804,23 +758,6 @@ static void fbc_print_status(void)
> > igt_info("FBC status:\n%s\n", buf);
> > }
> >
> > -static bool psr_is_enabled(void)
> > -{
> > - char buf[256];
> > -
> > - debugfs_read("i915_edp_psr_status", buf);
> > - return strstr(buf, "\nActive: yes\n") &&
> > - strstr(buf, "\nHW Enabled & Active bit: yes\n");
> > -}
> > -
> > -static void psr_print_status(void)
> > -{
> > - char buf[256];
> > -
> > - debugfs_read("i915_edp_psr_status", buf);
> > - igt_info("PSR status:\n%s\n", buf);
> > -}
> > -
> > static struct timespec fbc_get_last_action(void)
> > {
> > struct timespec ret = { 0, 0 };
> > @@ -926,44 +863,31 @@ static bool fbc_wait_until_enabled(void)
> > return igt_wait(fbc_is_enabled(), 2000, 1);
> > }
> >
> > -static bool psr_wait_until_enabled(void)
> > -{
> > - return igt_wait(psr_is_enabled(), 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)
> >
> > static void get_sink_crc(sink_crc_t *crc, bool mandatory)
> > {
> > - int rc, errno_;
> > + int rc;
> >
> > if (!sink_crc.supported) {
> > memcpy(crc, "unsupported!", SINK_CRC_SIZE);
>
> this doesn't fit anymore
>
> > return;
> > }
> >
> > - lseek(sink_crc.fd, 0, SEEK_SET);
> > -
> > - rc = read(sink_crc.fd, crc->data, SINK_CRC_SIZE);
> > - errno_ = errno;
> > -
> > - if (rc == -1 && errno_ == ENOTTY) {
> > + rc = igt_psr_get_sink_crc(sink_crc.fd, crc->data);
> > + if (rc == ENOTTY) {
> > igt_info("Sink CRC not supported: panel doesn't support it\n");
> > sink_crc.supported = false;
> > - } else if (rc == -1 && errno_ == ETIMEDOUT) {
> > - if (sink_crc.reliable) {
> > - igt_info("Sink CRC is unreliable on this machine.\n");
> > + } else if (rc == ETIMEDOUT) {
> > + if (sink_crc.reliable)
> > sink_crc.reliable = false;
> > - }
> > +
> >
> > if (mandatory)
> > igt_skip("Sink CRC is unreliable on this machine.\n");
> > } else {
> > - igt_assert_f(rc != -1, "Unexpected error: %d\n", errno_);
> > - igt_assert(rc == SINK_CRC_SIZE);
> > + igt_assert_f(rc == 0, "Unexpected error: %d\n", rc);
> > }
> > }
> >
> > @@ -1180,7 +1104,7 @@ static void disable_features(const struct test_mode *t)
> > return;
> >
> > fbc_disable();
> > - psr_disable();
> > + igt_psr_disable();
> > }
> >
> > static void *busy_thread_func(void *data)
> > @@ -1432,7 +1356,7 @@ static void setup_sink_crc(void)
> > fill_fb_region(&prim_mode_params.fb, COLOR_PRIM_BG);
> > set_mode_for_params(&prim_mode_params);
> >
> > - sink_crc.fd = openat(drm.debugfs, "i915_sink_crc_eDP1", O_RDONLY);
> > + sink_crc.fd = igt_psr_open_sink_crc(drm.debugfs);
> > igt_assert_lte(0, sink_crc.fd);
> >
> > /* Do a first read to try to detect if it's supported. */
> > @@ -1547,14 +1471,6 @@ static void teardown_fbc(void)
> > {
> > }
> >
> > -static bool psr_sink_has_support(void)
> > -{
> > - char buf[256];
> > -
> > - debugfs_read("i915_edp_psr_status", buf);
> > - return strstr(buf, "Sink_Support: yes\n");
> > -}
> > -
> > static void setup_psr(void)
> > {
> > if (get_connector(prim_mode_params.connector_id)->connector_type !=
> > @@ -1563,7 +1479,7 @@ static void setup_psr(void)
> > return;
> > }
> >
> > - if (!psr_sink_has_support()) {
> > + if (!igt_psr_sink_support(drm.fd)) {
> > igt_info("Can't test PSR: not supported by sink.\n");
> > return;
> > }
> > @@ -1717,12 +1633,15 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags)
> > } \
> > \
> > if (flags_ & ASSERT_PSR_ENABLED) { \
> > - if (!psr_wait_until_enabled()) { \
> > - psr_print_status(); \
> > + if (!igt_psr_await_status(drm.fd, true)) { \
> > + igt_psr_print_status(drm.fd); \
> > igt_assert_f(false, "PSR disabled\n"); \
> > } \
> > } else if (flags_ & ASSERT_PSR_DISABLED) { \
> > - igt_assert(!psr_wait_until_enabled()); \
> > + if (!igt_psr_await_status(drm.fd, false)) { \
> > + igt_psr_print_status(drm.fd); \
> > + igt_assert_f(false, "PSR enabled\n"); \
> > + } \
> > } \
> > } while (0)
> >
> > @@ -1822,7 +1741,7 @@ static void enable_features_for_test(const struct test_mode *t)
> > if (t->feature & FEATURE_FBC)
> > fbc_enable();
> > if (t->feature & FEATURE_PSR)
> > - psr_enable();
> > + igt_psr_enable();
> > }
> >
> > static void check_test_requirements(const struct test_mode *t)
> > --
> > 2.7.4
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>
>
> --
> Rodrigo Vivi
> Blog: http://blog.vivi.eng.br
More information about the Intel-gfx
mailing list