From: Thierry Reding <tred...@nvidia.com>

The SOR found on Tegra SoCs does not support all the rates potentially
advertised by eDP 1.4. Make sure that the rates that are not supported
are filtered out.

Signed-off-by: Thierry Reding <tred...@nvidia.com>
---
 drivers/gpu/drm/tegra/sor.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
index 2023244ad328..9e6a1ab7ef65 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -605,6 +605,30 @@ static struct clk *tegra_clk_sor_pad_register(struct 
tegra_sor *sor,
        return clk;
 }
 
+static void tegra_sor_filter_rates(struct tegra_sor *sor)
+{
+       struct drm_dp_link *link = &sor->link;
+       unsigned int i;
+
+       /* Tegra only supports RBR, HBR and HBR2 */
+       for (i = 0; i < link->num_rates; i++) {
+               switch (link->rates[i]) {
+               case 1620000:
+               case 2700000:
+               case 5400000:
+                       break;
+
+               default:
+                       DRM_DEBUG_KMS("link rate %lu kHz not supported\n",
+                                     link->rates[i]);
+                       link->rates[i] = 0;
+                       break;
+               }
+       }
+
+       drm_dp_link_update_rates(link);
+}
+
 static int tegra_sor_power_up_lanes(struct tegra_sor *sor, unsigned int lanes)
 {
        unsigned long timeout;
@@ -1897,6 +1921,8 @@ static void tegra_sor_edp_enable(struct drm_encoder 
*encoder)
        if (err < 0)
                dev_err(sor->dev, "failed to probe eDP link: %d\n", err);
 
+       tegra_sor_filter_rates(sor);
+
        err = drm_dp_link_choose(&sor->link, mode, info);
        if (err < 0)
                dev_err(sor->dev, "failed to choose link: %d\n", err);
-- 
2.23.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to