From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 421C0389E05 for ; Wed, 8 Jul 2026 21:53:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783547637; cv=none; b=J3FeRPZ8sRCMIGY++K6DdkXn5nALdW6sE0XJxQ6NdgLlTO83KnPtdKKxesvwyhVYRi8vzEpDZGXna4tZLG5ctcPF4klEjz3fOp/hZaYk1POq+ZdJ9boGXIfQqZP7fmsXsMnveHm4wJMgo5Sb5ZfIlOuXNyRkVxcWs1P4pOJ4L4M= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783547637; c=relaxed/simple; bh=6Ybfx0lFdICtzKlrOMUeIb8C42jMZMhMcXq2Ao+QSu8=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=qEnkUAhCL+ZywSo71x0Pu80FrBfMomDraHmNiZO6+CiPacQ2/Sc9kn2EAS9aCD4q0LaPVSowDo3/mRMZ5AL+1U8VgHXqVOXQ1SLJC07qncEgK3K5rhWmELfaLI1roLTKZ+CaxFhAfq05bsOmnBCL5EPSri8I1rnleUb3MGkTdHM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Q35hGRKq; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Q35hGRKq" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-4758bd3731bso182665f8f.0 for ; Wed, 08 Jul 2026 14:53:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783547634; x=1784152434; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=IIMECz0v1f4LVIdLn0HTlLUSx/SJvMxrwrh19eAWfPY=; b=Q35hGRKqsmeseGbLCPSZpxptC2838DtDhPn6pMmBW+qfyIyiaj/LEKXWP+nIYF0g3b 46CLh4n2zcgCqhA4gq1GtVVvaT4SffCtqWb3ERoOIc0D7baK4JPPt+tJ2tRBmsOUb8a8 8c9N/+O3KSxZibGTXSfDoBcS4fTrtDTcEvVMO84BQ5F7JJ3uD+TkURGef9eyeAL9XlcP nh6sDNEw7+p333Gp7lLJgNlE0bod24lNXLMKgjvIZ2TCwsgnw/W4or7VYjfynb1y2Ghb QrYqOaYyeWgVsKu8oYHlH8Xidf+bMiTaWXGXbVAZralerx4Yk7szQLBbix9THgAWgVv5 gfeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783547634; x=1784152434; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=IIMECz0v1f4LVIdLn0HTlLUSx/SJvMxrwrh19eAWfPY=; b=Y9UT2f/fUr4/W3My93usxfxrE2zL96cFtVTlMrp+DFVNPVWHCiS58dYlNPOxjS22AG UZr62o1/VRnS/kGn0NXkCEgDK7hmo/yXdD2xmbqviHS4zZYKGIB5fcDTeTWjyCNb+neN 11IKx8CeTMdVjBexbxf2wp7XvQll7G0bAs6HZxuCHp8lptEt6ET41urQtdKKvjLXRGpH 1wg2eKoXrRs6z0301OmCAR1VzfDuqvY2Y77Vh3KtM4HPAVco/6xcqL22fvkuXrN9P3T6 uunnAGru1LE+WlvYVEcdvzYa6XxPx5sts8pOda45hLtXtHRnjwosX3TGx7zIYRgHbXQn AeJQ== X-Forwarded-Encrypted: i=1; AHgh+Ro3dxiBwv1VX4CB1zxBsf1E2TvZTuCIYYN48QqELI1kFVRzP/HfazKJlliJ7JCLnVEL8jGTeN3qDTPLe0o=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5pIbxRYVWQYzCFgn9vDTmlC3ceQJtoKTrp8eY5PJ/+yBfhVNN FGtYWEAEU+7JDNNFgqGkF1YJ8twHDJWgd9CbaSYu+HMZy2uivGJk0qtg X-Gm-Gg: AfdE7cmCIpF/RafuwcjmI+n7j/GGwHYiAoYOwEOViFw0Tmb/2QbzT2w9VVzl8vGvhm6 NhBGQxWASgWI48QIK/TpJbJEIBffXWJD4FGY+K4ziW39IBOIgd23QuCrm2MdCj87fBlC/ldQMZj fg56w9XMlNIBsGqe6IvRAVBAG7INn4nizTQKuQwNJIR2SGEEvK2wuovWLC7rIXKK1l11+XthaBu 3gg84tq7VCt395zEROSebtDedvOSBBsg6878bBEqQpkZXejcbmHhg/Ppy0rYgfirjQvx8NYmV4J /EIKbGrw1Th1C1JtflCk4jsj/vBnUvyTs/Oanb2MpYgBqMhcXtDsd57BVhBdhGZdDd7L4Vx4uFk 6J4QIp2kKBpwEm61yPrXRXT5Fy7LUcNfWvvPTZRyNc+Pep2OOZGowwvx7fRHYhnTCMnicvzG6Ph uFSgdeEv0augrziImf7k39LKRwTF5XY4HFV4z4RnYh1ZukbRj6Qw== X-Received: by 2002:a05:6000:4602:b0:47d:f6a5:1fd6 with SMTP id ffacd0b85a97d-47df7561c98mr84937f8f.26.1783547634411; Wed, 08 Jul 2026 14:53:54 -0700 (PDT) Received: from osama.. ([2a02:908:1b8:2060:7550:b182:7bdf:fbd0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47a9e4d8410sm46622289f8f.15.2026.07.08.14.53.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jul 2026 14:53:53 -0700 (PDT) From: Osama Abdelkader To: Philipp Zabel , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Lucas Stach , dri-devel@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Osama Abdelkader , stable@vger.kernel.org Subject: [PATCH 1/2] drm/imx: ipuv3: account for active PREs in atomic check Date: Wed, 8 Jul 2026 23:53:38 +0200 Message-ID: <20260708215338.147145-1-osama.abdelkader@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit ipu_planes_assign_pre() starts each atomic check with the number of registered PRE blocks, but that value does not account for PREs that are already used by planes outside the current atomic state. This can happen when CRTCs are updated independently: the current commit only adds planes from the affected CRTCs, while PREs used by other active CRTCs are ignored. As a result, atomic check can approve more PRE users than the hardware can provide. Subtract already-active PRE users that are not part of the current atomic state before assigning PREs to the planes in the commit. Fixes: 00514e859335 ("drm/imx: use PRG/PRE when possible") Cc: stable@vger.kernel.org Signed-off-by: Osama Abdelkader --- drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c index 67f2da7f2b65..d6806d1ae6e1 100644 --- a/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c +++ b/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c @@ -822,6 +822,19 @@ int ipu_planes_assign_pre(struct drm_device *dev, return ret; } + list_for_each_entry(plane, &dev->mode_config.plane_list, head) { + if (drm_atomic_get_new_plane_state(state, plane)) + continue; + + plane_state = plane->state; + if (!plane_state || !plane_state->crtc || !plane_state->fb) + continue; + + ipu_state = to_ipu_plane_state(plane_state); + if (ipu_state->use_pre) + available_pres--; + } + /* * We are going over the planes in 2 passes: first we assign PREs to * planes with a tiling modifier, which need the PREs to resolve into @@ -843,7 +856,7 @@ int ipu_planes_assign_pre(struct drm_device *dev, plane_state->fb->modifier == DRM_FORMAT_MOD_LINEAR) continue; - if (!ipu_prg_present(ipu_plane->ipu) || !available_pres) + if (!ipu_prg_present(ipu_plane->ipu) || available_pres <= 0) return -EINVAL; if (!ipu_prg_format_supported(ipu_plane->ipu, @@ -871,7 +884,7 @@ int ipu_planes_assign_pre(struct drm_device *dev, /* make sure that modifier is initialized */ plane_state->fb->modifier = DRM_FORMAT_MOD_LINEAR; - if (ipu_prg_present(ipu_plane->ipu) && available_pres && + if (ipu_prg_present(ipu_plane->ipu) && available_pres > 0 && ipu_prg_format_supported(ipu_plane->ipu, plane_state->fb->format->format, plane_state->fb->modifier)) { -- 2.43.0