From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E1E183845A7 for ; Thu, 23 Apr 2026 10:19:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776939544; cv=none; b=uuaQLUkvtBIC+cDBxmSruWzV34fjTT9UOqQR/HXrQpramy5IJFnue+HEmUn45lkrMCOXO6ak74kG98lokIsC2ZEuDAyDKwszY2UnPfcg/0i5Y+MN6WR7SWXHdqwpiRMmAyRmMnLqZAC0JvzjnUjvpX3N15BPjDbPOFmR6xplL6k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776939544; c=relaxed/simple; bh=ADtZpZy78j4RCd1BU3nmDL3mBvg/UC+2hCBfOt82lYc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qj3jFtJGjTP0iU5kqrwe8fu3D06ko+JFPHLk/j8uWgmuWFecD3UHldIc95XRHnd1srX4a5JvUkuLWV+hmNDouOJ8dnocdLFfkkzdMb7ZbDmxkHsmjFXMelrmeBKN5A1uo3G+numpNtKbJM47yVLcgnzXv8+n9XXYJGRSXAa6ipk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=W7w6Xi7o; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="W7w6Xi7o" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2722FC2BCAF; Thu, 23 Apr 2026 10:19:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776939543; bh=ADtZpZy78j4RCd1BU3nmDL3mBvg/UC+2hCBfOt82lYc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=W7w6Xi7o1SU/68N69n7FkI2dUbwlU2NQexJ7i3Bs4SJxd6VGTSrDruPBKTCUecG5s o5YzM1u8IoBIJLaF/OjFpGyaq+VLSfiJpFcC3Yzy7WvM6Rflfzq/0nPLi9sAqFyTq4 Efo2OBebArgECAte0eizaliCSp8I9L8briqEL33Zo6LIscZIs8B8L8ZwwZkKrFQ7BV i/Lq3hP0u4ySW5XCiH9kQ8WvbGXmfY9QUqxwWXJ77h0VHwflOguYN7orsgFdkEaBvC 29yHYkNKfH2J0LG7MvNerR75AqPCeIpPv8wlvf33MkmApT9LgTCRiHLRqyFmfKspsA dizevis/U6siA== From: Maxime Ripard Date: Thu, 23 Apr 2026 12:18:24 +0200 Subject: [PATCH v2 11/28] drm/atomic_sro: Create kernel parameter to force or disable readout Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260423-drm-state-readout-v2-11-8549f87cb978@kernel.org> References: <20260423-drm-state-readout-v2-0-8549f87cb978@kernel.org> In-Reply-To: <20260423-drm-state-readout-v2-0-8549f87cb978@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Jyri Sarha , Tomi Valkeinen Cc: Devarsh Thakkar , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2878; i=mripard@kernel.org; h=from:subject:message-id; bh=ADtZpZy78j4RCd1BU3nmDL3mBvg/UC+2hCBfOt82lYc=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJkvP76xXBc4zaTz66maHZ/vF2nPOsazY9ODzQwFv9TOv FNe2/FrbcdUFgZhTgZZMUWWJzJhp5e3L65ysF/5A2YOKxPIEAYuTgGYyEJexvqUQEOzlEs/+l/u KHl9XKD+2YrbG3R8Fr19pNtdN8OM7+9vT62jUz1+nah8+pOvU3++6wvGhpklIjdCvHLPFKbx/ig Naqu/lb/U6YCfzdVizT+uOYVGzo2RKgeMPp1oNKsLn/kzNXESAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The hardware state readout is useful, but might need to be disabled in case of bugs, or its checks relaxed during development when not all hooks are implemented yet. Add a module parameter to control the readout behavior: it can be disabled entirely, or the checks for missing compare or readout hooks can be skipped independently. Suggested-by: Simona Vetter Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_sro.c | 36 ++++++++++++++++++++++++++++++++++++ include/drm/drm_atomic_sro.h | 2 ++ 2 files changed, 38 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic_sro.c b/drivers/gpu/drm/drm_atomic_sro.c index 177b97d451f5..a46f06e75c4e 100644 --- a/drivers/gpu/drm/drm_atomic_sro.c +++ b/drivers/gpu/drm/drm_atomic_sro.c @@ -11,10 +11,46 @@ #include #include "drm_internal.h" #include "drm_crtc_internal.h" +enum drm_atomic_readout_status { + DRM_ATOMIC_READOUT_DISABLED = 0, + DRM_ATOMIC_READOUT_ENABLED, + DRM_ATOMIC_READOUT_SKIP_MISSING_COMPARE, + DRM_ATOMIC_READOUT_SKIP_MISSING_READOUT, +}; + +static unsigned int atomic_readout = DRM_ATOMIC_READOUT_ENABLED; +module_param_unsafe(atomic_readout, uint, 0); +MODULE_PARM_DESC(atomic_readout, + "Enable Hardware State Readout (0 = disabled, 1 = enabled, 2 = ignore missing compares, 3 = ignore missing readouts and compares, default = 1)"); + +/** + * drm_atomic_sro_device_can_readout - check if a device supports hardware state readout + * @dev: DRM device to check + * + * Verifies that the device is an atomic driver, that readout is + * enabled, and that all KMS objects implement the relevant hooks. + * + * RETURNS: + * + * True if the device supports full hardware state readout, false + * otherwise. + */ +bool drm_atomic_sro_device_can_readout(struct drm_device *dev) +{ + if (!drm_core_check_feature(dev, DRIVER_ATOMIC)) + return false; + + if (atomic_readout == DRM_ATOMIC_READOUT_DISABLED) + return false; + + return true; +} +EXPORT_SYMBOL(drm_atomic_sro_device_can_readout); + struct __drm_atomic_sro_plane { struct drm_plane *ptr; struct drm_plane_state *state; }; diff --git a/include/drm/drm_atomic_sro.h b/include/drm/drm_atomic_sro.h index 5a9333a05796..6e5262384c71 100644 --- a/include/drm/drm_atomic_sro.h +++ b/include/drm/drm_atomic_sro.h @@ -13,10 +13,12 @@ struct drm_plane; struct drm_plane_state; struct drm_printer; struct drm_private_obj; struct drm_private_state; +bool drm_atomic_sro_device_can_readout(struct drm_device *dev); + struct drm_atomic_sro_state *drm_atomic_sro_state_alloc(struct drm_device *dev); void drm_atomic_sro_state_free(struct drm_atomic_sro_state *state); void drm_atomic_sro_state_print(const struct drm_atomic_sro_state *state, struct drm_printer *p); -- 2.53.0