Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3201554pxk; Mon, 21 Sep 2020 07:45:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx/WOWJ9cm2XS2Kj3DQQ7Ypm4Qz682HReHydkvOcfM+ONi6R3QgDoktGXAqS2mLpb6LAAt1 X-Received: by 2002:a17:906:71c9:: with SMTP id i9mr49309124ejk.250.1600699515258; Mon, 21 Sep 2020 07:45:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600699515; cv=none; d=google.com; s=arc-20160816; b=TAlf+5v7OZnCkj8e8k3ULegN5bC/SO9epDTrOouuoAsJyDKnEllXeKgNvEJKD+4HKA CqQwEnTfaoRfUeQ3WF7OqHMgZBZVcDtE+Cst7cGDDrm9mVM+jHPKqJYqX81gnMm/uTxZ VznRrfkiGozb4blOnRAWdIooxac2BOQzjtxVJ5YrVJQ8FOM8o8hcNBtC+XEeaFevOBAL tUSR1l7RWOGBAOrnI1WBO0uMDRt9AaNptGR82eeU5PplWNTQH1GVDjLywuqh9tt6FAWR 5z93G6DAR4bBR4x8JJu1Rolo/tk4flAHVWtFDcR5UHXxDxCpPLED6M72RCfsE79hCNrc iFtg== 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=YtMr+oL515drtRkjRtSMgvesi/YEcrZHQVqy8O/BQQQ=; b=KE321Fy6CrcgV4Cd4HH0wa3z+R+2nTVnMUdUi1HY+bMelm5/zI0xbDZ1b3J7Gsczkg lVC7jAN8awpaQV1YEJVJuHGZsacyHXPQk3h9fDU+fVKro1b3HadnWNfkYc6L6BSwUcmP RD/GYAUBTIjXyjgO1fKM+Ml8xBJMDOPU1mbKuth1PUMVZbEEntAGNGWXHnTx8RyPFl9r QcjyDbS+gsOHnS7qqh5L0IshQzQWzJGOp20DVHGDNyAQLrJZZTrlrQ3QFaS5hWWk4mR2 aF4lzSajCzE5MhdYb1k5+jZdFbLdMn9xfva7mPAF1IjGA23lsy9KeGUEC13iNcg310i4 DRow== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=QJEjVGub; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ci4si8146966ejc.612.2020.09.21.07.44.51; Mon, 21 Sep 2020 07:45:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=QJEjVGub; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727897AbgIUOmr (ORCPT + 99 others); Mon, 21 Sep 2020 10:42:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:49798 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727989AbgIUOlM (ORCPT ); Mon, 21 Sep 2020 10:41:12 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9B4522388E; Mon, 21 Sep 2020 14:41:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1600699271; bh=BCGAqlWnO6+8kS1OsNDT/8VjpLmM3QQVmJ1VQfwz5i0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QJEjVGubG/78feDv0n5GvoPhGJcI3gCbVAlSDLLAbf5KeJHMm07Pwcuo3cBvLqK2L FP2zwo/khPo/YZDvdRWzm4p0Zu99z2W54k1dIkGt2xDS4H1/RIl1KeySucuIASon35 T8MDd1Gk0jnNwziWcFQvSD7SaqfacLUKJpzh3JD8= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?Michel=20D=C3=A4nzer?= , Daniel Vetter , Nicholas Kazlauskas , Alex Deucher , Sasha Levin , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 5.4 13/15] drm/amdgpu/dc: Require primary plane to be enabled whenever the CRTC is Date: Mon, 21 Sep 2020 10:40:52 -0400 Message-Id: <20200921144054.2135602-13-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200921144054.2135602-1-sashal@kernel.org> References: <20200921144054.2135602-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Michel Dänzer [ Upstream commit 2f228aab21bbc74e90e267a721215ec8be51daf7 ] Don't check drm_crtc_state::active for this either, per its documentation in include/drm/drm_crtc.h: * Hence drivers must not consult @active in their various * &drm_mode_config_funcs.atomic_check callback to reject an atomic * commit. atomic_remove_fb disables the CRTC as needed for disabling the primary plane. This prevents at least the following problems if the primary plane gets disabled (e.g. due to destroying the FB assigned to the primary plane, as happens e.g. with mutter in Wayland mode): * The legacy cursor ioctl returned EINVAL for a non-0 cursor FB ID (which enables the cursor plane). * If the cursor plane was enabled, changing the legacy DPMS property value from off to on returned EINVAL. v2: * Minor changes to code comment and commit log, per review feedback. GitLab: https://gitlab.gnome.org/GNOME/mutter/-/issues/1108 GitLab: https://gitlab.gnome.org/GNOME/mutter/-/issues/1165 GitLab: https://gitlab.gnome.org/GNOME/mutter/-/issues/1344 Suggested-by: Daniel Vetter Acked-by: Daniel Vetter Reviewed-by: Nicholas Kazlauskas Signed-off-by: Michel Dänzer Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 60e50181f6d39..2384aa018993d 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -4299,19 +4299,6 @@ static void dm_crtc_helper_disable(struct drm_crtc *crtc) { } -static bool does_crtc_have_active_cursor(struct drm_crtc_state *new_crtc_state) -{ - struct drm_device *dev = new_crtc_state->crtc->dev; - struct drm_plane *plane; - - drm_for_each_plane_mask(plane, dev, new_crtc_state->plane_mask) { - if (plane->type == DRM_PLANE_TYPE_CURSOR) - return true; - } - - return false; -} - static int count_crtc_active_planes(struct drm_crtc_state *new_crtc_state) { struct drm_atomic_state *state = new_crtc_state->state; @@ -4391,19 +4378,20 @@ static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc, return ret; } - /* In some use cases, like reset, no stream is attached */ - if (!dm_crtc_state->stream) - return 0; - /* - * We want at least one hardware plane enabled to use - * the stream with a cursor enabled. + * We require the primary plane to be enabled whenever the CRTC is, otherwise + * drm_mode_cursor_universal may end up trying to enable the cursor plane while all other + * planes are disabled, which is not supported by the hardware. And there is legacy + * userspace which stops using the HW cursor altogether in response to the resulting EINVAL. */ - if (state->enable && state->active && - does_crtc_have_active_cursor(state) && - dm_crtc_state->active_planes == 0) + if (state->enable && + !(state->plane_mask & drm_plane_mask(crtc->primary))) return -EINVAL; + /* In some use cases, like reset, no stream is attached */ + if (!dm_crtc_state->stream) + return 0; + if (dc_validate_stream(dc, dm_crtc_state->stream) == DC_OK) return 0; -- 2.25.1