From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH 2/6] drm/nouveau: Unbreak nv50_mstc->best_encoder() Date: Tue, 18 Sep 2018 19:06:18 -0400 Message-ID: <20180918230637.20700-3-lyude@redhat.com> References: <20180918230637.20700-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180918230637.20700-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: David Airlie , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Sean Paul , Ben Skeggs , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= List-Id: amd-gfx.lists.freedesktop.org QXMgbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBjb21taXQsIHdlIGN1cnJlbnRseSBwcmV2ZW50 IG5ldyBtb2Rlc2V0cwpvbiByZWNlbnRseS1yZW1vdmVkIE1TVCBjb25uZWN0b3JzIGJ5IHJldHVy bmluZyBubyBlbmNvZGVyIGZyb20gb3VyCi0+YmVzdF9lbmNvZGVyKCkgY2FsbGJhY2sgb25jZSB0 aGUgTVNUIHBvcnQgaGFzIGRpc2FwcGVhcmVkLiBUaGlzIGlzCndyb25nIGhvd2V2ZXIsIGJlY2F1 c2UgaXQgcHJldmVudHMgbGVnYWN5IG1vZGVzZXR0aW5nIHVzZXJzIGZyb20gYmVpbmcKYWJsZSB0 byBkaXNhYmxlIENSVENzIG9uIE1TVCBjb25uZWN0b3JzIGFmdGVyIHRoZSBjb25uZWN0b3IncyBy ZXNwZWN0aXZlCnRvcG9sb2d5IGhhcyBkaXNhcHBlYXJlZC4KClNvLCBmaXggdGhpcyBieSBpbnN0 ZWFkIHVzaW5nIHRoZSBuZXcKZHJtX2RwX21zdF9jb25uZWN0b3JfYXRvbWljX2NoZWNrKCkgaGVs cGVyIGluc3RlYWQgd2hpbGUgYWx3YXlzCnJldHVybmluZyBhIHZhbGlkIGVuY29kZXIgZnJvbSAt PmJlc3RfZW5jb2RlcigpLgoKU2lnbmVkLW9mZi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0 LmNvbT4KQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKLS0tCiBkcml2ZXJzL2dwdS9kcm0vbm91 dmVhdS9kaXNwbnY1MC9kaXNwLmMgfCAyNSArKysrKysrKysrKysrKystLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvZGlzcC5jIGIvZHJpdmVycy9ncHUv ZHJtL25vdXZlYXUvZGlzcG52NTAvZGlzcC5jCmluZGV4IDlkYTBiZGZlMWUxYy4uOGQ2ZjZlZTli Yzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvZGlzcC5jCkBAIC04ODEsMjIg Kzg4MSwxNiBAQCBudjUwX21zdGNfYXRvbWljX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAogewogCXN0cnVjdCBudjUwX2hlYWQgKmhlYWQgPSBudjUwX2hlYWQo Y29ubmVjdG9yX3N0YXRlLT5jcnRjKTsKIAlzdHJ1Y3QgbnY1MF9tc3RjICptc3RjID0gbnY1MF9t c3RjKGNvbm5lY3Rvcik7Ci0JaWYgKG1zdGMtPnBvcnQpIHsKLQkJc3RydWN0IG52NTBfbXN0bSAq bXN0bSA9IG1zdGMtPm1zdG07Ci0JCXJldHVybiAmbXN0bS0+bXN0b1toZWFkLT5iYXNlLmluZGV4 XS0+ZW5jb2RlcjsKLQl9Ci0JcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gJm1zdGMtPm1zdG0tPm1z dG9baGVhZC0+YmFzZS5pbmRleF0tPmVuY29kZXI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2Vu Y29kZXIgKgogbnY1MF9tc3RjX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQogewogCXN0cnVjdCBudjUwX21zdGMgKm1zdGMgPSBudjUwX21zdGMoY29ubmVjdG9y KTsKLQlpZiAobXN0Yy0+cG9ydCkgewotCQlzdHJ1Y3QgbnY1MF9tc3RtICptc3RtID0gbXN0Yy0+ bXN0bTsKLQkJcmV0dXJuICZtc3RtLT5tc3RvWzBdLT5lbmNvZGVyOwotCX0KLQlyZXR1cm4gTlVM TDsKKworCXJldHVybiAmbXN0Yy0+bXN0bS0+bXN0b1swXS0+ZW5jb2RlcjsKIH0KIAogc3RhdGlj IGVudW0gZHJtX21vZGVfc3RhdHVzCkBAIC05MjYsMTAgKzkyMCwyMSBAQCBudjUwX21zdGNfZ2V0 X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiAJcmV0dXJuIHJldDsKIH0K IAorc3RhdGljIGludAorbnY1MF9tc3RjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAorCQkgICAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRl KQoreworCXN0cnVjdCBudjUwX21zdGMgKm1zdGMgPSBudjUwX21zdGMoY29ubmVjdG9yKTsKKwor CXJldHVybiBkcm1fZHBfbXN0X2Nvbm5lY3Rvcl9hdG9taWNfY2hlY2soY29ubmVjdG9yLCBzdGF0 ZSwKKwkJCQkJCSAmbXN0Yy0+bXN0bS0+bWdyKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcwogbnY1MF9tc3RjX2hlbHAgPSB7CiAJLmdldF9tb2Rl cyA9IG52NTBfbXN0Y19nZXRfbW9kZXMsCiAJLm1vZGVfdmFsaWQgPSBudjUwX21zdGNfbW9kZV92 YWxpZCwKKwkuYXRvbWljX2NoZWNrID0gbnY1MF9tc3RjX2F0b21pY19jaGVjaywKIAkuYmVzdF9l bmNvZGVyID0gbnY1MF9tc3RjX2Jlc3RfZW5jb2RlciwKIAkuYXRvbWljX2Jlc3RfZW5jb2RlciA9 IG52NTBfbXN0Y19hdG9taWNfYmVzdF9lbmNvZGVyLAogfTsKLS0gCjIuMTcuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxp c3QKTm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9ub3V2ZWF1Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9ADB9C433F4 for ; Tue, 18 Sep 2018 23:07:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 596752133F for ; Tue, 18 Sep 2018 23:07:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 596752133F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728397AbeISEmA (ORCPT ); Wed, 19 Sep 2018 00:42:00 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41472 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725873AbeISEl7 (ORCPT ); Wed, 19 Sep 2018 00:41:59 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D03993091D54; Tue, 18 Sep 2018 23:07:08 +0000 (UTC) Received: from whitewolf.lyude.net.com (ovpn-125-172.rdu2.redhat.com [10.10.125.172]) by smtp.corp.redhat.com (Postfix) with ESMTP id C5BCA7A4D1; Tue, 18 Sep 2018 23:07:06 +0000 (UTC) From: Lyude Paul To: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Cc: stable@vger.kernel.org, Ben Skeggs , David Airlie , Daniel Vetter , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Sean Paul , Ilia Mirkin , linux-kernel@vger.kernel.org Subject: [PATCH 2/6] drm/nouveau: Unbreak nv50_mstc->best_encoder() Date: Tue, 18 Sep 2018 19:06:18 -0400 Message-Id: <20180918230637.20700-3-lyude@redhat.com> In-Reply-To: <20180918230637.20700-1-lyude@redhat.com> References: <20180918230637.20700-1-lyude@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Tue, 18 Sep 2018 23:07:08 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As mentioned in the previous commit, we currently prevent new modesets on recently-removed MST connectors by returning no encoder from our ->best_encoder() callback once the MST port has disappeared. This is wrong however, because it prevents legacy modesetting users from being able to disable CRTCs on MST connectors after the connector's respective topology has disappeared. So, fix this by instead using the new drm_dp_mst_connector_atomic_check() helper instead while always returning a valid encoder from ->best_encoder(). Signed-off-by: Lyude Paul Cc: stable@vger.kernel.org --- drivers/gpu/drm/nouveau/dispnv50/disp.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c index 9da0bdfe1e1c..8d6f6ee9bc75 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c @@ -881,22 +881,16 @@ nv50_mstc_atomic_best_encoder(struct drm_connector *connector, { struct nv50_head *head = nv50_head(connector_state->crtc); struct nv50_mstc *mstc = nv50_mstc(connector); - if (mstc->port) { - struct nv50_mstm *mstm = mstc->mstm; - return &mstm->msto[head->base.index]->encoder; - } - return NULL; + + return &mstc->mstm->msto[head->base.index]->encoder; } static struct drm_encoder * nv50_mstc_best_encoder(struct drm_connector *connector) { struct nv50_mstc *mstc = nv50_mstc(connector); - if (mstc->port) { - struct nv50_mstm *mstm = mstc->mstm; - return &mstm->msto[0]->encoder; - } - return NULL; + + return &mstc->mstm->msto[0]->encoder; } static enum drm_mode_status @@ -926,10 +920,21 @@ nv50_mstc_get_modes(struct drm_connector *connector) return ret; } +static int +nv50_mstc_atomic_check(struct drm_connector *connector, + struct drm_connector_state *state) +{ + struct nv50_mstc *mstc = nv50_mstc(connector); + + return drm_dp_mst_connector_atomic_check(connector, state, + &mstc->mstm->mgr); +} + static const struct drm_connector_helper_funcs nv50_mstc_help = { .get_modes = nv50_mstc_get_modes, .mode_valid = nv50_mstc_mode_valid, + .atomic_check = nv50_mstc_atomic_check, .best_encoder = nv50_mstc_best_encoder, .atomic_best_encoder = nv50_mstc_atomic_best_encoder, }; -- 2.17.1