aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0715-drm-amd-dal-add-virtual-link-and-stream-encoders.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0715-drm-amd-dal-add-virtual-link-and-stream-encoders.patch')
-rw-r--r--common/recipes-kernel/linux/files/0715-drm-amd-dal-add-virtual-link-and-stream-encoders.patch799
1 files changed, 0 insertions, 799 deletions
diff --git a/common/recipes-kernel/linux/files/0715-drm-amd-dal-add-virtual-link-and-stream-encoders.patch b/common/recipes-kernel/linux/files/0715-drm-amd-dal-add-virtual-link-and-stream-encoders.patch
deleted file mode 100644
index b49a65d2..00000000
--- a/common/recipes-kernel/linux/files/0715-drm-amd-dal-add-virtual-link-and-stream-encoders.patch
+++ /dev/null
@@ -1,799 +0,0 @@
-From fd5a57c67269301e7441f4e3acff12bd42d1bf2f Mon Sep 17 00:00:00 2001
-From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
-Date: Thu, 21 Jan 2016 11:38:21 -0500
-Subject: [PATCH 0715/1110] drm/amd/dal: add virtual link and stream encoders
-
-Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
-Acked-by: Harry Wentland <harry.wentland@amd.com>
----
- drivers/gpu/drm/amd/dal/dc/Makefile | 2 +-
- .../gpu/drm/amd/dal/dc/bios/command_table_helper.c | 1 +
- drivers/gpu/drm/amd/dal/dc/core/dc.c | 37 ++++--
- drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 7 +-
- drivers/gpu/drm/amd/dal/dc/core/dc_resource.c | 13 +-
- drivers/gpu/drm/amd/dal/dc/dc.h | 2 +-
- .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 20 ++--
- .../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 18 ++-
- .../gpu/drm/amd/dal/dc/dce110/dce110_resource.h | 1 +
- drivers/gpu/drm/amd/dal/dc/inc/core_types.h | 4 +-
- drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h | 1 +
- drivers/gpu/drm/amd/dal/dc/virtual/Makefile | 9 ++
- .../drm/amd/dal/dc/virtual/virtual_link_encoder.c | 131 +++++++++++++++++++++
- .../drm/amd/dal/dc/virtual/virtual_link_encoder.h | 35 ++++++
- .../amd/dal/dc/virtual/virtual_stream_encoder.c | 124 +++++++++++++++++++
- .../amd/dal/dc/virtual/virtual_stream_encoder.h | 39 ++++++
- drivers/gpu/drm/amd/dal/include/grph_object_id.h | 6 +-
- 17 files changed, 406 insertions(+), 44 deletions(-)
- create mode 100644 drivers/gpu/drm/amd/dal/dc/virtual/Makefile
- create mode 100644 drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c
- create mode 100644 drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.h
- create mode 100644 drivers/gpu/drm/amd/dal/dc/virtual/virtual_stream_encoder.c
- create mode 100644 drivers/gpu/drm/amd/dal/dc/virtual/virtual_stream_encoder.h
-
-diff --git a/drivers/gpu/drm/amd/dal/dc/Makefile b/drivers/gpu/drm/amd/dal/dc/Makefile
-index 05d8ce7..4396203 100644
---- a/drivers/gpu/drm/amd/dal/dc/Makefile
-+++ b/drivers/gpu/drm/amd/dal/dc/Makefile
-@@ -3,7 +3,7 @@
- #
-
- DC_LIBS = adapter asic_capability audio basics bios calcs \
--dcs gpio gpu i2caux irq
-+dcs gpio gpu i2caux irq virtual
-
- ifdef CONFIG_DRM_AMD_DAL_DCE11_0
- DC_LIBS += dce110
-diff --git a/drivers/gpu/drm/amd/dal/dc/bios/command_table_helper.c b/drivers/gpu/drm/amd/dal/dc/bios/command_table_helper.c
-index e0407f4..83a80d5 100644
---- a/drivers/gpu/drm/amd/dal/dc/bios/command_table_helper.c
-+++ b/drivers/gpu/drm/amd/dal/dc/bios/command_table_helper.c
-@@ -311,6 +311,7 @@ uint8_t dal_cmd_table_helper_encoder_id_to_atom(
- return ENCODER_OBJECT_ID_INTERNAL_VCE;
- case ENCODER_ID_EXTERNAL_GENERIC_DVO:
- return ENCODER_OBJECT_ID_GENERAL_EXTERNAL_DVO;
-+ case ENCODER_ID_INTERNAL_VIRTUAL:
- case ENCODER_ID_UNKNOWN:
- return ENCODER_OBJECT_ID_NONE;
- default:
-diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
-index d953784..71df979 100644
---- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
-+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
-@@ -40,6 +40,7 @@
- #include "bandwidth_calcs.h"
- #include "include/irq_service_interface.h"
- #include "inc/transform.h"
-+#include "../virtual/virtual_link_encoder.h"
-
- #include "link_hwss.h"
- #include "link_encoder.h"
-@@ -125,6 +126,7 @@ static bool create_links(struct dc *dc, const struct dc_init_data *init_params)
- for (i = 0; i < init_params->num_virtual_links; i++) {
- struct core_link *link =
- dc_service_alloc(dc->ctx, sizeof(*link));
-+ struct encoder_init_data enc_init = { 0 };
-
- if (link == NULL) {
- BREAK_TO_DEBUGGER();
-@@ -135,6 +137,22 @@ static bool create_links(struct dc *dc, const struct dc_init_data *init_params)
- link->ctx = init_params->ctx;
- link->dc = dc;
- link->public.connector_signal = SIGNAL_TYPE_VIRTUAL;
-+ link->link_id.type = OBJECT_TYPE_CONNECTOR;
-+ link->link_id.id = CONNECTOR_ID_VIRTUAL;
-+ link->link_id.enum_id = ENUM_ID_1;
-+ link->link_enc =
-+ dc_service_alloc(dc->ctx, sizeof(*link->link_enc));
-+
-+ enc_init.adapter_service = init_params->adapter_srv;
-+ enc_init.ctx = init_params->ctx;
-+ enc_init.channel = CHANNEL_ID_UNKNOWN;
-+ enc_init.hpd_source = HPD_SOURCEID_UNKNOWN;
-+ enc_init.transmitter = TRANSMITTER_UNKNOWN;
-+ enc_init.connector = link->link_id;
-+ enc_init.encoder.type = OBJECT_TYPE_ENCODER;
-+ enc_init.encoder.id = ENCODER_ID_INTERNAL_VIRTUAL;
-+ enc_init.encoder.enum_id = ENUM_ID_1;
-+ virtual_link_encoder_construct(link->link_enc, &enc_init);
-
- link->public.link_index = dc->link_count;
- dc->links[dc->link_count] = link;
-@@ -180,8 +198,7 @@ static void init_hw(struct dc *dc)
- * required signal (which may be different from the
- * default signal on connector). */
- struct core_link *link = dc->links[i];
-- if (link->public.connector_signal != SIGNAL_TYPE_VIRTUAL)
-- link->link_enc->funcs->hw_init(link->link_enc);
-+ link->link_enc->funcs->hw_init(link->link_enc);
- }
-
- for(i = 0; i < dc->res_pool.controller_count; i++) {
-@@ -355,6 +372,7 @@ static bool construct(struct dc *dc, const struct dal_init_data *init_params)
-
- if (!dc->hwss.construct_resource_pool(
- dc_init_data.adapter_srv,
-+ dc_init_data.num_virtual_links,
- dc,
- &dc->res_pool))
- goto construct_resource_fail;
-@@ -866,23 +884,24 @@ bool dc_link_add_remote_sink(const struct dc_link *link, struct dc_sink *sink)
-
- dc_link->remote_sinks[link->sink_count] = sink;
- dc_link->sink_count++;
-- if (sink->sink_signal == SIGNAL_TYPE_VIRTUAL
-- && link->connector_signal == SIGNAL_TYPE_VIRTUAL)
-- dc_link->type = dc_connection_single;
-
- return true;
- }
-
--void dc_link_add_sink(const struct dc_link *link, struct dc_sink *sink)
-+void dc_link_set_sink(const struct dc_link *link, struct dc_sink *sink)
- {
- struct core_link *core_link = DC_LINK_TO_LINK(link);
- struct dc_link *dc_link = &core_link->public;
-
- dc_link->local_sink = sink;
-- dc_link->sink_count = 1;
-- if (sink->sink_signal == SIGNAL_TYPE_VIRTUAL
-- && link->connector_signal == SIGNAL_TYPE_VIRTUAL)
-+
-+ if (sink == NULL) {
-+ dc_link->sink_count = 0;
-+ dc_link->type = dc_connection_none;
-+ } else {
-+ dc_link->sink_count = 1;
- dc_link->type = dc_connection_single;
-+ }
- }
-
- void dc_link_remove_remote_sink(const struct dc_link *link, const struct dc_sink *sink)
-diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
-index 3f6a7bb..912f3fe 100644
---- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
-+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
-@@ -1228,7 +1228,7 @@ static void enable_link_hdmi(struct core_stream *stream)
- /****************************enable_link***********************************/
- static enum dc_status enable_link(struct core_stream *stream)
- {
-- enum dc_status status;
-+ enum dc_status status = DC_ERROR_UNEXPECTED;
- switch (stream->signal) {
- case SIGNAL_TYPE_DISPLAY_PORT:
- case SIGNAL_TYPE_EDP:
-@@ -1244,9 +1244,10 @@ static enum dc_status enable_link(struct core_stream *stream)
- enable_link_hdmi(stream);
- status = DC_OK;
- break;
--
-+ case SIGNAL_TYPE_VIRTUAL:
-+ status = DC_OK;
-+ break;
- default:
-- status = DC_ERROR_UNEXPECTED;
- break;
- }
-
-diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c b/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c
-index 7cc4ed2..c52a1e2 100644
---- a/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c
-+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c
-@@ -457,11 +457,8 @@ static void fill_display_configs(
- cfg->src_width = stream->public.src.width;
- cfg->ddi_channel_mapping =
- stream->sink->link->ddi_channel_mapping.raw;
-- if (stream->signal != SIGNAL_TYPE_VIRTUAL)
-- cfg->transmitter =
-+ cfg->transmitter =
- stream->sink->link->link_enc->transmitter;
-- else
-- cfg->transmitter = TRANSMITTER_UNKNOWN;
- cfg->link_settings =
- stream->sink->link->cur_link_settings;
- cfg->sym_clock = stream->public.timing.pix_clk_khz;
-@@ -745,14 +742,6 @@ enum dc_status map_resources(
- .flags.timing_changed =
- check_timing_change(curr_stream, stream);
-
-- /*
-- * we do not need stream encoder or audio resources
-- * when connecting to virtual link
-- */
-- if (stream->sink->link->public.connector_signal ==
-- SIGNAL_TYPE_VIRTUAL)
-- continue;
--
- stream->stream_enc =
- find_first_free_match_stream_enc_for_link(
- &context->res_ctx,
-diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h
-index c541ecf..a06a8a7 100644
---- a/drivers/gpu/drm/amd/dal/dc/dc.h
-+++ b/drivers/gpu/drm/amd/dal/dc/dc.h
-@@ -318,7 +318,7 @@ void dc_link_remove_remote_sink(
- const struct dc_sink *sink);
-
- /* Used by diagnostics for virtual link at the moment */
--void dc_link_add_sink(const struct dc_link *link, struct dc_sink *sink);
-+void dc_link_set_sink(const struct dc_link *link, struct dc_sink *sink);
-
- /*******************************************************************************
- * Sink Interfaces - A sink corresponds to a display output device
-diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c
-index 24b8824..44ad5a2 100644
---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c
-+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c
-@@ -806,8 +806,7 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx,
- */
- stream->tg->funcs->set_blank(stream->tg, true);
-
-- if (stream->signal != SIGNAL_TYPE_VIRTUAL)
-- core_link_disable_stream(stream->sink->link, stream);
-+ core_link_disable_stream(stream->sink->link, stream);
-
- /*TODO: AUTO check if timing changed*/
- if (false == dal_clock_source_program_pix_clk(
-@@ -818,7 +817,6 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx,
- return DC_ERROR_UNEXPECTED;
- }
-
--
- stream->tg->funcs->program_timing(
- stream->tg,
- &stream->public.timing,
-@@ -839,6 +837,7 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx,
- }
- }
-
-+ /* TODO: move to stream encoder */
- if (stream->signal != SIGNAL_TYPE_VIRTUAL)
- if (DC_OK != bios_parser_crtc_source_select(stream)) {
- BREAK_TO_DEBUGGER();
-@@ -853,10 +852,9 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx,
-
- program_fmt(opp, &stream->fmt_bit_depth, &stream->clamping);
-
-- if (stream->signal != SIGNAL_TYPE_VIRTUAL)
-- stream->sink->link->link_enc->funcs->setup(
-- stream->sink->link->link_enc,
-- stream->signal);
-+ stream->sink->link->link_enc->funcs->setup(
-+ stream->sink->link->link_enc,
-+ stream->signal);
-
- if (dc_is_dp_signal(stream->signal))
- stream->stream_enc->funcs->dp_set_stream_attribute(
-@@ -900,7 +898,7 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx,
- context->res_ctx.pool.timing_generators[controller_idx],
- color_space);
-
-- if (timing_changed && stream->signal != SIGNAL_TYPE_VIRTUAL) {
-+ if (timing_changed) {
- core_link_enable_stream(stream->sink->link, stream);
- } else {
- core_link_update_stream(stream->sink->link, stream);
-@@ -920,8 +918,7 @@ static void power_down_encoders(struct dc *dc)
- int i;
-
- for (i = 0; i < dc->link_count; i++) {
-- if (dc->links[i]->public.connector_signal != SIGNAL_TYPE_VIRTUAL)
-- dc->links[i]->link_enc->funcs->disable_output(
-+ dc->links[i]->link_enc->funcs->disable_output(
- dc->links[i]->link_enc, SIGNAL_TYPE_NONE);
- }
- }
-@@ -1575,8 +1572,7 @@ static void reset_single_stream_hw_ctx(struct core_stream *stream,
- stream->audio = NULL;
- }
-
-- if (stream->signal != SIGNAL_TYPE_VIRTUAL)
-- core_link_disable_stream(stream->sink->link, stream);
-+ core_link_disable_stream(stream->sink->link, stream);
-
- stream->tg->funcs->set_blank(stream->tg, true);
- stream->tg->funcs->disable_crtc(stream->tg);
-diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
-index 96f4423..fd8a928 100644
---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
-+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
-@@ -30,6 +30,7 @@
- #include "resource.h"
- #include "include/irq_service_interface.h"
- #include "include/timing_generator_interface.h"
-+#include "../virtual/virtual_stream_encoder.h"
-
- #include "dce110/dce110_timing_generator.h"
- #include "dce110/dce110_link_encoder.h"
-@@ -304,6 +305,7 @@ void dce110_link_encoder_destroy(struct link_encoder **enc)
-
- bool dce110_construct_resource_pool(
- struct adapter_service *adapter_serv,
-+ uint8_t num_virtual_links,
- struct dc *dc,
- struct resource_pool *pool)
- {
-@@ -459,6 +461,19 @@ bool dce110_construct_resource_pool(
- }
- }
-
-+ for (i = 0; i < num_virtual_links; i++) {
-+ pool->stream_enc[pool->stream_enc_count] =
-+ virtual_stream_encoder_create(
-+ dc->ctx, dal_adapter_service_get_bios_parser(
-+ adapter_serv));
-+ if (pool->stream_enc[pool->stream_enc_count] == NULL) {
-+ BREAK_TO_DEBUGGER();
-+ dal_error("DC: failed to create stream_encoder!\n");
-+ goto stream_enc_create_fail;
-+ }
-+ pool->stream_enc_count++;
-+ }
-+
- return true;
-
- stream_enc_create_fail:
-@@ -726,9 +741,6 @@ static enum dc_status validate_mapped_resource(
- stream->tg, &stream->public.timing))
- return DC_FAIL_CONTROLLER_VALIDATE;
-
-- if (stream->signal == SIGNAL_TYPE_VIRTUAL)
-- return status;
--
- status = build_stream_hw_param(stream);
-
- if (status != DC_OK)
-diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h
-index e47b19d..5f00a3c 100644
---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h
-+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h
-@@ -36,6 +36,7 @@ struct dc_validation_set;
-
- bool dce110_construct_resource_pool(
- struct adapter_service *adapter_serv,
-+ uint8_t num_virtual_links,
- struct dc *dc,
- struct resource_pool *pool);
-
-diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
-index 192399b..f31ee42 100644
---- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
-+++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
-@@ -263,7 +263,7 @@ struct resource_pool {
- struct transform *transforms[MAX_PIPES];
- struct output_pixel_processor *opps[MAX_PIPES];
- struct timing_generator *timing_generators[MAX_STREAMS];
-- struct stream_encoder *stream_enc[MAX_STREAMS];
-+ struct stream_encoder *stream_enc[MAX_PIPES * 2];
-
- uint8_t controller_count;
- uint8_t stream_enc_count;
-@@ -294,7 +294,7 @@ struct resource_context {
- struct resource_pool pool;
- struct controller_ctx controller_ctx[MAX_PIPES];
- union supported_stream_engines used_stream_engines;
-- bool is_stream_enc_acquired[MAX_STREAMS];
-+ bool is_stream_enc_acquired[MAX_PIPES * 2];
- bool is_audio_acquired[MAX_STREAMS];
- uint8_t clock_source_ref_count[MAX_CLOCK_SOURCES];
- };
-diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h
-index 46721cd..0bbf9b5 100644
---- a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h
-+++ b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h
-@@ -106,6 +106,7 @@ struct hw_sequencer_funcs {
- /* resource management and validation*/
- bool (*construct_resource_pool)(
- struct adapter_service *adapter_serv,
-+ uint8_t num_virtual_links,
- struct dc *dc,
- struct resource_pool *pool);
-
-diff --git a/drivers/gpu/drm/amd/dal/dc/virtual/Makefile b/drivers/gpu/drm/amd/dal/dc/virtual/Makefile
-new file mode 100644
-index 0000000..0e2cbc0
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/virtual/Makefile
-@@ -0,0 +1,9 @@
-+#
-+# Makefile for the virtual sub-component of DAL.
-+# It provides the control and status of HW CRTC block.
-+
-+VIRTUAL = virtual_link_encoder.o virtual_stream_encoder.o
-+
-+AMD_DAL_VIRTUAL = $(addprefix $(AMDDALPATH)/dc/virtual/,$(VIRTUAL))
-+
-+AMD_DAL_FILES += $(AMD_DAL_VIRTUAL)
-diff --git a/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c
-new file mode 100644
-index 0000000..5fa9af8
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c
-@@ -0,0 +1,131 @@
-+/*
-+ * Copyright 2012-15 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
-+ *
-+ */
-+
-+#include "virtual_link_encoder.h"
-+
-+#define VIRTUAL_MAX_PIXEL_CLK_IN_KHZ 600000
-+
-+static bool virtual_link_encoder_validate_output_with_stream(
-+ struct link_encoder *enc,
-+ struct core_stream *stream) { return true; }
-+
-+static void virtual_link_encoder_hw_init(struct link_encoder *enc) {}
-+
-+static void virtual_link_encoder_setup(
-+ struct link_encoder *enc,
-+ enum signal_type signal) {}
-+
-+static void virtual_link_encoder_enable_tmds_output(
-+ struct link_encoder *enc,
-+ enum clock_source_id clock_source,
-+ enum dc_color_depth color_depth,
-+ bool hdmi,
-+ bool dual_link,
-+ uint32_t pixel_clock) {}
-+
-+static void virtual_link_encoder_enable_dp_output(
-+ struct link_encoder *enc,
-+ const struct link_settings *link_settings,
-+ enum clock_source_id clock_source) {}
-+
-+static void virtual_link_encoder_enable_dp_mst_output(
-+ struct link_encoder *enc,
-+ const struct link_settings *link_settings,
-+ enum clock_source_id clock_source) {}
-+
-+static void virtual_link_encoder_disable_output(
-+ struct link_encoder *link_enc,
-+ enum signal_type signal) {}
-+
-+static void virtual_link_encoder_dp_set_lane_settings(
-+ struct link_encoder *enc,
-+ const struct link_training_settings *link_settings) {}
-+
-+static void virtual_link_encoder_dp_set_phy_pattern(
-+ struct link_encoder *enc,
-+ const struct encoder_set_dp_phy_pattern_param *param) {}
-+
-+static void virtual_link_encoder_update_mst_stream_allocation_table(
-+ struct link_encoder *enc,
-+ const struct dp_mst_stream_allocation_table *table) {}
-+
-+static void virtual_link_encoder_set_lcd_backlight_level(
-+ struct link_encoder *enc,
-+ uint32_t level) {}
-+
-+static void virtual_link_encoder_edp_backlight_control(
-+ struct link_encoder *enc,
-+ bool enable) {}
-+
-+static void virtual_link_encoder_edp_power_control(
-+ struct link_encoder *enc,
-+ bool power_up) {}
-+
-+static void virtual_link_encoder_connect_dig_be_to_fe(
-+ struct link_encoder *enc,
-+ enum engine_id engine,
-+ bool connect) {}
-+
-+static struct link_encoder_funcs virtual_lnk_enc_funcs = {
-+ .validate_output_with_stream =
-+ virtual_link_encoder_validate_output_with_stream,
-+ .hw_init = virtual_link_encoder_hw_init,
-+ .setup = virtual_link_encoder_setup,
-+ .enable_tmds_output = virtual_link_encoder_enable_tmds_output,
-+ .enable_dp_output = virtual_link_encoder_enable_dp_output,
-+ .enable_dp_mst_output = virtual_link_encoder_enable_dp_mst_output,
-+ .disable_output = virtual_link_encoder_disable_output,
-+ .dp_set_lane_settings = virtual_link_encoder_dp_set_lane_settings,
-+ .dp_set_phy_pattern = virtual_link_encoder_dp_set_phy_pattern,
-+ .update_mst_stream_allocation_table =
-+ virtual_link_encoder_update_mst_stream_allocation_table,
-+ .set_lcd_backlight_level = virtual_link_encoder_set_lcd_backlight_level,
-+ .backlight_control = virtual_link_encoder_edp_backlight_control,
-+ .power_control = virtual_link_encoder_edp_power_control,
-+ .connect_dig_be_to_fe = virtual_link_encoder_connect_dig_be_to_fe
-+};
-+
-+bool virtual_link_encoder_construct(
-+ struct link_encoder *enc, const struct encoder_init_data *init_data)
-+{
-+ enc->funcs = &virtual_lnk_enc_funcs;
-+ enc->ctx = init_data->ctx;
-+ enc->id = init_data->encoder;
-+
-+ enc->hpd_source = init_data->hpd_source;
-+ enc->connector = init_data->connector;
-+
-+ enc->adapter_service = init_data->adapter_service;
-+
-+ enc->transmitter = init_data->transmitter;
-+
-+ enc->features.max_pixel_clock = VIRTUAL_MAX_PIXEL_CLK_IN_KHZ;
-+
-+ enc->output_signals = SIGNAL_TYPE_VIRTUAL;
-+
-+ enc->preferred_engine = ENGINE_ID_VIRTUAL;
-+
-+ return true;
-+}
-diff --git a/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.h b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.h
-new file mode 100644
-index 0000000..c34bd04
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.h
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2012-15 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_VIRTUAL_LINK_ENCODER_H__
-+#define __DC_VIRTUAL_LINK_ENCODER_H__
-+
-+#include "inc/link_encoder.h"
-+
-+bool virtual_link_encoder_construct(
-+ struct link_encoder *enc, const struct encoder_init_data *init_data);
-+
-+
-+#endif /* __DC_VIRTUAL_LINK_ENCODER_H__ */
-diff --git a/drivers/gpu/drm/amd/dal/dc/virtual/virtual_stream_encoder.c b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_stream_encoder.c
-new file mode 100644
-index 0000000..dcfda67
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_stream_encoder.c
-@@ -0,0 +1,124 @@
-+/*
-+ * Copyright 2012-15 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
-+ *
-+ */
-+
-+#include "virtual_stream_encoder.h"
-+#include "dc_services.h"
-+
-+static void virtual_stream_encoder_dp_set_stream_attribute(
-+ struct stream_encoder *enc,
-+ struct dc_crtc_timing *crtc_timing) {}
-+
-+static void virtual_stream_encoder_hdmi_set_stream_attribute(
-+ struct stream_encoder *enc,
-+ struct dc_crtc_timing *crtc_timing,
-+ bool enable_audio) {}
-+
-+static void virtual_stream_encoder_dvi_set_stream_attribute(
-+ struct stream_encoder *enc,
-+ struct dc_crtc_timing *crtc_timing,
-+ bool is_dual_link) {}
-+
-+static void virtual_stream_encoder_set_mst_bandwidth(
-+ struct stream_encoder *enc,
-+ struct fixed31_32 avg_time_slots_per_mtp) {}
-+
-+static void virtual_stream_encoder_update_hdmi_info_packets(
-+ struct stream_encoder *enc,
-+ const struct encoder_info_frame *info_frame) {}
-+
-+static void virtual_stream_encoder_stop_hdmi_info_packets(
-+ struct stream_encoder *enc) {}
-+
-+static void virtual_stream_encoder_update_dp_info_packets(
-+ struct stream_encoder *enc,
-+ const struct encoder_info_frame *info_frame) {}
-+
-+static void virtual_stream_encoder_stop_dp_info_packets(
-+ struct stream_encoder *enc) {}
-+
-+static void virtual_stream_encoder_dp_blank(
-+ struct stream_encoder *enc) {}
-+
-+static void virtual_stream_encoder_dp_unblank(
-+ struct stream_encoder *enc,
-+ const struct encoder_unblank_param *param) {}
-+
-+static struct stream_encoder_funcs virtual_str_enc_funcs = {
-+ .dp_set_stream_attribute =
-+ virtual_stream_encoder_dp_set_stream_attribute,
-+ .hdmi_set_stream_attribute =
-+ virtual_stream_encoder_hdmi_set_stream_attribute,
-+ .dvi_set_stream_attribute =
-+ virtual_stream_encoder_dvi_set_stream_attribute,
-+ .set_mst_bandwidth =
-+ virtual_stream_encoder_set_mst_bandwidth,
-+ .update_hdmi_info_packets =
-+ virtual_stream_encoder_update_hdmi_info_packets,
-+ .stop_hdmi_info_packets =
-+ virtual_stream_encoder_stop_hdmi_info_packets,
-+ .update_dp_info_packets =
-+ virtual_stream_encoder_update_dp_info_packets,
-+ .stop_dp_info_packets =
-+ virtual_stream_encoder_stop_dp_info_packets,
-+ .dp_blank =
-+ virtual_stream_encoder_dp_blank,
-+ .dp_unblank =
-+ virtual_stream_encoder_dp_unblank,
-+};
-+
-+bool virtual_stream_encoder_construct(
-+ struct stream_encoder *enc,
-+ struct dc_context *ctx,
-+ struct dc_bios *bp)
-+{
-+ if (!enc)
-+ return false;
-+ if (!bp)
-+ return false;
-+
-+ enc->funcs = &virtual_str_enc_funcs;
-+ enc->ctx = ctx;
-+ enc->id = ENGINE_ID_VIRTUAL;
-+ enc->bp = bp;
-+
-+ return true;
-+}
-+
-+struct stream_encoder *virtual_stream_encoder_create(
-+ struct dc_context *ctx, struct dc_bios *bp)
-+{
-+ struct stream_encoder *enc = dc_service_alloc(ctx, sizeof(*enc));
-+
-+ if (!enc)
-+ return NULL;
-+
-+ if (virtual_stream_encoder_construct(enc, ctx, bp))
-+ return enc;
-+
-+ BREAK_TO_DEBUGGER();
-+ dc_service_free(ctx, enc);
-+ return NULL;
-+}
-+
-diff --git a/drivers/gpu/drm/amd/dal/dc/virtual/virtual_stream_encoder.h b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_stream_encoder.h
-new file mode 100644
-index 0000000..dce8425
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_stream_encoder.h
-@@ -0,0 +1,39 @@
-+/*
-+ * Copyright 2012-15 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_VIRTUAL_STREAM_ENCODER_H__
-+#define __DC_VIRTUAL_STREAM_ENCODER_H__
-+
-+#include "inc/stream_encoder.h"
-+
-+struct stream_encoder *virtual_stream_encoder_create(
-+ struct dc_context *ctx, struct dc_bios *bp);
-+
-+bool virtual_stream_encoder_construct(
-+ struct stream_encoder *enc,
-+ struct dc_context *ctx,
-+ struct dc_bios *bp);
-+
-+#endif /* __DC_VIRTUAL_STREAM_ENCODER_H__ */
-diff --git a/drivers/gpu/drm/amd/dal/include/grph_object_id.h b/drivers/gpu/drm/amd/dal/include/grph_object_id.h
-index 1eafe7c..2f73797 100644
---- a/drivers/gpu/drm/amd/dal/include/grph_object_id.h
-+++ b/drivers/gpu/drm/amd/dal/include/grph_object_id.h
-@@ -26,6 +26,8 @@
- #ifndef __DAL_GRPH_OBJECT_ID_H__
- #define __DAL_GRPH_OBJECT_ID_H__
-
-+#include "dal_services_types.h"
-+
- /* Types of graphics objects */
- enum object_type {
- OBJECT_TYPE_UNKNOWN = 0,
-@@ -160,6 +162,7 @@ enum encoder_id {
-
- ENCODER_ID_INTERNAL_WIRELESS, /* Internal wireless display encoder */
- ENCODER_ID_INTERNAL_UNIPHY3,
-+ ENCODER_ID_INTERNAL_VIRTUAL,
-
- ENCODER_ID_EXTERNAL_GENERIC_DVO = 0xFF
- };
-@@ -183,7 +186,7 @@ enum connector_id {
- CONNECTOR_ID_WIRELESS = 22,
- CONNECTOR_ID_MIRACAST = 23,
-
-- CONNECTOR_ID_COUNT
-+ CONNECTOR_ID_VIRTUAL = 100
- };
-
-
-@@ -207,6 +210,7 @@ enum engine_id {
- ENGINE_ID_DACA,
- ENGINE_ID_DACB,
- ENGINE_ID_VCE, /* wireless display pseudo-encoder */
-+ ENGINE_ID_VIRTUAL,
-
- ENGINE_ID_COUNT,
- ENGINE_ID_UNKNOWN = (-1L)
---
-2.7.4
-