aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0666-drm-amd-dal-Clean-up-payload-allocation-table-creati.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0666-drm-amd-dal-Clean-up-payload-allocation-table-creati.patch')
-rw-r--r--common/recipes-kernel/linux/files/0666-drm-amd-dal-Clean-up-payload-allocation-table-creati.patch265
1 files changed, 0 insertions, 265 deletions
diff --git a/common/recipes-kernel/linux/files/0666-drm-amd-dal-Clean-up-payload-allocation-table-creati.patch b/common/recipes-kernel/linux/files/0666-drm-amd-dal-Clean-up-payload-allocation-table-creati.patch
deleted file mode 100644
index dd004da1..00000000
--- a/common/recipes-kernel/linux/files/0666-drm-amd-dal-Clean-up-payload-allocation-table-creati.patch
+++ /dev/null
@@ -1,265 +0,0 @@
-From d81c058644e81c8ac321d3e7747c4133a78e120a Mon Sep 17 00:00:00 2001
-From: Harry Wentland <harry.wentland@amd.com>
-Date: Wed, 2 Dec 2015 23:25:25 -0500
-Subject: [PATCH 0666/1110] drm/amd/dal: Clean up payload allocation table
- creation
-
-Using mst_mgr payload's vcpi now since it's been upstreamed.
-
-Also breaking payload table creation into more readble chunks.
-
-Signed-off-by: Harry Wentland <harry.wentland@amd.com>
-Acked-by: Jordan Lazare <Jordan.Lazare@amd.com>
----
- .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c | 201 ++++++++-------------
- 1 file changed, 80 insertions(+), 121 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c
-index 744ab94..3a71159 100644
---- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c
-+++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c
-@@ -160,6 +160,84 @@ static struct amdgpu_connector *get_connector_for_link(
- return aconnector;
- }
-
-+static const struct dc_stream *get_stream_for_vcid(
-+ struct drm_device *dev,
-+ struct amdgpu_connector *master_port,
-+ int vcid)
-+{
-+ struct drm_connector *connector;
-+ struct amdgpu_connector *aconnector;
-+ struct drm_crtc *crtc;
-+ struct amdgpu_crtc *acrtc;
-+ struct dc_target *dc_target;
-+
-+ list_for_each_entry(
-+ connector,
-+ &dev->mode_config.connector_list,
-+ head) {
-+
-+ aconnector = to_amdgpu_connector(connector);
-+
-+ /* Check whether mst connector */
-+ if (!aconnector->mst_port)
-+ continue;
-+
-+ /* Check whether same physical connector. */
-+ if (master_port != aconnector->mst_port) {
-+ continue;
-+ }
-+
-+ if (aconnector->port->vcpi.vcpi == vcid) {
-+ crtc = aconnector->base.state->crtc;
-+ acrtc = to_amdgpu_crtc(crtc);
-+ dc_target = acrtc->target;
-+ return dc_target->streams[0];
-+ }
-+ }
-+ return NULL;
-+}
-+
-+static void get_payload_table(
-+ struct drm_device *dev,
-+ struct amdgpu_connector *aconnector,
-+ struct dp_mst_stream_allocation_table *table)
-+{
-+ int i;
-+ struct drm_dp_mst_topology_mgr *mst_mgr = &aconnector->mst_port->mst_mgr;
-+ struct amdgpu_connector *master_port = aconnector->mst_port;
-+
-+ mutex_lock(&mst_mgr->payload_lock);
-+
-+ /* number of active streams */
-+ for (i = 0; i < mst_mgr->max_payloads; i++) {
-+ if (mst_mgr->payloads[i].num_slots == 0)
-+ break;
-+
-+ if (mst_mgr->payloads[i].payload_state == DP_PAYLOAD_LOCAL ||
-+ mst_mgr->payloads[i].payload_state == DP_PAYLOAD_REMOTE) {
-+ table->stream_allocations[i].slot_count = mst_mgr->payloads[i].num_slots;
-+ table->stream_allocations[i].stream =
-+ get_stream_for_vcid(
-+ dev,
-+ master_port,
-+ mst_mgr->payloads[i].vcpi);
-+
-+ if (mst_mgr->payloads[i].vcpi ==
-+ aconnector->port->vcpi.vcpi)
-+ table->cur_stream_payload_idx = i;
-+
-+ /* TODO remove the following and calculate in DC */
-+ table->stream_allocations[i].pbn_per_slot = mst_mgr->pbn_div;
-+ table->stream_allocations[i].pbn = mst_mgr->proposed_vcpis[i]->pbn;
-+ }
-+ }
-+
-+ table->stream_count = i;
-+
-+ mutex_unlock(&mst_mgr->payload_lock);
-+
-+}
-+
- /*
- * Writes payload allocation table in immediate downstream device.
- */
-@@ -172,28 +250,20 @@ bool dc_helpers_dp_mst_write_payload_allocation_table(
- struct amdgpu_device *adev = ctx->driver_context;
- struct drm_device *dev = adev->ddev;
- struct amdgpu_connector *aconnector;
-- struct drm_connector *connector;
-- struct amdgpu_crtc *amdgpu_crtc;
-- struct drm_crtc *crtc;
- struct drm_dp_mst_topology_mgr *mst_mgr;
- struct drm_dp_mst_port *mst_port;
-- struct amdgpu_connector *master_port;
- int slots = 0;
- bool ret;
- int clock;
- int bpp = 0;
- int pbn = 0;
-- uint8_t i;
-- uint8_t vcid = 0;
-- bool find_stream_for_sink;
-
- aconnector = get_connector_for_sink(dev, stream->sink);
-
- if (!aconnector->mst_port)
- return false;
-
-- master_port = aconnector->mst_port;
-- mst_mgr = &master_port->mst_mgr;
-+ mst_mgr = &aconnector->mst_port->mst_mgr;
-
- if (!mst_mgr->mst_state)
- return false;
-@@ -235,8 +305,6 @@ bool dc_helpers_dp_mst_write_payload_allocation_table(
- pbn = drm_dp_calc_pbn_mode(clock, bpp);
-
- ret = drm_dp_mst_allocate_vcpi(mst_mgr, mst_port, pbn, &slots);
-- /* mst_port->vcpi.vcpi is vc_id for this stream.*/
-- vcid = mst_port->vcpi.vcpi;
-
- if (!ret)
- return false;
-@@ -252,116 +320,7 @@ bool dc_helpers_dp_mst_write_payload_allocation_table(
- * stream. AMD ASIC stream slot allocation should follow the same
- * sequence. copy DRM MST allocation to dc */
-
-- mutex_lock(&mst_mgr->payload_lock);
--
-- /* number of active streams */
-- for (i = 0; i < mst_mgr->max_payloads; i++) {
-- if (mst_mgr->payloads[i].num_slots == 0)
-- break;
-- }
--
-- table->stream_count = i;
--
-- for (i = 0; i < table->stream_count; i++) {
-- table->stream_allocations[i].slot_count =
-- mst_mgr->proposed_vcpis[i]->num_slots;
-- /*
-- * mst_mgr->pbn_div is fixed value after link training for
-- * current link PHY
-- */
-- table->stream_allocations[i].pbn_per_slot = mst_mgr->pbn_div;
--
-- /*
-- * find which payload is for current stream after
-- * drm_dp_update_payload_part1, payload and proposed_vcpis
-- * are sync to the same allocation sequence. vcpi is not saved
-- * into payload by drm_dp_update_payload_part1. In order to
-- * find sequence of a payload within allocation sequence, we
-- * need check vcpi from proposed_vcpis
-- */
--
-- table->stream_allocations[i].pbn =
-- mst_mgr->proposed_vcpis[i]->pbn;
--
-- if (mst_mgr->proposed_vcpis[i]->vcpi == vcid)
-- table->cur_stream_payload_idx = i;
--
-- find_stream_for_sink = false;
--
-- list_for_each_entry(
-- connector,
-- &dev->mode_config.connector_list,
-- head) {
-- const struct dc_sink *dc_sink;
-- struct dc_target *dc_target;
-- uint8_t j;
--
-- aconnector = to_amdgpu_connector(connector);
--
-- /* not mst connector */
-- if (!aconnector->mst_port)
-- continue;
--
-- if (master_port != aconnector->mst_port) {
-- /* Not the same physical connector. */
-- continue;
-- }
--
-- mst_port = aconnector->port;
--
-- if (mst_port->vcpi.vcpi !=
-- mst_mgr->proposed_vcpis[i]->vcpi)
-- continue;
--
-- /* find connector with same vcid as payload */
--
-- dc_sink = aconnector->dc_sink;
--
-- /*
-- * find stream to drive this sink
-- * crtc -> target -> stream -> sink
-- */
-- crtc = aconnector->base.state->crtc;
--
-- /*
-- * this situation can happen when crtc moved from one
-- * connector to another for any reason
-- */
-- if (!crtc)
-- continue;
--
-- amdgpu_crtc = to_amdgpu_crtc(crtc);
-- dc_target = amdgpu_crtc->target;
--
-- for (j = 0; j < dc_target->stream_count; j++) {
-- if (dc_target->streams[j]->sink ==
-- dc_sink)
-- break;
-- }
--
-- if (j < dc_target->stream_count) {
-- /*
-- * find sink --> stream --> target -->
-- * connector
-- */
-- table->stream_allocations[i].stream =
-- dc_target->streams[j];
-- /* exit loop connector */
-- find_stream_for_sink = true;
-- break;
-- }
-- }
--
-- if (!find_stream_for_sink) {
-- /*
-- * TODO: do not find stream for sink. This should not
-- * happen
-- */
-- ASSERT(0);
-- }
-- }
--
-- mutex_unlock(&mst_mgr->payload_lock);
-+ get_payload_table(dev, aconnector, table);
-
- if (ret)
- return false;
---
-2.7.4
-