diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0553-drm-amd-display-Create-dm_crtc_state-stubs.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0553-drm-amd-display-Create-dm_crtc_state-stubs.patch | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0553-drm-amd-display-Create-dm_crtc_state-stubs.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0553-drm-amd-display-Create-dm_crtc_state-stubs.patch new file mode 100644 index 00000000..77c7a6e2 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0553-drm-amd-display-Create-dm_crtc_state-stubs.patch @@ -0,0 +1,132 @@ +From 67278a2f946afa91de077344b24095ccfa034606 Mon Sep 17 00:00:00 2001 +From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Date: Tue, 27 Jun 2017 17:24:00 -0400 +Subject: [PATCH 0553/4131] drm/amd/display: Create dm_crtc_state stubs. + +These stubs are initial only since we need to flatten +DC objects (steran at least) to implement deep copy. + +Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Reviewed-by: Harry Wentland <Harry.Wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 74 +++++++++++++++++++++- + .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.h | 10 +++ + 2 files changed, 81 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c +index 6cbbf77..abbf575 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c +@@ -1018,16 +1018,84 @@ static int amdgpu_atomic_helper_page_flip(struct drm_crtc *crtc, + return ret; + } + ++static void dm_crtc_destroy_state(struct drm_crtc *crtc, ++ struct drm_crtc_state *state) ++{ ++ struct dm_crtc_state *cur = to_dm_crtc_state(state); ++ ++ if (cur->dc_stream) { ++ /* TODO Destroy dc_stream objects are stream object is flattened */ ++ dm_free(cur->dc_stream); ++ } else ++ WARN_ON(1); ++ ++ __drm_atomic_helper_crtc_destroy_state(state); ++ ++ ++ kfree(state); ++} ++ ++static void dm_crtc_reset_state(struct drm_crtc *crtc) ++{ ++ struct dm_crtc_state *state; ++ ++ if (crtc->state) ++ dm_crtc_destroy_state(crtc, crtc->state); ++ ++ state = kzalloc(sizeof(*state), GFP_KERNEL); ++ if (WARN_ON(!state)) ++ return; ++ ++ ++ crtc->state = &state->base; ++ crtc->state->crtc = crtc; ++ ++ state->dc_stream = dm_alloc(sizeof(*state->dc_stream)); ++ WARN_ON(!state->dc_stream); ++} ++ ++static struct drm_crtc_state * ++dm_crtc_duplicate_state(struct drm_crtc *crtc) ++{ ++ struct dm_crtc_state *state, *cur; ++ struct dc_stream *dc_stream; ++ ++ if (WARN_ON(!crtc->state)) ++ return NULL; ++ ++ cur = to_dm_crtc_state(crtc->state); ++ if (WARN_ON(!cur->dc_stream)) ++ return NULL; ++ ++ dc_stream = dm_alloc(sizeof(*dc_stream)); ++ if (WARN_ON(!dc_stream)) ++ return NULL; ++ ++ state = dm_alloc(sizeof(*state)); ++ if (WARN_ON(!state)) { ++ dm_free(dc_stream); ++ return NULL; ++ } ++ ++ __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); ++ ++ state->dc_stream = dc_stream; ++ ++ /* TODO Duplicate dc_stream after objects are stream object is flattened */ ++ ++ return &state->base; ++} ++ + /* Implemented only the options currently availible for the driver */ + static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = { +- .reset = drm_atomic_helper_crtc_reset, ++ .reset = dm_crtc_reset_state, + .destroy = amdgpu_dm_crtc_destroy, + .gamma_set = drm_atomic_helper_legacy_gamma_set, + .set_config = drm_atomic_helper_set_config, + .set_property = drm_atomic_helper_crtc_set_property, + .page_flip = amdgpu_atomic_helper_page_flip, +- .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, +- .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, ++ .atomic_duplicate_state = dm_crtc_duplicate_state, ++ .atomic_destroy_state = dm_crtc_destroy_state, + }; + + static enum drm_connector_status +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.h +index 6411dd1..1091725 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.h ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.h +@@ -32,6 +32,16 @@ struct amdgpu_framebuffer; + struct amdgpu_display_manager; + struct dc_validation_set; + struct dc_surface; ++/* TODO rename to dc_stream_state */ ++struct dc_stream; ++ ++ ++struct dm_crtc_state { ++ struct drm_crtc_state base; ++ struct dc_stream *dc_stream; ++}; ++ ++#define to_dm_crtc_state(x) container_of(x, struct dm_crtc_state, base) + + struct dm_plane_state { + struct drm_plane_state base; +-- +2.7.4 + |