Commit 1cfbbdde authored by Anthony Koo's avatar Anthony Koo Committed by Alex Deucher

drm/amd/display: add addition dc type to translate to dmub fw type

[Why]
For a type like PSR version, it makes sense for most of the code
to include a dc type, instead of having this a fw type define since
this is a capability and type exposed by dc.

Especially if it doesn't even need to communicate with the fw.

The code that is packing the firmware command message
should be the one who needs to translate the psr version
into a command that the firmware understands.

[How]
Add a dc_psr_version enum.
Signed-off-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Reviewed-by: default avatarAric Cyr <Aric.Cyr@amd.com>
Acked-by: default avatarAurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 492548dc
...@@ -6872,7 +6872,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, ...@@ -6872,7 +6872,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
dc_state); dc_state);
if ((acrtc_state->update_type > UPDATE_TYPE_FAST) && if ((acrtc_state->update_type > UPDATE_TYPE_FAST) &&
acrtc_state->stream->link->psr_settings.psr_version != PSR_VERSION_UNSUPPORTED && acrtc_state->stream->link->psr_settings.psr_version != DC_PSR_VERSION_UNSUPPORTED &&
!acrtc_state->stream->link->psr_settings.psr_feature_enabled) !acrtc_state->stream->link->psr_settings.psr_feature_enabled)
amdgpu_dm_link_setup_psr(acrtc_state->stream); amdgpu_dm_link_setup_psr(acrtc_state->stream);
else if ((acrtc_state->update_type == UPDATE_TYPE_FAST) && else if ((acrtc_state->update_type == UPDATE_TYPE_FAST) &&
...@@ -8647,10 +8647,10 @@ static void amdgpu_dm_set_psr_caps(struct dc_link *link) ...@@ -8647,10 +8647,10 @@ static void amdgpu_dm_set_psr_caps(struct dc_link *link)
link->dpcd_caps.psr_caps.psr_version = dpcd_data[0]; link->dpcd_caps.psr_caps.psr_version = dpcd_data[0];
if (dpcd_data[0] == 0) { if (dpcd_data[0] == 0) {
link->psr_settings.psr_version = PSR_VERSION_UNSUPPORTED; link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
link->psr_settings.psr_feature_enabled = false; link->psr_settings.psr_feature_enabled = false;
} else { } else {
link->psr_settings.psr_version = PSR_VERSION_1; link->psr_settings.psr_version = DC_PSR_VERSION_1;
link->psr_settings.psr_feature_enabled = true; link->psr_settings.psr_feature_enabled = true;
} }
......
...@@ -1552,7 +1552,7 @@ static bool dc_link_construct(struct dc_link *link, ...@@ -1552,7 +1552,7 @@ static bool dc_link_construct(struct dc_link *link,
*/ */
program_hpd_filter(link); program_hpd_filter(link);
link->psr_settings.psr_version = PSR_VERSION_UNSUPPORTED; link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
return true; return true;
device_tag_fail: device_tag_fail:
......
...@@ -72,7 +72,7 @@ struct link_trace { ...@@ -72,7 +72,7 @@ struct link_trace {
struct psr_settings { struct psr_settings {
bool psr_feature_enabled; // PSR is supported by sink bool psr_feature_enabled; // PSR is supported by sink
bool psr_allow_active; // PSR is currently active bool psr_allow_active; // PSR is currently active
enum psr_version psr_version; // Internal PSR version, determined based on DPCD enum dc_psr_version psr_version; // Internal PSR version, determined based on DPCD
/* These parameters are calculated in Driver, /* These parameters are calculated in Driver,
* based on display timing and Sink capabilities. * based on display timing and Sink capabilities.
......
...@@ -862,4 +862,9 @@ struct dsc_dec_dpcd_caps { ...@@ -862,4 +862,9 @@ struct dsc_dec_dpcd_caps {
uint32_t branch_max_line_width; uint32_t branch_max_line_width;
}; };
enum dc_psr_version {
DC_PSR_VERSION_1 = 0,
DC_PSR_VERSION_UNSUPPORTED = 0xFFFFFFFF,
};
#endif /* DC_TYPES_H_ */ #endif /* DC_TYPES_H_ */
...@@ -94,12 +94,20 @@ static bool dmub_psr_set_version(struct dmub_psr *dmub, struct dc_stream_state * ...@@ -94,12 +94,20 @@ static bool dmub_psr_set_version(struct dmub_psr *dmub, struct dc_stream_state *
union dmub_rb_cmd cmd; union dmub_rb_cmd cmd;
struct dc_context *dc = dmub->ctx; struct dc_context *dc = dmub->ctx;
if (stream->link->psr_settings.psr_version == PSR_VERSION_UNSUPPORTED) if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED)
return false; return false;
cmd.psr_set_version.header.type = DMUB_CMD__PSR; cmd.psr_set_version.header.type = DMUB_CMD__PSR;
cmd.psr_set_version.header.sub_type = DMUB_CMD__PSR_SET_VERSION; cmd.psr_set_version.header.sub_type = DMUB_CMD__PSR_SET_VERSION;
cmd.psr_set_version.psr_set_version_data.version = stream->link->psr_settings.psr_version; switch (stream->link->psr_settings.psr_version) {
case DC_PSR_VERSION_1:
cmd.psr_set_version.psr_set_version_data.version = PSR_VERSION_1;
break;
case DC_PSR_VERSION_UNSUPPORTED:
default:
cmd.psr_set_version.psr_set_version_data.version = PSR_VERSION_UNSUPPORTED;
break;
}
cmd.psr_set_version.header.payload_bytes = sizeof(struct dmub_cmd_psr_set_version_data); cmd.psr_set_version.header.payload_bytes = sizeof(struct dmub_cmd_psr_set_version_data);
dc_dmub_srv_cmd_queue(dc->dmub_srv, &cmd); dc_dmub_srv_cmd_queue(dc->dmub_srv, &cmd);
......
...@@ -145,7 +145,7 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream, ...@@ -145,7 +145,7 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
} }
/*VSC packet set to 2 when DP revision >= 1.2*/ /*VSC packet set to 2 when DP revision >= 1.2*/
if (stream->link->psr_settings.psr_version != PSR_VERSION_UNSUPPORTED) if (stream->link->psr_settings.psr_version != DC_PSR_VERSION_UNSUPPORTED)
vsc_packet_revision = vsc_packet_rev2; vsc_packet_revision = vsc_packet_rev2;
/* Update to revision 5 for extended colorimetry support */ /* Update to revision 5 for extended colorimetry support */
......
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