Commit 631aaa0a authored by Hersen Wu's avatar Hersen Wu Committed by Alex Deucher

drm/amd/display: send display_count msg so SMU can enter S0i2

SMU can future lower voltages in long idle case when all display is off.

If all display output is turned off via DPMS, send display_count = 0
after all output are turned off.

otherwise send display_count msg before turning on display to make sure
SMU exit S0i2 state.  before is not neccessary as we are out of S0i2
when driver execute code, but send message before anyways for correctness.
Signed-off-by: default avatarHersen Wu <hersenxs.wu@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 0af4096d
...@@ -389,11 +389,19 @@ void set_dpms( ...@@ -389,11 +389,19 @@ void set_dpms(
if (stream->dpms_off != dpms_off) { if (stream->dpms_off != dpms_off) {
stream->dpms_off = dpms_off; stream->dpms_off = dpms_off;
if (dpms_off)
if (dpms_off) {
core_link_disable_stream(pipe_ctx, core_link_disable_stream(pipe_ctx,
KEEP_ACQUIRED_RESOURCE); KEEP_ACQUIRED_RESOURCE);
else
dc->hwss.pplib_apply_display_requirements(
dc, dc->current_state);
} else {
dc->hwss.pplib_apply_display_requirements(
dc, dc->current_state);
core_link_enable_stream(dc->current_state, pipe_ctx); core_link_enable_stream(dc->current_state, pipe_ctx);
}
} }
} }
......
...@@ -148,5 +148,7 @@ void dce100_hw_sequencer_construct(struct dc *dc) ...@@ -148,5 +148,7 @@ void dce100_hw_sequencer_construct(struct dc *dc)
dc->hwss.enable_display_power_gating = dce100_enable_display_power_gating; dc->hwss.enable_display_power_gating = dce100_enable_display_power_gating;
dc->hwss.set_bandwidth = dce100_set_bandwidth; dc->hwss.set_bandwidth = dce100_set_bandwidth;
dc->hwss.pplib_apply_display_requirements =
dce100_pplib_apply_display_requirements;
} }
...@@ -2595,6 +2595,10 @@ void dce110_fill_display_configs( ...@@ -2595,6 +2595,10 @@ void dce110_fill_display_configs(
ASSERT(pipe_ctx != NULL); ASSERT(pipe_ctx != NULL);
/* only notify active stream */
if (stream->dpms_off)
continue;
num_cfgs++; num_cfgs++;
cfg->signal = pipe_ctx->stream->signal; cfg->signal = pipe_ctx->stream->signal;
cfg->pipe_idx = pipe_ctx->pipe_idx; cfg->pipe_idx = pipe_ctx->pipe_idx;
...@@ -3024,6 +3028,7 @@ static const struct hw_sequencer_funcs dce110_funcs = { ...@@ -3024,6 +3028,7 @@ static const struct hw_sequencer_funcs dce110_funcs = {
.wait_for_mpcc_disconnect = dce110_wait_for_mpcc_disconnect, .wait_for_mpcc_disconnect = dce110_wait_for_mpcc_disconnect,
.ready_shared_resources = ready_shared_resources, .ready_shared_resources = ready_shared_resources,
.optimize_shared_resources = optimize_shared_resources, .optimize_shared_resources = optimize_shared_resources,
.pplib_apply_display_requirements = pplib_apply_display_requirements,
.edp_backlight_control = hwss_edp_backlight_control, .edp_backlight_control = hwss_edp_backlight_control,
.edp_power_control = hwss_edp_power_control, .edp_power_control = hwss_edp_power_control,
}; };
......
...@@ -2567,6 +2567,8 @@ static const struct hw_sequencer_funcs dcn10_funcs = { ...@@ -2567,6 +2567,8 @@ static const struct hw_sequencer_funcs dcn10_funcs = {
.wait_for_mpcc_disconnect = dcn10_wait_for_mpcc_disconnect, .wait_for_mpcc_disconnect = dcn10_wait_for_mpcc_disconnect,
.ready_shared_resources = ready_shared_resources, .ready_shared_resources = ready_shared_resources,
.optimize_shared_resources = optimize_shared_resources, .optimize_shared_resources = optimize_shared_resources,
.pplib_apply_display_requirements =
dcn10_pplib_apply_display_requirements,
.edp_backlight_control = hwss_edp_backlight_control, .edp_backlight_control = hwss_edp_backlight_control,
.edp_power_control = hwss_edp_power_control .edp_power_control = hwss_edp_power_control
}; };
......
...@@ -183,12 +183,16 @@ struct hw_sequencer_funcs { ...@@ -183,12 +183,16 @@ struct hw_sequencer_funcs {
void (*ready_shared_resources)(struct dc *dc, struct dc_state *context); void (*ready_shared_resources)(struct dc *dc, struct dc_state *context);
void (*optimize_shared_resources)(struct dc *dc); void (*optimize_shared_resources)(struct dc *dc);
void (*pplib_apply_display_requirements)(
struct dc *dc,
struct dc_state *context);
void (*edp_power_control)( void (*edp_power_control)(
struct dc_link *link, struct dc_link *link,
bool enable); bool enable);
void (*edp_backlight_control)( void (*edp_backlight_control)(
struct dc_link *link, struct dc_link *link,
bool enable); bool enable);
}; };
void color_space_to_black_color( void color_space_to_black_color(
......
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