}
 
 static int
-intel_read_sink_rates(struct intel_dp *intel_dp, int *sink_rates)
+intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
 {
-       struct drm_device *dev = intel_dp_to_dev(intel_dp);
-
-       if (INTEL_INFO(dev)->gen >= 9 && intel_dp->supported_rates[0]) {
-               /*
-                * Receiver supports only main-link rate selection by
-                * link rate table method, so read link rates from
-                * supported_link_rates
-                */
-               memcpy(sink_rates, intel_dp->supported_rates,
-                      sizeof(intel_dp->supported_rates));
-
+       if (intel_dp->num_supported_rates) {
+               *sink_rates = intel_dp->supported_rates;
                return intel_dp->num_supported_rates;
        }
-       return 0;
+
+       *sink_rates = default_rates;
+
+       return (intel_dp_max_link_bw(intel_dp) >> 3) + 1;
 }
 
 static int
        int max_clock;
        int bpp, mode_rate;
        int link_avail, link_clock;
-       int sink_rates[8];
+       const int *sink_rates;
        int supported_rates[8] = {0};
        const int *source_rates;
        int source_len, sink_len, supported_len;
 
-       sink_len = intel_read_sink_rates(intel_dp, sink_rates);
+       sink_len = intel_dp_sink_rates(intel_dp, &sink_rates);
 
        source_len = intel_dp_source_rates(intel_dp, &source_rates);