cust_pattern_size);
 }
 
+uint32_t dc_link_bandwidth_kbps(
+       const struct dc_link *link,
+       const struct dc_link_settings *link_setting)
+{
+       uint32_t link_bw_kbps = link_setting->link_rate * LINK_RATE_REF_FREQ_IN_KHZ; /* bytes per sec */
+
+       link_bw_kbps *= 8;   /* 8 bits per byte*/
+       link_bw_kbps *= link_setting->lane_count;
+
+       return link_bw_kbps;
+
+}
+
 static void destruct(struct dc *dc)
 {
        dc_release_state(dc->current_state);
 
  ******************************************************************************/
 
 enum {
-       LINK_RATE_REF_FREQ_IN_MHZ = 27,
        PEAK_FACTOR_X1000 = 1006,
        /*
        * Some receivers fail to train on first try and are good
 
 static struct fixed31_32 get_pbn_per_slot(struct dc_stream_state *stream)
 {
-       struct dc_link_settings *link_settings =
-                       &stream->link->cur_link_settings;
-       uint32_t link_rate_in_mbps =
-                       link_settings->link_rate * LINK_RATE_REF_FREQ_IN_MHZ;
-       struct fixed31_32 mbps = dc_fixpt_from_int(
-                       link_rate_in_mbps * link_settings->lane_count);
-
-       return dc_fixpt_div_int(mbps, 54);
+       struct fixed31_32 mbytes_per_sec;
+       uint32_t link_rate_in_mbytes_per_sec = dc_link_bandwidth_kbps(stream->link, &stream->link->cur_link_settings);
+       link_rate_in_mbytes_per_sec /= 8000; /* Kbits to MBytes */
+
+       mbytes_per_sec = dc_fixpt_from_int(link_rate_in_mbytes_per_sec);
+
+       return dc_fixpt_div_int(mbytes_per_sec, 54);
 }
 
 static int get_color_depth(enum dc_color_depth color_depth)
 
        return true;
 }
 
-static uint32_t bandwidth_in_kbps_from_link_settings(
-       const struct dc_link_settings *link_setting)
-{
-       uint32_t link_rate_in_kbps = link_setting->link_rate *
-               LINK_RATE_REF_FREQ_IN_KHZ;
-
-       uint32_t lane_count  = link_setting->lane_count;
-       uint32_t kbps = link_rate_in_kbps;
-
-       kbps *= lane_count;
-       kbps *= 8;   /* 8 bits per byte*/
-
-       return kbps;
-
-}
-
 bool dp_validate_mode_timing(
        struct dc_link *link,
        const struct dc_crtc_timing *timing)
        */
 
        req_bw = dc_bandwidth_in_kbps_from_timing(timing);
-       max_bw = bandwidth_in_kbps_from_link_settings(link_setting);
+       max_bw = dc_link_bandwidth_kbps(link, link_setting);
 
        if (req_bw <= max_bw) {
                /* remember the biggest mode here, during
         */
        while (current_link_setting.link_rate <=
                        link->verified_link_cap.link_rate) {
-               link_bw = bandwidth_in_kbps_from_link_settings(
+               link_bw = dc_link_bandwidth_kbps(
+                               link,
                                ¤t_link_setting);
                if (req_bw <= link_bw) {
                        *link_setting = current_link_setting;
         */
        while (current_link_setting.link_rate <=
                        link->verified_link_cap.link_rate) {
-               link_bw = bandwidth_in_kbps_from_link_settings(
+               link_bw = dc_link_bandwidth_kbps(
+                               link,
                                ¤t_link_setting);
                if (req_bw <= link_bw) {
                        *link_setting = current_link_setting;
 
                        const struct link_training_settings *p_link_settings,
                        const unsigned char *p_custom_pattern,
                        unsigned int cust_pattern_size);
+uint32_t dc_link_bandwidth_kbps(
+       const struct dc_link *link,
+       const struct dc_link_settings *link_setting);
 
 bool dc_submit_i2c(
                struct dc *dc,