diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2756-drm-amd-display-Move-dc_stream-interface-to-separate.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2756-drm-amd-display-Move-dc_stream-interface-to-separate.patch | 569 |
1 files changed, 569 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2756-drm-amd-display-Move-dc_stream-interface-to-separate.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2756-drm-amd-display-Move-dc_stream-interface-to-separate.patch new file mode 100644 index 00000000..59c0934b --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2756-drm-amd-display-Move-dc_stream-interface-to-separate.patch @@ -0,0 +1,569 @@ +From a009428eb656b5e5ff1d47eea53ceddee34d6c30 Mon Sep 17 00:00:00 2001 +From: Harry Wentland <harry.wentland@amd.com> +Date: Wed, 8 Nov 2017 14:34:14 -0500 +Subject: [PATCH 2756/4131] drm/amd/display: Move dc_stream interface to + separate header + +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/display/dc/dc.h | 223 +----------------------- + drivers/gpu/drm/amd/display/dc/dc_stream.h | 271 +++++++++++++++++++++++++++++ + 2 files changed, 273 insertions(+), 221 deletions(-) + create mode 100644 drivers/gpu/drm/amd/display/dc/dc_stream.h + +diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h +index 70d5395..9bfbab0 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc.h ++++ b/drivers/gpu/drm/amd/display/dc/dc.h +@@ -137,6 +137,7 @@ struct dc; + struct dc_plane_state; + struct dc_state; + ++ + struct dc_cap_funcs { + bool (*get_dcc_compression_cap)(const struct dc *dc, + const struct dc_dcc_surface_param *input, +@@ -589,168 +590,7 @@ void dc_flip_plane_addrs(struct dc *dc, + bool dc_post_update_surfaces_to_stream( + struct dc *dc); + +-/******************************************************************************* +- * Stream Interfaces +- ******************************************************************************/ +- +-struct dc_stream_status { +- int primary_otg_inst; +- int stream_enc_inst; +- int plane_count; +- struct dc_plane_state *plane_states[MAX_SURFACE_NUM]; +- +- /* +- * link this stream passes through +- */ +- struct dc_link *link; +-}; +- +-struct dc_stream_state { +- struct dc_sink *sink; +- struct dc_crtc_timing timing; +- +- struct rect src; /* composition area */ +- struct rect dst; /* stream addressable area */ +- +- struct audio_info audio_info; +- +- struct freesync_context freesync_ctx; +- +- struct dc_hdr_static_metadata hdr_static_metadata; +- struct dc_transfer_func *out_transfer_func; +- struct colorspace_transform gamut_remap_matrix; +- struct csc_transform csc_color_matrix; +- +- enum dc_color_space output_color_space; +- enum dc_dither_option dither_option; +- +- enum view_3d_format view_format; +- +- bool ignore_msa_timing_param; +- /* TODO: custom INFO packets */ +- /* TODO: ABM info (DMCU) */ +- /* TODO: PSR info */ +- /* TODO: CEA VIC */ +- +- /* from core_stream struct */ +- struct dc_context *ctx; +- +- /* used by DCP and FMT */ +- struct bit_depth_reduction_params bit_depth_params; +- struct clamping_and_pixel_encoding_params clamping; +- +- int phy_pix_clk; +- enum signal_type signal; +- bool dpms_off; +- +- struct dc_stream_status status; +- +- struct dc_cursor_attributes cursor_attributes; +- +- /* from stream struct */ +- struct kref refcount; +- +- struct crtc_trigger_info triggered_crtc_reset; +- +-}; +- +-struct dc_stream_update { +- struct rect src; +- struct rect dst; +- struct dc_transfer_func *out_transfer_func; +- struct dc_hdr_static_metadata *hdr_static_metadata; +-}; +- +-bool dc_is_stream_unchanged( +- struct dc_stream_state *old_stream, struct dc_stream_state *stream); +-bool dc_is_stream_scaling_unchanged( +- struct dc_stream_state *old_stream, struct dc_stream_state *stream); +- +-/* +- * Set up surface attributes and associate to a stream +- * The surfaces parameter is an absolute set of all surface active for the stream. +- * If no surfaces are provided, the stream will be blanked; no memory read. +- * Any flip related attribute changes must be done through this interface. +- * +- * After this call: +- * Surfaces attributes are programmed and configured to be composed into stream. +- * This does not trigger a flip. No surface address is programmed. +- */ +- +-bool dc_commit_planes_to_stream( +- struct dc *dc, +- struct dc_plane_state **plane_states, +- uint8_t new_plane_count, +- struct dc_stream_state *dc_stream, +- struct dc_state *state); +- +-void dc_commit_updates_for_stream(struct dc *dc, +- struct dc_surface_update *srf_updates, +- int surface_count, +- struct dc_stream_state *stream, +- struct dc_stream_update *stream_update, +- struct dc_plane_state **plane_states, +- struct dc_state *state); +-/* +- * Log the current stream state. +- */ +-void dc_stream_log( +- const struct dc_stream_state *stream, +- struct dal_logger *dc_logger, +- enum dc_log_type log_type); +- +-uint8_t dc_get_current_stream_count(struct dc *dc); +-struct dc_stream_state *dc_get_stream_at_index(struct dc *dc, uint8_t i); +- +-/* +- * Return the current frame counter. +- */ +-uint32_t dc_stream_get_vblank_counter(const struct dc_stream_state *stream); +- +-/* TODO: Return parsed values rather than direct register read +- * This has a dependency on the caller (amdgpu_get_crtc_scanoutpos) +- * being refactored properly to be dce-specific +- */ +-bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream, +- uint32_t *v_blank_start, +- uint32_t *v_blank_end, +- uint32_t *h_position, +- uint32_t *v_position); +- +-enum dc_status dc_add_stream_to_ctx( +- struct dc *dc, +- struct dc_state *new_ctx, +- struct dc_stream_state *stream); +- +-enum dc_status dc_remove_stream_from_ctx( +- struct dc *dc, +- struct dc_state *new_ctx, +- struct dc_stream_state *stream); +- +- +-bool dc_add_plane_to_context( +- const struct dc *dc, +- struct dc_stream_state *stream, +- struct dc_plane_state *plane_state, +- struct dc_state *context); +- +-bool dc_remove_plane_from_context( +- const struct dc *dc, +- struct dc_stream_state *stream, +- struct dc_plane_state *plane_state, +- struct dc_state *context); +- +-bool dc_rem_all_planes_for_stream( +- const struct dc *dc, +- struct dc_stream_state *stream, +- struct dc_state *context); +- +-bool dc_add_all_planes_for_stream( +- const struct dc *dc, +- struct dc_stream_state *stream, +- struct dc_plane_state * const *plane_states, +- int plane_count, +- struct dc_state *context); ++#include "dc_stream.h" + + /* + * Structure to store surface/stream associations for validation +@@ -761,22 +601,12 @@ struct dc_validation_set { + uint8_t plane_count; + }; + +-enum dc_status dc_validate_stream(struct dc *dc, struct dc_stream_state *stream); +- + enum dc_status dc_validate_plane(struct dc *dc, const struct dc_plane_state *plane_state); + + enum dc_status dc_validate_global_state( + struct dc *dc, + struct dc_state *new_ctx); + +-/* +- * This function takes a stream and checks if it is guaranteed to be supported. +- * Guaranteed means that MAX_COFUNC similar streams are supported. +- * +- * After this call: +- * No hardware is programmed for call. Only validation is done. +- */ +- + + void dc_resource_state_construct( + const struct dc *dc, +@@ -803,42 +633,6 @@ void dc_resource_state_destruct(struct dc_state *context); + */ + bool dc_commit_state(struct dc *dc, struct dc_state *context); + +-/* +- * Set up streams and links associated to drive sinks +- * The streams parameter is an absolute set of all active streams. +- * +- * After this call: +- * Phy, Encoder, Timing Generator are programmed and enabled. +- * New streams are enabled with blank stream; no memory read. +- */ +-/* +- * Enable stereo when commit_streams is not required, +- * for example, frame alternate. +- */ +-bool dc_enable_stereo( +- struct dc *dc, +- struct dc_state *context, +- struct dc_stream_state *streams[], +- uint8_t stream_count); +- +-/** +- * Create a new default stream for the requested sink +- */ +-struct dc_stream_state *dc_create_stream_for_sink(struct dc_sink *dc_sink); +- +-void dc_stream_retain(struct dc_stream_state *dc_stream); +-void dc_stream_release(struct dc_stream_state *dc_stream); +- +-struct dc_stream_status *dc_stream_get_status( +- struct dc_stream_state *dc_stream); +- +-enum surface_update_type dc_check_update_surfaces_for_stream( +- struct dc *dc, +- struct dc_surface_update *updates, +- int surface_count, +- struct dc_stream_update *stream_update, +- const struct dc_stream_status *stream_status); +- + + struct dc_state *dc_create_state(void); + void dc_retain_state(struct dc_state *context); +@@ -1088,18 +882,6 @@ struct dc_sink_init_data { + + struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params); + +-/******************************************************************************* +- * Cursor interfaces - To manages the cursor within a stream +- ******************************************************************************/ +-/* TODO: Deprecated once we switch to dc_set_cursor_position */ +-bool dc_stream_set_cursor_attributes( +- struct dc_stream_state *stream, +- const struct dc_cursor_attributes *attributes); +- +-bool dc_stream_set_cursor_position( +- struct dc_stream_state *stream, +- const struct dc_cursor_position *position); +- + /* Newer interfaces */ + struct dc_cursor { + struct dc_plane_address address; +@@ -1136,5 +918,4 @@ bool dc_submit_i2c( + uint32_t link_index, + struct i2c_command *cmd); + +- + #endif /* DC_INTERFACE_H_ */ +diff --git a/drivers/gpu/drm/amd/display/dc/dc_stream.h b/drivers/gpu/drm/amd/display/dc/dc_stream.h +new file mode 100644 +index 0000000..bed2a93 +--- /dev/null ++++ b/drivers/gpu/drm/amd/display/dc/dc_stream.h +@@ -0,0 +1,271 @@ ++/* ++ * Copyright 2012-14 Advanced Micro Devices, Inc. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR ++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ * ++ * Authors: AMD ++ * ++ */ ++ ++#ifndef DC_STREAM_H_ ++#define DC_STREAM_H_ ++ ++#include "dc_types.h" ++#include "grph_object_defs.h" ++ ++/******************************************************************************* ++ * Stream Interfaces ++ ******************************************************************************/ ++ ++struct dc_stream_status { ++ int primary_otg_inst; ++ int stream_enc_inst; ++ int plane_count; ++ struct dc_plane_state *plane_states[MAX_SURFACE_NUM]; ++ ++ /* ++ * link this stream passes through ++ */ ++ struct dc_link *link; ++}; ++ ++struct dc_stream_state { ++ struct dc_sink *sink; ++ struct dc_crtc_timing timing; ++ ++ struct rect src; /* composition area */ ++ struct rect dst; /* stream addressable area */ ++ ++ struct audio_info audio_info; ++ ++ struct freesync_context freesync_ctx; ++ ++ struct dc_hdr_static_metadata hdr_static_metadata; ++ struct dc_transfer_func *out_transfer_func; ++ struct colorspace_transform gamut_remap_matrix; ++ struct csc_transform csc_color_matrix; ++ ++ enum dc_color_space output_color_space; ++ enum dc_dither_option dither_option; ++ ++ enum view_3d_format view_format; ++ ++ bool ignore_msa_timing_param; ++ /* TODO: custom INFO packets */ ++ /* TODO: ABM info (DMCU) */ ++ /* TODO: PSR info */ ++ /* TODO: CEA VIC */ ++ ++ /* from core_stream struct */ ++ struct dc_context *ctx; ++ ++ /* used by DCP and FMT */ ++ struct bit_depth_reduction_params bit_depth_params; ++ struct clamping_and_pixel_encoding_params clamping; ++ ++ int phy_pix_clk; ++ enum signal_type signal; ++ bool dpms_off; ++ ++ struct dc_stream_status status; ++ ++ struct dc_cursor_attributes cursor_attributes; ++ ++ /* from stream struct */ ++ struct kref refcount; ++ ++ struct crtc_trigger_info triggered_crtc_reset; ++ ++}; ++ ++struct dc_stream_update { ++ struct rect src; ++ struct rect dst; ++ struct dc_transfer_func *out_transfer_func; ++ struct dc_hdr_static_metadata *hdr_static_metadata; ++}; ++ ++bool dc_is_stream_unchanged( ++ struct dc_stream_state *old_stream, struct dc_stream_state *stream); ++bool dc_is_stream_scaling_unchanged( ++ struct dc_stream_state *old_stream, struct dc_stream_state *stream); ++ ++/* ++ * Set up surface attributes and associate to a stream ++ * The surfaces parameter is an absolute set of all surface active for the stream. ++ * If no surfaces are provided, the stream will be blanked; no memory read. ++ * Any flip related attribute changes must be done through this interface. ++ * ++ * After this call: ++ * Surfaces attributes are programmed and configured to be composed into stream. ++ * This does not trigger a flip. No surface address is programmed. ++ */ ++ ++bool dc_commit_planes_to_stream( ++ struct dc *dc, ++ struct dc_plane_state **plane_states, ++ uint8_t new_plane_count, ++ struct dc_stream_state *dc_stream, ++ struct dc_state *state); ++ ++void dc_commit_updates_for_stream(struct dc *dc, ++ struct dc_surface_update *srf_updates, ++ int surface_count, ++ struct dc_stream_state *stream, ++ struct dc_stream_update *stream_update, ++ struct dc_plane_state **plane_states, ++ struct dc_state *state); ++/* ++ * Log the current stream state. ++ */ ++void dc_stream_log( ++ const struct dc_stream_state *stream, ++ struct dal_logger *dc_logger, ++ enum dc_log_type log_type); ++ ++uint8_t dc_get_current_stream_count(struct dc *dc); ++struct dc_stream_state *dc_get_stream_at_index(struct dc *dc, uint8_t i); ++ ++/* ++ * Return the current frame counter. ++ */ ++uint32_t dc_stream_get_vblank_counter(const struct dc_stream_state *stream); ++ ++/* TODO: Return parsed values rather than direct register read ++ * This has a dependency on the caller (amdgpu_get_crtc_scanoutpos) ++ * being refactored properly to be dce-specific ++ */ ++bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream, ++ uint32_t *v_blank_start, ++ uint32_t *v_blank_end, ++ uint32_t *h_position, ++ uint32_t *v_position); ++ ++enum dc_status dc_add_stream_to_ctx( ++ struct dc *dc, ++ struct dc_state *new_ctx, ++ struct dc_stream_state *stream); ++ ++enum dc_status dc_remove_stream_from_ctx( ++ struct dc *dc, ++ struct dc_state *new_ctx, ++ struct dc_stream_state *stream); ++ ++ ++bool dc_add_plane_to_context( ++ const struct dc *dc, ++ struct dc_stream_state *stream, ++ struct dc_plane_state *plane_state, ++ struct dc_state *context); ++ ++bool dc_remove_plane_from_context( ++ const struct dc *dc, ++ struct dc_stream_state *stream, ++ struct dc_plane_state *plane_state, ++ struct dc_state *context); ++ ++bool dc_rem_all_planes_for_stream( ++ const struct dc *dc, ++ struct dc_stream_state *stream, ++ struct dc_state *context); ++ ++bool dc_add_all_planes_for_stream( ++ const struct dc *dc, ++ struct dc_stream_state *stream, ++ struct dc_plane_state * const *plane_states, ++ int plane_count, ++ struct dc_state *context); ++ ++enum dc_status dc_validate_stream(struct dc *dc, struct dc_stream_state *stream); ++ ++/* ++ * This function takes a stream and checks if it is guaranteed to be supported. ++ * Guaranteed means that MAX_COFUNC similar streams are supported. ++ * ++ * After this call: ++ * No hardware is programmed for call. Only validation is done. ++ */ ++ ++/* ++ * Set up streams and links associated to drive sinks ++ * The streams parameter is an absolute set of all active streams. ++ * ++ * After this call: ++ * Phy, Encoder, Timing Generator are programmed and enabled. ++ * New streams are enabled with blank stream; no memory read. ++ */ ++/* ++ * Enable stereo when commit_streams is not required, ++ * for example, frame alternate. ++ */ ++bool dc_enable_stereo( ++ struct dc *dc, ++ struct dc_state *context, ++ struct dc_stream_state *streams[], ++ uint8_t stream_count); ++ ++ ++enum surface_update_type dc_check_update_surfaces_for_stream( ++ struct dc *dc, ++ struct dc_surface_update *updates, ++ int surface_count, ++ struct dc_stream_update *stream_update, ++ const struct dc_stream_status *stream_status); ++ ++/** ++ * Create a new default stream for the requested sink ++ */ ++struct dc_stream_state *dc_create_stream_for_sink(struct dc_sink *dc_sink); ++ ++void dc_stream_retain(struct dc_stream_state *dc_stream); ++void dc_stream_release(struct dc_stream_state *dc_stream); ++ ++struct dc_stream_status *dc_stream_get_status( ++ struct dc_stream_state *dc_stream); ++ ++/******************************************************************************* ++ * Cursor interfaces - To manages the cursor within a stream ++ ******************************************************************************/ ++/* TODO: Deprecated once we switch to dc_set_cursor_position */ ++bool dc_stream_set_cursor_attributes( ++ struct dc_stream_state *stream, ++ const struct dc_cursor_attributes *attributes); ++ ++bool dc_stream_set_cursor_position( ++ struct dc_stream_state *stream, ++ const struct dc_cursor_position *position); ++ ++bool dc_stream_adjust_vmin_vmax(struct dc *dc, ++ struct dc_stream_state **stream, ++ int num_streams, ++ int vmin, ++ int vmax); ++ ++bool dc_stream_get_crtc_position(struct dc *dc, ++ struct dc_stream_state **stream, ++ int num_streams, ++ unsigned int *v_pos, ++ unsigned int *nom_v_pos); ++ ++void dc_stream_set_static_screen_events(struct dc *dc, ++ struct dc_stream_state **stream, ++ int num_streams, ++ const struct dc_static_screen_events *events); ++ ++#endif /* DC_STREAM_H_ */ +-- +2.7.4 + |