Received: by 2002:ac0:a874:0:0:0:0:0 with SMTP id c49csp289370ima; Fri, 15 Mar 2019 02:56:47 -0700 (PDT) X-Google-Smtp-Source: APXvYqzKU6NQ5qzBFDgB8SSZK6aTc9WSzsFa2ud98K/TRxdSHrpj3tu+d2Ne6im9oIsvCo/AFK9i X-Received: by 2002:a17:902:142:: with SMTP id 60mr3267221plb.191.1552643807496; Fri, 15 Mar 2019 02:56:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552643807; cv=none; d=google.com; s=arc-20160816; b=S3pWNhJBbFngCIiwlyizGUnmEWRZyeTqfiQnspkiNs1pxNb8sZz8hmHw/SuPyIMWvV c8KFF3yewlm41IiqRch/DPseJid9kVAs8dk9/Me9jJJq1FbNX9/VlyDJSKLxM32eBeUE EFOjC2y2+iHuudA5ijVaIwUn1Ave/FufNipC8bQW8YCleQUDOdrA26Oite2js8rqkROR PeBQbWitdAF0KDtnX6BNbe1cPh9Opy1w4uUi4RA04P41KW3wI9uKEvHUmk+a0ey9d3PJ xXqknbwrLmvKvKZI2ACcMzC4sUjqXS+a0Y0UgFKTVCq81vCgVay1jtYEzCiwpL6ip0Vq S/bA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=nMNxuBFkfxH/Pp2e0D/vuUTdP7DiCTna/TvHjdOEJW8=; b=BlcnQ4+3jIkyubjAMHstOLVT/TqHRQCfb6N+A6qgSWuD0p5tNmZebrdFtBK16PCdR+ zhsn/w4xx/7TQlOEisECaGe9SICzlnCtxvhTNyexgv02ONl2X94i0PiSEVXbHekDoxSp k+TWsEkbqtzLp4PprmwV4DXQQX4L7m+OIiYDebCoJfJOU3yYy4Sp4l2KInnsWN+xPdD+ KgteJdp4Skt8/gmMtANGMSRlZNqWPTTKg61INeE8ytoXXVz+g+q/1TbqsN5erA3ViO9S mVnXLVJCT+4eVGTxHWkgKqImd/B+VwcNcvBYhdrrpnY0SJWKjrAJVtbP01ZAvjbPoRYR B5ew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=Fcid22Cr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y8si1361018plp.385.2019.03.15.02.56.32; Fri, 15 Mar 2019 02:56:47 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=Fcid22Cr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728778AbfCOJyT (ORCPT + 99 others); Fri, 15 Mar 2019 05:54:19 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:35905 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726886AbfCOJyT (ORCPT ); Fri, 15 Mar 2019 05:54:19 -0400 Received: by mail-wm1-f67.google.com with SMTP id e16so5447089wme.1 for ; Fri, 15 Mar 2019 02:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nMNxuBFkfxH/Pp2e0D/vuUTdP7DiCTna/TvHjdOEJW8=; b=Fcid22Crd69kN12+21PzsGaZiUWPHL/S7LQ+Q7zdeJQedXWw0GXjWDnDQodjY/epoY 62EN2SZ2ZClyJ6PUCbOG3Onx2T18oolqENLp5T3DbXnxRW5G0SzBy6f1pyA1380ksDwm x6+imSAGVCUpATIpi68qxfiX4tYMHwou6gJgHO+eYGYvWpX6O1NhixeprfsJsB+CFMiV EKfsBAGjQ8FyR1KtZ6AuqbHAmU3BfA6fdvG5RppdvpCYrq6vFO/RhEDoDR57xzvo0PDS N3AqFxS+N7WAhCh0iMqsIogIkfbmiTT+hIf+hx436I1GwMq+Jgo+6kKhW4CbDswdHDCl 3Y/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nMNxuBFkfxH/Pp2e0D/vuUTdP7DiCTna/TvHjdOEJW8=; b=VWj2CjluOg+6QQTx1zrn+F2OLe/jPcv/zbM49iSNXPIQq0h8OYb4xVIJUe68QBetfm l3abzgXNE862o5coeSAfx9fKI+uWrCugtMUNqUg/U0oxOaZCYeD6cz1l08JKt9ZsoD27 +7ko47bRgI6A/RYLGgdFy3/ehI2h49wZ4AATfkX33MKf6KIE3wJzaS6VRlUtZ/6XGT0F BwvzgFx4nwLAbZKJnyCpmavBGp7esjtpQDagThqQQDSLpwmzaWyVMD968BH17GoPWSdF /6LBjK6IgDC8BjWiUhlgQKJIcOSg6+Q+2hR5x+qrOO0NOtrlA8nnJlavtySomdGbl2bD YgYg== X-Gm-Message-State: APjAAAXLvfq1lzsEQaow0m5pEFVH70S6bA19ikalEAuL83LvkPgEsIG0 YT62OPONL8VLbBoBkGp/O2YZRg== X-Received: by 2002:a1c:eb1a:: with SMTP id j26mr1399768wmh.43.1552643656162; Fri, 15 Mar 2019 02:54:16 -0700 (PDT) Received: from bender.baylibre.local (lmontsouris-657-1-212-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id c202sm1683958wme.38.2019.03.15.02.54.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 15 Mar 2019 02:54:15 -0700 (PDT) From: Neil Armstrong To: a.hajda@samsung.com, Laurent.pinchart@ideasonboard.com, heiko@sntech.de, robh@kernel.org Cc: Neil Armstrong , linux-amlogic@lists.infradead.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, jernej.skrabec@siol.net Subject: [PATCH] drm/bridge: dw-hdmi: disable SCDC configuration for invalid setups Date: Fri, 15 Mar 2019 10:54:14 +0100 Message-Id: <20190315095414.28520-1-narmstrong@baylibre.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch is an attempt to limit HDMI 2.0 SCDC setup when : - the SoC embeds an HDMI 1.4 only controller - the EDID supports SCDC but not scrambling - the EDID supports SCDC scrambling but not for low TMDS bit rates, while only supporting low TMDS bit rates This to avoid communicating with the SCDC DDC slave uncessary, and setting the DW-HDMI TMDS Scrambler setup when not supported by the underlying hardware. Reported-by: Rob Herring Fixes: 264fce6cc2c1 ("drm/bridge: dw-hdmi: Add SCDC and TMDS Scrambling support") Signed-off-by: Neil Armstrong --- Rob, this patch should also solve your issue with your 11' display, could you test it ? If this works, I will focus on the underlying issue where the RK3399 SoC freezes in your setup. Thanks, Neil drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 34 ++++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index a63e5f0dae56..db761329a1e3 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -1037,6 +1037,31 @@ void dw_hdmi_phy_i2c_write(struct dw_hdmi *hdmi, unsigned short data, } EXPORT_SYMBOL_GPL(dw_hdmi_phy_i2c_write); +/* Filter out invalid setups to avoid configuring SCDC and scrambling */ +static bool dw_hdmi_support_scdc(struct dw_hdmi *hdmi) +{ + struct drm_display_info *display = &hdmi->connector.display_info; + + /* Completely disable SCDC support for older controllers */ + if (hdmi->version < 0x200a) + return false; + + /* Disable if SCDC is not supported, or if an HF-VSDB block is absent */ + if (!display->hdmi.scdc.supported || + !display->hdmi.scdc.scrambling.supported) + return false; + + /* + * Disable if display only support low TMDS rates and scrambling + * for low rates is not supported either + */ + if (!display->hdmi.scdc.scrambling.low_rates && + display->max_tmds_clock <= 340000) + return false; + + return true; +} + /* * HDMI2.0 Specifies the following procedure for High TMDS Bit Rates: * - The Source shall suspend transmission of the TMDS clock and data @@ -1055,7 +1080,7 @@ void dw_hdmi_set_high_tmds_clock_ratio(struct dw_hdmi *hdmi) unsigned long mtmdsclock = hdmi->hdmi_data.video_mode.mtmdsclock; /* Control for TMDS Bit Period/TMDS Clock-Period Ratio */ - if (hdmi->connector.display_info.hdmi.scdc.supported) { + if (dw_hdmi_support_scdc(hdmi)) { if (mtmdsclock > HDMI14_MAX_TMDSCLK) drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 1); else @@ -1579,8 +1604,9 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi, /* Set up HDMI_FC_INVIDCONF */ inv_val = (hdmi->hdmi_data.hdcp_enable || - vmode->mtmdsclock > HDMI14_MAX_TMDSCLK || - hdmi_info->scdc.scrambling.low_rates ? + (dw_hdmi_support_scdc(hdmi) && + (vmode->mtmdsclock > HDMI14_MAX_TMDSCLK || + hdmi_info->scdc.scrambling.low_rates)) ? HDMI_FC_INVIDCONF_HDCP_KEEPOUT_ACTIVE : HDMI_FC_INVIDCONF_HDCP_KEEPOUT_INACTIVE); @@ -1646,7 +1672,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi, } /* Scrambling Control */ - if (hdmi_info->scdc.supported) { + if (dw_hdmi_support_scdc(hdmi)) { if (vmode->mtmdsclock > HDMI14_MAX_TMDSCLK || hdmi_info->scdc.scrambling.low_rates) { /* -- 2.20.1