Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4390331ioa; Wed, 27 Apr 2022 02:47:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwKpFyu8h8ikcIJKyJFbt+GIxwAC3HQnzQVuzbiS6WWSTdE1sjx0VBbAGEtEnqwyDGYsx5/ X-Received: by 2002:a17:90a:730c:b0:1d9:3f5:9a00 with SMTP id m12-20020a17090a730c00b001d903f59a00mr27141287pjk.109.1651052856899; Wed, 27 Apr 2022 02:47:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651052856; cv=none; d=google.com; s=arc-20160816; b=y/REmX6bDlZZHJfJl75JPx1YfKk4RZvCWfu2zmfR7EIKQ8sqO5Z2G5khm3N7gj8cWO RR0s5cjrrnDXv6lcyvWluviUlrn7h96Wx13hWqVETzs6uKaWYDRMa5F3LmQMw9FTvTFf D1hugaOVNrDtbUMMfbPJHGW5SFfmoqKn96Zu1FOCvLBKEf7/IAZMbxuqhAQss2k/6YOO Olffdxmf9rBWa20DxTwPfYh8xvXwYEUae+Bv/MrmVIiUoCBBmUwdZA9NJM8Q26yGQGye gweSVmRE+W2ipH5MGC4BMFMDEvC8UhpZZCwpEYqeZokbZxAmoCO/RZp+y1xsm/9ORGUD BLHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=WshltLX0dXHz63rqVl8lSMP+GZQ87XkFUm2jOhui7ss=; b=qiXxIKwoN+JVGhep9kgFjVeP0mGCu7/knan0smMDokXsRp8XzDLo7gnLElAPK77QXP /97LpVNAZr5WVuMET53apYCTVpfimyN03B5+mXztf94WcJE7NkP0aQvtpeLCD860HR8e t4udpSTeSiPZNdM2Z5g2qE3Y9g/kfPpBZOMgEWEryahmlo2ArBJom99kd1dvFPt+6P56 cZJK0mTsJXQDuAAyqE3lNgJox6JVK1vEXFKl9SGnWGmKosO4ILlDEsOkEWpgYpmo0Mks WhTHVvej9dTe1AX/R2YlGjtmD1HQsGZIMDDI0ap0sXxh3X3d1amiV62Qc6loglfB7mrB i8eQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=cUrxEaPc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id b24-20020a170902d89800b0015b7b9822e3si1047981plz.444.2022.04.27.02.47.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 02:47:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=cUrxEaPc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 64F81290996; Wed, 27 Apr 2022 02:20:59 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352908AbiDZTtR (ORCPT + 99 others); Tue, 26 Apr 2022 15:49:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46952 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229974AbiDZTtQ (ORCPT ); Tue, 26 Apr 2022 15:49:16 -0400 Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7268429C87 for ; Tue, 26 Apr 2022 12:46:07 -0700 (PDT) Received: by mail-ed1-x52e.google.com with SMTP id k27so8451649edk.4 for ; Tue, 26 Apr 2022 12:46:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=WshltLX0dXHz63rqVl8lSMP+GZQ87XkFUm2jOhui7ss=; b=cUrxEaPc0G9XHwXYx21V56yEtHHlbZhQBGAPxA/pY/aydypp3xwMM1xidQb139luUt 0sUuiCtTvw/Jie0PBIecKbp4NayTszqz7V8SdNR2ufKyQ1S3wejJRJxHxgpu1GcYchhY TOXAU7r1pBrIgVrGWz0+/8TWLV0l3kdzkzZ6I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=WshltLX0dXHz63rqVl8lSMP+GZQ87XkFUm2jOhui7ss=; b=PqVISEEDaInYw3mbMnVqlhlNB52E+XO/5cM/mVKbwoBCp4o2Njqw1PqjMuWApmb8xB UghtjFx5Uu9KiKu19bvrMGQq2WhLJ9/f7HPX578dIf1SMj+okXbBFDqsYjg4fNdKdkQ+ yE3sZcZSV5Xgt7YzOsK/Sq0NGTX8dcwkLEviWqYPaoWR9OnI+gKq1JBdG/FB1sZCjfVH RStkl6Czk+dCWU0zt3047kKu6fdA3Nk/zlnOJVHonLl6ByvZoFFqlOcVGVD4LemXh11F H9T9ny9IwiheC7gKZLvGTxbX6BmOqSgtlgtjg5AGr2xpIhAnL96AYIZZG2WKoGb4z6of fzwQ== X-Gm-Message-State: AOAM531MGQrGLcJhTG0l4DiiLkZxEwfXGjZ0DDOXwGig1wnCNbLyiWpV t9vtGf/dnrbExROUdlgUSluFaiOy2iU+t0VuRh4= X-Received: by 2002:a05:6402:43c4:b0:41d:9403:8dca with SMTP id p4-20020a05640243c400b0041d94038dcamr26262628edc.184.1651002365648; Tue, 26 Apr 2022 12:46:05 -0700 (PDT) Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com. [209.85.128.53]) by smtp.gmail.com with ESMTPSA id h7-20020a1709060f4700b006e8d0746969sm5320769ejj.222.2022.04.26.12.46.02 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 26 Apr 2022 12:46:03 -0700 (PDT) Received: by mail-wm1-f53.google.com with SMTP id c190-20020a1c35c7000000b0038e37907b5bso2191720wma.0 for ; Tue, 26 Apr 2022 12:46:02 -0700 (PDT) X-Received: by 2002:a05:600c:3d0e:b0:38f:f83b:e7dc with SMTP id bh14-20020a05600c3d0e00b0038ff83be7dcmr31342901wmb.29.1651002362259; Tue, 26 Apr 2022 12:46:02 -0700 (PDT) MIME-Version: 1.0 References: <20220426114627.1.I2dd93486c6952bd52f2020904de0133970d11b29@changeid> <20220426114627.2.I4ac7f55aa446699f8c200a23c10463256f6f439f@changeid> In-Reply-To: From: Doug Anderson Date: Tue, 26 Apr 2022 12:45:49 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 2/2] drm/probe-helper: For DP, add 640x480 if all other modes are bad To: Abhinav Kumar Cc: dri-devel , Dmitry Baryshkov , Stephen Boyd , "Aravind Venkateswaran (QUIC)" , Rob Clark , "Kuogee Hsieh (QUIC)" , linux-arm-msm , Sankeerth Billakanti , Daniel Vetter , David Airlie , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , LKML Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,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 Hi, On Tue, Apr 26, 2022 at 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? The retry is still needed. This gets into the whole wait-wound mutexes that DRM uses, right? Any time we detect deadlock we release all of our locks and start from scratch. That's still possible here. -Doug