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: 13949278 Received: from mail-lj1-f173.google.com (mail-lj1-f173.google.com [209.85.208.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9FCE21A433 for ; Fri, 24 Jan 2025 11:14:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717276; cv=none; b=uEG3/ztKPcl9wbw2AfyWSLmjkQyViRPk2F/56eeYSQNTbVxcWLUAICFkXhy0SdAr5In2PdcE1S8pU74UnhgNHBpaUHUu++An2fg4kS3hKvzjqfOul3vQFVks5DJgdeoynafw5uwqb70lBtEnT8vgZ5jUN9lh3xWcc0LQn15Uxrs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717276; c=relaxed/simple; bh=4R2TAjvRhPbl5nWb6SOSqQ5SIwkmWTVcXua85X57qZA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YF5q/qHMz1Rs5XLPxGtA6A9ao8cfMTLk5y+1u1APHkudeI6BofrEYx+dt5LP2TgjO+WC7NLl8Mdiui7bxt9Xl03AxehqRI9XOzHwI2Gb8syiKbHhoJEy9on11r+wwXrdUJBGvHzILVAo/i0TK4JdIm9uJezeEGspD6LszBrxtwg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=NJhJ6SbL; arc=none smtp.client-ip=209.85.208.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="NJhJ6SbL" Received: by mail-lj1-f173.google.com with SMTP id 38308e7fff4ca-30737db1ab1so17874271fa.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=vger.kernel.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=NJhJ6SbLchWQvHr8KdN5slyHJO43wvGl2baqfVKfQfJTPgl/Es9eqZSukEnRBXwBqG z9tZKwJCJBpq1RNPonQMNSYZ5A7gE34fAfvLDiecPO4SkIyJiw7nzpZ6X/ZiwS7KcUpT tLbwgpdqf5cXxhAMacPxLU3YNzkltlOlyOC0zic0TdlSlEyc1H9gT+IG44nCKiND/T7G kHtt4zu7hYTAwPoUsdZsKfJvc/W3WCvBQggj6IBa7bwcIvWRCV852Aw/lDNh5wL01NYp WW13+KHsq/RejykauQHperi7Qs+oUcR1V+3BdOKwvJ8LrJNa6QxN69v2HN07eL/ma3zA 0l/w== 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=tad17cdyqYIc+NfMDWdBODl4Wbya7R09QZAxeCAVMc2ll35EPYj8a7TIxEyh5KI1qo QoC9T13aLgOKEg0lIFY76s08IJgDQIZhZCGxj9EPCFno79CeDfFmyQOGYrU8FG/+wF+y ESEaGDIFr45fBwC+IS1r21oCKIZF5fZD3XGqBpYZFxm1sR8YzLauxWjwGP+r7h2Gyv0g 5zNP3P8XI2p5bDJL56or1OmLfxG1ywgYhVSqQZqZXrGu0DMe5Ad6MEFXTbKLcGQN5Chs m0HNjSHBdwQZ2th18pyUCkv7OEGRyxKBDezpa8FoFTj3wSeY7Pv+plH3Cgp8U4rj95uL pu7w== X-Forwarded-Encrypted: i=1; AJvYcCWuI+plNyIlxVBpI4OHb9vFajl2g/ogMMFjP5L8VvS6lWI1yMYxdrRBTYNX9taQZKXrTrL1687h0nSUnWnW@vger.kernel.org X-Gm-Message-State: AOJu0Yx2a/0TGnoqGQcGLAMPTsI1BsOQiapKX3pLhyh0thgMPNujmt8O LMHJElM4XmisqCvTHnIIotNn7tCcf3Gtvmo7V1OOXDP6fo7vlX7cQtUqGfoaFMU= X-Gm-Gg: ASbGncuc9jN2fXSvatqjuckK1X80CkrpRjOus1PDylHJtMF+2ceTnOPqyiWhsJEKMYJ gZCMILLGBdjdkzPE0V2ToRa4tcCE8GBZ9jShQHb3la/T5DCTYLkzg6wmv+jr6cQW666vQJknV5C Yx0DDUE7E4tdAlVQOUM3BtUfRAmRhFigPbgYo7AR8VCVa80vbiBFGcFrexG3Dx0Rinu9wiiJSsb mnfE+6ezEsMnhNAHUPKPEVqFT4vRmSWUay0SQHRHz3D/IzvModJBW3D7SeCqN0dew5lzTtz4nmi BMVxNG4vNgLs 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 Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 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: 13949279 Received: from mail-lj1-f169.google.com (mail-lj1-f169.google.com [209.85.208.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3085421ADB0 for ; Fri, 24 Jan 2025 11:14:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717279; cv=none; b=Q3FlMtl58hpzsgODpZuWwOQlG+4NWQBuACOKlMUtK4lgzhU2UouPecW9J9F5J72KqIIIODx3k0rG3Td5TrZgcD4Y/k0uj2ZtxjZtasL/xRiwEU9x9WALQjqpWaYBXPv6lSTcN+bosmVcxTF5rcjpsM90MmHJy+u8KbrY/6KTD2g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717279; c=relaxed/simple; bh=pwmtWNrqDVg2rI64aHz+boP7gTDUq9GICL0T2h/DMTk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iZEmJ8ffiihZrM2+Vwq70lZVF35noQmhZeCnKDbAyNp7yf2WUitLHjF8qfOpySLuRlgt2iyQMaE+0dMpJoruVkvZBlg1cHCu48+37IKYZuYWSySgsgepSJ7fECZFQDVSljYm1YBkE3UWfMWvtjlk9QysEAhPUxkwBMYKXrmnv90= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=s9AGiUyR; arc=none smtp.client-ip=209.85.208.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="s9AGiUyR" Received: by mail-lj1-f169.google.com with SMTP id 38308e7fff4ca-30737db1ab1so17874641fa.1 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=vger.kernel.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=s9AGiUyR9RSKyIQ2Iq/PPd6RwbUlStFvZ2GdGLI1AHZOy4+t6ph0i7pizjxjGu8TfD 60g5jzWvUykd9cUBJOJNhzxmRzaswXH0yZz1HiBi+9HuQCMy1cxr47K00cPL3MtGyQvo bkMo/ry09H7mx6Lu9PEp/JPO4f8S3oNOzKpE4WhOlCa0EIjay2F4e8HByb+aCCHMzSmZ oRUmIbFat1L8DB2nswvkmqyL13sOlsLD6KCGzRBtIDDlqI59jwHq2gf0r46K6u7jlYJr KMhQIcBpgO6ueJVX3er6dDYP2Y2Ji9UhV9sxNkrwiUMNdGewzcfDl8oNKC59S/SGgA8A J8aw== 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=j0cheQq5RwZc82R0Mbbv78ItxXjGpCEZ75PrAyIRJwB1iloVZepm4EuooD5XBMC62r Yyp5Xlddnzf53NNKwjQvzGGAMYNhTr3DS+2ShVwnQdOvX87SDdK7cOnI8jg1dkFWY8HU yKpWI/18bB7LOoebj32c2osMIUwdys1nN8VaNJlyo6X67g87PFsOKAp8Em8usIBiC2xl 2LikAXsgDTWT9yB9IjTX6orJupjxiqRaQdkRlbeEXrk15KH3+kBRDeLyMI1/85H2XuTV xc6lRESnwb/iKtDZ+Oc67aw8SlGbo3zdppag4BzsMjEj8Kq/mS2qdMMaa/FjEJh03j5P RIFw== X-Forwarded-Encrypted: i=1; AJvYcCVGaKreknQcHQOOGS5KXLhPCNfGfHjJ7nYa1oEd9pIamD93hL0QnIZVvJbCYb0dOWNpAVUc5KSitMqiGGYl@vger.kernel.org X-Gm-Message-State: AOJu0YyKL/cOF/QmJZEJHKBVmU9MN/BtbhLZReNlVL2wjhvGkB0WMqMY gcN0u12zKScqMqFL9fofJV7xDQqcSxF2Dvd/45gplDcNNxfTyHGSGsjR11+adpo= X-Gm-Gg: ASbGncshWCL5YsUUBqLxAqKOCdTXhcJVWWm119aSr4NZrgkfopYAHEk50PoEbywXKmh 04cgkVUFRqlcqFXRMim3kifpJciYNJETaFK5MhpsgmDofYGXCK7CVK920r0rokvxjCZLC0hao3h sNWeks+ZfMxaS+2UKhi8xGssY6g6ipjGskIfwuGZFgNv0LLQH37+pVPZ8iKKzXT7qJYboKyZ0dG k7uLySA2yQKbugxEvtB+TEAizRfoMt5vOoQbBTwrWJrcwHUR6esSrNt316qpo2617DXjfgjlCQE 9rKBexrXu7kF 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 Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 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: 13949280 Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C628321B181 for ; Fri, 24 Jan 2025 11:14:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717280; cv=none; b=ODTrD2ICmnUIj+Cee0iCMWbhiGZl3GEa8ijAm8ojYR8MAcoYzgtwsuEG8bbN5QgpgcFCTvww/PEM4m18nYp3S04A6RxVIlIn9taEA8TWb9vA0EHTjtlZaR8S6EgMxoXr1s4wq2wFVjr+mEFPFFGG3cujvvx5bQmpTLNlkbqQhMc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717280; c=relaxed/simple; bh=nTNh12sSi+bFS767UAWn/EcHJvQRJYETlDdgdnAZ+xY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W/PKYemuWQuC9vF4UcLNEUsJrz+lFdXn+iNbchXB0cu4NqtrDuL3sx7222Qj8o2PAobPJHMd1x+1szkXpl/DMb09peyGc/upo1C9Ohsu5/CVCFRH5mFg6AlxZ+jH1cNctH/8M42yjcZaHn2iuVP1IHxAC4RgR4YTLTzmCSpH2gw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=A3Mb60em; arc=none smtp.client-ip=209.85.208.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="A3Mb60em" Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-3022484d4e4so21374111fa.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=vger.kernel.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=A3Mb60emP5W3G3OFdfBglig6kiydW23J8eh8lcU9gqaMGBL7anXfx+qiixrkX0RIJj v5EN6PN33b9JaIGIpsmj5eBo4dw3rQ1cob+v33601VM/wgTH/61EZ3YavUz5QOfbSMl+ c2OdQgStN+QO4b1EWrPIIZl7NKv2kCmgLGx1Cd9XvVgAnRYL0nRROeH45ZYvUzHKxtwU wRfWSX2qOodXh429bodU8iIOOiitgUL9mkzRidWsfPuHgCw6/jz1RuCqc6EWbJ8c69e6 OHikwY/j8tfKyHVI/jKGuHUpDNRLfJh3Adf6KfAjlfvKMUGMF/Bi3nnfEyr35OjuZI3j uoMA== 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=b+i3RTlcnF2t6zlmDjMoyDToIxaDvrCV2Qm+3b5LSXtHJwvEvzEVNX0627Lm8qB1+X XOy+9qZOlI2wdTGiKeEQ54hpNfm9SrDFV41eaijvUZt3juHECW0yGcgUbbpSguhmsxMW N4egVUV5SywM2NXrWeYTO0Nvn3Baa0x7KiIUwj1NzvnakZguSHWLHliLhQwO2AX+kzpv /YADieBATYyIgNfsBkMlE13ShLWnvU/ORBpmUFHPqXX1YGzeTTfJWDbBidg8sBaFFdxa fOVxOnrQDCqlCyxEfIv7DTFLyxF5SeZXpo1IWquhSbtqMxt7ik0v24jn9Fgxfa8wswil Wzew== X-Forwarded-Encrypted: i=1; AJvYcCVKrhPklmuTI5zkaPJGqoQFEPkFSKveVlvPhlbPsrymg+wmhRVFM3rfVIcV/GWtkvNaYqv7RPwUeiqwS29N@vger.kernel.org X-Gm-Message-State: AOJu0Yw3UgtG8/RpDdKPgN25i2YGMsmzL7QXfY4IEGyzubLZJLBAenTu N3JC354Dkapy+ipyIW1AfFE8nbqotrpcXlf0LoTAPKaziYKZxlcIvipWMceyKa4= X-Gm-Gg: ASbGncudAVNZqQPGzsxHQ9WBouGGMq7zU9bfQx+YKxqJ+yqQ1NOSCkY4/c3NpeXVnfw B9+INvWEXipbbZxUdevsQOF0zpJmHkd5h9Xsz2Nq7SfL9xKXm8CChmtkXKjufq03oWsJ/wRYJFF t2IrY+fxNXF87F67P/urMPgfylUJPxYBFOPujWfPgcPmxy1kv2N9d08yWnLh40fDj54etzf8Kcg g0gVAjdjAKCxi9wbL19zC0STkNF99e/PXckGneaJaTXKve8CGgBsv0zou7gmV8DRXFcGgJfVlfN yAMYYLZbBbSY 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 Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 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: 13949281 Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F61C21B8E1 for ; Fri, 24 Jan 2025 11:14:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717282; cv=none; b=k54Vjnc2vyjKFo7l575/tFWh8Mp31M8sqqrhXMteYDxGI7XNyuSqQDlI0TIBvEiAoZ6n+YGrxK6AU6YF5RzjrJJr6JKAcQ4yK5bqD6gFGuuTpWTfNTV0F3Mr+r8dcbA4szVqOvkylFThnqQN6BOqzHWN0oBNluzA8tM5g+Pv8jw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717282; c=relaxed/simple; bh=YiER9uGGuMLloEwX06ETqf8kcBguXBtNB7NcpB3/rSM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=juk7OlYTG8TFMPNQWHHdfOmsfQt68YsEzFCs9RusTIysR/eoPc9g2CejviUVAn4ASrs6ISTcbnl+YeyEAnhhuKxHca8+eyZPbJajcsEoGXaGDBFCQ4iHXl8VzCJljfhEXLFWOL6BPfshEPTuW7jc+rM2xbsxdry8w0lN78GyXFU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=uyHm/SHz; arc=none smtp.client-ip=209.85.208.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="uyHm/SHz" Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-30761be8fa8so20557251fa.2 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=vger.kernel.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=uyHm/SHzNgu8qrMipfl6NIGlqpZSnpfVSC8I5ecAg8mYKOC76eNasIkI4PARAQiJe3 5e+6dAdspZVF0Pz23IM0VM12olZD4X3D03CKkE282h9vF2MmUSqG8o9Bow32S1UjYYGU BdpzpfhhVCLxYnfDRpvtPWjTxY+iqcTrQ32wNmn/4x4H/X4Zr0oxUO7+5qyx3d0yfAab jyAkASrdY948+J6F0ZD5yN9eDEIoM6m7EDks54sU21HgZHFwTbpZHERgjP1uy2x5QM/J glX5wLr1sjuug7lda8PJQRZpDaTyCt2SymIrreizQywuCx2cGMqsNjTI2HiICVJEj0tN d+XA== 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=rr3FUElF0WTzSrZ6uInAWnqnICywXiHWTs57pTmMSLpkOrK2lygicOKwR5iF+BLQJ2 rlwv4pYLF1eWVjLiI7/wnaIQl74hLymOr+LHTJJMZKHwpGVV4EGkU2Fl6lpTJ6XAt9IY b2HQMn7745Qnwit5vPAOZTaFe6H1eh9hJsfqsHK3ik2ZHwaVOfgbd++vD39L4OQjdTWi oFJb65Adk1U2tH/hs9ywrputa2kEO1hc4yptzgZuPhwNjIvucDGpSn3NKUEjSJg0EP21 S5xf5h0qFnzFgH9W+3eLCL7uWQhGpGuVtrpBVlAtFYlds2wapBmOBIuI+ciK1FNS+XJS 7A/g== X-Forwarded-Encrypted: i=1; AJvYcCXhFxZw02c8IrKmlOHALCGJJ9BA6puEElyeZeTXYc7zOlSY96jEqp1JEoADTxI9UuHiPTYp8pZf7lSsmYJs@vger.kernel.org X-Gm-Message-State: AOJu0Yx60Wqgg0a7JOV5i5zh7Kqg0S6kY0LjIASAluPaAIJ6CvAwtmqV LLIXFzym0rV8CPjzn1TyDWSlq8LuNix2+S0yU01Lv1fN80AWWC7GBn8kKNJIBnk= X-Gm-Gg: ASbGncsJDcgm9PUPNJifG0LRV4sSFpIWLoy3Gpc+iU6g5PHyjOPpFhQXigplra2Qc/M v731Tz0ioHGfoTXREKZPvJ6tYw2P20roSQffCu7Fhtx51xiVue4xbruTwuv3SUDZlcSgjg7fwqR cUFDEMRqDVLQhmpGMH3wTdF0jRXFN28RH2XNhI7DdIEreV+DDWlHbIwh9smwFTFlyVUwDsl9qfU Fy0qSJ1Xbnupfgszfa8nyU/KPEcQafIp824DHFps3bgHidBPJo/rDhkGLpckvJqOF1V8B2yjfSp s5sj2dUbFKiy 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 Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 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: 13949282 Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D38BF21C183 for ; Fri, 24 Jan 2025 11:14:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717284; cv=none; b=s+aVvAYWF4Ef5J0rGOys6WmS1lP+svF2RH2XJO5rrcWoEZXDqZSbk/sElxfklC1nFqi1RCnWw/6s3P/wWekiBihZ2I8vAjMneWDWryLWGHa/LTPdf7mZjA/0znB02M5oAZjuM8La0a+x//E7v0Rax4DMXtALWZpQCAYjY7fv4F8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717284; c=relaxed/simple; bh=RJbY2Rc5XWEYm7DVDGShoSdkiZEDKvsZ6ViiD3b/p6s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=vElmn2DjFQO1F5WTCo8IXPpcs5lezjfI28iKVSNe9jxwCImqGkK5cM4Dtnx2/qXgjDm4eo2ELs6f/e6YovWr/naWUpufbzY3C/KdcJCOOiV1u0s9F4ckpCSPZFjllzh0c0GyPzCCf9ols/BdZnaCxC2GrwTMXDl6TSSlAqOU9Yk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=fjAcbiaL; arc=none smtp.client-ip=209.85.208.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="fjAcbiaL" Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-304d757a9c1so22062351fa.0 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=vger.kernel.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=fjAcbiaLNhdXnt9XbkKh5ErFmjH+ozVF2+XEK9zMGQBCNXKkU5Zs2ntkrDBQo6VgvW HvnDl6aXEGLpuu3j01o29Yq8znG7C61DokMT9Vwn473fXunslJ9ANGiiX1QG0g/FMim5 uNnD8g/jXiDqcbqx2U5UP131jC1hvHIwwI/mhjwutHiSvYB4CZhFCcyzL3QOQq3JksX0 aB7eyhEotXAaCH6IXTwuJb+8oUi99lg0S443AZK+ZKZVP9Okz5HL3adZZIdN8CeWWVH6 9xiZvgddv2J5g7BjagDzKxnGFvwSUgzHndCYGnn5s7mxd1n4t+eZ2HDG0nBnhOgBiX17 20EA== 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=BylrVMDKAJXGtUt9CqJwnK/n9gdGgkDTHb7zHPr0CUjcFPo3LSgfd3rYnWGx5eJxRW 1Mo6ZefABGxFWrVGshZtDuNlSF07cXk/mYh2NlyIcDP/Ka2XMGqBzCIvQvG6wRPPNMGj yJ3uC7eU1ioPPIMv3mFMVhot2XqHTgY71dIsoa+ONNzMfinQlXyGj333e3FiFPANzCMw 6VrxYQzfPlh/EPNeLpXi7QC+ZSyov0UXIImArwza18Ghks8gustCbl7Oh44hKr+OhoCs U7aYK3w7U8QdHAh78fdgZnoQqU/YWhmNcQvbu6FE+GfDhpazg/zMTZapzDP1/r3/fZpM zTFw== X-Forwarded-Encrypted: i=1; AJvYcCVofybJnREjqarCKbxEvpJR99ZNS850kIHve4zTRpNbjSmMEKCZuUfpJJTQr/B+xtCCE16g/rMhw89QCQy7@vger.kernel.org X-Gm-Message-State: AOJu0YzgRl/v3dTnteYPW4kt9G8yJcRgoIKqAfXPFcUydMucwJ3L11Z8 wUspPI0X9pI7gZF5G6wZVuD+FNgw37RPiRJHnSB2O3ge+uV/rBjIEvcXYTzM6Y8= X-Gm-Gg: ASbGncuffJlpfQXSXisHSIRgutzyL6l7delCWaRv6OpGQvl2EGA8lPtlRipmXXzJpdS GWUei4xWXIkIAKJsDiR1/nppd8pN28c9uTezOW2k4AX+mCj0gwzBcOjaMyQpk6kQcdtmKaRQMKz bZr6t3GfcM1Etj23HDb3SEo/iK6cgZ9yyNkJuYca2gINWYdagSAQg1JMPLIlguD/FwoD5h/VNSQ SQnZFBFzfrcQB/uImzkbO4Z7FtfcT1gACIv7AOJfUrV4vJXR/0er2DS3h2j1TEt98ODgt0rcbyR SVEm44ObnOMl 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 Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 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: 13949283 Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 889BD21C9EB for ; Fri, 24 Jan 2025 11:14:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717287; cv=none; b=UJAXZRbVCI2ZcLdgO9+8BTM4REXRILUj9rN2YMVgHaiT/RvLnJ9FszAnxXtIFVnFn7WDvP7yeTXae7CsAVlLDb9gj95bXTkVC3x+6YgKUhUxdEmjNyzz9wJGrZYXJhSWSpIzyIex5py83HcGa5KPexKHz4hAMcokE+qxX1oQumQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737717287; c=relaxed/simple; bh=STSqFPRboB3sQ4e2j7TOcKj/UooNkL+QUHC/wJG4nEI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=syNNuQvZIr88+VMXMQaRN9nn1tza1cmu3E3QGJKUeKTNOhamEheYXJCiBUniL+mqFpe7imobReZzjq1BuVMWfuBFhboOdYoNyaujwVQ1w9/4Cf48GQVHiw2H9lm0ctrkdPDmzp1SBJVZ7G8DDi3IE//+QFW+/jpbvJvVnb7rnkI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=f64vMJOJ; arc=none smtp.client-ip=209.85.208.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="f64vMJOJ" Received: by mail-lj1-f177.google.com with SMTP id 38308e7fff4ca-30616d71bb0so20958591fa.3 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=vger.kernel.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=f64vMJOJenUgonIf6YHmkafetXnnjP5F7VDzrw/BxpVbhVq9SSolu3R0z1j3Bvh3sp 36BJfdGGuRzcoDtRitp4sbkCVZ7p5+6Ti6woo43ipfKnDafinDPOawoKHvt/tCG51BsF E7DKMrZDfE7xhQYq/BkI0bWanCj4pFRe+wmjf0SccwS8btcJiv4R981hAV9K+zFObv5n ipKyCrrNxH7hLWSqBjmT8RFFOXAwA4HmFM9V7Mu07ldtZ5U82JPYAaHI8MQMW7hmSyLZ tnjEPBUgOP6alm32eXwCoMWLt+YuAvYXxKUKq79CbcxPcnDQmy8poHQrvpREVtTvPRx0 1g+Q== 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=gkaWon+c4uj2wN8VPJwp8n3eZsgSAWTT/dV0IsAY83qx4g/IquHV4hiufETZ1pHWId VpH/p40U8YmTpGYDdUzpPQQRNbHldevopwGPOCU1OdQSsdYoVRRl/WzVrUTv9TmQQzZP OEKsGwyTC9bCMzpEZZWTTH1TGsALUIVTx8KHH2ufmBcKGyGefi9YPA0RxO7dfs9/dNGg 7iCIA2DJfTrShCqOPlJgbnvwniyiX7wbNeJqAXD8nWMHoiqTfyUeCSMlTWPIa/U1HipQ HaHYg6oMMdf7lqotZRMq1pSVOUYtoOiUdeuegP0qRx4WyMzNbnsq1eyr2zLVvHRdVbHJ 1Zjw== X-Forwarded-Encrypted: i=1; AJvYcCUgetzrB6pgdVy4YmaiZYt9Tn9Q3xkhRIjGBzHSFLkRljA65dtas1+ljZ5ymKtPF5ohItYhgekxa03a8iyR@vger.kernel.org X-Gm-Message-State: AOJu0YwHQ5fyi3GehSf8TOC+8fzoL7XxDS9DB3Df4iUMTVOkomP/VNhh yW5fzeqGC7noq8Ogc8rgKTvVMXsPczDDJEwn7+p1UgUGhDmArTL+NvDUWAOFHTE= X-Gm-Gg: ASbGncv92IXELGh041FLzQB0SRA4UKqNrdVVdSfDy6tcLSgJT4ftQzD66hTez/MAPD8 IxsCbQd/zorMoU68S+Nles3W6D4BNxNmxMLlYkbd+zuIV2HJ/G0xBnS0hWAmamRraZQEs5gboeI uG2A1eXaPmEI9S6A6gi2oO0t9lYkRt+OBFxmP3mX92c9kM3AutVUDLKlvSdOL8zhSjUELEDAEg/ e6UUzRXflp7hvtkcqtMUZ7erZ4Kxl+Avdpk8bxPQUh7ub0hEf3kqQnN1KcbE0lE6a6fVNvL2XVu 3ecAQG+b6SLQ 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 Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 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.