From patchwork Fri Jan 24 11:14:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 13949286 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2142EC0218C for ; Fri, 24 Jan 2025 11:14:41 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8616210E856; Fri, 24 Jan 2025 11:14:40 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="CXlX64aK"; dkim-atps=neutral Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9E77510E7F8 for ; Fri, 24 Jan 2025 11:14:34 +0000 (UTC) Received: by mail-lj1-f177.google.com with SMTP id 38308e7fff4ca-30737db1ab1so17874281fa.1 for ; Fri, 24 Jan 2025 03:14:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737717273; x=1738322073; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KQumNHb0czdV26nphZSgSBzfVIc/sINg5yBNO6XQGak=; b=CXlX64aK1PJ/exTrnzwiYCyuW1A89/84PsfeSUZXn8AWR7ulmYU0lMiU2U48tydsPq XZpcoI6fZd8SjiRL0gdnqm4mVPXKA9KfrK02Mc6QPUaWwbAU6CMiQSe4z9BxCYwvd6Gs 2Pc1BagxD1Z4J6AJYOYSL3Rk8dVqi3XYoumE5ySgbZzgmaeEMEmAaw2A2wHxXVz/dx/u KKwRjzotnPlJUOrOF37Hp88K1zkJ4ST5nb4axNrlYTDXQUn7U50yjCc4vEpSU+FMRnRP /NRRiV7+SDsP9RQtGj1QSo14HjyTIWU+R/sXnXR6WSkKuYF8gNkjgO3HN7yA28oUpD8V 2cOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737717273; x=1738322073; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KQumNHb0czdV26nphZSgSBzfVIc/sINg5yBNO6XQGak=; b=POIFT+y59ZxYjAZqmNw0f+qv6Cnh7MlttSfH5wm0dF5Zr8wZZ9y+4rTgo3IJohdrQ4 mJNA8lu/3AChxw371xNWOx7/o/xeN+7d0Vo0ydJiZHrxTjKsPLe/XjT7VSymFYyMb7Dh zhhUGm12fLFzNvQD4Ti32QgY4yNN/itrkRzWRQ1XhcdjSTZiR2y7tQBWxRj8kidjYN6z twx+ULkVqOi+Me+KHN+sBwrc2c2kSrRpbEVfZ+nfG/HuMpesfELDSt462+l3a6sDzU4X xIp3bziO3UohzR/Sd7bb7wFM/4DlOxWQ2ugV9mjBS1l8oh2krah+1wniq6bua4YBuq8z MCDQ== X-Gm-Message-State: AOJu0YxiuCllj3f+vEorX6QRHkmBNZ/zYFGSB8ogkC4ipyiMcZB5UBgO yRMbJA3XzQ/S1Qi45KscDXbWPVAkEvXLCZ88fM/twTWNvo24xp1RAYlOBNA9YBA= X-Gm-Gg: ASbGncuPEwV1q2ZWdbsAIfP8xwUzex1W3x0XbrH99gAyey2dVDzfq7i3GBZye4L6jS0 OH0PCiYoWTwZOGA24zbq3J1hc37ghWvUXR1Q0ArcyndCS+9hrrXBQtE+cOw+1ef2i7IDt1DGbOm VgFHaKkVTEZg6+RBMBmvjnsOTy9+jkBTkYf/WI89v68/t1MpvQG7bH+JSwkcza6XnLco5TkSRi1 ig+6SU+3qxQPKkWYm/Kp+fILA9TD+WwzxpTqPSBZuIHarPfGRxGladXVcVoGIHW9ZwqtOMdoUf+ zmasTSpRiMBs X-Google-Smtp-Source: AGHT+IGY2wva+MkPCdRgK1/XNjI/82GaXQEwsVxES2OrmcmMYbeyl0REkjsBdSaqM3fqWG9eRyRhsw== X-Received: by 2002:a05:651c:1611:b0:300:3778:4dbb with SMTP id 38308e7fff4ca-3072ca60c5emr122341211fa.1.1737717272797; Fri, 24 Jan 2025 03:14:32 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3076bacba5esm3289701fa.36.2025.01.24.03.14.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2025 03:14:31 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 24 Jan 2025 13:14:19 +0200 Subject: [PATCH 1/6] drm/atomic-helper: add atomic_needs_modeset callbacks MIME-Version: 1.0 Message-Id: <20250124-atomic-needs-modeset-v1-1-b0c05c9eda0f@linaro.org> References: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> In-Reply-To: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Airlie , Jocelyn Falempe , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Kalyan Thota Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8241; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=4R2TAjvRhPbl5nWb6SOSqQ5SIwkmWTVcXua85X57qZA=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ/rkMpFJsYka4Z9WvN3MmWi9d9k0jT2adv2u66NZTtzdx d5gL1XbyWjMwsDIxSArpsjiU9AyNWZTctiHHVPrYQaxMoFMYeDiFICJaKSx/0+1thHwuKvL9dnl NGtW2dNH9QzqLSIXYg5lB8uvOWL2+rlhg9nFLQ2hNs2cecLzM5NUl/J/0m0O5vcOE46d86Du/yG BP1e3+JoZrg4XTMw8tqnlk/XLut33DN91X93L67NXRZxB7bnvxCvW+8Scq1//tdLVvWUrpDR/72 ujQpEJYQeMONOPLronJbxUtu8gk1jMNftvsS+dQu5PskyakdXSuyUx2/ls39XklafOl2QWXLRuP O+rlBrG3fw4bLmlNlPFLeMJ796t2jRr5r6dS24e8ZrwX4SPO9Hy5fauaE6+06UzXbzulss5mF8s cu06tGNq0nelhOkzNdQd9RjfcEXMbeWWt5SQmsQ5za8WAA== X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Despite drm_atomic_helper_check_modeset() and drm_atomic_helper_check() documenting that the function should be run again if atomic_check() callback changes drm_crtc_state.mode_changed some drivers ignore it and don't rerun the helpers. To simplify such drivers and remove the need to rerun the helper functions provide additional set of callbacks, atomic_needs_modeset(). These callbacks are executed at a proper time, they return a boolean which signifies that corresponding CRTC should undergo a full modeset. This way the atomic_check() callbacks can stop updating the drm_crtc_state.mode_changed. Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/drm_atomic_helper.c | 59 ++++++++++++++++++++ include/drm/drm_modeset_helper_vtables.h | 92 ++++++++++++++++++++++++++++++++ 2 files changed, 151 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 3034ba09c0ee5791ffd2f4130bd84b4cc4676fae..1f689ccd9b0d7f655c6a49e642d652b815a0e8e1 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -649,6 +649,8 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, struct drm_crtc_state *old_crtc_state, *new_crtc_state; struct drm_connector *connector; struct drm_connector_state *old_connector_state, *new_connector_state; + struct drm_plane *plane; + struct drm_plane_state *new_plane_state, *old_plane_state; int i, ret; unsigned int connectors_mask = 0, user_connectors_mask = 0; @@ -708,6 +710,9 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, for_each_oldnew_connector_in_state(state, connector, old_connector_state, new_connector_state, i) { const struct drm_connector_helper_funcs *funcs = connector->helper_private; + struct drm_encoder *encoder = new_connector_state->best_encoder; + const struct drm_encoder_helper_funcs *enc_funcs = + encoder ? encoder->helper_private : NULL; WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex)); @@ -734,6 +739,25 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, new_crtc_state->connectors_changed = true; } + if ((funcs->atomic_needs_modeset && + funcs->atomic_needs_modeset(connector, state)) || + (enc_funcs && enc_funcs->atomic_needs_modeset && + enc_funcs->atomic_needs_modeset(encoder, state))) { + if (new_connector_state->crtc) { + new_crtc_state = + drm_atomic_get_new_crtc_state(state, + new_connector_state->crtc); + new_crtc_state->mode_changed = true; + } + + if (old_connector_state->crtc) { + new_crtc_state = + drm_atomic_get_new_crtc_state(state, + old_connector_state->crtc); + new_crtc_state->mode_changed = true; + } + } + if (funcs->atomic_check) ret = funcs->atomic_check(connector, state); if (ret) { @@ -746,6 +770,29 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, connectors_mask |= BIT(i); } + for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, i) { + const struct drm_plane_helper_funcs *funcs; + + funcs = plane->helper_private; + if (!funcs || !funcs->atomic_needs_modeset) + continue; + + if (!funcs->atomic_needs_modeset(plane, state)) + continue; + + if (new_plane_state->crtc) { + new_crtc_state = drm_atomic_get_new_crtc_state(state, + new_plane_state->crtc); + new_crtc_state->mode_changed = true; + } + + if (old_plane_state->crtc) { + new_crtc_state = drm_atomic_get_new_crtc_state(state, + old_plane_state->crtc); + new_crtc_state->mode_changed = true; + } + } + /* * After all the routing has been prepared we need to add in any * connector which is itself unchanged, but whose CRTC changes its @@ -753,6 +800,18 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, * crtc only changed its mode but has the same set of connectors. */ for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { + const struct drm_crtc_helper_funcs *funcs; + + if (!new_crtc_state->crtc) + continue; + + funcs = crtc->helper_private; + if (!funcs || !funcs->atomic_needs_modeset) + continue; + + if (funcs->atomic_needs_modeset(crtc, state)) + new_crtc_state->mode_changed = true; + if (!drm_atomic_crtc_needs_modeset(new_crtc_state)) continue; diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h index b62f41f489625e5177bdc05eef950e6c18c219fd..a83999109a49321536956c8b1b93fb4b0d0f7ce2 100644 --- a/include/drm/drm_modeset_helper_vtables.h +++ b/include/drm/drm_modeset_helper_vtables.h @@ -304,6 +304,29 @@ struct drm_crtc_helper_funcs { */ void (*disable)(struct drm_crtc *crtc); + /** + * @atomic_needs_modeset: + * + * This function is called at the beginning of + * drm_atomic_helper_check_modeset() to verify whether the CRTC needs a + * full mode set or not. + * + * This hook is optional. + * + * NOTE: + * + * This function is called in the check phase of an atomic update. The + * driver is not allowed to change anything outside of the + * &drm_atomic_state update tracking structure passed in. + * + * RETURNS: + * + * True if the corresponding CRTC should undergo a full modeset, False + * otherwise. + */ + bool (*atomic_needs_modeset)(struct drm_crtc *crtc, + struct drm_atomic_state *state); + /** * @atomic_check: * @@ -800,6 +823,29 @@ struct drm_encoder_helper_funcs { */ void (*enable)(struct drm_encoder *encoder); + /* + * @atomic_needs_modeset: + * + * This function is called at the beginning of + * drm_atomic_helper_check_modeset() to verify whether the connected + * CRTC needs a full mode set or not. + * + * This hook is optional. + * + * NOTE: + * + * This function is called in the check phase of an atomic update. The + * driver is not allowed to change anything outside of the + * &drm_atomic_state update tracking structure passed in. + * + * RETURNS: + * + * True if the corresponding CRTC should undergo a full modeset, False + * otherwise. + */ + bool (*atomic_needs_modeset)(struct drm_encoder *encoder, + struct drm_atomic_state *state); + /** * @atomic_check: * @@ -1067,6 +1113,29 @@ struct drm_connector_helper_funcs { struct drm_encoder *(*atomic_best_encoder)(struct drm_connector *connector, struct drm_atomic_state *state); + /** + * @atomic_needs_modeset: + * + * This function is called at the beginning of + * drm_atomic_helper_check_modeset() to verify whether the connected + * CRTC needs a full mode set or not. + * + * This hook is optional. + * + * NOTE: + * + * This function is called in the check phase of an atomic update. The + * driver is not allowed to change anything outside of the + * &drm_atomic_state update tracking structure passed in. + * + * RETURNS: + * + * True if the corresponding CRTC should undergo a full modeset, False + * otherwise. + */ + bool (*atomic_needs_modeset)(struct drm_connector *connector, + struct drm_atomic_state *state); + /** * @atomic_check: * @@ -1284,6 +1353,29 @@ struct drm_plane_helper_funcs { */ void (*end_fb_access)(struct drm_plane *plane, struct drm_plane_state *new_plane_state); + /** + * @atomic_needs_modeset: + * + * This function is called at the beginning of + * drm_atomic_helper_check_modeset() to verify whether the connected + * CRTC needs a full mode set or not. + * + * This hook is optional. + * + * NOTE: + * + * This function is called in the check phase of an atomic update. The + * driver is not allowed to change anything outside of the + * &drm_atomic_state update tracking structure passed in. + * + * RETURNS: + * + * True if the corresponding CRTC should undergo a full modeset, False + * otherwise. + */ + bool (*atomic_needs_modeset)(struct drm_plane *plane, + struct drm_atomic_state *state); + /** * @atomic_check: * From patchwork Fri Jan 24 11:14:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 13949285 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CF755C02181 for ; Fri, 24 Jan 2025 11:14:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4097910E810; Fri, 24 Jan 2025 11:14:38 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="nvbMfxbc"; dkim-atps=neutral Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) by gabe.freedesktop.org (Postfix) with ESMTPS id 020D810E810 for ; Fri, 24 Jan 2025 11:14:36 +0000 (UTC) Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-30613037309so19740541fa.3 for ; Fri, 24 Jan 2025 03:14:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737717275; x=1738322075; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=0sacSme45d+zAHAZW9ym+kv+4dwtO/HOlcohR4MIv7o=; b=nvbMfxbci1KqrhwMlLRiNBeQHQyfUOh/A5/lJ+fDnVOIYxQuzeJuF1l7KaL0vc6Q0z yNOomkgSd1Bzh9p0Iw9cYhbjYy86VzGATT0HgQfe8K82lyvuRiqehmlSJ8gyEhoaudVS qErmMX9AYW2TOfTFD3LRY2wbVkdqJyA42Vr689Xe5VyCMM6VleQ5vy/nna4OI82NCpQE LTyf+faGhBVQYkLrzjVxgtWuxHmBDOIFQzoMfZU74+rD1Hhb/A7SJhxtaR7zMKX++mTc HsZt5VxmixgZg0HnC32NgaotdUKzqpf2w6I9v0n1KuXL1V6xn7hp/SODSndmE1o8u0Cm ifvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737717275; x=1738322075; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0sacSme45d+zAHAZW9ym+kv+4dwtO/HOlcohR4MIv7o=; b=cM96lunvyLQp9LT0abOWD2DYE1G0RGNY7aWfQAOOJh3yY5lHQm86U37J6YiXHZ3icV y1jqPRzXi9TNyVCYnisQSzEj2h5yBGCiw5JJQ5XIMn/Q3IcZeHtg5itt0osKs5HoTg5b QSKnNMAkdh2NdkHDE3sZMT5nNf7wHhFjrpUahX5VAPVzZuXedIH5bXKypmwPuGORfUXn TexE+qt9zYtZrt5Iufrt/mi5MoNMEvOeMGHGzE0AqSv6NUchrnkFE8YJ1+l8EB/U9VlG F6enDEc/PhV6mnLLPDm923EifLyBaG3+3jAjEhqZ15cmeSWkcQQJEnZFKYoPiGBHaoKC 7jtA== X-Gm-Message-State: AOJu0YzDuCE4169OnE0nF0cwEh26Omb5Pne5PUmqWIfDBIRSv+mY0xiS 0ui0Rabpltgf7eVxXR7qRCCcgcWM3qWEgVK31rFxLfDadJhHXJB2i3bgLNa5uaY= X-Gm-Gg: ASbGncsfTlrOavVKeGE/aBB0+Fj1epOAcvm7w6B7f/p1I/5cUVXTdTnt2/e+p1RXMKW 3VmmM2hyNFE6eX247tfBYXg7rtPRxcqeiqIJfz3O2jmAYy3VXd9zW19SOu5PSjs7InvT+sN0qMj 1cQKDm6fwIkKYly+y2PJfS3/k+Yl7nrdSn/C/4I5cmfDaNGaZvxI7VovYxcZVgyTvkwF2wn9GJC pPsfGQRioiaHPExTxf3xV6CAXeo6GegGrvOaRm5PRq61jcL2979lR93zDbUdV48SATfFxkujUk/ 6A3jZ4dGixYZ X-Google-Smtp-Source: AGHT+IEKsI1FHKsU/oq63Owrwj/AxIolbDVcCg9fk2AcSbkPZFLWwNFBfl+vzCRP0IAnp1mAghhfXQ== X-Received: by 2002:a2e:a901:0:b0:2ff:cfbb:c893 with SMTP id 38308e7fff4ca-3072ca60a30mr114304741fa.6.1737717275242; Fri, 24 Jan 2025 03:14:35 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3076bacba5esm3289701fa.36.2025.01.24.03.14.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2025 03:14:34 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 24 Jan 2025 13:14:20 +0200 Subject: [PATCH 2/6] drm/mgag200: move format check to drm_plane_helper.atomic_needs_modeset MIME-Version: 1.0 Message-Id: <20250124-atomic-needs-modeset-v1-2-b0c05c9eda0f@linaro.org> References: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> In-Reply-To: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Airlie , Jocelyn Falempe , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Kalyan Thota Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3634; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=pwmtWNrqDVg2rI64aHz+boP7gTDUq9GICL0T2h/DMTk=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnk3YURWUWU01A6XqaUSIWW8FOy+qff+XjWYSkZ 56VP0FXSWeJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ5N2FAAKCRCLPIo+Aiko 1cFHB/4xZMU+AzbdxZr6M/tEKI3BPADtj3wkgUMr8+GsJt3pS5i0aL+uSRnAQ0w90ahY+xj1NGR ydwByJx+LU6dcZ9VBukcBNtjs+jW36FmNm4n2ATCuO7G1j7UtnUw446vYER8Y9XKYuMEL8YcUo+ 3OilKZKQLU3Is/wYwRtbcix/JeDmw34ZFQkpFSlOn95EopH6vBbOVDxz3k69cW1x1QFvMJYnYRH bBSgj/YBG+RkwVoBwxO/hgkj/MsUWdVdqp4mzFYQOnC49PetFw7e7kvpieLlz0C4X4CQy4jmyO3 W3kgVzYd+wz73NA+9RiEMUfMwT3WubiRVFl9c+y+CzZ9qUqX X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" For the mgag200 driver if the format of the plane changes, then the PLL rate needs to be changed. This requires performing a full CRTC modeset. Current code sets drm_crtc_state.mode_changed from the plane's atomic_check() callback and then doesn't call drm_atomic_helper_check() again. It works for the mgag200 driver, but it breaks calling convention of the drm_atomic_helper_check() function. Move the check to the new atomic_needs_modeset() callback, removing the need to set the flag in the atomic_check(). Note: this also checks the check to compare format to the old_plane_state->fb->format instead of using plane->state->fb->format. Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/mgag200/mgag200_drv.h | 2 ++ drivers/gpu/drm/mgag200/mgag200_mode.c | 27 ++++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h b/drivers/gpu/drm/mgag200/mgag200_drv.h index 0608fc63e588bb60f1b087d263a34cfd11624b52..42cf0826ed14e0e9e4ed1b7920486bda008a0f99 100644 --- a/drivers/gpu/drm/mgag200/mgag200_drv.h +++ b/drivers/gpu/drm/mgag200/mgag200_drv.h @@ -354,6 +354,8 @@ extern const uint32_t mgag200_primary_plane_formats[]; extern const size_t mgag200_primary_plane_formats_size; extern const uint64_t mgag200_primary_plane_fmtmods[]; +bool mgag200_primary_plane_helper_atomic_needs_modeset(struct drm_plane *plane, + struct drm_atomic_state *new_state); int mgag200_primary_plane_helper_atomic_check(struct drm_plane *plane, struct drm_atomic_state *new_state); void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane, diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c index fb71658c3117b25311f19276d6f4ffdee157ac17..63285b356326a13b465387e5d7ac90ec9fe867cf 100644 --- a/drivers/gpu/drm/mgag200/mgag200_mode.c +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c @@ -463,12 +463,31 @@ const uint64_t mgag200_primary_plane_fmtmods[] = { DRM_FORMAT_MOD_INVALID }; +bool mgag200_primary_plane_helper_atomic_needs_modeset(struct drm_plane *plane, + struct drm_atomic_state *new_state) +{ + struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(new_state, plane); + struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(new_state, plane); + struct drm_framebuffer *new_fb = new_plane_state->fb; + struct drm_framebuffer *fb = NULL; + + if (old_plane_state) + fb = old_plane_state->fb; + + if (!new_fb) + return false; + + if (!fb || (fb->format != new_fb->format)) + return true; + + return false; +} + int mgag200_primary_plane_helper_atomic_check(struct drm_plane *plane, struct drm_atomic_state *new_state) { struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(new_state, plane); struct drm_framebuffer *new_fb = new_plane_state->fb; - struct drm_framebuffer *fb = NULL; struct drm_crtc *new_crtc = new_plane_state->crtc; struct drm_crtc_state *new_crtc_state = NULL; struct mgag200_crtc_state *new_mgag200_crtc_state; @@ -486,12 +505,6 @@ int mgag200_primary_plane_helper_atomic_check(struct drm_plane *plane, else if (!new_plane_state->visible) return 0; - if (plane->state) - fb = plane->state->fb; - - if (!fb || (fb->format != new_fb->format)) - new_crtc_state->mode_changed = true; /* update PLL settings */ - new_mgag200_crtc_state = to_mgag200_crtc_state(new_crtc_state); new_mgag200_crtc_state->format = new_fb->format; From patchwork Fri Jan 24 11:14:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 13949287 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3D5F7C0218B for ; Fri, 24 Jan 2025 11:14:42 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BDEF610E868; Fri, 24 Jan 2025 11:14:40 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="doUFmtRp"; dkim-atps=neutral Received: from mail-lj1-f169.google.com (mail-lj1-f169.google.com [209.85.208.169]) by gabe.freedesktop.org (Postfix) with ESMTPS id B56E010E868 for ; Fri, 24 Jan 2025 11:14:38 +0000 (UTC) Received: by mail-lj1-f169.google.com with SMTP id 38308e7fff4ca-3022484d4e4so21374121fa.1 for ; Fri, 24 Jan 2025 03:14:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737717277; x=1738322077; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=49SRE7UkGSC+0Ssj+5USiH7s/Cegkl8gvGe0j5unkHA=; b=doUFmtRpDjMhNdUR9ob4RivhZLGybaPI6tFdd2p25SUxsH//G4EVgrXzABKDwVAaJD aHvyPm5qepuB2ALoragEd+DoogKMXvV6kDO5cHHjLbfmHjVotAe4zwDYFgoHsNpA8r6D ywUCPWIC44rxjkDDTidG0qjp1HIxtVjQqqItHP6V7R+10o2B4/a+JxtqoJdglCq3GDoB 7RmGfTZnI7JUAVVPRs4UnP/lBVLKDEfR3cSfyo4Yj2FwCGXGHPiQSoCxPN6pAeILdj7c H2evWuQjp6zf/HTBFNEfK6y0xciN95ZEgRAn1SzlNZYBSQXgw8uPxcP0qu/mkgx7JVAs y6Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737717277; x=1738322077; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=49SRE7UkGSC+0Ssj+5USiH7s/Cegkl8gvGe0j5unkHA=; b=RCOMEgDD8XD9n/JW8y0oyNsPwxrrRomEwnSbQsyWw9lPp9Lq1dY8YhXfJNCgtuf5Q5 BVuZCFqw87nUL/MLZ9hSipevoU0NrFGSWkNBzkgka3oZpr/zP7++YxDPJTNLrNNXCuGB v0cvQUEoNmanBrQNaeK5Wu96GBrHdQavQ9mr2nv4q6I2ZpHBt1dLHFznfGeqC6I3Zos8 G3cgoT/m/BessKA5xmJHVcZN5r2blucdmtJvp8O++5514F+2hjvcRTwOhaq8qCURCQkB RiWllTHfo7bsME/hWVgqmEC/0FfX215Z/FYyZgELjiE1KyP3kOEqauuDnvGrcP5efniM Ow+w== X-Gm-Message-State: AOJu0YwIzNHFaYo9TbXV2/rricBsugT3dZ3Ra5SLu7cgK992fUNKxysi yqbmq1+aMFmm/VPbi1ju0+uD5NwNUWGZkSuPjfwRZ7Aoy1pddC0f7HN4klwQeu8= X-Gm-Gg: ASbGncuUToQio86UoW4rrxi22PL/TDCSSKzoRo+pqgiQOZSWmaNsG078DWULKLkS8se pR2uyt0FQoqUZ5FUA77pTvEeIgcy7Bs3IEtqXMyRg+rYIgruxTp8ClStCahZ/h/OC4cHR/sm4VH p3BmpT7arAEtOmUBrGVejzYQADKA3IiT4NtVVwDwFU0TVWsywwBOgkwk73k6Lzwd7KiS/qmM6uC A9FbUIxikBwyC6o0NvoJJS+2ocAquNmscp4kafrD480fnV4akd2f4xpdsQVCno/tzB9OazfuQWM TSedcgrjLdih X-Google-Smtp-Source: AGHT+IHvm/UlHmhJYepFpY9+XAqem3yxGy84kPFrHVQOs3BnnMkbppx70vdw9RjWnl6viFsEaAv8ig== X-Received: by 2002:a05:651c:1309:b0:300:3a15:8f0d with SMTP id 38308e7fff4ca-3072cb284e5mr104974551fa.34.1737717276912; Fri, 24 Jan 2025 03:14:36 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3076bacba5esm3289701fa.36.2025.01.24.03.14.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2025 03:14:35 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 24 Jan 2025 13:14:21 +0200 Subject: [PATCH 3/6] drm/msm/dpu: stop upgrading commits by enabling allow_modeset MIME-Version: 1.0 Message-Id: <20250124-atomic-needs-modeset-v1-3-b0c05c9eda0f@linaro.org> References: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> In-Reply-To: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Airlie , Jocelyn Falempe , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Kalyan Thota Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, Simona Vetter X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2696; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=nTNh12sSi+bFS767UAWn/EcHJvQRJYETlDdgdnAZ+xY=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnk3YVkHVEQzO2H42gTfxsWoNpxy0mROcV3oEz4 AyfFaZyJYWJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ5N2FQAKCRCLPIo+Aiko 1boSB/9Fjf0rWskLkp1CRYYrfV8Hxc3Cp6gZ4ThZcniTvGGLG+/0McgLdqyk+A11cU2jzsLNM4g +V2aI4HtslMp1QD6fmTapUdo998Shgg1k7IDk7lObsiKVwfP9CQln2bLNyPqcpo4AQEBdk4vKIT +KPBXsjDxBOCrTTfaI9JHj3JX8J35I+7K+U4bA5DBcCdhc5zIExDoAxr7RnL8yin2eWp0JkMiTY 4kaQLwdPGFFr2tuzRbiV8wUm2x2kT/Oj8qSFKezc8VLG5XLzIM3AXGX1Qrg70eHCTL50IlzF6gx sGbZtPmwyIMNkDV2Jck3IckCAc6KtpDzcDv/6Uj0iyBx1UgW X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" As pointed out by the commit c5e3306a424b ("drm/atomic: clarify the rules around drm_atomic_state->allow_modeset"), the drivers are now allowed to set the drm_atomic_state.allow_modeset flag, as it might break userspace API. Stop upgrading the commit to full modeset. Instead set the drm_crtc_state.mode_changed if modeset is allowed and if CTM has been enabled or disabled AND check that DSPPs are assigned to the CRTC if CTM is enabled. NOTE: This change has userspace impact, as now non-modeset commits which enable CTM will fail. Fixes: 82836692d5d7 ("drm/msm/dpu: manage DPU resources if CTM is requested") Reported-by: Simona Vetter Closes: https://lore.kernel.org/r/20231010170746.617366-1-daniel.vetter@ffwll.ch/ Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 9 +++++++++ drivers/gpu/drm/msm/msm_atomic.c | 10 ++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index a24fedb5ba4f1c84777b71c669bac0241acdd421..84313bc1f9888452914612fab559b390cf38c705 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -828,6 +828,15 @@ static int dpu_encoder_virt_atomic_check( global_state, crtc_state); } + if (crtc_state->ctm) { + struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc_state); + int i; + + for (i = 0; i < cstate->num_mixers; i++) + if (!cstate->mixers[i].hw_dspp) + return -EINVAL; + } + trace_dpu_enc_atomic_check_flags(DRMID(drm_enc), adj_mode->flags); return ret; diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c index 5c8c0661cfcd85445950e0f273b8879e7f077727..fdbe49edf2e1506ebeab500e782d456d77ba4fcf 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c @@ -189,17 +189,11 @@ int msm_atomic_check(struct drm_device *dev, struct drm_atomic_state *state) struct drm_crtc *crtc; int i, ret = 0; - /* - * FIXME: stop setting allow_modeset and move this check to the DPU - * driver. - */ for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { - if ((old_crtc_state->ctm && !new_crtc_state->ctm) || - (!old_crtc_state->ctm && new_crtc_state->ctm)) { + if ((!!old_crtc_state->ctm != !!new_crtc_state->ctm) && + state->allow_modeset) new_crtc_state->mode_changed = true; - state->allow_modeset = true; - } } if (kms && kms->funcs && kms->funcs->check_mode_changed) From patchwork Fri Jan 24 11:14:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 13949290 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 86097C0218D for ; Fri, 24 Jan 2025 11:14:47 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0531A10E912; Fri, 24 Jan 2025 11:14:46 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="u+PPjaQk"; dkim-atps=neutral Received: from mail-lj1-f175.google.com (mail-lj1-f175.google.com [209.85.208.175]) by gabe.freedesktop.org (Postfix) with ESMTPS id 37C4210E868 for ; Fri, 24 Jan 2025 11:14:40 +0000 (UTC) Received: by mail-lj1-f175.google.com with SMTP id 38308e7fff4ca-306007227d3so19968531fa.0 for ; Fri, 24 Jan 2025 03:14:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737717278; x=1738322078; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Fwj+mo5UAroSLJxp5Ewzj53zIrMhEzrxypv3EzqL7vc=; b=u+PPjaQk0QWd1M6pKcYXViA+MHouEE/wJp5lL7hGlCJG/mjFlBlbkLbe2qqisO7nzU l0ZEGFvUcDeVH+xHTzXmWXkhm7TA9lFurJHTvRywBbYaJ2/3JzcFFRr+yI0tu70fkFhC NNPdirM4rQEJiLNXWau+wswoZsGtF3rxSF1DtmxvqnsXJu4HyLP1K7WhyQqxIRh0klrc fkPV5lduMZ+SSL/DC6l/JBD/1fa+qYaKTt8ETUCI4v3W2KysQaz2fb/ZiUHZ8mcPYjz5 NpGzNm4mhNziTXbdwd6EvkkhRO5TnsBKHEt1kPvFpYZ9UEm6XrwOb69QyBe6VntZTHib iy8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737717278; x=1738322078; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Fwj+mo5UAroSLJxp5Ewzj53zIrMhEzrxypv3EzqL7vc=; b=MDAis/1wrlb6dFqbfqg+roTvUhTqYe3BS3cq8RT8D1qwNA3OtzADktq/FXvHIhQ40s o6lcur20IZMnCC+uLwGB5zltYjggZkcVC7sBJZDR300x6Unw5RbmxJJYMteMI5n5LwaU s4RCLkQ79RymTRT8YpY316xgpfiJ0qLBaogUAuhEVLzx5sHg/Ao2IDnbKWgx12aStnqv 8aLZC6r+l8VQ/x+nMk+bR6xnB8KVd3JiawuhnOdUpaVBJwPxnqkkuvXfNG69lyEhuAvO JYa750jl4ciGex+HBHHzat1mq47L9estWEB0RZtgL+biALZgwK8Or/Ae4k5Sz/Bjxhma Kwag== X-Gm-Message-State: AOJu0YwCbzdLF1Fy2B44WYBjffF53a1cvoZs3JGcSYQqQ35aLG8euJw4 YIqkgDSnB/p9csyApOwL1apS0erV21nBOoYKNGhwsBm0lKEpZuMC2pwMMfQC3dc= X-Gm-Gg: ASbGncvRnK533S982aHPwVnfuxgLst3gD9h2DG7EoftaIE+8rmpch9DJbunb8kk6fjT PCuL6l8kRu94VGp0kIbki4mck2PX94znJtWLpFH834Tk3Q44wZT1ccUnX1Di1igofp8O0TORYMD 7uAlW/jjEMVni53AmjCqb0Ugf60sP9iH2T0aMgCAWjIj8iDUKivqBh5Aj1vOYKISMNRojgOVA35 /eDHvL5Zw3tteLsVXca06OFpdWvIGgLX0QSGUroc5R1FRgoS9DaSAPSBf4E2tqsr0xpLt/qRzM8 AGUP1vFy5aLx X-Google-Smtp-Source: AGHT+IF+hU0ZazCKVSv6vYDDyjuO4CTENcYUETOBAM8LkY/QMiYkhDEDR5ndt0J3TA6a6cqVWwwrEQ== X-Received: by 2002:a2e:a4b8:0:b0:307:2b3e:a4a9 with SMTP id 38308e7fff4ca-3072ca9c335mr96093661fa.20.1737717278457; Fri, 24 Jan 2025 03:14:38 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3076bacba5esm3289701fa.36.2025.01.24.03.14.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2025 03:14:37 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 24 Jan 2025 13:14:22 +0200 Subject: [PATCH 4/6] drm/msm/dpu: move CTM check to drm_crtc_helper.atomic_needs_modeset MIME-Version: 1.0 Message-Id: <20250124-atomic-needs-modeset-v1-4-b0c05c9eda0f@linaro.org> References: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> In-Reply-To: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Airlie , Jocelyn Falempe , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Kalyan Thota Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2997; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=YiER9uGGuMLloEwX06ETqf8kcBguXBtNB7NcpB3/rSM=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnk3YV5nq8F9m0El+GSJKXaPPIb12nQcNBZmQDv tOzihmqah2JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ5N2FQAKCRCLPIo+Aiko 1e4cCACDuTp4Lz5Xz6+mOmcEorb5i8LjmnEd0GHFi0favS9T4leDhX3UvxN1wnDqIT7/IbQ14KA IvYZOrh5j7JLlzZhKJaGSwbv7qEZqsD/OULP/+gTbyTEjwZjY4kOKBzoSdAv8gEZMwEdYkrlOzU 9FKe5VDy46cVYMrr2ekbdX0RNBD1qNrRLCZisI/vxIoZlWCSV/NX8jQvYxcbZLCyJ8F5biUbQn/ HlN9vXvPj/9esINrbv3gKi4aC5LKw1oiPVnJJS40HeyQ1u0dY+UwAnxvEnsMJsZZitQi08XsZL8 a3rVkeRPgkEvPL6XVJxU5yeXZ68SW5WD1rr2TipPVLU3Rttd X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" For the msm/dpu driver if the CTM gets enabled or disabled, the CRTC should perform resource reallocation (to get or to free the DSPP). This requires performing a full CRTC modeset. Current code sets drm_crtc_state.mode_changed from the msm_atomic_check(), from the generic code path. Move the check to the new atomic_needs_modeset() callback, removing the need to set the flag from the generic code path. Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 15 +++++++++++++++ drivers/gpu/drm/msm/msm_atomic.c | 11 +---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c index 65e33eba61726929b740831c95330756b2817e28..9a990386570e037f2b1c994a0140f2b7c4c84669 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -1189,6 +1189,20 @@ static bool dpu_crtc_needs_dirtyfb(struct drm_crtc_state *cstate) return false; } +static bool dpu_crtc_atomic_needs_modeset(struct drm_crtc *crtc, + struct drm_atomic_state *state) +{ + struct drm_crtc_state *old_crtc_state, *new_crtc_state; + + if (!state->allow_modeset) + return false; + + old_crtc_state = drm_atomic_get_old_crtc_state(state, crtc); + new_crtc_state = drm_atomic_get_new_crtc_state(state, crtc); + + return !!old_crtc_state->ctm != !!new_crtc_state->ctm; +} + static int dpu_crtc_reassign_planes(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state) { int total_planes = crtc->dev->mode_config.num_total_plane; @@ -1535,6 +1549,7 @@ static const struct drm_crtc_funcs dpu_crtc_funcs = { static const struct drm_crtc_helper_funcs dpu_crtc_helper_funcs = { .atomic_disable = dpu_crtc_disable, .atomic_enable = dpu_crtc_enable, + .atomic_needs_modeset = dpu_crtc_atomic_needs_modeset, .atomic_check = dpu_crtc_atomic_check, .atomic_begin = dpu_crtc_atomic_begin, .atomic_flush = dpu_crtc_atomic_flush, diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c index fdbe49edf2e1506ebeab500e782d456d77ba4fcf..4377233bd6447060b1300cc0d6877b6a777b1edb 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c @@ -185,16 +185,7 @@ int msm_atomic_check(struct drm_device *dev, struct drm_atomic_state *state) { struct msm_drm_private *priv = dev->dev_private; struct msm_kms *kms = priv->kms; - struct drm_crtc_state *old_crtc_state, *new_crtc_state; - struct drm_crtc *crtc; - int i, ret = 0; - - for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, - new_crtc_state, i) { - if ((!!old_crtc_state->ctm != !!new_crtc_state->ctm) && - state->allow_modeset) - new_crtc_state->mode_changed = true; - } + int ret = 0; if (kms && kms->funcs && kms->funcs->check_mode_changed) ret = kms->funcs->check_mode_changed(kms, state); From patchwork Fri Jan 24 11:14:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 13949289 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 741CCC02181 for ; Fri, 24 Jan 2025 11:14:46 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C706B10E90D; Fri, 24 Jan 2025 11:14:45 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="hPSihiqS"; dkim-atps=neutral Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by gabe.freedesktop.org (Postfix) with ESMTPS id C168910E90D for ; Fri, 24 Jan 2025 11:14:42 +0000 (UTC) Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-304e4562516so19475561fa.1 for ; Fri, 24 Jan 2025 03:14:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737717281; x=1738322081; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=O/oxMMFfQ3I3pEj54pjtnXmmwf3LThN/3TdVC/t7tnw=; b=hPSihiqSx9tZj84oe/kQdvqwJHmZp08tcGoVINaQ3BEBkGd+n+Qfu+BGErXtwGkkjJ J/2EuyfLUv/bGeTC/To0eGZJ1dH1QviT9I1Te+Rv5QIA2Nkrq6ZALpi6KwbB7tqVzWzR ojL7FNzVyOpQUAIZLeKyXjlk/7GRK+kSQ7QIYROvLa3Gb1+NSgyG1Ijm/3IIohcvDGHJ OU0rIZMdz5xVfvrTMNJVqmxmtRmXGdE79GeiFNTS3Y6YLPZv5ZP0RAQWrREHd+ajddpL 2+Dfof09dihe/LGVdUOT8XyRT9CParlZBRU8+kcuEiLsLg49WCVmZjhe7TBfPpOIKofw kr4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737717281; x=1738322081; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O/oxMMFfQ3I3pEj54pjtnXmmwf3LThN/3TdVC/t7tnw=; b=W1n7VKuDdSF+Pi6urquPKxUg+W6CqreSwJUj8vuSRPrhIS3VFAueZmq61ezyOuSn2r tXPY8ZbEWGTgqH3LORIAZFBDTjJ0buOmtjAMkM2DjxBCnx82DndmNeJceY/WdMREFNpa iQgh8iXby0BrfO/TplsthBbo0eM43WNmlWSg9hSb6+rNvC29lJlDDBn5UWMF/HwfjNYU efXH2a2WI5nfNk968Pqz9fVZk7RyqENA6o2GqMoobfKsBdcOLBrn5owOB72ZVXsEqVUD /42mGkY3YtboFs8xAMNwRZlFxT06Vq0wXsKs0jsPhwCWifigc3BGDR6l9U6XdinlgO3s 1vMQ== X-Gm-Message-State: AOJu0YwgSEeaApAWi+tnEsqKEkls1Di+jrXBIn/N2VFSHtmLYohttPnQ HFMUuXGy9n1Kc6NKqvIm2VceVvxVrgNxXhT6l6sgTpxIaSdnt+is4qCgy+zI/LU= X-Gm-Gg: ASbGncsygsVxFA2htsxKjz+d85tJVBgTZDjC2sO3uINox2ZKEow+gr4cx/Bno0Z9rBs FmqJXsKdUfl6PYTwBgp27AVRIbPdUEuI+uBKN9Dlb9HGJDJkxhbuF8uIVOcQfeFmTqcNhFoBOtZ rPC6L2cBOSa0EzokmQtRL5vzQ2qZOBPFGGoT28hHFQOLr5X6EIXZkbVB4lterpgNhVPeXet20iP zug6uiHbISnCqCPe4egldRkRNBfH9rpAXSroAA5MVEx+tMidgxLfgsBRVjuYJqWdny87RpO/cwA vk1i+qWSRcDh X-Google-Smtp-Source: AGHT+IHVMKQAcRvAe8Ru8jqcnZYt30PR8+TeSYcOpinNZ1wtFZ71833jO2mo4HCWThadfs6F2ffqfw== X-Received: by 2002:a2e:bcc5:0:b0:306:5c3:b4d0 with SMTP id 38308e7fff4ca-30761b8ba44mr32377961fa.2.1737717280986; Fri, 24 Jan 2025 03:14:40 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3076bacba5esm3289701fa.36.2025.01.24.03.14.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2025 03:14:39 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 24 Jan 2025 13:14:23 +0200 Subject: [PATCH 5/6] drm/msm/dpu: use atomic_needs_modeset for CDM check MIME-Version: 1.0 Message-Id: <20250124-atomic-needs-modeset-v1-5-b0c05c9eda0f@linaro.org> References: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> In-Reply-To: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Airlie , Jocelyn Falempe , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Kalyan Thota Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5402; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=RJbY2Rc5XWEYm7DVDGShoSdkiZEDKvsZ6ViiD3b/p6s=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnk3YVhnfHs7IeTGIT9ZCw63TSM0or1W73RRqCO jM4PlE72l+JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ5N2FQAKCRCLPIo+Aiko 1SfjB/4pjKjgrLihmXFuc8/lEhY++xtfarlvxvtlPF7NNTAt8TD2ODkbq65HkGUq3BJhjyWFTg3 7jjR6lN0Qurx1jhFXRgAaLmwbwhmP1bsNPcdmhkqENq5DwRwoll/5z/6wrfExcbvmypMWhOs4mq F1fDmj8fZXSExioEAARKLBBzNzIpFvE9ne8GpThEhuJ/lHuWSlqqbh7u0eSYi9j6PHumwwYVK76 Z16KvZ6td5a/UJG0JV3k+NUHGtokspzUvmh8h844NmsjDB1soVBgHcvWiCFCNJ8lHof6IFX1muy aZ4qXkbEy9LoU7Es/aKBoJ4QF6nQFwyM5M6gd5LygTSMm3F/ X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Rework the CDM check into using the new atomic_needs_modeset() callbacks. This removes a need for the dpu-specific check_mode_changed() callback in the msm_kms_funcs structure. Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 35 +++++++++++++++++------------ drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 4 ---- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 26 --------------------- 3 files changed, 21 insertions(+), 44 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index 84313bc1f9888452914612fab559b390cf38c705..d09a5c682031b840d486cf48871964e395226d33 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -753,32 +753,38 @@ static void dpu_encoder_assign_crtc_resources(struct dpu_kms *dpu_kms, cstate->num_mixers = num_lm; } -/** - * dpu_encoder_virt_check_mode_changed: check if full modeset is required - * @drm_enc: Pointer to drm encoder structure - * @crtc_state: Corresponding CRTC state to be checked - * @conn_state: Corresponding Connector's state to be checked - * - * Check if the changes in the object properties demand full mode set. - */ -int dpu_encoder_virt_check_mode_changed(struct drm_encoder *drm_enc, - struct drm_crtc_state *crtc_state, - struct drm_connector_state *conn_state) +static bool dpu_encoder_virt_atomic_needs_modeset(struct drm_encoder *drm_enc, + struct drm_atomic_state *state) { struct dpu_encoder_virt *dpu_enc = to_dpu_encoder_virt(drm_enc); + struct drm_connector *connector; + struct drm_connector_state *conn_state; + struct drm_crtc_state *crtc_state; struct msm_display_topology topology; DPU_DEBUG_ENC(dpu_enc, "\n"); + connector = drm_atomic_get_new_connector_for_encoder(state, drm_enc); + if (!connector) + return false; + + conn_state = drm_atomic_get_new_connector_state(state, connector); + if (!conn_state || !conn_state->crtc) + return false; + + crtc_state = drm_atomic_get_new_crtc_state(state, conn_state->crtc); + if (!crtc_state) + return false; + /* Using mode instead of adjusted_mode as it wasn't computed yet */ topology = dpu_encoder_get_topology(dpu_enc, &crtc_state->mode, crtc_state, conn_state); if (topology.needs_cdm && !dpu_enc->cur_master->hw_cdm) - crtc_state->mode_changed = true; + return true; else if (!topology.needs_cdm && dpu_enc->cur_master->hw_cdm) - crtc_state->mode_changed = true; + return true; - return 0; + return false; } static int dpu_encoder_virt_atomic_check( @@ -2658,6 +2664,7 @@ static const struct drm_encoder_helper_funcs dpu_encoder_helper_funcs = { .atomic_mode_set = dpu_encoder_virt_atomic_mode_set, .atomic_disable = dpu_encoder_virt_atomic_disable, .atomic_enable = dpu_encoder_virt_atomic_enable, + .atomic_needs_modeset = dpu_encoder_virt_atomic_needs_modeset, .atomic_check = dpu_encoder_virt_atomic_check, }; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h index da133ee4701a329f566f6f9a7255f2f6d050f891..92b5ee390788d16e85e195a664417896a2bf1cae 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h @@ -88,8 +88,4 @@ void dpu_encoder_cleanup_wb_job(struct drm_encoder *drm_enc, bool dpu_encoder_is_valid_for_commit(struct drm_encoder *drm_enc); -int dpu_encoder_virt_check_mode_changed(struct drm_encoder *drm_enc, - struct drm_crtc_state *crtc_state, - struct drm_connector_state *conn_state); - #endif /* __DPU_ENCODER_H__ */ diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index 9748d24b3ffde45992d28b697a88db5992b00c69..97e9cb8c2b099f4757169cadf7e941148d2bfb16 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -446,31 +446,6 @@ static void dpu_kms_disable_commit(struct msm_kms *kms) pm_runtime_put_sync(&dpu_kms->pdev->dev); } -static int dpu_kms_check_mode_changed(struct msm_kms *kms, struct drm_atomic_state *state) -{ - struct drm_crtc_state *new_crtc_state; - struct drm_connector *connector; - struct drm_connector_state *new_conn_state; - int i; - - for_each_new_connector_in_state(state, connector, new_conn_state, i) { - struct drm_encoder *encoder; - - WARN_ON(!!new_conn_state->best_encoder != !!new_conn_state->crtc); - - if (!new_conn_state->crtc || !new_conn_state->best_encoder) - continue; - - new_crtc_state = drm_atomic_get_new_crtc_state(state, new_conn_state->crtc); - - encoder = new_conn_state->best_encoder; - - dpu_encoder_virt_check_mode_changed(encoder, new_crtc_state, new_conn_state); - } - - return 0; -} - static void dpu_kms_flush_commit(struct msm_kms *kms, unsigned crtc_mask) { struct dpu_kms *dpu_kms = to_dpu_kms(kms); @@ -1087,7 +1062,6 @@ static const struct msm_kms_funcs kms_funcs = { .irq = dpu_core_irq, .enable_commit = dpu_kms_enable_commit, .disable_commit = dpu_kms_disable_commit, - .check_mode_changed = dpu_kms_check_mode_changed, .flush_commit = dpu_kms_flush_commit, .wait_flush = dpu_kms_wait_flush, .complete_commit = dpu_kms_complete_commit, From patchwork Fri Jan 24 11:14:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 13949288 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D23EAC0218B for ; Fri, 24 Jan 2025 11:14:45 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4C31A10E80E; Fri, 24 Jan 2025 11:14:45 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="SOdP+98a"; dkim-atps=neutral Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by gabe.freedesktop.org (Postfix) with ESMTPS id 401A010E7C3 for ; Fri, 24 Jan 2025 11:14:44 +0000 (UTC) Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-30613802a04so20307191fa.2 for ; Fri, 24 Jan 2025 03:14:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1737717282; x=1738322082; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=HqZJP4iufIhevyvAoHW7Eu6OisyxKDYbF5HtjUMC78k=; b=SOdP+98aXHv5Z4EtWbnZPoamq8h07j8aFP/Kk4E1BwC3euzL24c830MGcYK3yXTYqf VjMFjpwTyHz4iKbXrmV+QNLGntGEr4oxdYKCZvpKBT03ALZgGlzBOvLBghR3w+6oX3ZP kR9gOBWRgrIQgiXPL/x7cQkg05wfZt4CKWyJ0kDwRcswjek474BTYwZVGQdtf1ndMAuR 7zoUWl70Nt1jNrLMpxM5oV2O5+ShcHh+wQNG2WP9/+AcYIbLIcwbMPEqJWg8mOjoAqnj fW/GsJwWA52HDKltMvG9+Vo+j/Ij9K9lM+olZjqbeygWuoSp5RLRasKqBmkInJL0rvXr 3ELw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737717282; x=1738322082; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HqZJP4iufIhevyvAoHW7Eu6OisyxKDYbF5HtjUMC78k=; b=OsxhLK3cEg1+Se+pJDfClJoF5pBnn+QGv0wEOctNRXyrkFbxwF7r1piFZ5xuATkBxy JEw1S6NR8j1Hy9zmgeli/Q0YIE4TJzH6vmOAvQUyUwi6FadIss0WWTXlLr0q84zQYJVj J3MwdD88Y3xKjlQi/NT92lE4qAEn3omkw13UwAb0mv+KBNOzsJeA6n87DIh/dtjT/Hl3 Is2jfNdTXIacmN+bdDANBZhR9Hljv1IiBq1PrS2YHkuXpvLn1ZBZsunu5bjKJBRP1F8C KlWrmVIRu9ljsO2Z6oO2qYwvArTcTAHNMEp4/mff9CxnW0aqRmvKymeutzz27C3KRANE jasg== X-Gm-Message-State: AOJu0Yxz7WRuLsuEobaPe3i4nykpvHuFfOG85YeeyN5jAhM6TcQ5AHKo NWDH8AGBxc9eKpsYtpkikfO9+tDiE+c8rLJvfImtyOMppkH6y4swuoWWoG6Ik20= X-Gm-Gg: ASbGncuO573/ZpGdX+npkpjq9M0UjzM4fwivJrBiDp559TaVvXoG0dImNQFDydYQ/lc n4kqLHWWU7a9bvqzNjIMvIBJxmJO/4lYiH9pgzDZMtLPcn+0Ux71ek3cuWoein3HCKugElunLYP A7Q2u/B/0NWR1jQIKlNLOYMrqUzmIH0RLXfwF8CeoDSrdD05DvUX9/gccXbgsoYlV1oSm6lAkPh UmedrLDJqayN5fxOd7AVh1E+SB58I8xFcQkvsNcF+lYpyPzcRRxUMHtbSAgBnbJ/gWxP3sAHRAz msQAdfLHVvrv X-Google-Smtp-Source: AGHT+IGbygDMYFkk0NHDouJWb1lGgESCNIcAMGqnoMkLcYKm6hxwcjQGKts6Rc3SjiI4FqcEWgmtng== X-Received: by 2002:a05:651c:888:b0:302:4115:acc with SMTP id 38308e7fff4ca-3072cb133d6mr127175271fa.26.1737717282519; Fri, 24 Jan 2025 03:14:42 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3076bacba5esm3289701fa.36.2025.01.24.03.14.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2025 03:14:42 -0800 (PST) From: Dmitry Baryshkov Date: Fri, 24 Jan 2025 13:14:24 +0200 Subject: [PATCH 6/6] drm/msm: drop msm_atomic_check wrapper MIME-Version: 1.0 Message-Id: <20250124-atomic-needs-modeset-v1-6-b0c05c9eda0f@linaro.org> References: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> In-Reply-To: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Airlie , Jocelyn Falempe , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Kalyan Thota Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3359; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=STSqFPRboB3sQ4e2j7TOcKj/UooNkL+QUHC/wJG4nEI=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnk3YVzfyLXqMiGQiguLsbAbNz16n03nkZg3A86 jritelnE+SJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ5N2FQAKCRCLPIo+Aiko 1ZfHB/0TLEmivajMQxYP83XdMY/7B2Y1Mw8PXawKgnfObCHfQq/5J523H4HSRJOCN16gkYtXIgi DG+J71a51F3+tTe5P2KMApNtGaO8VHbgbB5MArsHLgKf0ne1ii8aMTPWoBUDqTPHi3Fe/ojPhDC T/RnSmXAjEiZDr+fUnUgaLfw9FhASwWi8ONjNGgSMtx6fc9iELeKTHx2icUnyNdbuRgqzvXR2i3 hjxzM4vtFQ/ALQof/kfBO+tZt7ZEzws81M3gas+UpTWPSL+dNlxYUioN52zwCpheknppTVzGasH NQetVf0FO8fyyA3JRLc9DrI0yV00vsBbO/pDkmB8yzE6eBRU X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" With the CTM and CDM checks now being handled by the component callbacks there is no need for additional wrappers around drm_atomic_helper_check() wrapper. Drop the msm_atomic_check() function and use the helper directly. Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/msm_atomic.c | 14 -------------- drivers/gpu/drm/msm/msm_drv.h | 1 - drivers/gpu/drm/msm/msm_kms.c | 2 +- drivers/gpu/drm/msm/msm_kms.h | 7 ------- 4 files changed, 1 insertion(+), 23 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c index 4377233bd6447060b1300cc0d6877b6a777b1edb..550bcc77acb0426df1f06b08032307c0deef6c4c 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c @@ -181,20 +181,6 @@ static unsigned get_crtc_mask(struct drm_atomic_state *state) return mask; } -int msm_atomic_check(struct drm_device *dev, struct drm_atomic_state *state) -{ - struct msm_drm_private *priv = dev->dev_private; - struct msm_kms *kms = priv->kms; - int ret = 0; - - if (kms && kms->funcs && kms->funcs->check_mode_changed) - ret = kms->funcs->check_mode_changed(kms, state); - if (ret) - return ret; - - return drm_atomic_helper_check(dev, state); -} - void msm_atomic_commit_tail(struct drm_atomic_state *state) { struct drm_device *dev = state->dev; diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index fee31680a6d540d87cada67342bd5bee721662df..321f3c1f4932434e7fb6d18548f27df13c56eb71 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -232,7 +232,6 @@ int msm_atomic_init_pending_timer(struct msm_pending_timer *timer, struct msm_kms *kms, int crtc_idx); void msm_atomic_destroy_pending_timer(struct msm_pending_timer *timer); void msm_atomic_commit_tail(struct drm_atomic_state *state); -int msm_atomic_check(struct drm_device *dev, struct drm_atomic_state *state); struct drm_atomic_state *msm_atomic_state_alloc(struct drm_device *dev); int msm_crtc_enable_vblank(struct drm_crtc *crtc); diff --git a/drivers/gpu/drm/msm/msm_kms.c b/drivers/gpu/drm/msm/msm_kms.c index 4cfad12f4dc1f91a78b36572f6643ac135e00067..2d934fc0fcfd90a67f934d01fd9b194d4eb97609 100644 --- a/drivers/gpu/drm/msm/msm_kms.c +++ b/drivers/gpu/drm/msm/msm_kms.c @@ -22,7 +22,7 @@ static const struct drm_mode_config_funcs mode_config_funcs = { .fb_create = msm_framebuffer_create, - .atomic_check = msm_atomic_check, + .atomic_check = drm_atomic_helper_check, .atomic_commit = drm_atomic_helper_commit, }; diff --git a/drivers/gpu/drm/msm/msm_kms.h b/drivers/gpu/drm/msm/msm_kms.h index ec2a75af89b09754faef1a07adc9338f7d78161e..e60162744c669773b6e5aef824a173647626ab4e 100644 --- a/drivers/gpu/drm/msm/msm_kms.h +++ b/drivers/gpu/drm/msm/msm_kms.h @@ -59,13 +59,6 @@ struct msm_kms_funcs { void (*enable_commit)(struct msm_kms *kms); void (*disable_commit)(struct msm_kms *kms); - /** - * @check_mode_changed: - * - * Verify if the commit requires a full modeset on one of CRTCs. - */ - int (*check_mode_changed)(struct msm_kms *kms, struct drm_atomic_state *state); - /** * Prepare for atomic commit. This is called after any previous * (async or otherwise) commit has completed.