Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp261072rwl; Thu, 30 Mar 2023 15:42:37 -0700 (PDT) X-Google-Smtp-Source: AKy350ZMb5IoGxU3hjgLAD0MuIC5DyRaRGTlPVZQISux1dONvvaP7PRwEA+KMPgnAxN25chM2oOa X-Received: by 2002:a05:6a21:6daa:b0:e1:2352:f0ea with SMTP id wl42-20020a056a216daa00b000e12352f0eamr14093760pzb.5.1680216156900; Thu, 30 Mar 2023 15:42:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680216156; cv=none; d=google.com; s=arc-20160816; b=yH+HCBpwZDfx3Ebj5W6MBWaw1P+G2fAPxiy0gWp744tbWVFUv9kqTxol6PVqDwcyW6 MSwdbz6IBCbpSmMNkaGeJiPsS5w+z+O2wm9+GajhlScmZL60terEKS6p3WQtddJQMykD fj2KxBWyZRmyZ8FO0UVYSQRT7w7CgpBSamS4zG0ATYVc54gkOd/mqaWq/VsgFSMbOPc9 7VBls9KZFmV7mVnzP1ERP13XKqLIP9lUKPkTLGf0aEpo/Dr3gdP7CQhad48rBdFQACjl d4R3ksTkgbnYdS1jjllCywE8rttiXfoZQOfnuv3Xat9LJZ2Q3b+hvo2tPc6Uq38QmwEE iFBQ== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=5KLRGaugo3bJYNHTNbGObcKYy+aEw9oHl8WJdhU1s28=; b=qt7DEU5sVIh+DkZOfj180WZ1HW7K6yHDLKoQnYkeyNCOxoa+H+Y8HcuCj/bnyDw1p9 eKQGPqgPjTXKvx2Fk3IgdFyPcAxj8Cq3QYsP7kqkC9uPvjyh8UylAHbLCerZm1DWAgyY myHqgAboXpQkMipmqKOrTI34Vo1aCmfJXdZYTDy6ULUurfyTowj1CV0ny/nKoeMSGW/R 4wac87YEdZHl7/b4qL8Hmi2JGnrvoK13PRLS8LwrzUweVJE+1IvkR2f6+JD8p2j73v83 G/b4f4rNQF1CUwaxa2lYTt9O1ta0ULxj4+2MY8nhJprEVpxSlacdG4W0WK+FrBQWcwvf J8IQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="KPw3AoY/"; 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=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m5-20020a655645000000b005034a57b4d1si709785pgs.406.2023.03.30.15.42.25; Thu, 30 Mar 2023 15:42:36 -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=@redhat.com header.s=mimecast20190719 header.b="KPw3AoY/"; 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=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230401AbjC3Wkc (ORCPT + 99 others); Thu, 30 Mar 2023 18:40:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230146AbjC3Wka (ORCPT ); Thu, 30 Mar 2023 18:40:30 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F742CA35 for ; Thu, 30 Mar 2023 15:39:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680215983; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=5KLRGaugo3bJYNHTNbGObcKYy+aEw9oHl8WJdhU1s28=; b=KPw3AoY/T9ZBgikGUmtAiG6/sukmUtzlTZea7Tk/WnbYZyzN9AAfeBLTJHlXL0jyyvWHuZ O9LLMuYeKRMPFPigCCh7OPiwiebz7CtFI6EEAcmWtvv93wxgHBg5aP5Q9IFW2eK7teVm1Z cv+mztZbuUpIdk19/onmKUXikUZLHb0= Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-519-tczFkU_UPxi2UYRhff4wAg-1; Thu, 30 Mar 2023 18:39:42 -0400 X-MC-Unique: tczFkU_UPxi2UYRhff4wAg-1 Received: by mail-ed1-f69.google.com with SMTP id j21-20020a508a95000000b004fd82403c91so28857123edj.3 for ; Thu, 30 Mar 2023 15:39:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680215980; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=5KLRGaugo3bJYNHTNbGObcKYy+aEw9oHl8WJdhU1s28=; b=hJbMiwHwAXr08UjdcNlRz4yKDun5Fv9ZNBb9Z7AqRpdS8T3D0vdbintH28qJ98Qc6R w8+nyshU8Uav0jPaq3oOluFUQ6Zf2e1/sW7C+0vZdx/uYTYrTBoqnyxUJibfxloBm2yu 3IXXy2/05u76oyXQ+U+5wCKH9VMYSLt9XMKvnrTUW+ObzNh1GqXHEUm60jhKXO8BHeb8 pNYYlLXI645wMvdJNHJPUgyGfE03wNnxwT/fN2W7+mGEJf5QSdj9SHgUiOLTAElkRe9q aKCHaexDJ3NJz7GUZZ8UbqyKTVg8XBTHRcU5IaYYVk5y1xVdZADOPO2PoyiDaOAYPzdM Wwew== X-Gm-Message-State: AAQBX9cIwhOV3klSIkV499nouh7LOplQsFmyBRmHmJosVbXOn2ztMv8Q q6sXLhWF80iiM5PLv4Mg0IbcS8K83xPAh4Fvmbru0BrShjFQlPG5bx/PU71/T5ZQFw0ooARlrj/ wiIdnfJ2Q3PSfgCrKqXdNAcjhOK3+aaEF2LebE5dQuEwQajMlzLkAseHznF1znhwOCiut7Ve25+ OxgcvjYGs= X-Received: by 2002:a17:906:297:b0:932:170:e07b with SMTP id 23-20020a170906029700b009320170e07bmr2717003ejf.7.1680215980631; Thu, 30 Mar 2023 15:39:40 -0700 (PDT) X-Received: by 2002:a17:906:297:b0:932:170:e07b with SMTP id 23-20020a170906029700b009320170e07bmr2716990ejf.7.1680215980283; Thu, 30 Mar 2023 15:39:40 -0700 (PDT) Received: from kherbst.pingu (ip1f113ce7.dynamic.kabel-deutschland.de. [31.17.60.231]) by smtp.gmail.com with ESMTPSA id t2-20020a1709061be200b00932b3e2c015sm288612ejg.51.2023.03.30.15.39.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Mar 2023 15:39:39 -0700 (PDT) From: Karol Herbst To: linux-kernel@vger.kernel.org Cc: Lyude Paul , Ben Skeggs , dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, Karol Herbst , stable@vger.kernel.org Subject: [PATCH] drm/nouveau/disp: Support more modes by checking with lower bpc Date: Fri, 31 Mar 2023 00:39:38 +0200 Message-Id: <20230330223938.4025569-1-kherbst@redhat.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_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 This allows us to advertise more modes especially on HDR displays. Fixes using 4K@60 modes on my TV and main display both using a HDMI to DP adapter. Also fixes similiar issues for users running into this. Cc: stable@vger.kernel.org # 5.10+ Signed-off-by: Karol Herbst --- drivers/gpu/drm/nouveau/dispnv50/disp.c | 32 +++++++++++++++++++++++++ drivers/gpu/drm/nouveau/nouveau_dp.c | 8 ++++--- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c index ed9d374147b8d..f28e47c161dd9 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c @@ -363,6 +363,35 @@ nv50_outp_atomic_check_view(struct drm_encoder *encoder, return 0; } +static void +nv50_outp_atomic_fix_depth(struct drm_encoder *encoder, struct drm_crtc_state *crtc_state) +{ + struct nv50_head_atom *asyh = nv50_head_atom(crtc_state); + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_display_mode *mode = &asyh->state.adjusted_mode; + unsigned int max_rate, mode_rate; + + switch (nv_encoder->dcb->type) { + case DCB_OUTPUT_DP: + max_rate = nv_encoder->dp.link_nr * nv_encoder->dp.link_bw; + + /* we don't support more than 10 anyway */ + asyh->or.bpc = max_t(u8, asyh->or.bpc, 10); + + /* reduce the bpc until it works out */ + while (asyh->or.bpc > 6) { + mode_rate = DIV_ROUND_UP(mode->clock * asyh->or.bpc * 3, 8); + if (mode_rate <= max_rate) + break; + + asyh->or.bpc -= 2; + } + break; + default: + break; + } +} + static int nv50_outp_atomic_check(struct drm_encoder *encoder, struct drm_crtc_state *crtc_state, @@ -381,6 +410,9 @@ nv50_outp_atomic_check(struct drm_encoder *encoder, if (crtc_state->mode_changed || crtc_state->connectors_changed) asyh->or.bpc = connector->display_info.bpc; + /* We might have to reduce the bpc */ + nv50_outp_atomic_fix_depth(encoder, crtc_state); + return 0; } diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c index e00876f92aeea..d49b4875fc3c9 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dp.c +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c @@ -263,8 +263,6 @@ nouveau_dp_irq(struct work_struct *work) } /* TODO: - * - Use the minimum possible BPC here, once we add support for the max bpc - * property. * - Validate against the DP caps advertised by the GPU (we don't check these * yet) */ @@ -276,7 +274,11 @@ nv50_dp_mode_valid(struct drm_connector *connector, { const unsigned int min_clock = 25000; unsigned int max_rate, mode_rate, ds_max_dotclock, clock = mode->clock; - const u8 bpp = connector->display_info.bpc * 3; + /* Check with the minmum bpc always, so we can advertise better modes. + * In particlar not doing this causes modes to be dropped on HDR + * displays as we might check with a bpc of 16 even. + */ + const u8 bpp = 6 * 3; if (mode->flags & DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace) return MODE_NO_INTERLACE; -- 2.39.2