drm/amd/display: Move link functions from dc to dc_link
authorChris Park <Chris.Park@amd.com>
Fri, 10 May 2019 17:34:30 +0000 (13:34 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Sat, 22 Jun 2019 14:34:07 +0000 (09:34 -0500)
[Why]
link-specific functions should reside in dc_link.c

[How]
Move them there.

Signed-off-by: Chris Park <Chris.Park@amd.com>
Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
Acked-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link.c

index 1af06637fdda10ce5c29c2e37f8e3d555da1fe40..2a9f4661540c7e1a944c583473e34e18f6449b44 100644 (file)
@@ -3053,6 +3053,33 @@ uint32_t dc_link_bandwidth_kbps(
        link_bw_kbps *= 8;   /* 8 bits per byte*/
        link_bw_kbps *= link_setting->lane_count;
 
+#ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
+       if (link->dpcd_caps.fec_cap.bits.FEC_CAPABLE) {
+               /* Account for FEC overhead.
+                * We have to do it based on caps,
+                * and not based on FEC being set ready,
+                * because FEC is set ready too late in
+                * the process to correctly be picked up
+                * by mode enumeration.
+                *
+                * There's enough zeros at the end of 'kbps'
+                * that make the below operation 100% precise
+                * for our purposes.
+                * 'long long' makes it work even for HDMI 2.1
+                * max bandwidth (and much, much bigger bandwidths
+                * than that, actually).
+                *
+                * NOTE: Reducing link BW by 3% may not be precise
+                * because it may be a stream BT that increases by 3%, and so
+                * 1/1.03 = 0.970873 factor should have been used instead,
+                * but the difference is minimal and is in a safe direction,
+                * which all works well around potential ambiguity of DP 1.4a spec.
+                */
+               long long fec_link_bw_kbps = link_bw_kbps * 970LL;
+               link_bw_kbps = (uint32_t)(fec_link_bw_kbps / 1000LL);
+       }
+#endif
+
        return link_bw_kbps;
 
 }