On 2026-10-14 13:27, Maxime Ripard wrote:
> The amdgpu_dm connector reset implementation creates a custom state
> subclass, but only initializes a pristine state without resetting any
> hardware. This is equivalent to what atomic_create_state expects.
> Convert to it.
>
> Signed-off-by: Maxime Ripard <[email protected]>
> ---
> Cc: "Christian König" <[email protected]>
> Cc: Alex Deucher <[email protected]>
> Cc: Harry Wentland <[email protected]>
> Cc: Leo Li <[email protected]>
> Cc: Rodrigo Siqueira <[email protected]>
> Cc: [email protected]
> ---
> .../amd/display/amdgpu_dm/amdgpu_dm_connector.c | 32 ++++----
> .../amd/display/amdgpu_dm/amdgpu_dm_connector.h | 3 +-
> .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 4 +-
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c | 14 +++-
> .../amdgpu_dm/tests/amdgpu_dm_connector_test.c | 90
> ++++++++++++++--------
> 5 files changed, 91 insertions(+), 52 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
> index 3a4e98b08ac1..2c22f00f521c 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
> @@ -1939,26 +1939,20 @@ STATIC_IFN_KUNIT void
> amdgpu_dm_connector_destroy(struct drm_connector *connecto
>
> kfree(connector);
> }
> EXPORT_IF_KUNIT(amdgpu_dm_connector_destroy);
>
> -void amdgpu_dm_connector_funcs_reset(struct drm_connector *connector)
> +struct drm_connector_state *
> +amdgpu_dm_connector_atomic_create_state(struct drm_connector *connector)
> {
> - struct dm_connector_state *old_state =
> - to_dm_connector_state(connector->state);
> struct dm_connector_state *state;
>
> state = kzalloc_obj(*state);
> if (!state)
> - return;
> + return ERR_PTR(-ENOMEM);
>
> - if (connector->state)
> - __drm_atomic_helper_connector_destroy_state(connector->state);
> -
> - kfree(old_state);
> -
> - __drm_atomic_helper_connector_reset(connector, &state->base);
> + __drm_atomic_helper_connector_state_init(&state->base, connector);
>
> state->scaling = RMX_OFF;
> state->underscan_enable = false;
> state->underscan_hborder = 0;
> state->underscan_vborder = 0;
> @@ -1970,12 +1964,14 @@ void amdgpu_dm_connector_funcs_reset(struct
> drm_connector *connector)
> if (amdgpu_dm_abm_level <= 0)
> state->abm_level = ABM_LEVEL_IMMEDIATE_DISABLE;
> else
> state->abm_level = amdgpu_dm_abm_level;
> }
> +
> + return &state->base;
> }
> -EXPORT_IF_KUNIT(amdgpu_dm_connector_funcs_reset);
> +EXPORT_IF_KUNIT(amdgpu_dm_connector_atomic_create_state);
>
> struct drm_connector_state *
> amdgpu_dm_connector_atomic_duplicate_state(struct drm_connector *connector)
> {
> struct dm_connector_state *state =
> @@ -2070,11 +2066,11 @@ STATIC_IFN_KUNIT void
> amdgpu_dm_connector_funcs_force(struct drm_connector *conn
> }
> }
> EXPORT_IF_KUNIT(amdgpu_dm_connector_funcs_force);
>
> static const struct drm_connector_funcs amdgpu_dm_connector_funcs = {
> - .reset = amdgpu_dm_connector_funcs_reset,
> + .atomic_create_state = amdgpu_dm_connector_atomic_create_state,
> .detect = amdgpu_dm_connector_detect,
> .fill_modes = drm_helper_probe_single_connector_modes,
> .destroy = amdgpu_dm_connector_destroy,
> .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> @@ -3197,12 +3193,20 @@ void amdgpu_dm_connector_init_helper(struct
> amdgpu_display_manager *dm,
>
> /*
> * Some of the properties below require access to state, like bpc.
> * Allocate some default initial connector state with our reset helper.
> */
> - if (aconnector->base.funcs->reset)
> - aconnector->base.funcs->reset(&aconnector->base);
> + if (!aconnector->base.state &&
> + aconnector->base.funcs->atomic_create_state) {
> + struct drm_connector_state *conn_state;
> +
> + conn_state =
> aconnector->base.funcs->atomic_create_state(&aconnector->base);
> + if (IS_ERR(conn_state))
> + return;
> +
> + aconnector->base.state = conn_state;
> + }
>
> aconnector->connector_id = link_index;
> aconnector->bl_idx = -1;
> aconnector->dc_link = link;
> aconnector->base.interlace_allowed = false;
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.h
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.h
> index 79698deacf61..4a73fc607f38 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.h
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.h
> @@ -48,11 +48,12 @@ struct drm_crtc;
> struct drm_device;
> struct drm_display_mode;
> struct drm_edid;
> struct drm_property;
>
> -void amdgpu_dm_connector_funcs_reset(struct drm_connector *connector);
> +struct drm_connector_state *
> +amdgpu_dm_connector_atomic_create_state(struct drm_connector *connector);
>
> struct drm_connector_state *
> amdgpu_dm_connector_atomic_duplicate_state(struct drm_connector *connector);
>
> int amdgpu_dm_connector_atomic_set_property(struct drm_connector *connector,
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
> index a5b15bef8aa0..cb189c098ec3 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
> @@ -256,11 +256,11 @@ amdgpu_dm_mst_connector_early_unregister(struct
> drm_connector *connector)
> EXPORT_IF_KUNIT(amdgpu_dm_mst_connector_early_unregister);
>
> static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
> .fill_modes = drm_helper_probe_single_connector_modes,
> .destroy = dm_dp_mst_connector_destroy,
> - .reset = amdgpu_dm_connector_funcs_reset,
> + .atomic_create_state = amdgpu_dm_connector_atomic_create_state,
> .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> .atomic_set_property = amdgpu_dm_connector_atomic_set_property,
> .atomic_get_property = amdgpu_dm_connector_atomic_get_property,
> .late_register = amdgpu_dm_mst_connector_late_register,
> @@ -736,11 +736,11 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr
> *mgr,
>
> /*
> * Initialize connector state before adding the connectror to drm and
> * framebuffer lists
> */
> - amdgpu_dm_connector_funcs_reset(connector);
I'm actually not sure why there was a state reset here.
amdgpu_dm_connector_init_helper() is called earlier in this func and that
already did a reset.
> + connector->state = amdgpu_dm_connector_atomic_create_state(connector);
That asside, looks like this can overwrite the alloc'd state from init_helper()
without freeing. So to keep the previous behavior and avoid regressing, perhaps
we can do this:
conn_state = amdgpu_dm_connector_atomic_create_state(connector);
if (!IS_ERR(conn_state)) {
if (connector->state)
connector->funcs->atomic_destroy_state(connector,
connector->state);
connector->state = conn_state;
}
>
> drm_dp_mst_get_port_malloc(port);
>
> return connector;
> }
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c
> index 6f91a992d43f..8181fcac299d 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c
> @@ -223,11 +223,11 @@ static const struct drm_encoder_helper_funcs
> amdgpu_dm_wb_encoder_helper_funcs =
> };
>
> static const struct drm_connector_funcs amdgpu_dm_wb_connector_funcs = {
> .fill_modes = drm_helper_probe_single_connector_modes,
> .destroy = drm_connector_cleanup,
> - .reset = amdgpu_dm_connector_funcs_reset,
> + .atomic_create_state = amdgpu_dm_connector_atomic_create_state,
> .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> };
>
> static const struct drm_connector_helper_funcs
> amdgpu_dm_wb_conn_helper_funcs = {
> @@ -259,11 +259,19 @@ int amdgpu_dm_wb_connector_init(struct
> amdgpu_display_manager *dm,
> return res;
> /*
> * Some of the properties below require access to state, like bpc.
> * Allocate some default initial connector state with our reset helper.
> */
> - if (wbcon->base.base.funcs->reset)
> - wbcon->base.base.funcs->reset(&wbcon->base.base);
> + if (!wbcon->base.base.state &&
> + wbcon->base.base.funcs->atomic_create_state) {
> + struct drm_connector_state *conn_state;
> +
> + conn_state =
> amdgpu_dm_connector_atomic_create_state(&wbcon->base.base);
Nit: functionally the same, but would
`wbcon->base.base.funcs->atomic_create_state(&wbcon->base.base);` be clearer?
Thanks,
Leo
> + if (IS_ERR(conn_state))
> + return PTR_ERR(conn_state);
> +
> + wbcon->base.base.state = conn_state;
> + }
>
> return 0;
> }
> EXPORT_IF_KUNIT(amdgpu_dm_wb_connector_init);
> diff --git
> a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c
> b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c
> index 8117aaf41f22..ebf8155326cb 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c
> @@ -1466,23 +1466,23 @@ static void
> dm_test_decide_crtc_timing_no_crtc_clock(struct kunit *test)
>
> KUNIT_EXPECT_EQ(test, drm_mode.crtc_clock, 0);
> KUNIT_EXPECT_EQ(test, drm_mode.crtc_hdisplay, 0);
> }
>
> -/* Tests for amdgpu_dm_connector_funcs_reset() */
> +/* Tests for amdgpu_dm_connector_atomic_create_state() */
>
> static const struct drm_connector_funcs dm_test_connector_funcs = {
> - .reset = amdgpu_dm_connector_funcs_reset,
> + .atomic_create_state = amdgpu_dm_connector_atomic_create_state,
> .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> };
>
> /**
> - * dm_test_funcs_reset_sets_defaults - Test funcs_reset sets defaults
> + * dm_test_atomic_create_sets_defaults - Test funcs_reset sets defaults
> * @test: The KUnit test context
> */
> -static void dm_test_funcs_reset_sets_defaults(struct kunit *test)
> +static void dm_test_atomic_create_sets_defaults(struct kunit *test)
> {
> struct device *dev;
> struct drm_device *drm;
> struct drm_connector *connector;
> struct dm_connector_state *dm_state;
> @@ -1499,13 +1499,13 @@ static void dm_test_funcs_reset_sets_defaults(struct
> kunit *test)
> KUNIT_ASSERT_NOT_NULL(test, connector);
>
> drmm_connector_init(drm, connector, &dm_test_connector_funcs,
> DRM_MODE_CONNECTOR_DisplayPort, NULL);
>
> - amdgpu_dm_connector_funcs_reset(connector);
> + connector->state = amdgpu_dm_connector_atomic_create_state(connector);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, connector->state);
>
> - KUNIT_ASSERT_NOT_NULL(test, connector->state);
> dm_state = to_dm_connector_state(connector->state);
> KUNIT_EXPECT_EQ(test, (int)dm_state->scaling, (int)RMX_OFF);
> KUNIT_EXPECT_FALSE(test, dm_state->underscan_enable);
> KUNIT_EXPECT_EQ(test, (int)dm_state->underscan_hborder, 0);
> KUNIT_EXPECT_EQ(test, (int)dm_state->underscan_vborder, 0);
> @@ -1513,14 +1513,14 @@ static void dm_test_funcs_reset_sets_defaults(struct
> kunit *test)
> KUNIT_EXPECT_EQ(test, dm_state->vcpi_slots, 0);
> KUNIT_EXPECT_EQ(test, (int)dm_state->pbn, 0);
> }
>
> /**
> - * dm_test_funcs_reset_edp_abm_level - Test funcs_reset eDP sets ABM
> + * dm_test_atomic_create_edp_abm_level - Test funcs_reset eDP sets ABM
> * @test: The KUnit test context
> */
> -static void dm_test_funcs_reset_edp_abm_level(struct kunit *test)
> +static void dm_test_atomic_create_edp_abm_level(struct kunit *test)
> {
> struct device *dev;
> struct drm_device *drm;
> struct drm_connector *connector;
> struct dm_connector_state *dm_state;
> @@ -1540,25 +1540,26 @@ static void dm_test_funcs_reset_edp_abm_level(struct
> kunit *test)
> drmm_connector_init(drm, connector, &dm_test_connector_funcs,
> DRM_MODE_CONNECTOR_eDP, NULL);
>
> /* Test with abm_level > 0 */
> amdgpu_dm_set_abm_level_param(3);
> - amdgpu_dm_connector_funcs_reset(connector);
>
> - KUNIT_ASSERT_NOT_NULL(test, connector->state);
> + connector->state = amdgpu_dm_connector_atomic_create_state(connector);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, connector->state);
> +
> dm_state = to_dm_connector_state(connector->state);
> KUNIT_EXPECT_EQ(test, (int)dm_state->abm_level, 3);
>
> amdgpu_dm_set_abm_level_param(saved_abm_level);
> }
>
> /**
> - * dm_test_funcs_reset_edp_abm_disabled - Test funcs_reset eDP ABM
> + * dm_test_atomic_create_edp_abm_disabled - Test funcs_reset eDP ABM
> * disabled
> * @test: The KUnit test context
> */
> -static void dm_test_funcs_reset_edp_abm_disabled(struct kunit *test)
> +static void dm_test_atomic_create_edp_abm_disabled(struct kunit *test)
> {
> struct device *dev;
> struct drm_device *drm;
> struct drm_connector *connector;
> struct dm_connector_state *dm_state;
> @@ -1578,13 +1579,14 @@ static void
> dm_test_funcs_reset_edp_abm_disabled(struct kunit *test)
> drmm_connector_init(drm, connector, &dm_test_connector_funcs,
> DRM_MODE_CONNECTOR_eDP, NULL);
>
> /* Test with abm_level <= 0 → immediate disable */
> amdgpu_dm_set_abm_level_param(-1);
> - amdgpu_dm_connector_funcs_reset(connector);
>
> - KUNIT_ASSERT_NOT_NULL(test, connector->state);
> + connector->state = amdgpu_dm_connector_atomic_create_state(connector);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, connector->state);
> +
> dm_state = to_dm_connector_state(connector->state);
> KUNIT_EXPECT_EQ(test, (int)dm_state->abm_level,
> (int)ABM_LEVEL_IMMEDIATE_DISABLE);
>
> amdgpu_dm_set_abm_level_param(saved_abm_level);
> @@ -1618,12 +1620,12 @@ static void
> dm_test_atomic_dup_state_copies_fields(struct kunit *test)
> KUNIT_ASSERT_NOT_NULL(test, connector);
>
> drmm_connector_init(drm, connector, &dm_test_connector_funcs,
> DRM_MODE_CONNECTOR_HDMIA, NULL);
>
> - amdgpu_dm_connector_funcs_reset(connector);
> - KUNIT_ASSERT_NOT_NULL(test, connector->state);
> + connector->state = amdgpu_dm_connector_atomic_create_state(connector);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, connector->state);
>
> /* Modify original state fields */
> dm_state = to_dm_connector_state(connector->state);
> dm_state->scaling = RMX_CENTER;
> dm_state->underscan_enable = true;
> @@ -4884,11 +4886,11 @@ static struct dm_test_destroy_ctx
> *dm_test_destroy_ctx_alloc(struct kunit *test)
> * drm_connector_init() requires funcs->destroy to be set, so a dedicated
> funcs
> * table wires it to amdgpu_dm_connector_destroy() (the test invokes it
> * directly; the connector is removed from the device before teardown).
> */
> static const struct drm_connector_funcs dm_test_destroy_funcs = {
> - .reset = amdgpu_dm_connector_funcs_reset,
> + .atomic_create_state = amdgpu_dm_connector_atomic_create_state,
> .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> .destroy = amdgpu_dm_connector_destroy,
> };
>
> @@ -6251,17 +6253,21 @@ static void
> dm_test_restore_state_no_connector_state(struct kunit *test)
> */
> static void dm_test_restore_state_no_encoder(struct kunit *test)
> {
> struct drm_device *drm = dm_test_alloc_drm(test);
> struct amdgpu_dm_connector *aconnector;
> + struct drm_connector_state *conn_state;
>
> aconnector = dm_test_add_connector(test, drm,
> DRM_MODE_CONNECTOR_HDMIA);
> aconnector->dc_sink = kunit_kzalloc(test, 1, GFP_KERNEL);
> KUNIT_ASSERT_NOT_NULL(test, aconnector->dc_sink);
> - aconnector->base.funcs->reset(&aconnector->base);
> - KUNIT_ASSERT_NOT_NULL(test, aconnector->base.state);
> +
> + conn_state =
> aconnector->base.funcs->atomic_create_state(&aconnector->base);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
> +
> + aconnector->base.state = conn_state;
> /* connector->encoder left NULL. */
>
> dm_restore_drm_connector_state(drm, &aconnector->base);
>
> KUNIT_EXPECT_NULL(test, aconnector->base.encoder);
> @@ -6275,20 +6281,25 @@ static void dm_test_restore_state_no_encoder(struct
> kunit *test)
> * dc stream, so the function returns before comparing sinks.
> */
> static void dm_test_restore_state_no_stream(struct kunit *test)
> {
> struct drm_device *drm = dm_test_alloc_drm(test);
> + struct drm_connector_state *conn_state;
> struct amdgpu_dm_connector *aconnector;
> struct dm_crtc_state *acrtc_state;
> struct drm_encoder *enc;
> struct drm_crtc *crtc;
>
> aconnector = dm_test_add_connector(test, drm,
> DRM_MODE_CONNECTOR_HDMIA);
> aconnector->dc_sink = kunit_kzalloc(test, 1, GFP_KERNEL);
> KUNIT_ASSERT_NOT_NULL(test, aconnector->dc_sink);
> - aconnector->base.funcs->reset(&aconnector->base);
> +
> + conn_state =
> aconnector->base.funcs->atomic_create_state(&aconnector->base);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
> +
> + aconnector->base.state = conn_state;
>
> enc = kunit_kzalloc(test, sizeof(*enc), GFP_KERNEL);
> KUNIT_ASSERT_NOT_NULL(test, enc);
> crtc = kunit_kzalloc(test, sizeof(*crtc), GFP_KERNEL);
> KUNIT_ASSERT_NOT_NULL(test, crtc);
> @@ -6313,21 +6324,26 @@ static void dm_test_restore_state_no_stream(struct
> kunit *test)
> * nothing to restore, so the forced atomic commit is not issued.
> */
> static void dm_test_restore_state_same_sink(struct kunit *test)
> {
> struct drm_device *drm = dm_test_alloc_drm(test);
> + struct drm_connector_state *conn_state;
> struct amdgpu_dm_connector *aconnector;
> struct dm_crtc_state *acrtc_state;
> struct dc_stream_state *stream;
> struct drm_encoder *enc;
> struct drm_crtc *crtc;
>
> aconnector = dm_test_add_connector(test, drm,
> DRM_MODE_CONNECTOR_HDMIA);
> aconnector->dc_sink = kunit_kzalloc(test, 1, GFP_KERNEL);
> KUNIT_ASSERT_NOT_NULL(test, aconnector->dc_sink);
> - aconnector->base.funcs->reset(&aconnector->base);
> +
> + conn_state =
> aconnector->base.funcs->atomic_create_state(&aconnector->base);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
> +
> + aconnector->base.state = conn_state;
>
> enc = kunit_kzalloc(test, sizeof(*enc), GFP_KERNEL);
> KUNIT_ASSERT_NOT_NULL(test, enc);
> crtc = kunit_kzalloc(test, sizeof(*crtc), GFP_KERNEL);
> KUNIT_ASSERT_NOT_NULL(test, crtc);
> @@ -7030,10 +7046,11 @@ static void dm_test_mode_valid_no_dc_sink(struct
> kunit *test)
> */
> static void dm_test_mode_valid_force_on_no_stream(struct kunit *test)
> {
> struct dm_test_cvs_ctx *ctx =
> dm_test_cvs_ctx_alloc(test, DRM_MODE_CONNECTOR_DisplayPort);
> + struct drm_connector_state *conn_state;
> struct dc_sink *em_sink;
>
> em_sink = kunit_kzalloc(test, sizeof(*em_sink), GFP_KERNEL);
> KUNIT_ASSERT_NOT_NULL(test, em_sink);
>
> @@ -7042,12 +7059,14 @@ static void
> dm_test_mode_valid_force_on_no_stream(struct kunit *test)
> ctx->aconnector->base.force = DRM_FORCE_ON;
>
> /* drm_connector_cleanup() kfree()s connector->state, so it must not
> * point at KUnit-managed memory.
> */
> - amdgpu_dm_connector_funcs_reset(&ctx->aconnector->base);
> - KUNIT_ASSERT_NOT_NULL(test, ctx->aconnector->base.state);
> + conn_state =
> amdgpu_dm_connector_atomic_create_state(&ctx->aconnector->base);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
> +
> + ctx->aconnector->base.state = conn_state;
> ctx->aconnector->base.state->max_requested_bpc = 4;
>
> KUNIT_EXPECT_EQ(test,
> amdgpu_dm_connector_mode_valid(&ctx->aconnector->base,
> ctx->mode),
> @@ -7557,10 +7576,11 @@ static void
> dm_test_update_after_detect_disconnect(struct kunit *test)
> {
> struct dm_test_uad_ctx *ctx =
> dm_test_uad_ctx_alloc(test, DRM_MODE_CONNECTOR_HDMIA);
> struct dc_sink *old_sink = dm_test_uad_owned_sink();
> struct dc_crtc_timing *timing = kzalloc_obj(*timing, GFP_KERNEL);
> + struct drm_connector_state *conn_state;
>
> KUNIT_ASSERT_NOT_NULL(test, old_sink);
> KUNIT_ASSERT_NOT_NULL(test, timing);
>
> mutex_init(&ctx->adev->dm.audio_lock);
> @@ -7568,12 +7588,14 @@ static void
> dm_test_update_after_detect_disconnect(struct kunit *test)
> ctx->aconnector->timing_requested = timing;
> ctx->aconnector->num_modes = 3;
> ctx->aconnector->audio_inst = 5;
> ctx->link->local_sink = NULL;
>
> - amdgpu_dm_connector_funcs_reset(&ctx->aconnector->base);
> - KUNIT_ASSERT_NOT_NULL(test, ctx->aconnector->base.state);
> + conn_state =
> amdgpu_dm_connector_atomic_create_state(&ctx->aconnector->base);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
> +
> + ctx->aconnector->base.state = conn_state;
> ctx->aconnector->base.state->content_protection =
> DRM_MODE_CONTENT_PROTECTION_ENABLED;
>
> amdgpu_dm_update_connector_after_detect(ctx->aconnector);
>
> @@ -9197,10 +9219,11 @@ struct dm_test_fs_caps_ctx {
> * parser to succeed install one.
> */
> static struct dm_test_fs_caps_ctx *
> dm_test_fs_caps_ctx_alloc(struct kunit *test, enum signal_type sink_signal)
> {
> + struct drm_connector_state *conn_state;
> struct dm_test_fs_caps_ctx *ctx;
> struct dc_context *dc_ctx;
> struct device *dev;
> struct dc *dc;
>
> @@ -9222,12 +9245,15 @@ dm_test_fs_caps_ctx_alloc(struct kunit *test, enum
> signal_type sink_signal)
> KUNIT_ASSERT_NOT_NULL(test, ctx->aconnector);
> KUNIT_ASSERT_EQ(test,
> drmm_connector_init(ctx->drm, &ctx->aconnector->base,
> &dm_test_connector_funcs,
> DRM_MODE_CONNECTOR_DisplayPort,
> NULL), 0);
> - amdgpu_dm_connector_funcs_reset(&ctx->aconnector->base);
> - KUNIT_ASSERT_NOT_NULL(test, ctx->aconnector->base.state);
> +
> + conn_state =
> amdgpu_dm_connector_atomic_create_state(&ctx->aconnector->base);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
> +
> + ctx->aconnector->base.state = conn_state;
> KUNIT_ASSERT_EQ(test,
>
> drm_connector_attach_vrr_capable_property(&ctx->aconnector->base), 0);
>
> dc_ctx = kunit_kzalloc(test, sizeof(*dc_ctx), GFP_KERNEL);
> KUNIT_ASSERT_NOT_NULL(test, dc_ctx);
> @@ -9628,11 +9654,11 @@ dm_test_force_dup_state_fail(struct drm_connector
> *connector)
> {
> return NULL;
> }
>
> static const struct drm_connector_funcs dm_test_force_fail_funcs = {
> - .reset = amdgpu_dm_connector_funcs_reset,
> + .atomic_create_state = amdgpu_dm_connector_atomic_create_state,
> .atomic_duplicate_state = dm_test_force_dup_state_fail,
> .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> };
>
> /* The atomic modeset check dereferences the helper funcs unconditionally. */
> @@ -9845,14 +9871,14 @@ static struct kunit_case amdgpu_dm_connector_tests[]
> = {
> /* decide_crtc_timing_for_drm_display_mode */
> KUNIT_CASE(dm_test_decide_crtc_timing_scale_enabled),
> KUNIT_CASE(dm_test_decide_crtc_timing_matching_mode),
> KUNIT_CASE(dm_test_decide_crtc_timing_no_copy),
> KUNIT_CASE(dm_test_decide_crtc_timing_no_crtc_clock),
> - /* amdgpu_dm_connector_funcs_reset */
> - KUNIT_CASE(dm_test_funcs_reset_sets_defaults),
> - KUNIT_CASE(dm_test_funcs_reset_edp_abm_level),
> - KUNIT_CASE(dm_test_funcs_reset_edp_abm_disabled),
> + /* amdgpu_dm_connector_atomic_create_state */
> + KUNIT_CASE(dm_test_atomic_create_sets_defaults),
> + KUNIT_CASE(dm_test_atomic_create_edp_abm_level),
> + KUNIT_CASE(dm_test_atomic_create_edp_abm_disabled),
> /* amdgpu_dm_connector_atomic_duplicate_state */
> KUNIT_CASE(dm_test_atomic_dup_state_copies_fields),
> /* amdgpu_dm_fill_hdr_info_packet */
> KUNIT_CASE(dm_test_fill_hdr_null_metadata),
> KUNIT_CASE(dm_test_fill_hdr_zeroes_output),
>