Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4239870ioa; Tue, 26 Apr 2022 22:04:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyKWDVMIt0JrSp/03B4JpwgYpL5sBJGo3z3mgFq9H1d5RXoWhBI0rTIoi8evg4rUQZQekRR X-Received: by 2002:a17:907:9805:b0:6db:4c33:7883 with SMTP id ji5-20020a170907980500b006db4c337883mr25167844ejc.555.1651035855805; Tue, 26 Apr 2022 22:04:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651035855; cv=none; d=google.com; s=arc-20160816; b=x43p2eeSUNt3/7ka0j7j/9jF3bajJON5Xfb0YAekPlC6Rm1Msr5JPLOIcty2PL88Iu hxr6ZDK6FEq64324rtnu02bOswq2zTUEEbKMcuxEnkgGEtqLUkuTJHjrbJg6VjIL5OQc DfMzmbR+h417yEnzTaKZ6Z1/6QruF+gD6wdW+Rb0lHWTguE3+mg7LcBRrw9atUcW1m8F fzVBZNg9HIH4mGacgitZZgeDssJoLMwwTHPnPZYExJMNyQ2TFvrdG20sXa1gtRC+3A30 2XAtKkQeNA7ghYOt5KYiD+ZP3ILCBNJPDCi6bsjFlDQFWDHy6AnaeeWr7WDRpN3Aeenf +y7Q== 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:cc:to:from :dkim-signature; bh=Ghn6c18H+YaA6ijLmc+sCKaPR5+i6PR27cmfb4hGb6k=; b=zr/pgHEjomo7fGv16b1XMVdCEe2jkM0DwYkgVXQtEA6TF2WPjs4cYFN6IQ/QdEfzQQ hEYFlgCuierO79/BADJlGOB9iC++HbcVYl+ZA3Ab/jHVJWkTIekbuewSzdtGYRUuafNb tts89Sg2P6NxWekUAeUiz5HFpvne5R1Ik1ps6rGfL1u4L3wTbQGQ+W9eixHXVLwe/3HD PwBXET61aSBih0cPF9A2xm+TdY1DxKtYqIeTL1h+ig7XQ6I9NXt16wEhuvIKog79GJ23 dYkl9/FsjkjHFPA20YuB8SHxMhbDiAVdWS7V+RBGig+TyIzADBD98ke1rbXxhrVF7FhG vW7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=oJk6Lr2b; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 19-20020a170906319300b006f3a55f0e6esi245666ejy.759.2022.04.26.22.03.52; Tue, 26 Apr 2022 22:04:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=oJk6Lr2b; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352366AbiDZSuX (ORCPT + 99 others); Tue, 26 Apr 2022 14:50:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36348 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352319AbiDZSuV (ORCPT ); Tue, 26 Apr 2022 14:50:21 -0400 Received: from mail-pf1-x435.google.com (mail-pf1-x435.google.com [IPv6:2607:f8b0:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 09A0389CC2 for ; Tue, 26 Apr 2022 11:47:13 -0700 (PDT) Received: by mail-pf1-x435.google.com with SMTP id bo5so18779449pfb.4 for ; Tue, 26 Apr 2022 11:47:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ghn6c18H+YaA6ijLmc+sCKaPR5+i6PR27cmfb4hGb6k=; b=oJk6Lr2b2CsnDsmJDhvEfNhpVgCJYJDz9OKmDdOnUG0RWkUIVFR90AdiUHFEtqGF74 3wuuqJtSUuNICYWUR7YJ6HJlGrZ+GvW3nOCacMX4Xv5jPxoeTZl4b9andf9cF5n23ZOE MrkUUD7mwToqaneOIuM/tOvvBYjZ0pJjL5ecM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ghn6c18H+YaA6ijLmc+sCKaPR5+i6PR27cmfb4hGb6k=; b=3axeqt9IP6isc/e8dCOFEnMn2YX+upTpFfeEA1do61abvLTNM5pbg6QlSr1YHGqfeq h9IuyEVg43zEu8R/NqtNTaG8VgjAf6BoLnFfYqprFmDI1UEUuGiB3DhVDCLXABZjjBsT Ttv1ocORVhgZGw/qRzJApruIvInhB7XQhb3vZ6RCMXT8oegVY9o8pKGc0fP+XhKu/lOT L3F6lNz6FYKpSxZRnXFdvlvM6PQZhbJUy+ywR39BnBl7tvspQLpCPFYFCBkn6ZM+4zI3 7RNWW7vKeUEve4ffLesKRpCdoFyBI7PsIaQbbH+OyEE71+t6TfwWs7CcgDSgQSufnkWd BagQ== X-Gm-Message-State: AOAM531MsSDE2MtV5fKVRvLrWVy4U3Rf3WDDcMb6CRIpf55Sw/aACS8w DvIkLNIhS4vBJpbuv0lhIsSSrEyOE92mGBC5z2arTg== X-Received: by 2002:aa7:8256:0:b0:4e0:78ad:eb81 with SMTP id e22-20020aa78256000000b004e078adeb81mr25918102pfn.30.1650998832541; Tue, 26 Apr 2022 11:47:12 -0700 (PDT) Received: from tictac2.mtv.corp.google.com ([2620:15c:202:201:8e92:9f42:eda6:c0ee]) by smtp.gmail.com with ESMTPSA id p185-20020a62d0c2000000b0050d1f7c515esm12584396pfg.219.2022.04.26.11.47.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Apr 2022 11:47:12 -0700 (PDT) From: Douglas Anderson To: dri-devel@lists.freedesktop.org Cc: dmitry.baryshkov@linaro.org, swboyd@chromium.org, quic_abhinavk@quicinc.com, quic_aravindh@quicinc.com, robdclark@gmail.com, quic_khsieh@quicinc.com, linux-arm-msm@vger.kernel.org, quic_sbillaka@quicinc.com, Douglas Anderson , Daniel Vetter , David Airlie , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , linux-kernel@vger.kernel.org Subject: [PATCH 2/2] drm/probe-helper: For DP, add 640x480 if all other modes are bad Date: Tue, 26 Apr 2022 11:46:51 -0700 Message-Id: <20220426114627.2.I4ac7f55aa446699f8c200a23c10463256f6f439f@changeid> X-Mailer: git-send-email 2.36.0.rc2.479.g8af0fa9b8e-goog In-Reply-To: <20220426114627.1.I2dd93486c6952bd52f2020904de0133970d11b29@changeid> References: <20220426114627.1.I2dd93486c6952bd52f2020904de0133970d11b29@changeid> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As per Displayport spec section 5.2.1.2 ("Video Timing Format") says that all detachable sinks shall support 640x480 @60Hz as a fail safe mode. A DP compliance test expected us to utilize the above fact when all modes it presented to the DP source were not achievable. It presented only modes that would be achievable with more lanes and/or higher speeds than we had available and expected that when we couldn't do that then we'd fall back to 640x480 even though it didn't advertise this size. In order to pass the compliance test (and also support any users who might fall into a similar situation with their display), we need to add 640x480 into the list of modes. However, we don't want to add 640x480 all the time. Despite the fact that the DP spec says all sinks _shall support_ 640x480, they're not guaranteed to support it _well_. Continuing to read the spec you can see that the display is not required to really treat 640x480 equal to all the other modes. It doesn't need to scale or anything--just display the pixels somehow for failsafe purposes. It should also be noted that it's not hard to find a display hooked up via DisplayPort that _doesn't_ support 640x480 at all. The HP ZR30w screen I'm sitting in front of has a native DP port and doesn't work at 640x480. I also plugged in a tiny 800x480 HDMI display via a DP to HDMI adapter and that screen definitely doesn't support 640x480. As a compromise solution, let's only add the 640x480 mode if: * We're on DP. * All other modes have been pruned. This acknowledges that 640x480 might not be the best mode to use but, since sinks are _supposed_ to support it, we will at least fall back to it if there's nothing else. Note that we _don't_ add higher resolution modes like 1024x768 in this case. We only add those modes for a failed EDID read where we have no idea what's going on. In the case where we've pruned all modes then instead we only want 640x480 which is the only defined "Fail Safe" resolution. This patch originated in response to Kuogee Hsieh's patch [1]. [1] https://lore.kernel.org/r/1650671124-14030-1-git-send-email-quic_khsieh@quicinc.com Signed-off-by: Douglas Anderson --- drivers/gpu/drm/drm_probe_helper.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c index 819225629010..90cd46cbfec1 100644 --- a/drivers/gpu/drm/drm_probe_helper.c +++ b/drivers/gpu/drm/drm_probe_helper.c @@ -476,7 +476,6 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; int count = 0, ret; - bool verbose_prune = true; enum drm_connector_status old_status; struct drm_modeset_acquire_ctx ctx; @@ -556,8 +555,8 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, DRM_DEBUG_KMS("[CONNECTOR:%d:%s] disconnected\n", connector->base.id, connector->name); drm_connector_update_edid_property(connector, NULL); - verbose_prune = false; - goto prune; + drm_mode_prune_invalid(dev, &connector->modes, false); + goto exit; } count = (*connector_funcs->get_modes)(connector); @@ -580,9 +579,26 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, } } -prune: - drm_mode_prune_invalid(dev, &connector->modes, verbose_prune); + drm_mode_prune_invalid(dev, &connector->modes, true); + /* + * Displayport spec section 5.2.1.2 ("Video Timing Format") says that + * all detachable sinks shall support 640x480 @60Hz as a fail safe + * mode. If all modes were pruned, perhaps because they need more + * lanes or a higher pixel clock than available, at least try to add + * in 640x480. + */ + if (list_empty(&connector->modes) && + connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) { + count = drm_add_modes_noedid(connector, 640, 480); + if (_drm_helper_update_and_validate(connector, maxX, maxY, &ctx)) { + drm_modeset_backoff(&ctx); + goto retry; + } + drm_mode_prune_invalid(dev, &connector->modes, true); + } + +exit: drm_modeset_drop_locks(&ctx); drm_modeset_acquire_fini(&ctx); -- 2.36.0.rc2.479.g8af0fa9b8e-goog