summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2020-11-09 15:14:36 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2020-12-13 12:01:30 +0000
commit0075e424e69e95a7d8b8b6485682b1c94c51f9a5 (patch)
tree4280c2de71c1ebeaa9cee58099150d88d528f24e
parent3777fb5efa7f69431f28e10cf74a1e97c26d2548 (diff)
lib: Handle chamelium failures gracefully
Don't cause CI to abort a run if an _unrelated_ fixture checks for a display and chamelium is dead. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--lib/igt_kms.c54
1 files changed, 37 insertions, 17 deletions
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 3f879033..86569868 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1922,6 +1922,40 @@ __get_crtc_mask_for_pipe(drmModeRes *resources, igt_pipe_t *pipe)
return (1 << offset);
}
+static bool chamelium_ok(int drm_fd)
+{
+ bool ok = true;
+#ifdef HAVE_CHAMELIUM
+ struct chamelium *chamelium;
+
+ chamelium = chamelium_init_rpc_only();
+ if (chamelium) {
+ ok = false;
+
+ if (!chamelium_wait_reachable(chamelium, 20)) {
+ igt_debug("cannot reach the configured chamelium!\n");
+ goto out;
+ }
+
+ if (!chamelium_plug_all(chamelium)) {
+ igt_debug("failed to plug all the chamelium ports!\n");
+ goto out;
+ }
+
+ if (!chamelium_wait_all_configured_ports_connected(chamelium, drm_fd)) {
+ igt_debug("not all configured chamelium ports are connected!\n");
+ goto out;
+ }
+
+ ok = true;
+out:
+ chamelium_deinit_rpc_only(chamelium);
+ }
+#endif
+
+ return ok;
+}
+
/**
* igt_display_require:
* @display: a pointer to an #igt_display_t structure
@@ -1944,6 +1978,9 @@ void igt_display_require(igt_display_t *display, int drm_fd)
LOG_INDENT(display, "init");
+ if (!chamelium_ok(drm_fd))
+ goto out;
+
display->drm_fd = drm_fd;
is_i915_dev = is_i915_device(drm_fd);
@@ -1953,23 +1990,6 @@ void igt_display_require(igt_display_t *display, int drm_fd)
if (!resources)
goto out;
-#ifdef HAVE_CHAMELIUM
- {
- struct chamelium *chamelium;
-
- chamelium = chamelium_init_rpc_only();
- if (chamelium) {
- igt_abort_on_f(!chamelium_wait_reachable(chamelium, 20),
- "cannot reach the configured chamelium!\n");
- igt_abort_on_f(!chamelium_plug_all(chamelium),
- "failed to plug all the chamelium ports!\n");
- igt_abort_on_f(!chamelium_wait_all_configured_ports_connected(chamelium, drm_fd),
- "not all configured chamelium ports are connected!\n");
- chamelium_deinit_rpc_only(chamelium);
- }
- }
-#endif
-
/*
* With non-contiguous pipes display, crtc mapping is not always same
* as pipe mapping, In i915 pipe is enum id of i915's crtc object.