From nobody Fri Dec 19 02:57:01 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (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 B98AC286D79; Sun, 6 Jul 2025 17:30:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751823014; cv=none; b=E/xr+MJfyRM28EwwP3ETjjcM0syEfdmoBBwLLqwWGCgDrvfNIo8G8NUgHCAtvBNXT/WbRgRz7rLrcYQ0zk2cuG69zvlu/NNNYCabjK33WeHtwaoQu4Uiwiwi6aRnlD3i/Wz4MQsN6rn429Nh+G2YsyYcyEj++UsHiz0Iz0IXCLw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751823014; c=relaxed/simple; bh=oChcwplCN0suk6lHWq6XWl/N6zCbWSAQbXpXzN4LkkE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FlT3swOB/UnNUmfspqagc6/cDDQ3cyV3QkulUHiVizrV0XhoyIfC9HVuCzcWj50GWBnuNCqgxcjoyA3hYjhYSImBAAaes+nUYVvDh3x//Cs/quBl4krhzpTlPB02NydmECmu5YfkkmLCxrs2MQ1MsTz+ptuxhKWpGKfDdDRCRFI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=PD5G3p64; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="PD5G3p64" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 0B68525D7F; Sun, 6 Jul 2025 19:30:10 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 7gwBGOvTxX10; Sun, 6 Jul 2025 19:30:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751823009; bh=oChcwplCN0suk6lHWq6XWl/N6zCbWSAQbXpXzN4LkkE=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=PD5G3p64ULwvpSu66WVHHVAgI81CdxKe8wQbB0nrScjLZ8AzFAMltgZbiad/7HVdV c+iZnzeiLxG5XiPK68q0zur+edJ3P+mADB/d56iVtHbqIryK827N9m7vpCIYKhahuQ 2am4ExOUsE77rOe6hqgE+Vggg5oQzh7+fEoFeS50XLQ/UofQGueJQIFad5R/Cx+yAO UxB/wCQDBpMqD9b/wf1tNcatpMNfer8IjuEBawuaNeS0asaakJdPGPtITjiua4rPUU HckcMdpkk9ap5//cc9Zkdf2fToEGAstgM+1RUqGkdRunzsuvbGzgn2APsTAXo+N0W9 gFEU0k/acWhIg== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 22:59:45 +0530 Subject: [PATCH v4 1/2] dt-bindings: display: samsung,exynos7-decon: document iommus, memory-region, and ports 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: quoted-printable Message-Id: <20250706-exynosdrm-decon-v4-1-735fd215f4b3@disroot.org> References: <20250706-exynosdrm-decon-v4-0-735fd215f4b3@disroot.org> In-Reply-To: <20250706-exynosdrm-decon-v4-0-735fd215f4b3@disroot.org> To: Inki Dae , Seung-Woo Kim , Kyungmin Park , David Airlie , Simona Vetter , Krzysztof Kozlowski , Alim Akhtar , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Conor Dooley , Ajay Kumar , Akshu Agrawal , Krzysztof Kozlowski , Conor Dooley Cc: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1751822991; l=1983; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=oChcwplCN0suk6lHWq6XWl/N6zCbWSAQbXpXzN4LkkE=; b=QTmWHnA11sNP8XEsfDTBxLU0bIaujjqcVMgDPt2eNUJ6zRtTgzfMTVb5/FKagmo4PY9yuIt0Z h7w03bs+hqbBKkqI0tIDmiVOvAcEzChrFPzdFQvcDhY9DoxhEedLUXp X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Similar to FIMD and Exynos5433's DECON, the Exynos7 DECON hardware: - May optionally require an IOMMU to initialize a display region. - Outputs image data to another block, say an MIC or a DSI master. If an IOMMU is present, it may also require to access the reserved framebuffer region. Document these bindings in the devicetree schema. Signed-off-by: Kaustabh Chakraborty Reviewed-by: Krzysztof Kozlowski --- .../display/samsung/samsung,exynos7-decon.yaml | 21 +++++++++++++++++= ++++ 1 file changed, 21 insertions(+) diff --git a/Documentation/devicetree/bindings/display/samsung/samsung,exyn= os7-decon.yaml b/Documentation/devicetree/bindings/display/samsung/samsung,= exynos7-decon.yaml index 53916e4c95d8c0369138941a556c23f5d42fbd39..14b954718008e06aa1627fcd116= a61927ce29e99 100644 --- a/Documentation/devicetree/bindings/display/samsung/samsung,exynos7-dec= on.yaml +++ b/Documentation/devicetree/bindings/display/samsung/samsung,exynos7-dec= on.yaml @@ -80,6 +80,21 @@ properties: - const: vsync - const: lcd_sys =20 + iommus: + maxItems: 1 + + memory-region: + maxItems: 1 + description: + A phandle to a node describing a reserved framebuffer memory region. + For example, the splash memory region set up by the bootloader. + + port: + $ref: /schemas/graph.yaml#/properties/port + description: + Output port which is connected to either a Mobile Image Compressor + (MIC) or a DSI Master device. + power-domains: maxItems: 1 =20 @@ -92,6 +107,7 @@ required: - clock-names - interrupts - interrupt-names + - port - reg =20 additionalProperties: false @@ -118,4 +134,9 @@ examples: "decon0_vclk"; pinctrl-0 =3D <&lcd_clk &pwm1_out>; pinctrl-names =3D "default"; + port { + decon_to_dsi: endpoint { + remote-endpoint =3D <&dsi_to_decon>; + }; + }; }; --=20 2.49.0 From nobody Fri Dec 19 02:57:01 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (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 C434C14A60D; Sun, 6 Jul 2025 17:30:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751823022; cv=none; b=niwUQIvLAIlkLEnzMcH6Y7ZXW1L8UAdvjqwqZF7Ej3RHEyUnTSNlv9oe4SDRM8oLhsZ49ecmH/yfDKA2KRX+NmKMCEIH+4OszTYBfxiQSD6OYDqlHRJwZdSftzj7TfVGVZW4TdUzXfOmdpQjnzEwBKO7J6sSHyiS/Vw1arZy1ls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751823022; c=relaxed/simple; bh=DioYZJuudIEnZFCcdVUCu0lCGFw1B0iwiwbXlsPE7K4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BcM36J5Ck9NF7LlbYEqddhg5lrMsmrld6UmH3XxKjsqoqdPInDng/Q3G0DdpysP3OhHRCfL+1nEav9A6bG9TNKE6fAhA0s4uYXbwMK8PqU5LTW+4Z+zwpAkirvzPyi3GaRlTc+CAHp9nubtTtbJk5FFY6NPBhK5pbbSiVUyffpQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=H4fwtJFF; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="H4fwtJFF" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 513AC258A8; Sun, 6 Jul 2025 19:30:19 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id nb1roEzouMSq; Sun, 6 Jul 2025 19:30:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751823018; bh=DioYZJuudIEnZFCcdVUCu0lCGFw1B0iwiwbXlsPE7K4=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=H4fwtJFF4gQ98tnRuXYDDiuQmfwNtaaiw8OOgU8wkSvsChIKvVx4DrgCr8GFj4JWX wDwhIFcnjlAaS72RYmhDld5mXuFXwDpx+3ReNFcLAysnzE0HijA3yGYy4Wy7uvvL9W t/LhcINYYjvukGL5bjDhlnMxe2AmIPjAepsczMvm9qFuTRJKxF+VkJZGwqB5gBBJPx +WnanBe51ABogg+k2P8UVpbNQNJLdvBMb539vtEMZnisupq6/hLv/vLAzFtYsoRdyl BNsiGkf+01csErEFQVBGHe7YcBDilqD/NmHq49pgZ4iyxrLC1oUiPBwv9L9QgcMKvM 8+0q2Cux1+kLg== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 22:59:46 +0530 Subject: [PATCH v4 2/2] drm/exynos: exynos7_drm_decon: remove ctx->suspended 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: quoted-printable Message-Id: <20250706-exynosdrm-decon-v4-2-735fd215f4b3@disroot.org> References: <20250706-exynosdrm-decon-v4-0-735fd215f4b3@disroot.org> In-Reply-To: <20250706-exynosdrm-decon-v4-0-735fd215f4b3@disroot.org> To: Inki Dae , Seung-Woo Kim , Kyungmin Park , David Airlie , Simona Vetter , Krzysztof Kozlowski , Alim Akhtar , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Conor Dooley , Ajay Kumar , Akshu Agrawal , Krzysztof Kozlowski , Conor Dooley Cc: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Kaustabh Chakraborty , stable@vger.kernel.org X-Developer-Signature: v=1; a=ed25519-sha256; t=1751822991; l=4780; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=DioYZJuudIEnZFCcdVUCu0lCGFw1B0iwiwbXlsPE7K4=; b=A+JR7sEBtYpA44g/I8YpKl3gcTUMNfGPtctB3AkzhHS/FCDs49PZiTEH/xb5NIreQKr2JWtop JcGlIUg1ElwB9A7GwFYsOcxOBdoAvS/X/Hpa/R6DXDLc85jLUG2en63 X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Condition guards are found to be redundant, as the call flow is properly managed now, as also observed in the Exynos5433 DECON driver. Since state checking is no longer necessary, remove it. This also fixes an issue which prevented decon_commit() from decon_atomic_enable() due to an incorrect state change setting. Fixes: 96976c3d9aff ("drm/exynos: Add DECON driver") Cc: stable@vger.kernel.org Suggested-by: Inki Dae Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/exynos/exynos7_drm_decon.c | 36 --------------------------= ---- 1 file changed, 36 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/e= xynos/exynos7_drm_decon.c index f91daefa9d2bc5e314c279822047e60ee0d7ca99..aec6ed5ee356586865c266b0bb2= becaa897a8e7c 100644 --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c @@ -69,7 +69,6 @@ struct decon_context { void __iomem *regs; unsigned long irq_flags; bool i80_if; - bool suspended; wait_queue_head_t wait_vsync_queue; atomic_t wait_vsync_event; =20 @@ -132,9 +131,6 @@ static void decon_shadow_protect_win(struct decon_conte= xt *ctx, =20 static void decon_wait_for_vblank(struct decon_context *ctx) { - if (ctx->suspended) - return; - atomic_set(&ctx->wait_vsync_event, 1); =20 /* @@ -210,9 +206,6 @@ static void decon_commit(struct exynos_drm_crtc *crtc) struct drm_display_mode *mode =3D &crtc->base.state->adjusted_mode; u32 val, clkdiv; =20 - if (ctx->suspended) - return; - /* nothing to do if we haven't set the mode yet */ if (mode->htotal =3D=3D 0 || mode->vtotal =3D=3D 0) return; @@ -274,9 +267,6 @@ static int decon_enable_vblank(struct exynos_drm_crtc *= crtc) struct decon_context *ctx =3D crtc->ctx; u32 val; =20 - if (ctx->suspended) - return -EPERM; - if (!test_and_set_bit(0, &ctx->irq_flags)) { val =3D readl(ctx->regs + VIDINTCON0); =20 @@ -299,9 +289,6 @@ static void decon_disable_vblank(struct exynos_drm_crtc= *crtc) struct decon_context *ctx =3D crtc->ctx; u32 val; =20 - if (ctx->suspended) - return; - if (test_and_clear_bit(0, &ctx->irq_flags)) { val =3D readl(ctx->regs + VIDINTCON0); =20 @@ -404,9 +391,6 @@ static void decon_atomic_begin(struct exynos_drm_crtc *= crtc) struct decon_context *ctx =3D crtc->ctx; int i; =20 - if (ctx->suspended) - return; - for (i =3D 0; i < WINDOWS_NR; i++) decon_shadow_protect_win(ctx, i, true); } @@ -427,9 +411,6 @@ static void decon_update_plane(struct exynos_drm_crtc *= crtc, unsigned int pitch =3D fb->pitches[0]; unsigned int vidw_addr0_base =3D ctx->data->vidw_buf_start_base; =20 - if (ctx->suspended) - return; - /* * SHADOWCON/PRTCON register is used for enabling timing. * @@ -517,9 +498,6 @@ static void decon_disable_plane(struct exynos_drm_crtc = *crtc, unsigned int win =3D plane->index; u32 val; =20 - if (ctx->suspended) - return; - /* protect windows */ decon_shadow_protect_win(ctx, win, true); =20 @@ -538,9 +516,6 @@ static void decon_atomic_flush(struct exynos_drm_crtc *= crtc) struct decon_context *ctx =3D crtc->ctx; int i; =20 - if (ctx->suspended) - return; - for (i =3D 0; i < WINDOWS_NR; i++) decon_shadow_protect_win(ctx, i, false); exynos_crtc_handle_event(crtc); @@ -568,9 +543,6 @@ static void decon_atomic_enable(struct exynos_drm_crtc = *crtc) struct decon_context *ctx =3D crtc->ctx; int ret; =20 - if (!ctx->suspended) - return; - ret =3D pm_runtime_resume_and_get(ctx->dev); if (ret < 0) { DRM_DEV_ERROR(ctx->dev, "failed to enable DECON device.\n"); @@ -584,8 +556,6 @@ static void decon_atomic_enable(struct exynos_drm_crtc = *crtc) decon_enable_vblank(ctx->crtc); =20 decon_commit(ctx->crtc); - - ctx->suspended =3D false; } =20 static void decon_atomic_disable(struct exynos_drm_crtc *crtc) @@ -593,9 +563,6 @@ static void decon_atomic_disable(struct exynos_drm_crtc= *crtc) struct decon_context *ctx =3D crtc->ctx; int i; =20 - if (ctx->suspended) - return; - /* * We need to make sure that all windows are disabled before we * suspend that connector. Otherwise we might try to scan from @@ -605,8 +572,6 @@ static void decon_atomic_disable(struct exynos_drm_crtc= *crtc) decon_disable_plane(crtc, &ctx->planes[i]); =20 pm_runtime_put_sync(ctx->dev); - - ctx->suspended =3D true; } =20 static const struct exynos_drm_crtc_ops decon_crtc_ops =3D { @@ -723,7 +688,6 @@ static int decon_probe(struct platform_device *pdev) return -ENOMEM; =20 ctx->dev =3D dev; - ctx->suspended =3D true; ctx->data =3D of_device_get_match_data(dev); =20 i80_if_timings =3D of_get_child_by_name(dev->of_node, "i80-if-timings"); --=20 2.49.0