]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/tests: helpers: Create new helper to enable output
authorMaxime Ripard <mripard@kernel.org>
Thu, 13 Mar 2025 11:59:59 +0000 (12:59 +0100)
committerMaxime Ripard <mripard@kernel.org>
Thu, 20 Mar 2025 13:45:47 +0000 (14:45 +0100)
We'll need the HDMI state tests light_up_connector() function in more
tests, so let's promote it to a helper.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20250313-bridge-connector-v6-5-511c54a604fb@kernel.org
Signed-off-by: Maxime Ripard <mripard@kernel.org>
drivers/gpu/drm/tests/drm_kunit_helpers.c
include/drm/drm_kunit_helpers.h

index a4eb68f0decca15988105b9d58266e3871934a8b..14ad8f0a0af18410a7129ec34635678a8120d3cb 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
+#include <drm/drm_atomic_uapi.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_edid.h>
 #include <drm/drm_fourcc.h>
@@ -271,6 +272,66 @@ drm_kunit_helper_create_crtc(struct kunit *test,
 }
 EXPORT_SYMBOL_GPL(drm_kunit_helper_create_crtc);
 
+/**
+ * drm_kunit_helper_enable_crtc_connector - Enables a CRTC -> Connector output
+ * @test: The test context object
+ * @drm: The device to alloc the plane for
+ * @crtc: The CRTC to enable
+ * @connector: The Connector to enable
+ * @mode: The display mode to configure the CRTC with
+ * @ctx: Locking context
+ *
+ * This function creates an atomic update to enable the route from @crtc
+ * to @connector, with the given @mode.
+ *
+ * Returns:
+ *
+ * A pointer to the new CRTC, or an ERR_PTR() otherwise. If the error
+ * returned is EDEADLK, the entire atomic sequence must be restarted.
+ */
+int drm_kunit_helper_enable_crtc_connector(struct kunit *test,
+                                          struct drm_device *drm,
+                                          struct drm_crtc *crtc,
+                                          struct drm_connector *connector,
+                                          const struct drm_display_mode *mode,
+                                          struct drm_modeset_acquire_ctx *ctx)
+{
+       struct drm_atomic_state *state;
+       struct drm_connector_state *conn_state;
+       struct drm_crtc_state *crtc_state;
+       int ret;
+
+       state = drm_kunit_helper_atomic_state_alloc(test, drm, ctx);
+       if (IS_ERR(state))
+               return PTR_ERR(state);
+
+       conn_state = drm_atomic_get_connector_state(state, connector);
+       if (IS_ERR(conn_state))
+               return PTR_ERR(conn_state);
+
+       ret = drm_atomic_set_crtc_for_connector(conn_state, crtc);
+       if (ret)
+               return ret;
+
+       crtc_state = drm_atomic_get_crtc_state(state, crtc);
+       if (IS_ERR(crtc_state))
+               return PTR_ERR(crtc_state);
+
+       ret = drm_atomic_set_mode_for_crtc(crtc_state, mode);
+       if (ret)
+               return ret;
+
+       crtc_state->enable = true;
+       crtc_state->active = true;
+
+       ret = drm_atomic_commit(state);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(drm_kunit_helper_enable_crtc_connector);
+
 static void kunit_action_drm_mode_destroy(void *ptr)
 {
        struct drm_display_mode *mode = ptr;
index 11d59ce0bac0bbec07ae5f07ed9710cf01d73f09..1cda7281f30029e649c62fc0fd9d9ae6889d43ac 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <kunit/test.h>
 
+struct drm_connector;
 struct drm_crtc_funcs;
 struct drm_crtc_helper_funcs;
 struct drm_device;
@@ -118,6 +119,13 @@ drm_kunit_helper_create_crtc(struct kunit *test,
                             const struct drm_crtc_funcs *funcs,
                             const struct drm_crtc_helper_funcs *helper_funcs);
 
+int drm_kunit_helper_enable_crtc_connector(struct kunit *test,
+                                          struct drm_device *drm,
+                                          struct drm_crtc *crtc,
+                                          struct drm_connector *connector,
+                                          const struct drm_display_mode *mode,
+                                          struct drm_modeset_acquire_ctx *ctx);
+
 struct drm_display_mode *
 drm_kunit_display_mode_from_cea_vic(struct kunit *test, struct drm_device *dev,
                                    u8 video_code);