Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4416919ioa; Wed, 27 Apr 2022 03:28:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzM6s8RrpfOpsRX4AOGI6Q5w0209+IxIKtIszzPwn6q+js9aCwAOOnnXLgD9OKFfyWbrevS X-Received: by 2002:a63:e245:0:b0:3a7:dce1:64b1 with SMTP id y5-20020a63e245000000b003a7dce164b1mr23550121pgj.67.1651055336561; Wed, 27 Apr 2022 03:28:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651055336; cv=none; d=google.com; s=arc-20160816; b=mn5Jc9X/AoHLo6Oeq8I7wt79484xO0qpfxR7f2VoZLjYSRrDpJJMENPBw+b5+6Xdva 0qeBouzHLMYYqFhcXUwsMLSsm8NJY/TluBp7E34mV5y3YM82BNBYlTquSyww/UaEsUxe tuc6V4Uj9t0bge2YEoARPH5kcbwVAhQczFa0FMYzwSFxZ7xO5a8w4fTIG5r20WYJSpP/ KcCJp5BMgcRoi9R0wF6zWlhDWUsIB9h5JAQuy67wl4s9c+JuQkm4mz7pBpmJ0TBBdNwN 86mwcFAZ13rKPWFNNimebX1D28xAYYFcptqyanDOI3mdA9IbHbO7BcnuS+oKlJ7mPBfz tVHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:references :cc:to:from:content-language:subject:user-agent:mime-version:date :message-id:dkim-signature; bh=Fmy89Zk4IfdhrvBHV8RGwaA3LuC4mMyB9cHa34B6ROM=; b=EwlnU2RdLRqnWcn0hhZDrTk8A7ZblYjnJwpion3lycshuisuBq6uhtE8dHwYJasrqb gmnK4v8aEPByuwcgFFr8QXF0TcMcMKxVrEEkIlQqu+3vw/wpn9uNMsCnW/cQT5w1wmjN l88EhdFV2exEMI8MiseFjSciomWzPlqY0rzvM/4wLsP72PNmyhuEx9Vy6Sdh715fHIMn s5ZMTaof7g36ySEkVw8suqyUjWXNpNrHgL/BgT+zrFLWayH7cc7HNrbEH6GlPmS+VFdW Ph1y9fLRvfzC6VK23Rg74AZLtjPxXdw1VLL6gPX4/wloBm9v7rbktMKX3eXkR0oIgTZA cLtg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=xAUQJyoN; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id s13-20020a63214d000000b003ab45d6e88asi1221367pgm.254.2022.04.27.03.28.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 03:28:56 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=xAUQJyoN; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 93BBE39D24B; Wed, 27 Apr 2022 02:44:33 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353923AbiDZTYA (ORCPT + 99 others); Tue, 26 Apr 2022 15:24:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56516 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354122AbiDZTXz (ORCPT ); Tue, 26 Apr 2022 15:23:55 -0400 Received: from alexa-out-sd-01.qualcomm.com (alexa-out-sd-01.qualcomm.com [199.106.114.38]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2DEBF2A700; Tue, 26 Apr 2022 12:20:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1651000846; x=1682536846; h=message-id:date:mime-version:subject:from:to:cc: references:in-reply-to:content-transfer-encoding; bh=Fmy89Zk4IfdhrvBHV8RGwaA3LuC4mMyB9cHa34B6ROM=; b=xAUQJyoNF7QOYvjCcytxPUKlvs86/Jo1KFsufERmUavaFRIz5AY+xrLt JyStpg5J/iCrYEWpIsIWvCnYGAJYdGWQ4jbQ9T7ckLp41gVAU3Qrq9DSS jD2wsh16JQXMaqUmZ7PqfqSMtcnYAIzlZVvtVZzSlqj5/tiM/GNIYcHac 8=; Received: from unknown (HELO ironmsg05-sd.qualcomm.com) ([10.53.140.145]) by alexa-out-sd-01.qualcomm.com with ESMTP; 26 Apr 2022 12:20:45 -0700 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg05-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Apr 2022 12:20:45 -0700 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Tue, 26 Apr 2022 12:20:45 -0700 Received: from [10.111.160.161] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Tue, 26 Apr 2022 12:20:42 -0700 Message-ID: <517f71e4-785f-ef6f-d30e-fb18974eed57@quicinc.com> Date: Tue, 26 Apr 2022 12:20:40 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.6.2 Subject: Re: [PATCH 2/2] drm/probe-helper: For DP, add 640x480 if all other modes are bad Content-Language: en-US From: Abhinav Kumar To: Douglas Anderson , CC: , Thomas Zimmermann , David Airlie , , , , , , References: <20220426114627.1.I2dd93486c6952bd52f2020904de0133970d11b29@changeid> <20220426114627.2.I4ac7f55aa446699f8c200a23c10463256f6f439f@changeid> In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-Spam-Status: No, score=-3.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,NICE_REPLY_A,RDNS_NONE,SPF_HELO_NONE autolearn=unavailable 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 Missed one more comment. On 4/26/2022 12:16 PM, Abhinav Kumar wrote: > Hi Doug > > One minor comment below. > > But otherwise, looking at this change this should work for us acc to me. > > We will test this out with our equipment and then provide R-b. > > Thanks > > Abhinav > On 4/26/2022 11:46 AM, Douglas Anderson wrote: >> 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; > > Do we need another retry here? This will again repeat everything from > get_modes(). > The fact that we are hitting this code is because we have already tried > that and this is already a second-pass. So I think another retry isnt > needed? This will help cover the case of 4.2.2.6 but not fix 4.2.2.1. For 4.2.2.1, we will have 0 modes and so the original DRM fwk code of adding all modes <= 1024x768 will kick in. Now, in that list, we will still need to pick/mark 640x480 as the preferred mode. We still need IGT for that. So yes, this will cover one of the test but not the other. > >> +        } >> +        drm_mode_prune_invalid(dev, &connector->modes, true); >> +    } >> + >> +exit: >>       drm_modeset_drop_locks(&ctx); >>       drm_modeset_acquire_fini(&ctx);