psr_settings
if (acrtc_state->stream->link->psr_settings.psr_feature_enabled ||
acrtc_state->stream->link->psr_settings.psr_version ==
if (acrtc_state->stream->link->psr_settings.psr_version >= DC_PSR_VERSION_SU_1 &&
acrtc_state->stream->link->psr_settings.psr_dirty_rects_change_timestamp_ns =
if (acrtc_state->stream->link->psr_settings.psr_allow_active)
if (acrtc_state->stream->link->psr_settings.psr_allow_active)
link->psr_settings.psr_feature_enabled = false;
link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
link->psr_settings.psr_feature_enabled,
link->psr_settings.psr_version,
bool psr_en = acrtc->dm_irq_params.stream->link->psr_settings.psr_feature_enabled;
bool psr_en = acrtc->dm_irq_params.stream->link->psr_settings.psr_feature_enabled;
if (acrtc_state->stream->link->psr_settings.psr_version <
struct psr_settings *psr = &acrtc_state->stream->link->psr_settings;
if (stream_state->link->psr_settings.psr_version < DC_PSR_VERSION_SU_1)
link->psr_settings.psr_allow_active);
if (link->psr_settings.psr_version < DC_PSR_VERSION_SU_1 && is_sr_active)
} else if (link->psr_settings.psr_feature_enabled && !vrr_active &&
struct psr_settings *psr = &acrtc_state->stream->link->psr_settings;
seq_printf(m, "Driver support: %s", str_yes_no(link->psr_settings.psr_feature_enabled));
if (link->psr_settings.psr_version)
seq_printf(m, " [0x%02x]", link->psr_settings.psr_version);
if (link->psr_settings.psr_version != DC_PSR_VERSION_UNSUPPORTED) {
if (link->psr_settings.psr_version == DC_PSR_VERSION_SU_1) {
DRM_DEBUG_DRIVER("PSR link: %d\n", link->psr_settings.psr_feature_enabled);
if (link->psr_settings.psr_version < DC_PSR_VERSION_SU_1)
if (link->psr_settings.psr_feature_enabled &&
link->psr_settings.psr_allow_active) {
link->psr_settings.psr_feature_enabled = false;
link->psr_settings.psr_feature_enabled = false;
link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
link->psr_settings.psr_feature_enabled = false;
link->psr_settings.psr_version = DC_PSR_VERSION_SU_1;
link->psr_settings.psr_version = DC_PSR_VERSION_1;
link->psr_settings.psr_feature_enabled = true;
link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
link->psr_settings.psr_feature_enabled = false;
if (!edp_link->psr_settings.psr_feature_enabled)
clk_mgr->psr_allow_active_cache = edp_link->psr_settings.psr_allow_active;
if (!edp_link->psr_settings.psr_feature_enabled)
link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
if ((stream->link->psr_settings.psr_version == DC_PSR_VERSION_SU_1
|| stream->link->psr_settings.psr_version == DC_PSR_VERSION_1)
if (link->psr_settings.psr_feature_enabled) {
if (enable && !link->psr_settings.psr_allow_active) {
} else if (!enable && link->psr_settings.psr_allow_active) {
if (link->psr_settings.psr_feature_enabled)
struct psr_settings psr_settings;
if ((pipe_ctx->stream->link->psr_settings.psr_version == DC_PSR_VERSION_SU_1 ||
pipe_ctx->stream->link->psr_settings.psr_version == DC_PSR_VERSION_1) &&
if (link->psr_settings.psr_version == DC_PSR_VERSION_SU_1)
if (link->psr_settings.psr_version == DC_PSR_VERSION_1) {
if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED)
switch (stream->link->psr_settings.psr_version) {
link->psr_settings.force_ffu_mode = 1;
copy_settings_data->force_ffu_mode = link->psr_settings.force_ffu_mode || psr_context->os_request_force_ffu;
if (link->psr_settings.psr_version == DC_PSR_VERSION_1 &&
link->psr_settings.power_down_phy_before_disable_stream;
bool is_psr = (link && (link->psr_settings.psr_version == DC_PSR_VERSION_1 ||
link->psr_settings.psr_version == DC_PSR_VERSION_SU_1) && !link->panel_config.psr.disable_psr);
if (context->res_ctx.pipe_ctx[i].stream->link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED) {
bool is_psr = (link && (link->psr_settings.psr_version == DC_PSR_VERSION_1 ||
link->psr_settings.psr_version == DC_PSR_VERSION_SU_1) && !link->panel_config.psr.disable_psr);
bool is_psr = (link && (link->psr_settings.psr_version == DC_PSR_VERSION_1 ||
link->psr_settings.psr_version == DC_PSR_VERSION_SU_1) && !link->panel_config.psr.disable_psr);
if (param->stream->link->psr_settings.psr_version >= DC_PSR_VERSION_SU_1 &&
pipe_ctx->stream->link->psr_settings.psr_feature_enabled = false;
if (pipe_ctx->stream->link->psr_settings.psr_feature_enabled)
if (pipe_ctx->stream->link->psr_settings.psr_feature_enabled)
stream->link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED &&
(dc->current_state->streams[i]->link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED))
dc->current_state->streams[i]->link->psr_settings.psr_version != DC_PSR_VERSION_UNSUPPORTED &&
pipe->stream->link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED &&
(link->psr_settings.psr_version == DC_PSR_VERSION_1 ||
link->psr_settings.psr_version == DC_PSR_VERSION_SU_1);
(dc->current_state->streams[i]->link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED))
dc->current_state->streams[i]->link->psr_settings.psr_version != DC_PSR_VERSION_UNSUPPORTED) {
pipe->stream->link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED &&
link->psr_settings.psr_vtotal_control_support = false;
link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
if (!link->psr_settings.psr_feature_enabled)
if (link->psr_settings.psr_allow_active) {
if (link->psr_settings.psr_version == DC_PSR_VERSION_SU_1) {
if (power_opts && link->psr_settings.psr_power_opt != *power_opts) {
link->psr_settings.psr_power_opt = *power_opts;
if (psr != NULL && link->psr_settings.psr_feature_enabled && psr->funcs->psr_set_power_opt)
psr->funcs->psr_set_power_opt(psr, link->psr_settings.psr_power_opt, panel_inst);
if (psr != NULL && link->psr_settings.psr_feature_enabled &&
if (allow_active && link->psr_settings.psr_allow_active != *allow_active) {
link->psr_settings.psr_allow_active = *allow_active;
if (!link->psr_settings.psr_allow_active)
if (psr != NULL && link->psr_settings.psr_feature_enabled) {
psr->funcs->psr_enable(psr, link->psr_settings.psr_allow_active, wait, panel_inst);
link->psr_settings.psr_feature_enabled)
dmcu->funcs->set_psr_enable(dmcu, link->psr_settings.psr_allow_active, wait);
if (psr != NULL && link->psr_settings.psr_feature_enabled)
else if (dmcu != NULL && link->psr_settings.psr_feature_enabled)
if (link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED)
if (link->psr_settings.psr_version == DC_PSR_VERSION_SU_1) {
if (link->psr_settings.psr_version == DC_PSR_VERSION_SU_1) {
if (link->psr_settings.psr_vtotal_control_support) {
link->psr_settings.psr_feature_enabled = psr->funcs->psr_copy_settings(psr,
link->psr_settings.psr_power_opt = 0;
link->psr_settings.psr_allow_active = 0;
link->psr_settings.psr_feature_enabled = dmcu->funcs->setup_psr(dmcu, link, psr_context);
if (link->psr_settings.psr_feature_enabled == 0)
if (psr != NULL && link->psr_settings.psr_feature_enabled)
if (psr == NULL || !link->psr_settings.psr_feature_enabled || !link->psr_settings.psr_vtotal_control_support)
if (pipe->stream && pipe->stream->link->psr_settings.psr_version != DC_PSR_VERSION_UNSUPPORTED) {
if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_SU_1)
else if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_1)
link->psr_settings.psr_frame_capture_indication_req = true;
link->psr_settings.psr_sdp_transmit_line_num_deadline = num_vblank_lines;
link->psr_settings.psr_frame_capture_indication_req = false;
link->psr_settings.psr_sdp_transmit_line_num_deadline = sdp_tx_deadline_in_us / line_time_in_us;
psr_config->psr_sdp_transmit_line_num_deadline = link->psr_settings.psr_sdp_transmit_line_num_deadline;
psr_config->psr_frame_capture_indication_req = link->psr_settings.psr_frame_capture_indication_req;