summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_vdsc.c
diff options
context:
space:
mode:
authorManasi Navare <manasi.d.navare@intel.com>2018-11-28 12:26:21 -0800
committerManasi Navare <manasi.d.navare@intel.com>2018-11-29 12:30:23 -0800
commit5b1ea77228f913df20a445512bd57ea481905d4e (patch)
treeae0ab8cf2e7c30a2667d45d3038f308c9dd3f6a1 /drivers/gpu/drm/i915/intel_vdsc.c
parent4c614831d59bb3dfb3b5516c8dafee0363e4bdf0 (diff)
downloadlinux-stable-5b1ea77228f913df20a445512bd57ea481905d4e.tar.gz
linux-stable-5b1ea77228f913df20a445512bd57ea481905d4e.tar.bz2
linux-stable-5b1ea77228f913df20a445512bd57ea481905d4e.zip
drm/i915/dp: Populate DSC PPS SDP and send PPS infoframes
DSC PPS secondary data packet infoframes are filled with DSC picure parameter set metadata according to the DSC standard. These infoframes are sent to the sink device and used during DSC decoding. v3: * Rename to intel_dp_write_pps_sdp (Ville) * Use const intel_crtc_state (Ville) v2: * Rebase ond drm-tip Cc: Jani Nikula <jani.nikula@linux.intel.com> Cc: Ville Syrjala <ville.syrjala@linux.intel.com> Cc: Anusha Srivatsa <anusha.srivatsa@intel.com> Signed-off-by: Manasi Navare <manasi.d.navare@intel.com> Reviewed-by: Anusha Srivatsa <anusha.srivatsa@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181128202628.20238-10-manasi.d.navare@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/intel_vdsc.c')
-rw-r--r--drivers/gpu/drm/i915/intel_vdsc.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_vdsc.c b/drivers/gpu/drm/i915/intel_vdsc.c
index 9676945a85bb..0b31eac46988 100644
--- a/drivers/gpu/drm/i915/intel_vdsc.c
+++ b/drivers/gpu/drm/i915/intel_vdsc.c
@@ -978,6 +978,25 @@ static void intel_configure_pps_for_dsc_encoder(struct intel_encoder *encoder,
}
}
+static void intel_dp_write_dsc_pps_sdp(struct intel_encoder *encoder,
+ const struct intel_crtc_state *crtc_state)
+{
+ struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ const struct drm_dsc_config *vdsc_cfg = &crtc_state->dp_dsc_cfg;
+ struct drm_dsc_pps_infoframe dp_dsc_pps_sdp;
+
+ /* Prepare DP SDP PPS header as per DP 1.4 spec, Table 2-123 */
+ drm_dsc_dp_pps_header_init(&dp_dsc_pps_sdp);
+
+ /* Fill the PPS payload bytes as per DSC spec 1.2 Table 4-1 */
+ drm_dsc_pps_infoframe_pack(&dp_dsc_pps_sdp, vdsc_cfg);
+
+ intel_dig_port->write_infoframe(encoder, crtc_state,
+ DP_SDP_PPS, &dp_dsc_pps_sdp,
+ sizeof(dp_dsc_pps_sdp));
+}
+
void intel_dsc_enable(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state)
{
@@ -985,4 +1004,6 @@ void intel_dsc_enable(struct intel_encoder *encoder,
return;
intel_configure_pps_for_dsc_encoder(encoder, crtc_state);
+
+ intel_dp_write_dsc_pps_sdp(encoder, crtc_state);
}