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 1ABE9379988 for ; Thu, 23 Apr 2026 10:07:49 +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=1776938870; cv=none; b=T9BRM0DNkIoXwhLIev0MxdD+V7VpXWtBeWQE8GC55DcSEKOHWfWPfQm8MqtxZvewT878lh413W+CMJdBYtQ39vJ5MmUbQe4BvPayJviAsdMZrwiDiFwjAfBnl8o58cNXCZEfYYzh2A2kGb680/1NrwR0bxDVH/VN1uyCc2S0hjE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776938870; c=relaxed/simple; bh=ADtZpZy78j4RCd1BU3nmDL3mBvg/UC+2hCBfOt82lYc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=G2BoTDS1q0HvEbkTECJG/joCKJBKIZebfj62H4RnAewCBvXoK4oLKESZHYkCo/Ne0NaT3qti5Ra04jOiwGsie1JaZUxs/atglprOxRdrV6uagQ2IuwXkr8CJf1gKl9DgA0ZcMjhTs65UpDnqTIquXeesbdoWChmOhbJHyKCD/Kc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=G4PhSnBY; 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="G4PhSnBY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6333AC2BCB2; Thu, 23 Apr 2026 10:07:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776938869; bh=ADtZpZy78j4RCd1BU3nmDL3mBvg/UC+2hCBfOt82lYc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=G4PhSnBYnjOON5oBIXEiB/ZYs2Rqofgdzxgd0/iavbdOTL07yb84pYVHIGnSlqmoT q66lg4Am4i9VAeGE1QeihfbQzcTTTrhp7FQYhXuliUBKjklQqdO0Kkw/LXxXWNhBZv Y2QY6Scexeggq46hxGG1+v4kD8aHgaSN0kVtYpXm8sk/oeM3tf1yPgjElJ0HQ0sP9i V9gJdByrfKDcTnPl6as/xtatYmznRSmaAUV/Fi3Yqzc/HgKonDA2Y5CVbUjRtYXgtd hnY6hAG1l4OHMdaCnb0Cvq/EoEoT7nC/dWDrURE75ParDs/DbFxHTYr+qO/76pIFVp WlxjuvTL+QAmg== From: Maxime Ripard Date: Thu, 23 Apr 2026 12:06:49 +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-6cde1a9910ed@kernel.org> References: <20260423-drm-state-readout-v2-0-6cde1a9910ed@kernel.org> In-Reply-To: <20260423-drm-state-readout-v2-0-6cde1a9910ed@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=owGbwMvMwCmsHn9OcpHtvjLG02pJDJkv33tvaro4h1fqWErclkvzVstbcM7cd8x+96EX94Oq/ yed7FAp7JjKwiDMySArpsjyRCbs9PL2xVUO9it/wMxhZQIZwsDFKQATmT+Xsd7hNVeZU8lKbfYN GdZndyqYJgqw/wnlFkj4YHFDMiDHZ9XVEN53PkK5L6JbL+WeqhOewFjNWqD0Zenr82WbJFfb5Dt eOP2C2enlybaHhx30ObmjzQ/Nmu7tuLDZtvuc2tY9JV/k9i8BAA== 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