mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-08 04:32:20 -04:00
drm/amd/display: Add new IPS config mode
[Why] We don't have a way to specify IPS2 for display off but RCG only for static screen and local video playback. [How] Add a new setting that allows RCG only when displays are active but IPS2 when all displays are off. Reviewed-by: Ovidiu Bunea <ovidiu.bunea@amd.com> Acked-by: Tom Chung <chiahsuan.chung@amd.com> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
a13ad81951
commit
54935663d3
@@ -1201,6 +1201,20 @@ bool dc_dmub_srv_is_hw_pwr_up(struct dc_dmub_srv *dc_dmub_srv, bool wait)
|
||||
return true;
|
||||
}
|
||||
|
||||
static int count_active_streams(const struct dc *dc)
|
||||
{
|
||||
int i, count = 0;
|
||||
|
||||
for (i = 0; i < dc->current_state->stream_count; ++i) {
|
||||
struct dc_stream_state *stream = dc->current_state->streams[i];
|
||||
|
||||
if (stream && !stream->dpms_off)
|
||||
count += 1;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static void dc_dmub_srv_notify_idle(const struct dc *dc, bool allow_idle)
|
||||
{
|
||||
volatile const struct dmub_shared_state_ips_fw *ips_fw;
|
||||
@@ -1255,6 +1269,21 @@ static void dc_dmub_srv_notify_idle(const struct dc *dc, bool allow_idle)
|
||||
new_signals.bits.allow_pg = 1;
|
||||
new_signals.bits.allow_ips1 = 1;
|
||||
new_signals.bits.allow_ips2 = 1;
|
||||
} else if (dc->config.disable_ips == DMUB_IPS_RCG_IN_ACTIVE_IPS2_IN_OFF) {
|
||||
/* TODO: Move this logic out to hwseq */
|
||||
if (count_active_streams(dc) == 0) {
|
||||
/* IPS2 - Display off */
|
||||
new_signals.bits.allow_pg = 1;
|
||||
new_signals.bits.allow_ips1 = 1;
|
||||
new_signals.bits.allow_ips2 = 1;
|
||||
new_signals.bits.allow_z10 = 1;
|
||||
} else {
|
||||
/* RCG only */
|
||||
new_signals.bits.allow_pg = 0;
|
||||
new_signals.bits.allow_ips1 = 1;
|
||||
new_signals.bits.allow_ips2 = 0;
|
||||
new_signals.bits.allow_z10 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ips_driver->signals = new_signals;
|
||||
|
||||
@@ -624,6 +624,7 @@ enum dmub_ips_disable_type {
|
||||
DMUB_IPS_DISABLE_IPS2 = 3,
|
||||
DMUB_IPS_DISABLE_IPS2_Z10 = 4,
|
||||
DMUB_IPS_DISABLE_DYNAMIC = 5,
|
||||
DMUB_IPS_RCG_IN_ACTIVE_IPS2_IN_OFF = 6,
|
||||
};
|
||||
|
||||
#define DMUB_IPS1_ALLOW_MASK 0x00000001
|
||||
|
||||
Reference in New Issue
Block a user