aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0354-drm-amd-display-Return-context-from-validate_context.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0354-drm-amd-display-Return-context-from-validate_context.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0354-drm-amd-display-Return-context-from-validate_context.patch171
1 files changed, 171 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0354-drm-amd-display-Return-context-from-validate_context.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0354-drm-amd-display-Return-context-from-validate_context.patch
new file mode 100644
index 00000000..9f700078
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0354-drm-amd-display-Return-context-from-validate_context.patch
@@ -0,0 +1,171 @@
+From a3878a5da6834fafb5cc42ec335741a17713a091 Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Wed, 29 Mar 2017 11:22:05 -0400
+Subject: [PATCH 0354/4131] drm/amd/display: Return context from
+ validate_context
+
+This will allow us to carry it from check to commit
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 26 +++++++++++-----
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 36 +++++++++++++++++-----
+ drivers/gpu/drm/amd/display/dc/dc.h | 5 +++
+ 3 files changed, 52 insertions(+), 15 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 dbeee59..bb55944 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
+@@ -1557,6 +1557,7 @@ int amdgpu_dm_connector_mode_valid(
+ /* TODO: Unhardcode stream count */
+ struct dc_stream *stream;
+ struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
++ struct validate_context *context;
+
+ if ((mode->flags & DRM_MODE_FLAG_INTERLACE) ||
+ (mode->flags & DRM_MODE_FLAG_DBLSCAN))
+@@ -1591,8 +1592,13 @@ int amdgpu_dm_connector_mode_valid(
+ stream->src.height = mode->vdisplay;
+ stream->dst = stream->src;
+
+- if (dc_validate_resources(adev->dm.dc, &val_set, 1))
++ context = dc_get_validate_context(adev->dm.dc, &val_set, 1);
++
++ if (context) {
+ result = MODE_OK;
++ dc_resource_validate_ctx_destruct(context);
++ dm_free(context);
++ }
+
+ dc_stream_release(stream);
+
+@@ -3023,6 +3029,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ struct amdgpu_device *adev = dev->dev_private;
+ struct dc *dc = adev->dm.dc;
+ bool need_to_validate = false;
++ struct validate_context *context;
+
+ ret = drm_atomic_helper_check(dev, state);
+
+@@ -3245,15 +3252,20 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ }
+ }
+
+- if (need_to_validate == false || set_count == 0 ||
+- dc_validate_resources(dc, set, set_count))
++ context = dc_get_validate_context(dc, set, set_count);
++
++ if (need_to_validate == false || set_count == 0 || context)
+ ret = 0;
+
+- for (i = 0; i < set_count; i++) {
+- for (j = 0; j < set[i].surface_count; j++) {
+- dc_surface_release(set[i].surfaces[j]);
+- }
++ if (context) {
++ dc_resource_validate_ctx_destruct(context);
++ dm_free(context);
+ }
++
++ for (i = 0; i < set_count; i++)
++ for (j = 0; j < set[i].surface_count; j++)
++ dc_surface_release(set[i].surfaces[j]);
++
+ for (i = 0; i < new_stream_count; i++)
+ dc_stream_release(new_streams[i]);
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 5620fe3..64b5216 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -635,7 +635,7 @@ static bool is_validation_required(
+ return false;
+ }
+
+-bool dc_validate_resources(
++struct validate_context *dc_get_validate_context(
+ const struct dc *dc,
+ const struct dc_validation_set set[],
+ uint8_t set_count)
+@@ -644,31 +644,51 @@ bool dc_validate_resources(
+ enum dc_status result = DC_ERROR_UNEXPECTED;
+ struct validate_context *context;
+
+- if (!is_validation_required(core_dc, set, set_count))
+- return true;
+-
+ context = dm_alloc(sizeof(struct validate_context));
+ if(context == NULL)
+ goto context_alloc_fail;
+
++ if (!is_validation_required(core_dc, set, set_count)) {
++ dc_resource_validate_ctx_copy_construct(core_dc->current_context, context);
++ return context;
++ }
++
+ result = core_dc->res_pool->funcs->validate_with_context(
+ core_dc, set, set_count, context);
+
+- dc_resource_validate_ctx_destruct(context);
+- dm_free(context);
+-
+ context_alloc_fail:
+ if (result != DC_OK) {
+ dm_logger_write(core_dc->ctx->logger, LOG_WARNING,
+ "%s:resource validation failed, dc_status:%d\n",
+ __func__,
+ result);
++
++ dc_resource_validate_ctx_destruct(context);
++ dm_free(context);
++ context = NULL;
+ }
+
+- return (result == DC_OK);
++ return context;
+
+ }
+
++bool dc_validate_resources(
++ const struct dc *dc,
++ const struct dc_validation_set set[],
++ uint8_t set_count)
++{
++ struct validate_context *ctx;
++
++ ctx = dc_get_validate_context(dc, set, set_count);
++ if (ctx) {
++ dc_resource_validate_ctx_destruct(ctx);
++ dm_free(ctx);
++ return true;
++ }
++
++ return false;
++}
++
+ bool dc_validate_guaranteed(
+ const struct dc *dc,
+ const struct dc_stream *stream)
+diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
+index 7de2080..1b3fd79 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc.h
++++ b/drivers/gpu/drm/amd/display/dc/dc.h
+@@ -505,6 +505,11 @@ struct dc_validation_set {
+ * After this call:
+ * No hardware is programmed for call. Only validation is done.
+ */
++struct validate_context *dc_get_validate_context(
++ const struct dc *dc,
++ const struct dc_validation_set set[],
++ uint8_t set_count);
++
+ bool dc_validate_resources(
+ const struct dc *dc,
+ const struct dc_validation_set set[],
+--
+2.7.4
+