The bw code equals link_rate / 0.27 Gbps only for 8b/10b link
rates. Handle DP 2.0 UHBR rates as special cases, though this is not
pretty.

Cc: dri-de...@lists.freedesktop.org
Signed-off-by: Jani Nikula <jani.nik...@intel.com>
---
 drivers/gpu/drm/drm_dp_helper.c | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index 6d0f2c447f3b..9b2a2961fca8 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -207,15 +207,33 @@ EXPORT_SYMBOL(drm_dp_lttpr_link_train_channel_eq_delay);
 
 u8 drm_dp_link_rate_to_bw_code(int link_rate)
 {
-       /* Spec says link_bw = link_rate / 0.27Gbps */
-       return link_rate / 27000;
+       switch (link_rate) {
+       case 1000000:
+               return DP_LINK_BW_10;
+       case 1350000:
+               return DP_LINK_BW_13_5;
+       case 2000000:
+               return DP_LINK_BW_20;
+       default:
+               /* Spec says link_bw = link_rate / 0.27Gbps */
+               return link_rate / 27000;
+       }
 }
 EXPORT_SYMBOL(drm_dp_link_rate_to_bw_code);
 
 int drm_dp_bw_code_to_link_rate(u8 link_bw)
 {
-       /* Spec says link_rate = link_bw * 0.27Gbps */
-       return link_bw * 27000;
+       switch (link_bw) {
+       case DP_LINK_BW_10:
+               return 1000000;
+       case DP_LINK_BW_13_5:
+               return 1350000;
+       case DP_LINK_BW_20:
+               return 2000000;
+       default:
+               /* Spec says link_rate = link_bw * 0.27Gbps */
+               return link_bw * 27000;
+       }
 }
 EXPORT_SYMBOL(drm_dp_bw_code_to_link_rate);
 
-- 
2.30.2

Reply via email to