Commit ceb3dbb4 authored by Jun Lei's avatar Jun Lei Committed by Alex Deucher

drm/amd/display: remove sink reference in dc_stream_state

[why]
dc_stream_state containing a pointer to sink is poor design.
Sink describes the display, and the specifications or capabilities
it has.  That information is irrelevant for dc_stream_state, which describes
hardware state, and is generally used for hardware programming.  It
could further be argued that dc_sink itself is just a convenience dc
provides, and DC should be perfectly capable of programming hardware
without any dc_sinks (for example, emulated sinks).

[how]
Phase 1:
Deprecate use of dc_sink pointer in dc_stream.  Most references are trivial
to remove, but some call sites are risky (such as is_timing_changed) with
no obvious logical replacement.  These will be removed in follow up change.

Add dc_link pointer to dc_stream.  This is the typical reason DC really needed
sink pointer, and most call sites are replaced with this.

DMs also need minor updates, as all 3 DMs leverage stream->sink for
some functionality.  this is replaced instead by a pointer to private data
inside dc_stream_state, which is used by DMs as a quality of life improvment
for some key functionality.  it allows DMs to set pointers have to their own objects
which associate OS objects to dc_stream_states (such as DisplayTarget
and amdgpu_dm_connector).  Without the private pointer, DMs would be
forced to perform a lookup for callbacks.
Signed-off-by: default avatarJun Lei <Jun.Lei@amd.com>
Reviewed-by: default avatarAric Cyr <Aric.Cyr@amd.com>
Acked-by: default avatarDavid Francis <David.Francis@amd.com>
Acked-by: default avatarLeo Li <sunpeng.li@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 51ba137e
...@@ -2666,10 +2666,10 @@ fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream, ...@@ -2666,10 +2666,10 @@ fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream,
timing_out->v_border_bottom = 0; timing_out->v_border_bottom = 0;
/* TODO: un-hardcode */ /* TODO: un-hardcode */
if (drm_mode_is_420_only(info, mode_in) if (drm_mode_is_420_only(info, mode_in)
&& stream->sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A) && stream->signal == SIGNAL_TYPE_HDMI_TYPE_A)
timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR420; timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR420;
else if ((connector->display_info.color_formats & DRM_COLOR_FORMAT_YCRCB444) else if ((connector->display_info.color_formats & DRM_COLOR_FORMAT_YCRCB444)
&& stream->sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A) && stream->signal == SIGNAL_TYPE_HDMI_TYPE_A)
timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR444; timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR444;
else else
timing_out->pixel_encoding = PIXEL_ENCODING_RGB; timing_out->pixel_encoding = PIXEL_ENCODING_RGB;
...@@ -2711,7 +2711,7 @@ fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream, ...@@ -2711,7 +2711,7 @@ fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream,
stream->out_transfer_func->type = TF_TYPE_PREDEFINED; stream->out_transfer_func->type = TF_TYPE_PREDEFINED;
stream->out_transfer_func->tf = TRANSFER_FUNCTION_SRGB; stream->out_transfer_func->tf = TRANSFER_FUNCTION_SRGB;
if (stream->sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A) if (stream->signal == SIGNAL_TYPE_HDMI_TYPE_A)
adjust_colour_depth_from_display_info(timing_out, info); adjust_colour_depth_from_display_info(timing_out, info);
} }
...@@ -2905,6 +2905,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector, ...@@ -2905,6 +2905,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
goto finish; goto finish;
} }
stream->dm_stream_context = aconnector;
list_for_each_entry(preferred_mode, &aconnector->base.modes, head) { list_for_each_entry(preferred_mode, &aconnector->base.modes, head) {
/* Search for preferred mode */ /* Search for preferred mode */
if (preferred_mode->type & DRM_MODE_TYPE_PREFERRED) { if (preferred_mode->type & DRM_MODE_TYPE_PREFERRED) {
...@@ -2956,7 +2958,7 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector, ...@@ -2956,7 +2958,7 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
drm_connector, drm_connector,
sink); sink);
update_stream_signal(stream); update_stream_signal(stream, sink);
if (dm_state && dm_state->freesync_capable) if (dm_state && dm_state->freesync_capable)
stream->ignore_msa_timing_param = true; stream->ignore_msa_timing_param = true;
......
...@@ -192,7 +192,7 @@ bool dm_helpers_dp_mst_write_payload_allocation_table( ...@@ -192,7 +192,7 @@ bool dm_helpers_dp_mst_write_payload_allocation_table(
int bpp = 0; int bpp = 0;
int pbn = 0; int pbn = 0;
aconnector = stream->sink->priv; aconnector = (struct amdgpu_dm_connector *)stream->dm_stream_context;
if (!aconnector || !aconnector->mst_port) if (!aconnector || !aconnector->mst_port)
return false; return false;
...@@ -284,7 +284,7 @@ bool dm_helpers_dp_mst_poll_for_allocation_change_trigger( ...@@ -284,7 +284,7 @@ bool dm_helpers_dp_mst_poll_for_allocation_change_trigger(
struct drm_dp_mst_topology_mgr *mst_mgr; struct drm_dp_mst_topology_mgr *mst_mgr;
int ret; int ret;
aconnector = stream->sink->priv; aconnector = (struct amdgpu_dm_connector *)stream->dm_stream_context;
if (!aconnector || !aconnector->mst_port) if (!aconnector || !aconnector->mst_port)
return false; return false;
...@@ -312,7 +312,7 @@ bool dm_helpers_dp_mst_send_payload_allocation( ...@@ -312,7 +312,7 @@ bool dm_helpers_dp_mst_send_payload_allocation(
struct drm_dp_mst_port *mst_port; struct drm_dp_mst_port *mst_port;
int ret; int ret;
aconnector = stream->sink->priv; aconnector = (struct amdgpu_dm_connector *)stream->dm_stream_context;
if (!aconnector || !aconnector->mst_port) if (!aconnector || !aconnector->mst_port)
return false; return false;
......
...@@ -961,7 +961,7 @@ bool dcn_validate_bandwidth( ...@@ -961,7 +961,7 @@ bool dcn_validate_bandwidth(
v->dcc_rate[input_idx] = 1; /*TODO: Worst case? does this change?*/ v->dcc_rate[input_idx] = 1; /*TODO: Worst case? does this change?*/
v->output_format[input_idx] = pipe->stream->timing.pixel_encoding == v->output_format[input_idx] = pipe->stream->timing.pixel_encoding ==
PIXEL_ENCODING_YCBCR420 ? dcn_bw_420 : dcn_bw_444; PIXEL_ENCODING_YCBCR420 ? dcn_bw_420 : dcn_bw_444;
v->output[input_idx] = pipe->stream->sink->sink_signal == v->output[input_idx] = pipe->stream->signal ==
SIGNAL_TYPE_HDMI_TYPE_A ? dcn_bw_hdmi : dcn_bw_dp; SIGNAL_TYPE_HDMI_TYPE_A ? dcn_bw_hdmi : dcn_bw_dp;
v->output_deep_color[input_idx] = dcn_bw_encoder_8bpc; v->output_deep_color[input_idx] = dcn_bw_encoder_8bpc;
if (v->output[input_idx] == dcn_bw_hdmi) { if (v->output[input_idx] == dcn_bw_hdmi) {
......
...@@ -384,7 +384,7 @@ void dc_stream_set_dither_option(struct dc_stream_state *stream, ...@@ -384,7 +384,7 @@ void dc_stream_set_dither_option(struct dc_stream_state *stream,
enum dc_dither_option option) enum dc_dither_option option)
{ {
struct bit_depth_reduction_params params; struct bit_depth_reduction_params params;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
struct pipe_ctx *pipes = NULL; struct pipe_ctx *pipes = NULL;
int i; int i;
...@@ -526,9 +526,8 @@ void dc_link_set_preferred_link_settings(struct dc *dc, ...@@ -526,9 +526,8 @@ void dc_link_set_preferred_link_settings(struct dc *dc,
for (i = 0; i < MAX_PIPES; i++) { for (i = 0; i < MAX_PIPES; i++) {
pipe = &dc->current_state->res_ctx.pipe_ctx[i]; pipe = &dc->current_state->res_ctx.pipe_ctx[i];
if (pipe->stream && pipe->stream->sink if (pipe->stream && pipe->stream->link) {
&& pipe->stream->sink->link) { if (pipe->stream->link == link)
if (pipe->stream->sink->link == link)
break; break;
} }
} }
...@@ -1045,7 +1044,7 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c ...@@ -1045,7 +1044,7 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c
/* Program all planes within new context*/ /* Program all planes within new context*/
for (i = 0; i < context->stream_count; i++) { for (i = 0; i < context->stream_count; i++) {
const struct dc_sink *sink = context->streams[i]->sink; const struct dc_link *link = context->streams[i]->link;
if (!context->streams[i]->mode_changed) if (!context->streams[i]->mode_changed)
continue; continue;
...@@ -1070,7 +1069,7 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c ...@@ -1070,7 +1069,7 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c
} }
} }
CONN_MSG_MODE(sink->link, "{%dx%d, %dx%d@%dKhz}", CONN_MSG_MODE(link, "{%dx%d, %dx%d@%dKhz}",
context->streams[i]->timing.h_addressable, context->streams[i]->timing.h_addressable,
context->streams[i]->timing.v_addressable, context->streams[i]->timing.v_addressable,
context->streams[i]->timing.h_total, context->streams[i]->timing.h_total,
......
...@@ -789,7 +789,7 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) ...@@ -789,7 +789,7 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason)
return false; return false;
} }
sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock; sink->link->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
sink->converter_disable_audio = converter_disable_audio; sink->converter_disable_audio = converter_disable_audio;
link->local_sink = sink; link->local_sink = sink;
...@@ -1372,7 +1372,7 @@ static void dpcd_configure_panel_mode( ...@@ -1372,7 +1372,7 @@ static void dpcd_configure_panel_mode(
static void enable_stream_features(struct pipe_ctx *pipe_ctx) static void enable_stream_features(struct pipe_ctx *pipe_ctx)
{ {
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
union down_spread_ctrl old_downspread; union down_spread_ctrl old_downspread;
union down_spread_ctrl new_downspread; union down_spread_ctrl new_downspread;
...@@ -1397,7 +1397,7 @@ static enum dc_status enable_link_dp( ...@@ -1397,7 +1397,7 @@ static enum dc_status enable_link_dp(
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
enum dc_status status; enum dc_status status;
bool skip_video_pattern; bool skip_video_pattern;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
struct dc_link_settings link_settings = {0}; struct dc_link_settings link_settings = {0};
enum dp_panel_mode panel_mode; enum dp_panel_mode panel_mode;
...@@ -1414,8 +1414,8 @@ static enum dc_status enable_link_dp( ...@@ -1414,8 +1414,8 @@ static enum dc_status enable_link_dp(
pipe_ctx->clock_source->id, pipe_ctx->clock_source->id,
&link_settings); &link_settings);
if (stream->sink->edid_caps.panel_patch.dppowerup_delay > 0) { if (stream->sink_patches.dppowerup_delay > 0) {
int delay_dp_power_up_in_ms = stream->sink->edid_caps.panel_patch.dppowerup_delay; int delay_dp_power_up_in_ms = stream->sink_patches.dppowerup_delay;
msleep(delay_dp_power_up_in_ms); msleep(delay_dp_power_up_in_ms);
} }
...@@ -1448,7 +1448,7 @@ static enum dc_status enable_link_edp( ...@@ -1448,7 +1448,7 @@ static enum dc_status enable_link_edp(
{ {
enum dc_status status; enum dc_status status;
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
/*in case it is not on*/ /*in case it is not on*/
link->dc->hwss.edp_power_control(link, true); link->dc->hwss.edp_power_control(link, true);
link->dc->hwss.edp_wait_for_hpd_ready(link, true); link->dc->hwss.edp_wait_for_hpd_ready(link, true);
...@@ -1463,7 +1463,7 @@ static enum dc_status enable_link_dp_mst( ...@@ -1463,7 +1463,7 @@ static enum dc_status enable_link_dp_mst(
struct dc_state *state, struct dc_state *state,
struct pipe_ctx *pipe_ctx) struct pipe_ctx *pipe_ctx)
{ {
struct dc_link *link = pipe_ctx->stream->sink->link; struct dc_link *link = pipe_ctx->stream->link;
/* sink signal type after MST branch is MST. Multiple MST sinks /* sink signal type after MST branch is MST. Multiple MST sinks
* share one link. Link DP PHY is enable or training only once. * share one link. Link DP PHY is enable or training only once.
...@@ -1597,7 +1597,7 @@ static bool i2c_write(struct pipe_ctx *pipe_ctx, ...@@ -1597,7 +1597,7 @@ static bool i2c_write(struct pipe_ctx *pipe_ctx,
cmd.payloads = &payload; cmd.payloads = &payload;
if (dm_helpers_submit_i2c(pipe_ctx->stream->ctx, if (dm_helpers_submit_i2c(pipe_ctx->stream->ctx,
pipe_ctx->stream->sink->link, &cmd)) pipe_ctx->stream->link, &cmd))
return true; return true;
return false; return false;
...@@ -1651,7 +1651,7 @@ static void write_i2c_retimer_setting( ...@@ -1651,7 +1651,7 @@ static void write_i2c_retimer_setting(
else { else {
i2c_success = i2c_success =
dal_ddc_service_query_ddc_data( dal_ddc_service_query_ddc_data(
pipe_ctx->stream->sink->link->ddc, pipe_ctx->stream->link->ddc,
slave_address, &offset, 1, &value, 1); slave_address, &offset, 1, &value, 1);
if (!i2c_success) if (!i2c_success)
/* Write failure */ /* Write failure */
...@@ -1704,7 +1704,7 @@ static void write_i2c_retimer_setting( ...@@ -1704,7 +1704,7 @@ static void write_i2c_retimer_setting(
else { else {
i2c_success = i2c_success =
dal_ddc_service_query_ddc_data( dal_ddc_service_query_ddc_data(
pipe_ctx->stream->sink->link->ddc, pipe_ctx->stream->link->ddc,
slave_address, &offset, 1, &value, 1); slave_address, &offset, 1, &value, 1);
if (!i2c_success) if (!i2c_success)
/* Write failure */ /* Write failure */
...@@ -1929,7 +1929,7 @@ static void write_i2c_redriver_setting( ...@@ -1929,7 +1929,7 @@ static void write_i2c_redriver_setting(
static void enable_link_hdmi(struct pipe_ctx *pipe_ctx) static void enable_link_hdmi(struct pipe_ctx *pipe_ctx)
{ {
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
enum dc_color_depth display_color_depth; enum dc_color_depth display_color_depth;
enum engine_id eng_id; enum engine_id eng_id;
struct ext_hdmi_settings settings = {0}; struct ext_hdmi_settings settings = {0};
...@@ -1943,7 +1943,7 @@ static void enable_link_hdmi(struct pipe_ctx *pipe_ctx) ...@@ -1943,7 +1943,7 @@ static void enable_link_hdmi(struct pipe_ctx *pipe_ctx)
is_over_340mhz = true; is_over_340mhz = true;
if (dc_is_hdmi_signal(pipe_ctx->stream->signal)) { if (dc_is_hdmi_signal(pipe_ctx->stream->signal)) {
unsigned short masked_chip_caps = pipe_ctx->stream->sink->link->chip_caps & unsigned short masked_chip_caps = pipe_ctx->stream->link->chip_caps &
EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK; EXT_DISPLAY_PATH_CAPS__EXT_CHIP_MASK;
if (masked_chip_caps == EXT_DISPLAY_PATH_CAPS__HDMI20_TISN65DP159RSBT) { if (masked_chip_caps == EXT_DISPLAY_PATH_CAPS__HDMI20_TISN65DP159RSBT) {
/* DP159, Retimer settings */ /* DP159, Retimer settings */
...@@ -1964,11 +1964,11 @@ static void enable_link_hdmi(struct pipe_ctx *pipe_ctx) ...@@ -1964,11 +1964,11 @@ static void enable_link_hdmi(struct pipe_ctx *pipe_ctx)
if (dc_is_hdmi_signal(pipe_ctx->stream->signal)) if (dc_is_hdmi_signal(pipe_ctx->stream->signal))
dal_ddc_service_write_scdc_data( dal_ddc_service_write_scdc_data(
stream->sink->link->ddc, stream->link->ddc,
stream->phy_pix_clk, stream->phy_pix_clk,
stream->timing.flags.LTE_340MCSC_SCRAMBLE); stream->timing.flags.LTE_340MCSC_SCRAMBLE);
memset(&stream->sink->link->cur_link_settings, 0, memset(&stream->link->cur_link_settings, 0,
sizeof(struct dc_link_settings)); sizeof(struct dc_link_settings));
display_color_depth = stream->timing.display_color_depth; display_color_depth = stream->timing.display_color_depth;
...@@ -1989,12 +1989,12 @@ static void enable_link_hdmi(struct pipe_ctx *pipe_ctx) ...@@ -1989,12 +1989,12 @@ static void enable_link_hdmi(struct pipe_ctx *pipe_ctx)
static void enable_link_lvds(struct pipe_ctx *pipe_ctx) static void enable_link_lvds(struct pipe_ctx *pipe_ctx)
{ {
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
if (stream->phy_pix_clk == 0) if (stream->phy_pix_clk == 0)
stream->phy_pix_clk = stream->timing.pix_clk_khz; stream->phy_pix_clk = stream->timing.pix_clk_khz;
memset(&stream->sink->link->cur_link_settings, 0, memset(&stream->link->cur_link_settings, 0,
sizeof(struct dc_link_settings)); sizeof(struct dc_link_settings));
link->link_enc->funcs->enable_lvds_output( link->link_enc->funcs->enable_lvds_output(
...@@ -2145,7 +2145,7 @@ enum dc_status dc_link_validate_mode_timing( ...@@ -2145,7 +2145,7 @@ enum dc_status dc_link_validate_mode_timing(
struct dc_link *link, struct dc_link *link,
const struct dc_crtc_timing *timing) const struct dc_crtc_timing *timing)
{ {
uint32_t max_pix_clk = stream->sink->dongle_max_pix_clk; uint32_t max_pix_clk = stream->link->dongle_max_pix_clk;
struct dpcd_caps *dpcd_caps = &link->dpcd_caps; struct dpcd_caps *dpcd_caps = &link->dpcd_caps;
/* A hack to avoid failing any modes for EDID override feature on /* A hack to avoid failing any modes for EDID override feature on
...@@ -2219,7 +2219,7 @@ bool dc_link_set_backlight_level(const struct dc_link *link, ...@@ -2219,7 +2219,7 @@ bool dc_link_set_backlight_level(const struct dc_link *link,
for (i = 0; i < MAX_PIPES; i++) { for (i = 0; i < MAX_PIPES; i++) {
if (core_dc->current_state->res_ctx.pipe_ctx[i].stream) { if (core_dc->current_state->res_ctx.pipe_ctx[i].stream) {
if (core_dc->current_state->res_ctx. if (core_dc->current_state->res_ctx.
pipe_ctx[i].stream->sink->link pipe_ctx[i].stream->link
== link) == link)
/* DMCU -1 for all controller id values, /* DMCU -1 for all controller id values,
* therefore +1 here * therefore +1 here
...@@ -2279,7 +2279,7 @@ void core_link_resume(struct dc_link *link) ...@@ -2279,7 +2279,7 @@ void core_link_resume(struct dc_link *link)
static struct fixed31_32 get_pbn_per_slot(struct dc_stream_state *stream) static struct fixed31_32 get_pbn_per_slot(struct dc_stream_state *stream)
{ {
struct dc_link_settings *link_settings = struct dc_link_settings *link_settings =
&stream->sink->link->cur_link_settings; &stream->link->cur_link_settings;
uint32_t link_rate_in_mbps = uint32_t link_rate_in_mbps =
link_settings->link_rate * LINK_RATE_REF_FREQ_IN_MHZ; link_settings->link_rate * LINK_RATE_REF_FREQ_IN_MHZ;
struct fixed31_32 mbps = dc_fixpt_from_int( struct fixed31_32 mbps = dc_fixpt_from_int(
...@@ -2386,7 +2386,7 @@ static void update_mst_stream_alloc_table( ...@@ -2386,7 +2386,7 @@ static void update_mst_stream_alloc_table(
static enum dc_status allocate_mst_payload(struct pipe_ctx *pipe_ctx) static enum dc_status allocate_mst_payload(struct pipe_ctx *pipe_ctx)
{ {
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
struct link_encoder *link_encoder = link->link_enc; struct link_encoder *link_encoder = link->link_enc;
struct stream_encoder *stream_encoder = pipe_ctx->stream_res.stream_enc; struct stream_encoder *stream_encoder = pipe_ctx->stream_res.stream_enc;
struct dp_mst_stream_allocation_table proposed_table = {0}; struct dp_mst_stream_allocation_table proposed_table = {0};
...@@ -2466,7 +2466,7 @@ static enum dc_status allocate_mst_payload(struct pipe_ctx *pipe_ctx) ...@@ -2466,7 +2466,7 @@ static enum dc_status allocate_mst_payload(struct pipe_ctx *pipe_ctx)
static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx) static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx)
{ {
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
struct link_encoder *link_encoder = link->link_enc; struct link_encoder *link_encoder = link->link_enc;
struct stream_encoder *stream_encoder = pipe_ctx->stream_res.stream_enc; struct stream_encoder *stream_encoder = pipe_ctx->stream_res.stream_enc;
struct dp_mst_stream_allocation_table proposed_table = {0}; struct dp_mst_stream_allocation_table proposed_table = {0};
...@@ -2551,8 +2551,8 @@ void core_link_enable_stream( ...@@ -2551,8 +2551,8 @@ void core_link_enable_stream(
DC_LOGGER_INIT(pipe_ctx->stream->ctx->logger); DC_LOGGER_INIT(pipe_ctx->stream->ctx->logger);
if (pipe_ctx->stream->signal != SIGNAL_TYPE_VIRTUAL) { if (pipe_ctx->stream->signal != SIGNAL_TYPE_VIRTUAL) {
stream->sink->link->link_enc->funcs->setup( stream->link->link_enc->funcs->setup(
stream->sink->link->link_enc, stream->link->link_enc,
pipe_ctx->stream->signal); pipe_ctx->stream->signal);
pipe_ctx->stream_res.stream_enc->funcs->setup_stereo_sync( pipe_ctx->stream_res.stream_enc->funcs->setup_stereo_sync(
pipe_ctx->stream_res.stream_enc, pipe_ctx->stream_res.stream_enc,
...@@ -2604,7 +2604,7 @@ void core_link_enable_stream( ...@@ -2604,7 +2604,7 @@ void core_link_enable_stream(
if (status != DC_OK) { if (status != DC_OK) {
DC_LOG_WARNING("enabling link %u failed: %d\n", DC_LOG_WARNING("enabling link %u failed: %d\n",
pipe_ctx->stream->sink->link->link_index, pipe_ctx->stream->link->link_index,
status); status);
/* Abort stream enable *unless* the failure was due to /* Abort stream enable *unless* the failure was due to
...@@ -2633,12 +2633,12 @@ void core_link_enable_stream( ...@@ -2633,12 +2633,12 @@ void core_link_enable_stream(
allocate_mst_payload(pipe_ctx); allocate_mst_payload(pipe_ctx);
core_dc->hwss.unblank_stream(pipe_ctx, core_dc->hwss.unblank_stream(pipe_ctx,
&pipe_ctx->stream->sink->link->cur_link_settings); &pipe_ctx->stream->link->cur_link_settings);
if (dc_is_dp_signal(pipe_ctx->stream->signal)) if (dc_is_dp_signal(pipe_ctx->stream->signal))
enable_stream_features(pipe_ctx); enable_stream_features(pipe_ctx);
dc_link_set_backlight_level(pipe_ctx->stream->sink->link, dc_link_set_backlight_level(pipe_ctx->stream->link,
pipe_ctx->stream->bl_pwm_level, pipe_ctx->stream->bl_pwm_level,
0, 0,
pipe_ctx->stream); pipe_ctx->stream);
...@@ -2657,7 +2657,7 @@ void core_link_disable_stream(struct pipe_ctx *pipe_ctx, int option) ...@@ -2657,7 +2657,7 @@ void core_link_disable_stream(struct pipe_ctx *pipe_ctx, int option)
core_dc->hwss.disable_stream(pipe_ctx, option); core_dc->hwss.disable_stream(pipe_ctx, option);
disable_link(pipe_ctx->stream->sink->link, pipe_ctx->stream->signal); disable_link(pipe_ctx->stream->link, pipe_ctx->stream->signal);
} }
void core_link_set_avmute(struct pipe_ctx *pipe_ctx, bool enable) void core_link_set_avmute(struct pipe_ctx *pipe_ctx, bool enable)
......
...@@ -1634,7 +1634,7 @@ void decide_link_settings(struct dc_stream_state *stream, ...@@ -1634,7 +1634,7 @@ void decide_link_settings(struct dc_stream_state *stream,
req_bw = bandwidth_in_kbps_from_timing(&stream->timing); req_bw = bandwidth_in_kbps_from_timing(&stream->timing);
link = stream->sink->link; link = stream->link;
/* if preferred is specified through AMDDP, use it, if it's enough /* if preferred is specified through AMDDP, use it, if it's enough
* to drive the mode * to drive the mode
...@@ -1656,7 +1656,7 @@ void decide_link_settings(struct dc_stream_state *stream, ...@@ -1656,7 +1656,7 @@ void decide_link_settings(struct dc_stream_state *stream,
} }
/* EDP use the link cap setting */ /* EDP use the link cap setting */
if (stream->sink->sink_signal == SIGNAL_TYPE_EDP) { if (link->connector_signal == SIGNAL_TYPE_EDP) {
*link_setting = link->verified_link_cap; *link_setting = link->verified_link_cap;
return; return;
} }
...@@ -2621,7 +2621,7 @@ bool dc_link_dp_set_test_pattern( ...@@ -2621,7 +2621,7 @@ bool dc_link_dp_set_test_pattern(
memset(&training_pattern, 0, sizeof(training_pattern)); memset(&training_pattern, 0, sizeof(training_pattern));
for (i = 0; i < MAX_PIPES; i++) { for (i = 0; i < MAX_PIPES; i++) {
if (pipes[i].stream->sink->link == link) { if (pipes[i].stream->link == link) {
pipe_ctx = &pipes[i]; pipe_ctx = &pipes[i];
break; break;
} }
......
...@@ -70,8 +70,7 @@ void dp_enable_link_phy( ...@@ -70,8 +70,7 @@ void dp_enable_link_phy(
*/ */
for (i = 0; i < MAX_PIPES; i++) { for (i = 0; i < MAX_PIPES; i++) {
if (pipes[i].stream != NULL && if (pipes[i].stream != NULL &&
pipes[i].stream->sink != NULL && pipes[i].stream->link == link) {
pipes[i].stream->sink->link == link) {
if (pipes[i].clock_source != NULL && if (pipes[i].clock_source != NULL &&
pipes[i].clock_source->id != CLOCK_SOURCE_ID_DP_DTO) { pipes[i].clock_source->id != CLOCK_SOURCE_ID_DP_DTO) {
pipes[i].clock_source = dp_cs; pipes[i].clock_source = dp_cs;
...@@ -279,10 +278,8 @@ void dp_retrain_link_dp_test(struct dc_link *link, ...@@ -279,10 +278,8 @@ void dp_retrain_link_dp_test(struct dc_link *link,
for (i = 0; i < MAX_PIPES; i++) { for (i = 0; i < MAX_PIPES; i++) {
if (pipes[i].stream != NULL && if (pipes[i].stream != NULL &&
!pipes[i].top_pipe && !pipes[i].top_pipe &&
pipes[i].stream->sink != NULL && pipes[i].stream->link != NULL &&
pipes[i].stream->sink->link != NULL && pipes[i].stream_res.stream_enc != NULL) {
pipes[i].stream_res.stream_enc != NULL &&
pipes[i].stream->sink->link == link) {
udelay(100); udelay(100);
pipes[i].stream_res.stream_enc->funcs->dp_blank( pipes[i].stream_res.stream_enc->funcs->dp_blank(
......
...@@ -1559,7 +1559,7 @@ static struct stream_encoder *find_first_free_match_stream_enc_for_link( ...@@ -1559,7 +1559,7 @@ static struct stream_encoder *find_first_free_match_stream_enc_for_link(
{ {
int i; int i;
int j = -1; int j = -1;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
for (i = 0; i < pool->stream_enc_count; i++) { for (i = 0; i < pool->stream_enc_count; i++) {
if (!res_ctx->is_stream_enc_acquired[i] && if (!res_ctx->is_stream_enc_acquired[i] &&
...@@ -1748,7 +1748,7 @@ static struct dc_stream_state *find_pll_sharable_stream( ...@@ -1748,7 +1748,7 @@ static struct dc_stream_state *find_pll_sharable_stream(
if (resource_are_streams_timing_synchronizable( if (resource_are_streams_timing_synchronizable(
stream_needs_pll, stream_has_pll) stream_needs_pll, stream_has_pll)
&& !dc_is_dp_signal(stream_has_pll->signal) && !dc_is_dp_signal(stream_has_pll->signal)
&& stream_has_pll->sink->link->connector_signal && stream_has_pll->link->connector_signal
!= SIGNAL_TYPE_VIRTUAL) != SIGNAL_TYPE_VIRTUAL)
return stream_has_pll; return stream_has_pll;
...@@ -1850,7 +1850,7 @@ enum dc_status resource_map_pool_resources( ...@@ -1850,7 +1850,7 @@ enum dc_status resource_map_pool_resources(
true); true);
/* TODO: Add check if ASIC support and EDID audio */ /* TODO: Add check if ASIC support and EDID audio */
if (!stream->sink->converter_disable_audio && if (!stream->converter_disable_audio &&
dc_is_audio_capable_signal(pipe_ctx->stream->signal) && dc_is_audio_capable_signal(pipe_ctx->stream->signal) &&
stream->audio_info.mode_count) { stream->audio_info.mode_count) {
pipe_ctx->stream_res.audio = find_first_free_audio( pipe_ctx->stream_res.audio = find_first_free_audio(
...@@ -2112,7 +2112,7 @@ static void set_avi_info_frame( ...@@ -2112,7 +2112,7 @@ static void set_avi_info_frame(
itc = true; itc = true;
itc_value = 1; itc_value = 1;
support = stream->sink->edid_caps.content_support; support = stream->content_support;
if (itc) { if (itc) {
if (!support.bits.valid_content_type) { if (!support.bits.valid_content_type) {
...@@ -2151,8 +2151,8 @@ static void set_avi_info_frame( ...@@ -2151,8 +2151,8 @@ static void set_avi_info_frame(
/* TODO : We should handle YCC quantization */ /* TODO : We should handle YCC quantization */
/* but we do not have matrix calculation */ /* but we do not have matrix calculation */
if (stream->sink->edid_caps.qs_bit == 1 && if (stream->qs_bit == 1 &&
stream->sink->edid_caps.qy_bit == 1) { stream->qy_bit == 1) {
if (color_space == COLOR_SPACE_SRGB || if (color_space == COLOR_SPACE_SRGB ||
color_space == COLOR_SPACE_2020_RGB_FULLRANGE) { color_space == COLOR_SPACE_2020_RGB_FULLRANGE) {
hdmi_info.bits.Q0_Q1 = RGB_QUANTIZATION_FULL_RANGE; hdmi_info.bits.Q0_Q1 = RGB_QUANTIZATION_FULL_RANGE;
...@@ -2596,7 +2596,7 @@ void resource_build_bit_depth_reduction_params(struct dc_stream_state *stream, ...@@ -2596,7 +2596,7 @@ void resource_build_bit_depth_reduction_params(struct dc_stream_state *stream,
enum dc_status dc_validate_stream(struct dc *dc, struct dc_stream_state *stream) enum dc_status dc_validate_stream(struct dc *dc, struct dc_stream_state *stream)
{ {
struct dc *core_dc = dc; struct dc *core_dc = dc;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
struct timing_generator *tg = core_dc->res_pool->timing_generators[0]; struct timing_generator *tg = core_dc->res_pool->timing_generators[0];
enum dc_status res = DC_OK; enum dc_status res = DC_OK;
......
...@@ -35,20 +35,17 @@ ...@@ -35,20 +35,17 @@
/******************************************************************************* /*******************************************************************************
* Private functions * Private functions
******************************************************************************/ ******************************************************************************/
void update_stream_signal(struct dc_stream_state *stream) void update_stream_signal(struct dc_stream_state *stream, struct dc_sink *sink)
{ {
if (sink->sink_signal == SIGNAL_TYPE_NONE)
struct dc_sink *dc_sink = stream->sink; stream->signal = stream->link->connector_signal;
if (dc_sink->sink_signal == SIGNAL_TYPE_NONE)
stream->signal = stream->sink->link->connector_signal;
else else
stream->signal = dc_sink->sink_signal; stream->signal = sink->sink_signal;
if (dc_is_dvi_signal(stream->signal)) { if (dc_is_dvi_signal(stream->signal)) {
if (stream->ctx->dc->caps.dual_link_dvi && if (stream->ctx->dc->caps.dual_link_dvi &&
stream->timing.pix_clk_khz > TMDS_MAX_PIXEL_CLOCK && stream->timing.pix_clk_khz > TMDS_MAX_PIXEL_CLOCK &&
stream->sink->sink_signal != SIGNAL_TYPE_DVI_SINGLE_LINK) sink->sink_signal != SIGNAL_TYPE_DVI_SINGLE_LINK)
stream->signal = SIGNAL_TYPE_DVI_DUAL_LINK; stream->signal = SIGNAL_TYPE_DVI_DUAL_LINK;
else else
stream->signal = SIGNAL_TYPE_DVI_SINGLE_LINK; stream->signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
...@@ -61,10 +58,15 @@ static void construct(struct dc_stream_state *stream, ...@@ -61,10 +58,15 @@ static void construct(struct dc_stream_state *stream,
uint32_t i = 0; uint32_t i = 0;
stream->sink = dc_sink_data; stream->sink = dc_sink_data;
stream->ctx = stream->sink->ctx;
dc_sink_retain(dc_sink_data); dc_sink_retain(dc_sink_data);
stream->ctx = dc_sink_data->ctx;
stream->link = dc_sink_data->link;
stream->sink_patches = dc_sink_data->edid_caps.panel_patch;
stream->converter_disable_audio = dc_sink_data->converter_disable_audio;
stream->qs_bit = dc_sink_data->edid_caps.qs_bit;
stream->qy_bit = dc_sink_data->edid_caps.qy_bit;
/* Copy audio modes */ /* Copy audio modes */
/* TODO - Remove this translation */ /* TODO - Remove this translation */
for (i = 0; i < (dc_sink_data->edid_caps.audio_mode_count); i++) for (i = 0; i < (dc_sink_data->edid_caps.audio_mode_count); i++)
...@@ -100,7 +102,7 @@ static void construct(struct dc_stream_state *stream, ...@@ -100,7 +102,7 @@ static void construct(struct dc_stream_state *stream,
/* EDID CAP translation for HDMI 2.0 */ /* EDID CAP translation for HDMI 2.0 */
stream->timing.flags.LTE_340MCSC_SCRAMBLE = dc_sink_data->edid_caps.lte_340mcsc_scramble; stream->timing.flags.LTE_340MCSC_SCRAMBLE = dc_sink_data->edid_caps.lte_340mcsc_scramble;
update_stream_signal(stream); update_stream_signal(stream, dc_sink_data);
stream->out_transfer_func = dc_create_transfer_func(); stream->out_transfer_func = dc_create_transfer_func();
stream->out_transfer_func->type = TF_TYPE_BYPASS; stream->out_transfer_func->type = TF_TYPE_BYPASS;
...@@ -339,11 +341,7 @@ void dc_stream_log(const struct dc *dc, const struct dc_stream_state *stream) ...@@ -339,11 +341,7 @@ void dc_stream_log(const struct dc *dc, const struct dc_stream_state *stream)
stream->timing.v_total, stream->timing.v_total,
stream->timing.pixel_encoding, stream->timing.pixel_encoding,
stream->timing.display_color_depth); stream->timing.display_color_depth);
DC_LOG_DC(
"\tsink name: %s, serial: %d\n",
stream->sink->edid_caps.display_name,
stream->sink->edid_caps.serial_number);
DC_LOG_DC( DC_LOG_DC(
"\tlink: %d\n", "\tlink: %d\n",
stream->sink->link->link_index); stream->link->link_index);
} }
...@@ -110,6 +110,7 @@ struct dc_link { ...@@ -110,6 +110,7 @@ struct dc_link {
union ddi_channel_mapping ddi_channel_mapping; union ddi_channel_mapping ddi_channel_mapping;
struct connector_device_tag_info device_tag; struct connector_device_tag_info device_tag;
struct dpcd_caps dpcd_caps; struct dpcd_caps dpcd_caps;
uint32_t dongle_max_pix_clk;
unsigned short chip_caps; unsigned short chip_caps;
unsigned int dpcd_sink_count; unsigned int dpcd_sink_count;
enum edp_revision edp_revision; enum edp_revision edp_revision;
......
...@@ -51,7 +51,13 @@ struct freesync_context { ...@@ -51,7 +51,13 @@ struct freesync_context {
}; };
struct dc_stream_state { struct dc_stream_state {
// sink is deprecated, new code should not reference
// this pointer
struct dc_sink *sink; struct dc_sink *sink;
struct dc_link *link;
struct dc_panel_patch sink_patches;
union display_content_support content_support;
struct dc_crtc_timing timing; struct dc_crtc_timing timing;
struct dc_crtc_timing_adjust adjust; struct dc_crtc_timing_adjust adjust;
struct dc_info_packet vrr_infopacket; struct dc_info_packet vrr_infopacket;
...@@ -80,6 +86,9 @@ struct dc_stream_state { ...@@ -80,6 +86,9 @@ struct dc_stream_state {
enum view_3d_format view_format; enum view_3d_format view_format;
bool ignore_msa_timing_param; bool ignore_msa_timing_param;
bool converter_disable_audio;
uint8_t qs_bit;
uint8_t qy_bit;
unsigned long long periodic_fn_vsync_delta; unsigned long long periodic_fn_vsync_delta;
...@@ -105,6 +114,8 @@ struct dc_stream_state { ...@@ -105,6 +114,8 @@ struct dc_stream_state {
bool dpms_off; bool dpms_off;
bool apply_edp_fast_boot_optimization; bool apply_edp_fast_boot_optimization;
void *dm_stream_context;
struct dc_cursor_attributes cursor_attributes; struct dc_cursor_attributes cursor_attributes;
struct dc_cursor_position cursor_position; struct dc_cursor_position cursor_position;
uint32_t sdr_white_level; // for boosting (SDR) cursor in HDR mode uint32_t sdr_white_level; // for boosting (SDR) cursor in HDR mode
...@@ -256,7 +267,7 @@ enum surface_update_type dc_check_update_surfaces_for_stream( ...@@ -256,7 +267,7 @@ enum surface_update_type dc_check_update_surfaces_for_stream(
*/ */
struct dc_stream_state *dc_create_stream_for_sink(struct dc_sink *dc_sink); struct dc_stream_state *dc_create_stream_for_sink(struct dc_sink *dc_sink);
void update_stream_signal(struct dc_stream_state *stream); void update_stream_signal(struct dc_stream_state *stream, struct dc_sink *sink);
void dc_stream_retain(struct dc_stream_state *dc_stream); void dc_stream_retain(struct dc_stream_state *dc_stream);
void dc_stream_release(struct dc_stream_state *dc_stream); void dc_stream_release(struct dc_stream_state *dc_stream);
......
...@@ -483,15 +483,15 @@ void dce110_fill_display_configs( ...@@ -483,15 +483,15 @@ void dce110_fill_display_configs(
cfg->src_height = stream->src.height; cfg->src_height = stream->src.height;
cfg->src_width = stream->src.width; cfg->src_width = stream->src.width;
cfg->ddi_channel_mapping = cfg->ddi_channel_mapping =
stream->sink->link->ddi_channel_mapping.raw; stream->link->ddi_channel_mapping.raw;
cfg->transmitter = cfg->transmitter =
stream->sink->link->link_enc->transmitter; stream->link->link_enc->transmitter;
cfg->link_settings.lane_count = cfg->link_settings.lane_count =
stream->sink->link->cur_link_settings.lane_count; stream->link->cur_link_settings.lane_count;
cfg->link_settings.link_rate = cfg->link_settings.link_rate =
stream->sink->link->cur_link_settings.link_rate; stream->link->cur_link_settings.link_rate;
cfg->link_settings.link_spread = cfg->link_settings.link_spread =
stream->sink->link->cur_link_settings.link_spread; stream->link->cur_link_settings.link_spread;
cfg->sym_clock = stream->phy_pix_clk; cfg->sym_clock = stream->phy_pix_clk;
/* Round v_refresh*/ /* Round v_refresh*/
cfg->v_refresh = stream->timing.pix_clk_khz * 1000; cfg->v_refresh = stream->timing.pix_clk_khz * 1000;
......
...@@ -788,7 +788,7 @@ bool dce110_link_encoder_validate_output_with_stream( ...@@ -788,7 +788,7 @@ bool dce110_link_encoder_validate_output_with_stream(
case SIGNAL_TYPE_DVI_DUAL_LINK: case SIGNAL_TYPE_DVI_DUAL_LINK:
is_valid = dce110_link_encoder_validate_dvi_output( is_valid = dce110_link_encoder_validate_dvi_output(
enc110, enc110,
stream->sink->link->connector_signal, stream->link->connector_signal,
stream->signal, stream->signal,
&stream->timing); &stream->timing);
break; break;
......
...@@ -617,12 +617,11 @@ dce110_set_output_transfer_func(struct pipe_ctx *pipe_ctx, ...@@ -617,12 +617,11 @@ dce110_set_output_transfer_func(struct pipe_ctx *pipe_ctx,
static enum dc_status bios_parser_crtc_source_select( static enum dc_status bios_parser_crtc_source_select(
struct pipe_ctx *pipe_ctx) struct pipe_ctx *pipe_ctx)
{ {
struct dc_bios *dcb; struct dc_bios *dcb = pipe_ctx->stream->ctx->dc_bios;
/* call VBIOS table to set CRTC source for the HW /* call VBIOS table to set CRTC source for the HW
* encoder block * encoder block
* note: video bios clears all FMT setting here. */ * note: video bios clears all FMT setting here. */
struct bp_crtc_source_select crtc_source_select = {0}; struct bp_crtc_source_select crtc_source_select = {0};
const struct dc_sink *sink = pipe_ctx->stream->sink;
crtc_source_select.engine_id = pipe_ctx->stream_res.stream_enc->id; crtc_source_select.engine_id = pipe_ctx->stream_res.stream_enc->id;
crtc_source_select.controller_id = pipe_ctx->stream_res.tg->inst + 1; crtc_source_select.controller_id = pipe_ctx->stream_res.tg->inst + 1;
...@@ -652,8 +651,6 @@ static enum dc_status bios_parser_crtc_source_select( ...@@ -652,8 +651,6 @@ static enum dc_status bios_parser_crtc_source_select(
break; break;
} }
dcb = sink->ctx->dc_bios;
if (BP_RESULT_OK != dcb->funcs->crtc_source_select( if (BP_RESULT_OK != dcb->funcs->crtc_source_select(
dcb, dcb,
&crtc_source_select)) { &crtc_source_select)) {
...@@ -692,10 +689,10 @@ void dce110_update_info_frame(struct pipe_ctx *pipe_ctx) ...@@ -692,10 +689,10 @@ void dce110_update_info_frame(struct pipe_ctx *pipe_ctx)
void dce110_enable_stream(struct pipe_ctx *pipe_ctx) void dce110_enable_stream(struct pipe_ctx *pipe_ctx)
{ {
enum dc_lane_count lane_count = enum dc_lane_count lane_count =
pipe_ctx->stream->sink->link->cur_link_settings.lane_count; pipe_ctx->stream->link->cur_link_settings.lane_count;
struct dc_crtc_timing *timing = &pipe_ctx->stream->timing; struct dc_crtc_timing *timing = &pipe_ctx->stream->timing;
struct dc_link *link = pipe_ctx->stream->sink->link; struct dc_link *link = pipe_ctx->stream->link;
uint32_t active_total_with_borders; uint32_t active_total_with_borders;
...@@ -1048,7 +1045,7 @@ void dce110_disable_audio_stream(struct pipe_ctx *pipe_ctx, int option) ...@@ -1048,7 +1045,7 @@ void dce110_disable_audio_stream(struct pipe_ctx *pipe_ctx, int option)
void dce110_disable_stream(struct pipe_ctx *pipe_ctx, int option) void dce110_disable_stream(struct pipe_ctx *pipe_ctx, int option)
{ {
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
struct dc *dc = pipe_ctx->stream->ctx->dc; struct dc *dc = pipe_ctx->stream->ctx->dc;
if (dc_is_hdmi_signal(pipe_ctx->stream->signal)) if (dc_is_hdmi_signal(pipe_ctx->stream->signal))
...@@ -1073,7 +1070,7 @@ void dce110_unblank_stream(struct pipe_ctx *pipe_ctx, ...@@ -1073,7 +1070,7 @@ void dce110_unblank_stream(struct pipe_ctx *pipe_ctx,
{ {
struct encoder_unblank_param params = { { 0 } }; struct encoder_unblank_param params = { { 0 } };
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
/* only 3 items below are used by unblank */ /* only 3 items below are used by unblank */
params.pixel_clk_khz = params.pixel_clk_khz =
...@@ -1090,7 +1087,7 @@ void dce110_unblank_stream(struct pipe_ctx *pipe_ctx, ...@@ -1090,7 +1087,7 @@ void dce110_unblank_stream(struct pipe_ctx *pipe_ctx,
void dce110_blank_stream(struct pipe_ctx *pipe_ctx) void dce110_blank_stream(struct pipe_ctx *pipe_ctx)
{ {
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
struct dc_link *link = stream->sink->link; struct dc_link *link = stream->link;
if (link->local_sink && link->local_sink->sink_signal == SIGNAL_TYPE_EDP) { if (link->local_sink && link->local_sink->sink_signal == SIGNAL_TYPE_EDP) {
link->dc->hwss.edp_backlight_control(link, false); link->dc->hwss.edp_backlight_control(link, false);
...@@ -1408,7 +1405,7 @@ static enum dc_status apply_single_controller_ctx_to_hw( ...@@ -1408,7 +1405,7 @@ static enum dc_status apply_single_controller_ctx_to_hw(
pipe_ctx->plane_res.scl_data.lb_params.alpha_en = pipe_ctx->bottom_pipe != 0; pipe_ctx->plane_res.scl_data.lb_params.alpha_en = pipe_ctx->bottom_pipe != 0;
pipe_ctx->stream->sink->link->psr_enabled = false; pipe_ctx->stream->link->psr_enabled = false;
return DC_OK; return DC_OK;
} }
...@@ -1813,18 +1810,15 @@ static bool should_enable_fbc(struct dc *dc, ...@@ -1813,18 +1810,15 @@ static bool should_enable_fbc(struct dc *dc,
if (i == dc->res_pool->pipe_count) if (i == dc->res_pool->pipe_count)
return false; return false;
if (!pipe_ctx->stream->sink) if (!pipe_ctx->stream->link)
return false;
if (!pipe_ctx->stream->sink->link)
return false; return false;
/* Only supports eDP */ /* Only supports eDP */
if (pipe_ctx->stream->sink->link->connector_signal != SIGNAL_TYPE_EDP) if (pipe_ctx->stream->link->connector_signal != SIGNAL_TYPE_EDP)
return false; return false;
/* PSR should not be enabled */ /* PSR should not be enabled */
if (pipe_ctx->stream->sink->link->psr_enabled) if (pipe_ctx->stream->link->psr_enabled)
return false; return false;
/* Nothing to compress */ /* Nothing to compress */
......
...@@ -780,7 +780,7 @@ static void get_pixel_clock_parameters( ...@@ -780,7 +780,7 @@ static void get_pixel_clock_parameters(
* in pll_adjust_pix_clk * in pll_adjust_pix_clk
*/ */
pixel_clk_params->requested_pix_clk = stream->timing.pix_clk_khz; pixel_clk_params->requested_pix_clk = stream->timing.pix_clk_khz;
pixel_clk_params->encoder_object_id = stream->sink->link->link_enc->id; pixel_clk_params->encoder_object_id = stream->link->link_enc->id;
pixel_clk_params->signal_type = pipe_ctx->stream->signal; pixel_clk_params->signal_type = pipe_ctx->stream->signal;
pixel_clk_params->controller_id = pipe_ctx->stream_res.tg->inst + 1; pixel_clk_params->controller_id = pipe_ctx->stream_res.tg->inst + 1;
/* TODO: un-hardcode*/ /* TODO: un-hardcode*/
......
...@@ -763,7 +763,7 @@ static struct clock_source *find_matching_pll( ...@@ -763,7 +763,7 @@ static struct clock_source *find_matching_pll(
const struct resource_pool *pool, const struct resource_pool *pool,
const struct dc_stream_state *const stream) const struct dc_stream_state *const stream)
{ {
switch (stream->sink->link->link_enc->transmitter) { switch (stream->link->link_enc->transmitter) {
case TRANSMITTER_UNIPHY_A: case TRANSMITTER_UNIPHY_A:
return pool->clock_sources[DCE112_CLK_SRC_PLL0]; return pool->clock_sources[DCE112_CLK_SRC_PLL0];
case TRANSMITTER_UNIPHY_B: case TRANSMITTER_UNIPHY_B:
......
...@@ -2524,7 +2524,7 @@ static void dcn10_config_stereo_parameters( ...@@ -2524,7 +2524,7 @@ static void dcn10_config_stereo_parameters(
timing_3d_format == TIMING_3D_FORMAT_DP_HDMI_INBAND_FA || timing_3d_format == TIMING_3D_FORMAT_DP_HDMI_INBAND_FA ||
timing_3d_format == TIMING_3D_FORMAT_SIDEBAND_FA) { timing_3d_format == TIMING_3D_FORMAT_SIDEBAND_FA) {
enum display_dongle_type dongle = \ enum display_dongle_type dongle = \
stream->sink->link->ddc->dongle_type; stream->link->ddc->dongle_type;
if (dongle == DISPLAY_DONGLE_DP_VGA_CONVERTER || if (dongle == DISPLAY_DONGLE_DP_VGA_CONVERTER ||
dongle == DISPLAY_DONGLE_DP_DVI_CONVERTER || dongle == DISPLAY_DONGLE_DP_DVI_CONVERTER ||
dongle == DISPLAY_DONGLE_DP_HDMI_CONVERTER) dongle == DISPLAY_DONGLE_DP_HDMI_CONVERTER)
......
...@@ -738,7 +738,7 @@ bool dcn10_link_encoder_validate_output_with_stream( ...@@ -738,7 +738,7 @@ bool dcn10_link_encoder_validate_output_with_stream(
case SIGNAL_TYPE_DVI_DUAL_LINK: case SIGNAL_TYPE_DVI_DUAL_LINK:
is_valid = dcn10_link_encoder_validate_dvi_output( is_valid = dcn10_link_encoder_validate_dvi_output(
enc10, enc10,
stream->sink->link->connector_signal, stream->link->connector_signal,
stream->signal, stream->signal,
&stream->timing); &stream->timing);
break; break;
......
...@@ -975,7 +975,7 @@ static void get_pixel_clock_parameters( ...@@ -975,7 +975,7 @@ static void get_pixel_clock_parameters(
{ {
const struct dc_stream_state *stream = pipe_ctx->stream; const struct dc_stream_state *stream = pipe_ctx->stream;
pixel_clk_params->requested_pix_clk = stream->timing.pix_clk_khz; pixel_clk_params->requested_pix_clk = stream->timing.pix_clk_khz;
pixel_clk_params->encoder_object_id = stream->sink->link->link_enc->id; pixel_clk_params->encoder_object_id = stream->link->link_enc->id;
pixel_clk_params->signal_type = pipe_ctx->stream->signal; pixel_clk_params->signal_type = pipe_ctx->stream->signal;
pixel_clk_params->controller_id = pipe_ctx->stream_res.tg->inst + 1; pixel_clk_params->controller_id = pipe_ctx->stream_res.tg->inst + 1;
/* TODO: un-hardcode*/ /* TODO: un-hardcode*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment