drm/amd/display: add addition dc type to translate to dmub fw type
authorAnthony Koo <Anthony.Koo@amd.com>
Wed, 22 Apr 2020 02:01:30 +0000 (22:01 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 5 May 2020 17:11:49 +0000 (13:11 -0400)
[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: Anthony Koo <Anthony.Koo@amd.com>
Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/dc/core/dc_link.c
drivers/gpu/drm/amd/display/dc/dc_link.h
drivers/gpu/drm/amd/display/dc/dc_types.h
drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c
drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c

index c332e858ea4a2c44c6d3e15d1cc2fcc57364c1d3..a351a3f08fc4c2d4c76252b6b89db48176dbb596 100644 (file)
@@ -6872,7 +6872,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
                                                     dc_state);
 
                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)
                        amdgpu_dm_link_setup_psr(acrtc_state->stream);
                else if ((acrtc_state->update_type == UPDATE_TYPE_FAST) &&
@@ -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];
 
                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;
                } 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;
                }
 
index f895412538c0fa2c6a0e7530abb035e23b1f1bc0..6ed67e6e8739efe477530adef12c17ab8ff2de59 100644 (file)
@@ -1552,7 +1552,7 @@ static bool dc_link_construct(struct dc_link *link,
         */
        program_hpd_filter(link);
 
-       link->psr_settings.psr_version = PSR_VERSION_UNSUPPORTED;
+       link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
 
        return true;
 device_tag_fail:
index eb5d910bffb6bdfbc2e8e806ba54768d45efb97f..859d254c0e3f6eef9982c4a5dc1974a1341cc96f 100644 (file)
@@ -72,7 +72,7 @@ struct link_trace {
 struct psr_settings {
        bool psr_feature_enabled;               // PSR is supported by sink
        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,
         * based on display timing and Sink capabilities.
index 0d210104ba0a10bf66cabd196b0e305dbf4c2e18..f236da1c1859e0c4229cda26bd897ac73116e9c2 100644 (file)
@@ -862,4 +862,9 @@ struct dsc_dec_dpcd_caps {
        uint32_t branch_max_line_width;
 };
 
+enum dc_psr_version {
+       DC_PSR_VERSION_1                        = 0,
+       DC_PSR_VERSION_UNSUPPORTED              = 0xFFFFFFFF,
+};
+
 #endif /* DC_TYPES_H_ */
index 9f12c76f21ab1b454d118e35db4d40aed809c7ff..3c6606e0532d9522d30f81ff897fa7426b0f9750 100644 (file)
@@ -94,12 +94,20 @@ static bool dmub_psr_set_version(struct dmub_psr *dmub, struct dc_stream_state *
        union dmub_rb_cmd cmd;
        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;
 
        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.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);
 
        dc_dmub_srv_cmd_queue(dc->dmub_srv, &cmd);
index 22a5484d9f28b7d1166422937223ff66433567da..20c30daa374cd68e89b5c500da8beaa753154ab4 100644 (file)
@@ -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*/
-       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;
 
        /* Update to revision 5 for extended colorimetry support */