Re: [Intel-gfx] [PATCH i-g-t v2 06/15] igt_kms: Change PIPE_ANY behavior to mean unassigned
On Wed, 2016-07-06 at 11:55 +0200, Maarten Lankhorst wrote: > None of the tests requires that a output bound to PIPE_ANY is assigned, > so don't do it. Fix the display commit to iterate over crtc's instead > of outputs to properly disable pipes without outputs. > > This also means that output->valid is only set after connecting a > output to a pipe, so no longer depend on it in for_each_connected_output > and similar macros. > > Signed-off-by: Maarten Lankhorst > --- > lib/igt_kms.c | 246 - > - > lib/igt_kms.h | 18 - > 2 files changed, 135 insertions(+), 129 deletions(-) > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > index ce8aa2455348..88cae7d51787 100644 > --- a/lib/igt_kms.c > +++ b/lib/igt_kms.c > @@ -869,18 +869,20 @@ static bool _kmstest_connector_config(int drm_fd, > uint32_t connector_id, > */ > _kmstest_connector_config_crtc_mask(drm_fd, connector, config); > > + if (!kmstest_get_connector_default_mode(drm_fd, connector, > + &config->default_mode)) > + goto err3; > + > + config->connector = connector; > + > crtc_idx_mask &= config->valid_crtc_idx_mask; > if (!crtc_idx_mask) > - goto err3; > + /* Keep config->connector */ > + goto err2; > > config->pipe = ffs(crtc_idx_mask) - 1; > > - if (!kmstest_get_connector_default_mode(drm_fd, connector, > - &config->default_mode)) > - goto err3; > - > config->encoder = _kmstest_connector_config_find_encoder(drm_fd, > connector, config->pipe); > - config->connector = connector; > config->crtc = drmModeGetCrtc(drm_fd, resources->crtcs[config- > >pipe]); > > drmModeFreeResources(resources); > @@ -940,8 +942,13 @@ bool kmstest_probe_connector_config(int drm_fd, uint32_t > connector_id, > void kmstest_free_connector_config(struct kmstest_connector_config *config) > { > drmModeFreeCrtc(config->crtc); > + config->crtc = NULL; > + > drmModeFreeEncoder(config->encoder); > + config->encoder = NULL; > + > drmModeFreeConnector(config->connector); > + config->connector = NULL; > } > > /** > @@ -1197,8 +1204,7 @@ static void igt_output_refresh(igt_output_t *output) > /* we mask out the pipes already in use */ > crtc_idx_mask = output->pending_crtc_idx_mask & ~display- > >pipes_in_use; > > - if (output->valid) > - kmstest_free_connector_config(&output->config); > + kmstest_free_connector_config(&output->config); > > ret = kmstest_get_connector_config(display->drm_fd, > output->id, > @@ -1209,19 +1215,19 @@ static void igt_output_refresh(igt_output_t *output) > else > output->valid = false; > > - if (!output->valid) > - return; > - > - if (output->use_override_mode) > - output->config.default_mode = output->override_mode; > - > - if (!output->name) { > + if (!output->name && output->config.connector) { > drmModeConnector *c = output->config.connector; > > igt_assert_neq(asprintf(&output->name, "%s-%d", > kmstest_connector_type_str(c->connector_type), c->connector_type_id), > -1); > } > > + if (!output->valid) > + return; > + > + if (output->use_override_mode) > + output->config.default_mode = output->override_mode; > + > LOG(display, "%s: Selecting pipe %s\n", output->name, > kmstest_pipe_name(output->config.pipe)); > > @@ -1259,10 +1265,10 @@ get_crtc_property(int drm_fd, uint32_t crtc_id, const > char *name, > } > > static void > -igt_crtc_set_property(igt_output_t *output, uint32_t prop_id, uint64_t value) > +igt_crtc_set_property(igt_pipe_t *pipe, uint32_t prop_id, uint64_t value) > { > - drmModeObjectSetProperty(output->display->drm_fd, > - output->config.crtc->crtc_id, DRM_MODE_OBJECT_CRTC, prop_id, > value); > + drmModeObjectSetProperty(pipe->display->drm_fd, > + pipe->crtc_id, DRM_MODE_OBJECT_CRTC, prop_id, value); > } > > /* > @@ -1325,15 +1331,37 @@ void igt_display_init(igt_display_t *display, int > drm_fd) > int p = IGT_PLANE_2; > int j, type; > uint8_t n_planes = 0; > + uint64_t prop_value; > > pipe->crtc_id = resources->crtcs[i]; > pipe->display = display; > pipe->pipe = i; > > + get_crtc_property(display->drm_fd, pipe->crtc_id, > + "background_color", > + &pipe->background_property, > + &prop_value, > + NULL); > + pipe->background = (uint32_t)prop_value; > + get_crtc_property(display
[Intel-gfx] [PATCH i-g-t v2 06/15] igt_kms: Change PIPE_ANY behavior to mean unassigned
None of the tests requires that a output bound to PIPE_ANY is assigned, so don't do it. Fix the display commit to iterate over crtc's instead of outputs to properly disable pipes without outputs. This also means that output->valid is only set after connecting a output to a pipe, so no longer depend on it in for_each_connected_output and similar macros. Signed-off-by: Maarten Lankhorst --- lib/igt_kms.c | 246 -- lib/igt_kms.h | 18 - 2 files changed, 135 insertions(+), 129 deletions(-) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index ce8aa2455348..88cae7d51787 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -869,18 +869,20 @@ static bool _kmstest_connector_config(int drm_fd, uint32_t connector_id, */ _kmstest_connector_config_crtc_mask(drm_fd, connector, config); + if (!kmstest_get_connector_default_mode(drm_fd, connector, + &config->default_mode)) + goto err3; + + config->connector = connector; + crtc_idx_mask &= config->valid_crtc_idx_mask; if (!crtc_idx_mask) - goto err3; + /* Keep config->connector */ + goto err2; config->pipe = ffs(crtc_idx_mask) - 1; - if (!kmstest_get_connector_default_mode(drm_fd, connector, - &config->default_mode)) - goto err3; - config->encoder = _kmstest_connector_config_find_encoder(drm_fd, connector, config->pipe); - config->connector = connector; config->crtc = drmModeGetCrtc(drm_fd, resources->crtcs[config->pipe]); drmModeFreeResources(resources); @@ -940,8 +942,13 @@ bool kmstest_probe_connector_config(int drm_fd, uint32_t connector_id, void kmstest_free_connector_config(struct kmstest_connector_config *config) { drmModeFreeCrtc(config->crtc); + config->crtc = NULL; + drmModeFreeEncoder(config->encoder); + config->encoder = NULL; + drmModeFreeConnector(config->connector); + config->connector = NULL; } /** @@ -1197,8 +1204,7 @@ static void igt_output_refresh(igt_output_t *output) /* we mask out the pipes already in use */ crtc_idx_mask = output->pending_crtc_idx_mask & ~display->pipes_in_use; - if (output->valid) - kmstest_free_connector_config(&output->config); + kmstest_free_connector_config(&output->config); ret = kmstest_get_connector_config(display->drm_fd, output->id, @@ -1209,19 +1215,19 @@ static void igt_output_refresh(igt_output_t *output) else output->valid = false; - if (!output->valid) - return; - - if (output->use_override_mode) - output->config.default_mode = output->override_mode; - - if (!output->name) { + if (!output->name && output->config.connector) { drmModeConnector *c = output->config.connector; igt_assert_neq(asprintf(&output->name, "%s-%d", kmstest_connector_type_str(c->connector_type), c->connector_type_id), -1); } + if (!output->valid) + return; + + if (output->use_override_mode) + output->config.default_mode = output->override_mode; + LOG(display, "%s: Selecting pipe %s\n", output->name, kmstest_pipe_name(output->config.pipe)); @@ -1259,10 +1265,10 @@ get_crtc_property(int drm_fd, uint32_t crtc_id, const char *name, } static void -igt_crtc_set_property(igt_output_t *output, uint32_t prop_id, uint64_t value) +igt_crtc_set_property(igt_pipe_t *pipe, uint32_t prop_id, uint64_t value) { - drmModeObjectSetProperty(output->display->drm_fd, - output->config.crtc->crtc_id, DRM_MODE_OBJECT_CRTC, prop_id, value); + drmModeObjectSetProperty(pipe->display->drm_fd, + pipe->crtc_id, DRM_MODE_OBJECT_CRTC, prop_id, value); } /* @@ -1325,15 +1331,37 @@ void igt_display_init(igt_display_t *display, int drm_fd) int p = IGT_PLANE_2; int j, type; uint8_t n_planes = 0; + uint64_t prop_value; pipe->crtc_id = resources->crtcs[i]; pipe->display = display; pipe->pipe = i; + get_crtc_property(display->drm_fd, pipe->crtc_id, + "background_color", + &pipe->background_property, + &prop_value, + NULL); + pipe->background = (uint32_t)prop_value; + get_crtc_property(display->drm_fd, pipe->crtc_id, + "DEGAMMA_LUT", + &pipe->degamma_property, + NULL, +