Received: by 2002:a05:6a10:a852:0:0:0:0 with SMTP id d18csp674531pxy; Wed, 5 May 2021 10:57:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyvbKz6qMhShDCLdSS/H+K74jLwhZVteAzld5lDB9DuUiJ2vKB1rvDOUN0A2nEfm3crxrMr X-Received: by 2002:a17:906:87cc:: with SMTP id zb12mr5891ejb.138.1620237445400; Wed, 05 May 2021 10:57:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620237445; cv=none; d=google.com; s=arc-20160816; b=vg4BJIEF6v2uIEzMTEJ3DpM6Kiw2MCZVWPaAkIbmgdxwjMUvSXuXuMXilhJCOLBcBS iP8EEyLX27zWBsB8F5bpmtGUQ2f5xuIA3qeGekwbpPvihmAA31TeqYz21K8gQlu0IMQV O90JzhihDsKYZ7iqr6OMwa9ssbcH02tQITbY+pvgNRgWjtnfjvfACOZlDf4itBm0XibZ 6fSEmbbsdo9bZcaWgF/LYNpN7YZgozaHgLyaPlvjleYijoO0iqIZHPLkfB1/IdnQyk74 ucfp+LY4waiSNS277+xkBEQQmJBzvrD5PGrNMwED2eus3cVc+L9bHa1l3GmKhOY6OZgl pdbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from; bh=e7jbu5K9WIT7aiSbBwgjMAFP8UwLC5VoHnRu/3NSq+E=; b=fstgjok6iUiTcwIxHKzrR08xcWK4FYaceDDnknC3RgVR2PTbUNCVeWmDd9LlboEcUU kyNuIT1//4u8T14zk5e2DCKaCMDNA7VHSHeUJdS2kZ41soGZiZDNww+PfK38+BWTQxgS ZdYFjslg+sKVhRrk0x96pdPgqe8IIWuwCAapzZISQfe3ayc3otvEkxClg7+IfPCBiGwe bZqFMAJCw4Cc5ECfsjCJE5pMoO4dKqGAbKk9lK0fsCetRydfc67psAJb+wGWeKxLmSkZ AxRkZpl6pXzRlKmEZ4LlFV0PPYHZW/CtMEwHf+EMw3IKQm3FFKbHhVWCHckPgAIaZRnw SCfw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k9si8911eje.142.2021.05.05.10.57.02; Wed, 05 May 2021 10:57:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234467AbhEERyu (ORCPT + 99 others); Wed, 5 May 2021 13:54:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55122 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235247AbhEERxj (ORCPT ); Wed, 5 May 2021 13:53:39 -0400 Received: from srv6.fidu.org (srv6.fidu.org [IPv6:2a01:4f8:231:de0::2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4452CC034626 for ; Wed, 5 May 2021 10:24:10 -0700 (PDT) Received: from localhost (localhost.localdomain [127.0.0.1]) by srv6.fidu.org (Postfix) with ESMTP id B53BFC800A8; Wed, 5 May 2021 19:24:09 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at srv6.fidu.org Received: from srv6.fidu.org ([127.0.0.1]) by localhost (srv6.fidu.org [127.0.0.1]) (amavisd-new, port 10026) with LMTP id A0lFCfuBvm_8; Wed, 5 May 2021 19:24:09 +0200 (CEST) Received: from wsembach-tuxedo.fritz.box (p200300E37f39860005A4018A54f094b9.dip0.t-ipconnect.de [IPv6:2003:e3:7f39:8600:5a4:18a:54f0:94b9]) (Authenticated sender: wse@tuxedocomputers.com) by srv6.fidu.org (Postfix) with ESMTPA id 6EFFFC800B3; Wed, 5 May 2021 19:24:09 +0200 (CEST) From: Werner Sembach To: wse@tuxedocomputers.com, ville.syrjala@linux.intel.com, airlied@linux.ie, daniel@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/3] Use YCbCr420 as fallback when RGB fails Date: Wed, 5 May 2021 19:24:01 +0200 Message-Id: <20210505172401.1453178-4-wse@tuxedocomputers.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210505172401.1453178-1-wse@tuxedocomputers.com> References: <20210505172401.1453178-1-wse@tuxedocomputers.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When encoder validation of a display mode fails, retry with less bandwidth heavy YCbCr420 color mode, if available. This enables some HDMI 1.4 setups to support 4k60Hz output, which previously failed silently. AMDGPU had nearly the exact same issue. This problem description is therefore copied from my commit message of the AMDGPU patch. On some setups, while the monitor and the gpu support display modes with pixel clocks of up to 600MHz, the link encoder might not. This prevents YCbCr444 and RGB encoding for 4k60Hz, but YCbCr420 encoding might still be possible. However, which color mode is used is decided before the link encoder capabilities are checked. This patch fixes the problem by retrying to find a display mode with YCbCr420 enforced and using it, if it is valid. Signed-off-by: Werner Sembach --- Now with the suggestes change as it does makes a difference ^^ From ce3092930bca37468c6122a7704202f9e3b39e81 Mon Sep 17 00:00:00 2001 From: Werner Sembach Date: Mon, 3 May 2021 16:23:17 +0200 Subject: [PATCH 3/3] Use YCbCr420 as fallback when RGB fails --- drivers/gpu/drm/i915/display/intel_hdmi.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index b0201d4f27eb..7815569267e3 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -1897,6 +1897,7 @@ intel_hdmi_mode_valid(struct drm_connector *connector, int clock = mode->clock; int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; bool has_hdmi_sink = intel_has_hdmi_sink(hdmi, connector->state); + bool ycbcr_420_only; if (mode->flags & DRM_MODE_FLAG_DBLSCAN) return MODE_NO_DBLESCAN; @@ -1913,12 +1914,20 @@ intel_hdmi_mode_valid(struct drm_connector *connector, clock *= 2; } - if (drm_mode_is_420_only(&connector->display_info, mode)) + ycbcr_420_only = drm_mode_is_420_only(&connector->display_info, mode); + if (ycbcr_420_only) clock /= 2; status = intel_hdmi_mode_clock_valid(hdmi, clock, has_hdmi_sink); - if (status != MODE_OK) - return status; + if (status != MODE_OK) { + if (ycbcr_420_only || !connector->ycbcr_420_allowed || !drm_mode_is_420_also(&connector->display_info, mode)) + return status; + + clock /= 2; + status = intel_hdmi_mode_clock_valid(hdmi, clock, has_hdmi_sink); + if (status != MODE_OK) + return status; + } return intel_mode_valid_max_plane_size(dev_priv, mode, false); } @@ -2125,6 +2134,14 @@ static int intel_hdmi_compute_output_format(struct intel_encoder *encoder, } ret = intel_hdmi_compute_clock(encoder, crtc_state); + if (ret) { + if (crtc_state->output_format != INTEL_OUTPUT_FORMAT_YCBCR420 && + connector->ycbcr_420_allowed && + drm_mode_is_420_also(&connector->display_info, adjusted_mode)) { + crtc_state->output_format = INTEL_OUTPUT_FORMAT_YCBCR420; + ret = intel_hdmi_compute_clock(encoder, crtc_state); + } + } return ret; } -- 2.25.1