|
|
|
@@ -3272,6 +3272,9 @@ static struct fixed31_32 get_pbn_from_timing(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
static void update_mst_stream_alloc_table(
|
|
|
|
|
struct dc_link *link,
|
|
|
|
|
struct stream_encoder *stream_enc,
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
struct hpo_dp_stream_encoder *hpo_dp_stream_enc, // TODO: Rename stream_enc to dio_stream_enc?
|
|
|
|
|
#endif
|
|
|
|
|
const struct dp_mst_stream_allocation_table *proposed_table)
|
|
|
|
|
{
|
|
|
|
|
struct link_mst_stream_allocation work_table[MAX_CONTROLLER_NUM] = {
|
|
|
|
@@ -3308,6 +3311,9 @@ static void update_mst_stream_alloc_table(
|
|
|
|
|
work_table[i].slot_count =
|
|
|
|
|
proposed_table->stream_allocations[i].slot_count;
|
|
|
|
|
work_table[i].stream_enc = stream_enc;
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
work_table[i].hpo_dp_stream_enc = hpo_dp_stream_enc;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -3430,6 +3436,10 @@ enum dc_status dc_link_allocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
struct dc_link *link = stream->link;
|
|
|
|
|
struct link_encoder *link_encoder = NULL;
|
|
|
|
|
struct stream_encoder *stream_encoder = pipe_ctx->stream_res.stream_enc;
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
struct hpo_dp_link_encoder *hpo_dp_link_encoder = link->hpo_dp_link_enc;
|
|
|
|
|
struct hpo_dp_stream_encoder *hpo_dp_stream_encoder = pipe_ctx->stream_res.hpo_dp_stream_enc;
|
|
|
|
|
#endif
|
|
|
|
|
struct dp_mst_stream_allocation_table proposed_table = {0};
|
|
|
|
|
struct fixed31_32 avg_time_slots_per_mtp;
|
|
|
|
|
struct fixed31_32 pbn;
|
|
|
|
@@ -3457,7 +3467,14 @@ enum dc_status dc_link_allocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
&proposed_table,
|
|
|
|
|
true)) {
|
|
|
|
|
update_mst_stream_alloc_table(
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
link,
|
|
|
|
|
pipe_ctx->stream_res.stream_enc,
|
|
|
|
|
pipe_ctx->stream_res.hpo_dp_stream_enc,
|
|
|
|
|
&proposed_table);
|
|
|
|
|
#else
|
|
|
|
|
link, pipe_ctx->stream_res.stream_enc, &proposed_table);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
DC_LOG_WARNING("Failed to update"
|
|
|
|
@@ -3471,6 +3488,20 @@ enum dc_status dc_link_allocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
link->mst_stream_alloc_table.stream_count);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_CONTROLLER_NUM; i++) {
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
DC_LOG_MST("stream_enc[%d]: %p "
|
|
|
|
|
"stream[%d].hpo_dp_stream_enc: %p "
|
|
|
|
|
"stream[%d].vcp_id: %d "
|
|
|
|
|
"stream[%d].slot_count: %d\n",
|
|
|
|
|
i,
|
|
|
|
|
(void *) link->mst_stream_alloc_table.stream_allocations[i].stream_enc,
|
|
|
|
|
i,
|
|
|
|
|
(void *) link->mst_stream_alloc_table.stream_allocations[i].hpo_dp_stream_enc,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].vcp_id,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].slot_count);
|
|
|
|
|
#else
|
|
|
|
|
DC_LOG_MST("stream_enc[%d]: %p "
|
|
|
|
|
"stream[%d].vcp_id: %d "
|
|
|
|
|
"stream[%d].slot_count: %d\n",
|
|
|
|
@@ -3480,14 +3511,33 @@ enum dc_status dc_link_allocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].vcp_id,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].slot_count);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ASSERT(proposed_table.stream_count > 0);
|
|
|
|
|
|
|
|
|
|
/* program DP source TX for payload */
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
switch (dp_get_link_encoding_format(&link->cur_link_settings)) {
|
|
|
|
|
case DP_8b_10b_ENCODING:
|
|
|
|
|
link_encoder->funcs->update_mst_stream_allocation_table(
|
|
|
|
|
link_encoder,
|
|
|
|
|
&link->mst_stream_alloc_table);
|
|
|
|
|
break;
|
|
|
|
|
case DP_128b_132b_ENCODING:
|
|
|
|
|
hpo_dp_link_encoder->funcs->update_stream_allocation_table(
|
|
|
|
|
hpo_dp_link_encoder,
|
|
|
|
|
&link->mst_stream_alloc_table);
|
|
|
|
|
break;
|
|
|
|
|
case DP_UNKNOWN_ENCODING:
|
|
|
|
|
DC_LOG_ERROR("Failure: unknown encoding format\n");
|
|
|
|
|
return DC_ERROR_UNEXPECTED;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
link_encoder->funcs->update_mst_stream_allocation_table(
|
|
|
|
|
link_encoder,
|
|
|
|
|
&link->mst_stream_alloc_table);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* send down message */
|
|
|
|
|
ret = dm_helpers_dp_mst_poll_for_allocation_change_trigger(
|
|
|
|
@@ -3510,20 +3560,202 @@ enum dc_status dc_link_allocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
pbn = get_pbn_from_timing(pipe_ctx);
|
|
|
|
|
avg_time_slots_per_mtp = dc_fixpt_div(pbn, pbn_per_slot);
|
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
switch (dp_get_link_encoding_format(&link->cur_link_settings)) {
|
|
|
|
|
case DP_8b_10b_ENCODING:
|
|
|
|
|
stream_encoder->funcs->set_throttled_vcp_size(
|
|
|
|
|
stream_encoder,
|
|
|
|
|
avg_time_slots_per_mtp);
|
|
|
|
|
break;
|
|
|
|
|
case DP_128b_132b_ENCODING:
|
|
|
|
|
hpo_dp_link_encoder->funcs->set_throttled_vcp_size(
|
|
|
|
|
hpo_dp_link_encoder,
|
|
|
|
|
hpo_dp_stream_encoder->inst,
|
|
|
|
|
avg_time_slots_per_mtp);
|
|
|
|
|
break;
|
|
|
|
|
case DP_UNKNOWN_ENCODING:
|
|
|
|
|
DC_LOG_ERROR("Failure: unknown encoding format\n");
|
|
|
|
|
return DC_ERROR_UNEXPECTED;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
stream_encoder->funcs->set_throttled_vcp_size(
|
|
|
|
|
stream_encoder,
|
|
|
|
|
avg_time_slots_per_mtp);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return DC_OK;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
enum dc_status dc_link_reduce_mst_payload(struct pipe_ctx *pipe_ctx, uint32_t bw_in_kbps)
|
|
|
|
|
{
|
|
|
|
|
struct dc_stream_state *stream = pipe_ctx->stream;
|
|
|
|
|
struct dc_link *link = stream->link;
|
|
|
|
|
struct fixed31_32 avg_time_slots_per_mtp;
|
|
|
|
|
struct fixed31_32 pbn;
|
|
|
|
|
struct fixed31_32 pbn_per_slot;
|
|
|
|
|
struct link_encoder *link_encoder = link->link_enc;
|
|
|
|
|
struct stream_encoder *stream_encoder = pipe_ctx->stream_res.stream_enc;
|
|
|
|
|
struct dp_mst_stream_allocation_table proposed_table = {0};
|
|
|
|
|
uint8_t i;
|
|
|
|
|
enum act_return_status ret;
|
|
|
|
|
DC_LOGGER_INIT(link->ctx->logger);
|
|
|
|
|
|
|
|
|
|
/* decrease throttled vcp size */
|
|
|
|
|
pbn_per_slot = get_pbn_per_slot(stream);
|
|
|
|
|
pbn = get_pbn_from_bw_in_kbps(bw_in_kbps);
|
|
|
|
|
avg_time_slots_per_mtp = dc_fixpt_div(pbn, pbn_per_slot);
|
|
|
|
|
|
|
|
|
|
stream_encoder->funcs->set_throttled_vcp_size(
|
|
|
|
|
stream_encoder,
|
|
|
|
|
avg_time_slots_per_mtp);
|
|
|
|
|
|
|
|
|
|
/* send ALLOCATE_PAYLOAD sideband message with updated pbn */
|
|
|
|
|
dm_helpers_dp_mst_send_payload_allocation(
|
|
|
|
|
stream->ctx,
|
|
|
|
|
stream,
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
/* notify immediate branch device table update */
|
|
|
|
|
if (dm_helpers_dp_mst_write_payload_allocation_table(
|
|
|
|
|
stream->ctx,
|
|
|
|
|
stream,
|
|
|
|
|
&proposed_table,
|
|
|
|
|
true)) {
|
|
|
|
|
/* update mst stream allocation table software state */
|
|
|
|
|
update_mst_stream_alloc_table(
|
|
|
|
|
link,
|
|
|
|
|
pipe_ctx->stream_res.stream_enc,
|
|
|
|
|
pipe_ctx->stream_res.hpo_dp_stream_enc,
|
|
|
|
|
&proposed_table);
|
|
|
|
|
} else {
|
|
|
|
|
DC_LOG_WARNING("Failed to update"
|
|
|
|
|
"MST allocation table for"
|
|
|
|
|
"pipe idx:%d\n",
|
|
|
|
|
pipe_ctx->pipe_idx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DC_LOG_MST("%s "
|
|
|
|
|
"stream_count: %d: \n ",
|
|
|
|
|
__func__,
|
|
|
|
|
link->mst_stream_alloc_table.stream_count);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_CONTROLLER_NUM; i++) {
|
|
|
|
|
DC_LOG_MST("stream_enc[%d]: %p "
|
|
|
|
|
"stream[%d].vcp_id: %d "
|
|
|
|
|
"stream[%d].slot_count: %d\n",
|
|
|
|
|
i,
|
|
|
|
|
(void *) link->mst_stream_alloc_table.stream_allocations[i].stream_enc,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].vcp_id,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].slot_count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ASSERT(proposed_table.stream_count > 0);
|
|
|
|
|
|
|
|
|
|
/* update mst stream allocation table hardware state */
|
|
|
|
|
link_encoder->funcs->update_mst_stream_allocation_table(
|
|
|
|
|
link_encoder,
|
|
|
|
|
&link->mst_stream_alloc_table);
|
|
|
|
|
|
|
|
|
|
/* poll for immediate branch device ACT handled */
|
|
|
|
|
ret = dm_helpers_dp_mst_poll_for_allocation_change_trigger(
|
|
|
|
|
stream->ctx,
|
|
|
|
|
stream);
|
|
|
|
|
|
|
|
|
|
return DC_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
enum dc_status dc_link_increase_mst_payload(struct pipe_ctx *pipe_ctx, uint32_t bw_in_kbps)
|
|
|
|
|
{
|
|
|
|
|
struct dc_stream_state *stream = pipe_ctx->stream;
|
|
|
|
|
struct dc_link *link = stream->link;
|
|
|
|
|
struct fixed31_32 avg_time_slots_per_mtp;
|
|
|
|
|
struct fixed31_32 pbn;
|
|
|
|
|
struct fixed31_32 pbn_per_slot;
|
|
|
|
|
struct link_encoder *link_encoder = link->link_enc;
|
|
|
|
|
struct stream_encoder *stream_encoder = pipe_ctx->stream_res.stream_enc;
|
|
|
|
|
struct dp_mst_stream_allocation_table proposed_table = {0};
|
|
|
|
|
uint8_t i;
|
|
|
|
|
enum act_return_status ret;
|
|
|
|
|
DC_LOGGER_INIT(link->ctx->logger);
|
|
|
|
|
|
|
|
|
|
/* notify immediate branch device table update */
|
|
|
|
|
if (dm_helpers_dp_mst_write_payload_allocation_table(
|
|
|
|
|
stream->ctx,
|
|
|
|
|
stream,
|
|
|
|
|
&proposed_table,
|
|
|
|
|
true)) {
|
|
|
|
|
/* update mst stream allocation table software state */
|
|
|
|
|
update_mst_stream_alloc_table(
|
|
|
|
|
link,
|
|
|
|
|
pipe_ctx->stream_res.stream_enc,
|
|
|
|
|
pipe_ctx->stream_res.hpo_dp_stream_enc,
|
|
|
|
|
&proposed_table);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DC_LOG_MST("%s "
|
|
|
|
|
"stream_count: %d: \n ",
|
|
|
|
|
__func__,
|
|
|
|
|
link->mst_stream_alloc_table.stream_count);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_CONTROLLER_NUM; i++) {
|
|
|
|
|
DC_LOG_MST("stream_enc[%d]: %p "
|
|
|
|
|
"stream[%d].vcp_id: %d "
|
|
|
|
|
"stream[%d].slot_count: %d\n",
|
|
|
|
|
i,
|
|
|
|
|
(void *) link->mst_stream_alloc_table.stream_allocations[i].stream_enc,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].vcp_id,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].slot_count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ASSERT(proposed_table.stream_count > 0);
|
|
|
|
|
|
|
|
|
|
/* update mst stream allocation table hardware state */
|
|
|
|
|
link_encoder->funcs->update_mst_stream_allocation_table(
|
|
|
|
|
link_encoder,
|
|
|
|
|
&link->mst_stream_alloc_table);
|
|
|
|
|
|
|
|
|
|
/* poll for immediate branch device ACT handled */
|
|
|
|
|
ret = dm_helpers_dp_mst_poll_for_allocation_change_trigger(
|
|
|
|
|
stream->ctx,
|
|
|
|
|
stream);
|
|
|
|
|
|
|
|
|
|
if (ret != ACT_LINK_LOST) {
|
|
|
|
|
/* send ALLOCATE_PAYLOAD sideband message with updated pbn */
|
|
|
|
|
dm_helpers_dp_mst_send_payload_allocation(
|
|
|
|
|
stream->ctx,
|
|
|
|
|
stream,
|
|
|
|
|
true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* increase throttled vcp size */
|
|
|
|
|
pbn = get_pbn_from_bw_in_kbps(bw_in_kbps);
|
|
|
|
|
pbn_per_slot = get_pbn_per_slot(stream);
|
|
|
|
|
avg_time_slots_per_mtp = dc_fixpt_div(pbn, pbn_per_slot);
|
|
|
|
|
|
|
|
|
|
stream_encoder->funcs->set_throttled_vcp_size(
|
|
|
|
|
stream_encoder,
|
|
|
|
|
avg_time_slots_per_mtp);
|
|
|
|
|
|
|
|
|
|
return DC_OK;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
{
|
|
|
|
|
struct dc_stream_state *stream = pipe_ctx->stream;
|
|
|
|
|
struct dc_link *link = stream->link;
|
|
|
|
|
struct link_encoder *link_encoder = NULL;
|
|
|
|
|
struct stream_encoder *stream_encoder = pipe_ctx->stream_res.stream_enc;
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
struct hpo_dp_link_encoder *hpo_dp_link_encoder = link->hpo_dp_link_enc;
|
|
|
|
|
struct hpo_dp_stream_encoder *hpo_dp_stream_encoder = pipe_ctx->stream_res.hpo_dp_stream_enc;
|
|
|
|
|
#endif
|
|
|
|
|
struct dp_mst_stream_allocation_table proposed_table = {0};
|
|
|
|
|
struct fixed31_32 avg_time_slots_per_mtp = dc_fixpt_from_int(0);
|
|
|
|
|
uint8_t i;
|
|
|
|
@@ -3545,9 +3777,28 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/* slot X.Y */
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
switch (dp_get_link_encoding_format(&link->cur_link_settings)) {
|
|
|
|
|
case DP_8b_10b_ENCODING:
|
|
|
|
|
stream_encoder->funcs->set_throttled_vcp_size(
|
|
|
|
|
stream_encoder,
|
|
|
|
|
avg_time_slots_per_mtp);
|
|
|
|
|
break;
|
|
|
|
|
case DP_128b_132b_ENCODING:
|
|
|
|
|
hpo_dp_link_encoder->funcs->set_throttled_vcp_size(
|
|
|
|
|
hpo_dp_link_encoder,
|
|
|
|
|
hpo_dp_stream_encoder->inst,
|
|
|
|
|
avg_time_slots_per_mtp);
|
|
|
|
|
break;
|
|
|
|
|
case DP_UNKNOWN_ENCODING:
|
|
|
|
|
DC_LOG_ERROR("Failure: unknown encoding format\n");
|
|
|
|
|
return DC_ERROR_UNEXPECTED;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
stream_encoder->funcs->set_throttled_vcp_size(
|
|
|
|
|
stream_encoder,
|
|
|
|
|
avg_time_slots_per_mtp);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* TODO: which component is responsible for remove payload table? */
|
|
|
|
|
if (mst_mode) {
|
|
|
|
@@ -3557,8 +3808,16 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
&proposed_table,
|
|
|
|
|
false)) {
|
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
update_mst_stream_alloc_table(
|
|
|
|
|
link,
|
|
|
|
|
pipe_ctx->stream_res.stream_enc,
|
|
|
|
|
pipe_ctx->stream_res.hpo_dp_stream_enc,
|
|
|
|
|
&proposed_table);
|
|
|
|
|
#else
|
|
|
|
|
update_mst_stream_alloc_table(
|
|
|
|
|
link, pipe_ctx->stream_res.stream_enc, &proposed_table);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
DC_LOG_WARNING("Failed to update"
|
|
|
|
@@ -3574,6 +3833,20 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
link->mst_stream_alloc_table.stream_count);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_CONTROLLER_NUM; i++) {
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
DC_LOG_MST("stream_enc[%d]: %p "
|
|
|
|
|
"stream[%d].hpo_dp_stream_enc: %p "
|
|
|
|
|
"stream[%d].vcp_id: %d "
|
|
|
|
|
"stream[%d].slot_count: %d\n",
|
|
|
|
|
i,
|
|
|
|
|
(void *) link->mst_stream_alloc_table.stream_allocations[i].stream_enc,
|
|
|
|
|
i,
|
|
|
|
|
(void *) link->mst_stream_alloc_table.stream_allocations[i].hpo_dp_stream_enc,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].vcp_id,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].slot_count);
|
|
|
|
|
#else
|
|
|
|
|
DC_LOG_MST("stream_enc[%d]: %p "
|
|
|
|
|
"stream[%d].vcp_id: %d "
|
|
|
|
|
"stream[%d].slot_count: %d\n",
|
|
|
|
@@ -3583,11 +3856,30 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx)
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].vcp_id,
|
|
|
|
|
i,
|
|
|
|
|
link->mst_stream_alloc_table.stream_allocations[i].slot_count);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
|
|
|
|
switch (dp_get_link_encoding_format(&link->cur_link_settings)) {
|
|
|
|
|
case DP_8b_10b_ENCODING:
|
|
|
|
|
link_encoder->funcs->update_mst_stream_allocation_table(
|
|
|
|
|
link_encoder,
|
|
|
|
|
&link->mst_stream_alloc_table);
|
|
|
|
|
break;
|
|
|
|
|
case DP_128b_132b_ENCODING:
|
|
|
|
|
hpo_dp_link_encoder->funcs->update_stream_allocation_table(
|
|
|
|
|
hpo_dp_link_encoder,
|
|
|
|
|
&link->mst_stream_alloc_table);
|
|
|
|
|
break;
|
|
|
|
|
case DP_UNKNOWN_ENCODING:
|
|
|
|
|
DC_LOG_ERROR("Failure: unknown encoding format\n");
|
|
|
|
|
return DC_ERROR_UNEXPECTED;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
link_encoder->funcs->update_mst_stream_allocation_table(
|
|
|
|
|
link_encoder,
|
|
|
|
|
&link->mst_stream_alloc_table);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (mst_mode) {
|
|
|
|
|
dm_helpers_dp_mst_poll_for_allocation_change_trigger(
|
|
|
|
|