From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 209F9CD4F5E for ; Tue, 19 May 2026 16:08:55 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 54D0610EDE0; Tue, 19 May 2026 16:08:54 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ILF/6Zua"; dkim-atps=neutral Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) by gabe.freedesktop.org (Postfix) with ESMTPS id DDF2510EDC1 for ; Tue, 19 May 2026 16:08:49 +0000 (UTC) Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-48896199cbaso30778185e9.1 for ; Tue, 19 May 2026 09:08:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779206928; x=1779811728; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JPi1O/9kVNRbabQOXnYQalc7uFGr2pxzXb6VmowUh3M=; b=ILF/6ZuaZV85M9qSObB5rq2oqd6RLIGqmYR80l1m4adldBF4APaKMXKQBUUJZt300c 9n5K15coxf2GY41tOZU7Sf45GovUq6V5f3iaCf66gZN96Fxc0Yy0J4LbYQpRnr9MUwIf jdzGOlhHsqXpZ0IHI3GQkvikSeUOR5kppYYlLrZa4UASE09rsZHCEJ+IUcYkOX2SXUon 0RPi/CNoR3t7WngE29mRv59d/wwVgvqdC27ZRjQp0ANEPbq7et77CHtXFZMGaNUqHLFs KdXp4pf6Xq31Z3UwnZpWd3R8D7SX3qTBEbg9AWNLtuCocTlnmLPUP0zY5pZrAkM0macE 2vsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779206928; x=1779811728; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=JPi1O/9kVNRbabQOXnYQalc7uFGr2pxzXb6VmowUh3M=; b=Dv4o9Kbg1Yeibi5shCprJZ5ePG3N2gLQFejnGSQpYSTAbw67mvjA1zQWHEE6kRbGzn xec15TmxdHy0cwGtoj/kBU130veQXJwnu/CKSs2hbAo8jEai6e5p62da4iZMzGQupDLv /Ypumhyc7/3pRL0z1kpdywlOfLpvpX+dTnLGNb6zXw1PeX/5JhqWlQGNheiR8vc5+Kjn NXZ/oqAWyfUygJui4+f61fi84zQDjttwwodSbmt//z7Gg6rWbE1o8wH5PwqdRLrORzly M+juaUE3neg/jsiqElvXx3wadWJMK6rPig1SMHymJVbnFI8G6s3hq0yBHLG6lVozS37b 1mKg== X-Gm-Message-State: AOJu0YycSRlhOOlv91GJB57zZeqcaJw3o9Yw6SCEDVqTFKj0EzGvzqlF axKGOyEDvCwTaZQP5RxbsTXxpnsetLgUEG52rRsA+Qukk/rWYMe+Q1YV X-Gm-Gg: Acq92OFIgWZ0gNzBnyVGTt2tbUmnDQNdydACcBzx6ZAYlapiXh0lZU2rJ/2WO1xxfeW hH4tTHgHhzg8VBgRuDuY6P4wuUmf1MbZ8SW6HQ52P9015kwI2fx8KYNqWHrMLajm8ICWXUtYbmH QhqT6kV9so8YOdqaEdEcHKLmEYaFBLgEyv0CJnJF1ZInhpIYt/gqTMDozkagZir7hPpfkf0HKM3 Xt6btiNraq4uQjiIKuGJHeO4oJDbMhZGsOjTfF9FlUaDhBotnG8MN9OZvL0i5xO0N7s6Vsp8hhA hRA1lLUL7nrk0IrULv/UvQQz+W55iiNYNsB+dfuOBIJSW4yj1RBpF9ZNECv1cDmSzIyfEGyClXr X9DsCCoLS3VyCjEIIrVAb3pT6iZAkGwt4w1ZZg2GKLysRnxZVZY7xVcK7Mb9wgqEkIcaipWX9t7 oOMYg9XWq3osgLpLBvwci5JXSPdgagm10iDHa952HN00x9KS6LGUy8WAV+LceNLDwiqN+Otjf1a mJY7fVhNWmBmvGBt6mVCmrGb5aYtRmwilM8Kg== X-Received: by 2002:a05:600c:4692:b0:48a:906b:14ca with SMTP id 5b1f17b1804b1-48fe632579dmr319854455e9.20.1779206928193; Tue, 19 May 2026 09:08:48 -0700 (PDT) Received: from iku.Home ([2a06:5906:61b:2d00:3f5e:825d:a98f:fd29]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe5ab527asm372645305e9.11.2026.05.19.09.08.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:08:47 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: Biju Das , Laurent Pinchart , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel , Geert Uytterhoeven , Magnus Damm Cc: dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 5/5] drm: renesas: rz-du: Add support for RZ/T2H SoC Date: Tue, 19 May 2026 17:08:25 +0100 Message-ID: <20260519160825.4082566-6-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260519160825.4082566-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20260519160825.4082566-1-prabhakar.mahadev-lad.rj@bp.renesas.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Lad Prabhakar The RZ/T2H (R9A09G077) SoC includes a DU with a DPI interface, supporting resolutions up to WXGA with two RPFs for layer blending. Unlike earlier RZ/G2L SoCs, RZ/T2H requires explicit assertion of a DPI output-enable signal (DU_MCR0_DPI_EN) during CRTC startup. Signed-off-by: Lad Prabhakar Reviewed-by: Laurent Pinchart --- v3->v4: - Dropped per pad limits v2->v3: - Moved clock limits from device_info to output_routing to allow per-output constraints. v1->v2: - Added Reviewed-by tag from Laurent Pinchart. --- drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c | 7 ++++++- drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c | 14 ++++++++++++++ drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.h | 10 ++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c index 48065f4952a3..d0f01aa642a7 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c @@ -28,6 +28,7 @@ #include "rzg2l_du_vsp.h" #define DU_MCR0 0x00 +#define DU_MCR0_DPI_EN BIT(0) #define DU_MCR0_DI_EN BIT(8) #define DU_DITR0 0x10 @@ -217,8 +218,12 @@ static void rzg2l_du_crtc_put(struct rzg2l_du_crtc *rcrtc) static void rzg2l_du_start_stop(struct rzg2l_du_crtc *rcrtc, bool start) { struct rzg2l_du_device *rcdu = rcrtc->dev; + u32 val = DU_MCR0_DI_EN; - writel(start ? DU_MCR0_DI_EN : 0, rcdu->mmio + DU_MCR0); + if (start && rzg2l_du_has(rcdu, RZG2L_DU_FEATURE_DPIO_OE)) + val |= DU_MCR0_DPI_EN; + + writel(start ? val : 0, rcdu->mmio + DU_MCR0); } static void rzg2l_du_crtc_start(struct rzg2l_du_crtc *rcrtc) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c index 1e4b9f38c55b..3d13f61d3c97 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c @@ -65,10 +65,24 @@ static const struct rzg2l_du_device_info rzg2l_du_r9a09g057_info = { }, }; +static const struct rzg2l_du_device_info rzg2l_du_r9a09g077_info = { + .channels_mask = BIT(0), + .routes = { + [RZG2L_DU_OUTPUT_DPAD0] = { + .possible_outputs = BIT(0), + .port = 0, + }, + }, + .features = RZG2L_DU_FEATURE_DPIO_OE, + .mode_clock_min = 5000, + .mode_clock_max = 100000, +}; + static const struct of_device_id rzg2l_du_of_table[] = { { .compatible = "renesas,r9a07g043u-du", .data = &rzg2l_du_r9a07g043u_info }, { .compatible = "renesas,r9a07g044-du", .data = &rzg2l_du_r9a07g044_info }, { .compatible = "renesas,r9a09g057-du", .data = &rzg2l_du_r9a09g057_info }, + { .compatible = "renesas,r9a09g077-du", .data = &rzg2l_du_r9a09g077_info }, { /* sentinel */ } }; diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.h b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.h index 885558eb9547..baf076d69cda 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.h +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.h @@ -20,6 +20,8 @@ struct device; struct drm_property; +#define RZG2L_DU_FEATURE_DPIO_OE BIT(0) /* Has DPIO output enable control */ + enum rzg2l_du_output { RZG2L_DU_OUTPUT_DSI0, RZG2L_DU_OUTPUT_DPAD0, @@ -46,12 +48,14 @@ struct rzg2l_du_output_routing { * @routes: array of CRTC to output routes, indexed by output (RZG2L_DU_OUTPUT_*) * @mode_clock_min: minimum pixel clock in kHz * @mode_clock_max: maximum pixel clock in kHz + * @features: device features (RZG2L_DU_FEATURE_*) */ struct rzg2l_du_device_info { unsigned int channels_mask; struct rzg2l_du_output_routing routes[RZG2L_DU_OUTPUT_MAX]; u32 mode_clock_min; u32 mode_clock_max; + unsigned int features; }; #define RZG2L_DU_MAX_CRTCS 1 @@ -77,6 +81,12 @@ static inline struct rzg2l_du_device *to_rzg2l_du_device(struct drm_device *dev) return container_of(dev, struct rzg2l_du_device, ddev); } +static inline bool rzg2l_du_has(struct rzg2l_du_device *rcdu, + unsigned int feature) +{ + return rcdu->info->features & feature; +} + const char *rzg2l_du_output_name(enum rzg2l_du_output output); #endif /* __RZG2L_DU_DRV_H__ */ -- 2.54.0