From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>,
David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
Thomas Zimmermann <tzimmermann@suse.de>,
Magnus Damm <magnus.damm@gmail.com>,
dri-devel@lists.freedesktop.org,
linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
devicetree@vger.kernel.org
Subject: Re: [PATCH 39/39] drm: renesas: shmobile: Add DT support
Date: Fri, 23 Jun 2023 20:50:19 +0300 [thread overview]
Message-ID: <20230623175019.GO2112@pendragon.ideasonboard.com> (raw)
In-Reply-To: <2759075c94c011b0f15cb610f39f8fa9b3736600.1687423204.git.geert+renesas@glider.be>
Hi Geert,
Thank you for the patch.
On Thu, Jun 22, 2023 at 11:21:51AM +0200, Geert Uytterhoeven wrote:
> Add DT support, by:
> 1. Creating a panel bridge from DT, and attaching it to the encoder,
> 2. Replacing the custom connector with a bridge connector,
> 3. Obtaining clock configuration based on the compatible value.
>
> Note that for now the driver uses a fixed clock configuration selecting
> the bus clock, as the current code to select other clock inputs needs
> changes to support any other SoCs than SH7724.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
> Cc: Conor Dooley <conor+dt@kernel.org>
> Cc: devicetree@vger.kernel.org
> ---
> SH-Mobile AG5 (SH73A0) support is untested.
>
> Unbind crashes when drm_encoder_cleanup() calls drm_bridge_detach(), as
> the bridge (allocated by devm_drm_panel_bridge_add()) has already been
> freed by that time.
> Should I allocate my encoder with devm_kzalloc(), instead of embedding
> it inside struct shmob_drm_device?
That shouldn't be needed, if you manage the memory for shmob_drm_device
with the DRM managed helpers.
Lifetime management of bridges is currently completely broken, there's
nothing that prevents bridges from being freed while still in use.
That's an issue in DRM, not in your driver.
> ---
> .../gpu/drm/renesas/shmobile/shmob_drm_crtc.c | 101 +++++++++++++++---
> .../gpu/drm/renesas/shmobile/shmob_drm_crtc.h | 1 +
> .../gpu/drm/renesas/shmobile/shmob_drm_drv.c | 27 ++++-
> .../gpu/drm/renesas/shmobile/shmob_drm_drv.h | 6 ++
> 4 files changed, 118 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
> index 17456dde57637ab8..1ec87841658de4f0 100644
> --- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
> +++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
> @@ -9,12 +9,16 @@
>
> #include <linux/clk.h>
> #include <linux/media-bus-format.h>
> +#include <linux/of.h>
> +#include <linux/of_graph.h>
> #include <linux/pm_runtime.h>
>
> #include <drm/drm_atomic.h>
> #include <drm/drm_atomic_helper.h>
> #include <drm/drm_atomic_state_helper.h>
> #include <drm/drm_atomic_uapi.h>
> +#include <drm/drm_bridge.h>
> +#include <drm/drm_bridge_connector.h>
> #include <drm/drm_crtc.h>
> #include <drm/drm_crtc_helper.h>
> #include <drm/drm_fb_dma_helper.h>
> @@ -23,6 +27,7 @@
> #include <drm/drm_gem_dma_helper.h>
> #include <drm/drm_modeset_helper.h>
> #include <drm/drm_modeset_helper_vtables.h>
> +#include <drm/drm_panel.h>
> #include <drm/drm_probe_helper.h>
> #include <drm/drm_simple_kms_helper.h>
> #include <drm/drm_vblank.h>
> @@ -35,10 +40,6 @@
> #include "shmob_drm_plane.h"
> #include "shmob_drm_regs.h"
>
> -/*
> - * TODO: panel support
> - */
> -
> /* -----------------------------------------------------------------------------
> * Clock management
> */
> @@ -129,7 +130,6 @@ static void shmob_drm_crtc_setup_geometry(struct shmob_drm_crtc *scrtc)
> value |= LDMT1R_VPOL;
> if (mode->flags & DRM_MODE_FLAG_NHSYNC)
> value |= LDMT1R_HPOL;
> -
This could be moved to one of the patches in the series that touch this
code.
> lcdc_write(sdev, LDMT1R, value);
>
> value = ((mode->hdisplay / 8) << 16) /* HDCN */
> @@ -191,7 +191,7 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc *scrtc)
> {
> struct drm_crtc *crtc = &scrtc->base;
> struct shmob_drm_device *sdev = to_shmob_device(crtc->dev);
> - const struct shmob_drm_interface_data *idata = &sdev->pdata->iface;
> + unsigned int clk_div = sdev->config.clk_div;
> struct device *dev = sdev->dev;
> u32 value;
> int ret;
> @@ -220,17 +220,17 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc *scrtc)
> lcdc_write(sdev, LDPMR, 0);
>
> value = sdev->lddckr;
> - if (idata->clk_div) {
> + if (clk_div) {
> /* FIXME: sh7724 can only use 42, 48, 54 and 60 for the divider
> * denominator.
> */
> lcdc_write(sdev, LDDCKPAT1R, 0);
> - lcdc_write(sdev, LDDCKPAT2R, (1 << (idata->clk_div / 2)) - 1);
> + lcdc_write(sdev, LDDCKPAT2R, (1 << (clk_div / 2)) - 1);
>
> - if (idata->clk_div == 1)
> + if (clk_div == 1)
> value |= LDDCKR_MOSEL;
> else
> - value |= idata->clk_div;
> + value |= clk_div;
> }
>
> lcdc_write(sdev, LDDCKR, value);
> @@ -479,7 +479,7 @@ int shmob_drm_crtc_create(struct shmob_drm_device *sdev)
> }
>
> /* -----------------------------------------------------------------------------
> - * Encoder
> + * Legacy Encoder
> */
>
> static bool shmob_drm_encoder_mode_fixup(struct drm_encoder *encoder,
> @@ -508,9 +508,43 @@ static const struct drm_encoder_helper_funcs encoder_helper_funcs = {
> .mode_fixup = shmob_drm_encoder_mode_fixup,
> };
>
> +/* -----------------------------------------------------------------------------
> + * Encoder
> + */
> +
> +static int shmob_drm_encoder_init(struct shmob_drm_device *sdev,
> + struct device_node *enc_node)
> +{
> + struct drm_bridge *bridge;
> + struct drm_panel *panel;
> + int ret;
> +
> + /* Create a panel bridge */
> + panel = of_drm_find_panel(enc_node);
Using drm_of_find_panel_or_bridge() would allow supporting platforms
that connect a non-panel device to the SoC, in additional to the already
supported panels.
> + if (IS_ERR(panel))
> + return PTR_ERR(panel);
> +
> + bridge = devm_drm_panel_bridge_add(sdev->dev, panel);
> + if (IS_ERR(bridge))
> + return PTR_ERR(bridge);
> +
> + /* Attach the bridge to the encoder */
> + ret = drm_bridge_attach(&sdev->encoder, bridge, NULL,
> + DRM_BRIDGE_ATTACH_NO_CONNECTOR);
> + if (ret) {
> + dev_err(sdev->dev, "failed to attach bridge %pOF: %pe\n",
> + bridge->of_node, ERR_PTR(ret));
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> int shmob_drm_encoder_create(struct shmob_drm_device *sdev)
> {
> struct drm_encoder *encoder = &sdev->encoder;
> + struct device_node *np = sdev->dev->of_node;
> + struct device_node *ep_node, *entity;
> int ret;
>
> encoder->possible_crtcs = 1;
> @@ -520,13 +554,45 @@ int shmob_drm_encoder_create(struct shmob_drm_device *sdev)
> if (ret < 0)
> return ret;
>
> - drm_encoder_helper_add(encoder, &encoder_helper_funcs);
> + if (sdev->pdata) {
> + drm_encoder_helper_add(encoder, &encoder_helper_funcs);
> + return 0;
> + }
> +
> + for_each_endpoint_of_node(np, ep_node) {
> + struct of_endpoint ep;
> +
> + ret = of_graph_parse_endpoint(ep_node, &ep);
> + if (ret < 0) {
> + of_node_put(ep_node);
> + return ret;
> + }
> + /* Ignore all but the LCD port */
> + if (ep.port || ep.id)
> + continue;
> +
> + entity = of_graph_get_remote_port_parent(ep.local_node);
> + if (!entity)
> + continue;
> +
> + if (!of_device_is_available(entity)) {
> + of_node_put(entity);
> + continue;
> + }
> +
> + ret = shmob_drm_encoder_init(sdev, entity);
> + if (ret < 0) {
> + of_node_put(entity);
> + of_node_put(ep_node);
> + return ret;
> + }
> + }
>
> return 0;
> }
>
> /* -----------------------------------------------------------------------------
> - * Connector
> + * Legacy Connector
> */
>
> static inline struct shmob_drm_connector *to_shmob_connector(struct drm_connector *connector)
> @@ -626,13 +692,20 @@ shmob_drm_connector_init(struct shmob_drm_device *sdev,
> return connector;
> }
>
> +/* -----------------------------------------------------------------------------
> + * Connector
> + */
> +
> int shmob_drm_connector_create(struct shmob_drm_device *sdev,
> struct drm_encoder *encoder)
> {
> struct drm_connector *connector;
> int ret;
>
> - connector = shmob_drm_connector_init(sdev, encoder);
> + if (sdev->pdata)
> + connector = shmob_drm_connector_init(sdev, encoder);
> + else
> + connector = drm_bridge_connector_init(&sdev->ddev, encoder);
> if (IS_ERR(connector)) {
> dev_err(sdev->dev, "failed to created connector: %pe\n",
> connector);
> diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.h b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.h
> index 89a0746f9a35807d..16e1712dd04e0f2b 100644
> --- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.h
> +++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.h
> @@ -29,6 +29,7 @@ struct shmob_drm_crtc {
> wait_queue_head_t flip_wait;
> };
>
> +/* Legacy connector */
> struct shmob_drm_connector {
> struct drm_connector base;
> struct drm_encoder *encoder;
> diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c
> index 576869164479ec6b..db72ca1c8b2f44c9 100644
> --- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c
> @@ -11,6 +11,7 @@
> #include <linux/io.h>
> #include <linux/mm.h>
> #include <linux/module.h>
> +#include <linux/of.h>
> #include <linux/platform_device.h>
> #include <linux/pm.h>
> #include <linux/pm_runtime.h>
> @@ -147,11 +148,13 @@ static int shmob_drm_remove(struct platform_device *pdev)
> static int shmob_drm_probe(struct platform_device *pdev)
> {
> struct shmob_drm_platform_data *pdata = pdev->dev.platform_data;
How about dropping non-DT support ? That would simplify the driver.
> + const struct shmob_drm_config *config;
> struct shmob_drm_device *sdev;
> struct drm_device *ddev;
> int ret;
>
> - if (pdata == NULL) {
> + config = of_device_get_match_data(&pdev->dev);
> + if (!config && !pdata) {
> dev_err(&pdev->dev, "no platform data\n");
> return -EINVAL;
> }
> @@ -167,7 +170,13 @@ static int shmob_drm_probe(struct platform_device *pdev)
>
> ddev = &sdev->ddev;
> sdev->dev = &pdev->dev;
> - sdev->pdata = pdata;
> + if (config) {
> + sdev->config = *config;
> + } else {
> + sdev->pdata = pdata;
> + sdev->config.clk_source = pdata->clk_source;
> + sdev->config.clk_div = pdata->iface.clk_div;
> + }
> spin_lock_init(&sdev->irq_lock);
>
> platform_set_drvdata(pdev, sdev);
> @@ -180,7 +189,7 @@ static int shmob_drm_probe(struct platform_device *pdev)
> if (ret)
> return ret;
>
> - ret = shmob_drm_setup_clocks(sdev, pdata->clk_source);
> + ret = shmob_drm_setup_clocks(sdev, sdev->config.clk_source);
> if (ret < 0)
> return ret;
>
> @@ -224,11 +233,23 @@ static int shmob_drm_probe(struct platform_device *pdev)
> return ret;
> }
>
> +static const struct shmob_drm_config shmob_arm_config = {
> + .clk_source = SHMOB_DRM_CLK_BUS,
> + .clk_div = 5,
> +};
> +
> +static const struct of_device_id shmob_drm_of_table[] __maybe_unused = {
> + { .compatible = "renesas,r8a7740-lcdc", .data = &shmob_arm_config, },
> + { .compatible = "renesas,sh73a0-lcdc", .data = &shmob_arm_config, },
> + { /* sentinel */ }
> +};
> +
> static struct platform_driver shmob_drm_platform_driver = {
> .probe = shmob_drm_probe,
> .remove = shmob_drm_remove,
> .driver = {
> .name = "shmob-drm",
> + .of_match_table = of_match_ptr(shmob_drm_of_table),
> .pm = pm_sleep_ptr(&shmob_drm_pm_ops),
> },
> };
> diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.h b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.h
> index 18907e5ace51c681..088ac5381e91e61a 100644
> --- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.h
> +++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.h
> @@ -20,9 +20,15 @@ struct clk;
> struct device;
> struct drm_device;
>
> +struct shmob_drm_config {
> + enum shmob_drm_clk_source clk_source;
> + unsigned int clk_div;
> +};
> +
> struct shmob_drm_device {
> struct device *dev;
> const struct shmob_drm_platform_data *pdata;
> + struct shmob_drm_config config;
>
> void __iomem *mmio;
> struct clk *clock;
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2023-06-23 17:50 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-22 9:21 [PATCH 00/39] drm: renesas: shmobile: Atomic conversion + DT support Geert Uytterhoeven
2023-06-22 9:21 ` [PATCH 01/39] dt-bindings: display: Add Renesas SH-Mobile LCDC bindings Geert Uytterhoeven
2023-06-22 14:52 ` Rob Herring
2023-07-17 13:57 ` Geert Uytterhoeven
2023-06-23 14:43 ` Laurent Pinchart
2023-06-23 15:19 ` Geert Uytterhoeven
2023-06-23 15:33 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 02/39] media: uapi: Add MEDIA_BUS_FMT_RGB666_2X9 variants Geert Uytterhoeven
2023-06-23 14:56 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 03/39] drm: renesas: shmobile: Fix overlay plane disable Geert Uytterhoeven
2023-06-23 14:59 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 04/39] drm: renesas: shmobile: Fix ARGB32 overlay format typo Geert Uytterhoeven
2023-06-22 10:11 ` Sergei Shtylyov
2023-06-23 14:58 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 05/39] drm: renesas: shmobile: Correct encoder/connector types Geert Uytterhoeven
2023-06-23 15:03 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 06/39] drm: renesas: shmobile: Add support for Runtime PM Geert Uytterhoeven
2023-06-23 15:07 ` Laurent Pinchart
2023-06-23 15:11 ` Laurent Pinchart
2023-06-23 15:22 ` Geert Uytterhoeven
2023-06-23 15:34 ` Laurent Pinchart
2023-06-23 17:41 ` Geert Uytterhoeven
2023-06-23 17:52 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 07/39] drm: renesas: shmobile: Restore indentation of shmob_drm_setup_clocks() Geert Uytterhoeven
2023-06-23 15:04 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 08/39] drm: renesas: shmobile: Use %p4cc to print fourcc code Geert Uytterhoeven
2023-06-23 15:04 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 09/39] drm: renesas: shmobile: Add missing YCbCr formats Geert Uytterhoeven
2023-06-23 15:13 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 10/39] drm: renesas: shmobile: Improve shmob_drm_format_info table Geert Uytterhoeven
2023-06-23 15:30 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 11/39] drm: renesas: shmobile: Remove backlight support Geert Uytterhoeven
2023-06-23 15:36 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 12/39] drm: renesas: shmobile: Don't set display info width and height twice Geert Uytterhoeven
2023-06-28 1:46 ` [12/39] " Sui Jingfeng
2023-06-22 9:21 ` [PATCH 13/39] drm: renesas: shmobile: Rename input clocks Geert Uytterhoeven
2023-06-28 1:50 ` [13/39] " Sui Jingfeng
2023-06-22 9:21 ` [PATCH 14/39] drm: renesas: shmobile: Remove support for SYS panels Geert Uytterhoeven
2023-06-22 9:21 ` [PATCH 15/39] drm: renesas: shmobile: Improve error handling Geert Uytterhoeven
2023-06-23 15:41 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 16/39] drm: renesas: shmobile: Convert to use devm_request_irq() Geert Uytterhoeven
2023-06-23 15:41 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 17/39] drm: renesas: shmobile: Use drmm_universal_plane_alloc() Geert Uytterhoeven
2023-06-23 15:46 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 18/39] drm: renesas: shmobile: Embed drm_device in shmob_drm_device Geert Uytterhoeven
2023-06-23 15:48 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 19/39] drm: renesas: shmobile: Convert container helpers to static inline functions Geert Uytterhoeven
2023-06-23 15:49 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 20/39] drm: renesas: shmobile: Replace .dev_private with container_of() Geert Uytterhoeven
2023-06-23 15:50 ` Laurent Pinchart
2023-06-24 9:49 ` [20/39] " Sui Jingfeng
2023-06-22 9:21 ` [PATCH 21/39] drm: renesas: shmobile: Use struct videomode in platform data Geert Uytterhoeven
2023-06-23 15:53 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 22/39] drm: renesas: shmobile: Use media bus formats " Geert Uytterhoeven
2023-06-23 15:54 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 23/39] drm: renesas: shmobile: Move interface handling to connector setup Geert Uytterhoeven
2023-06-23 16:39 ` Laurent Pinchart
2023-06-23 17:51 ` Geert Uytterhoeven
2023-06-23 17:53 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 24/39] drm: renesas: shmobile: Unify plane allocation Geert Uytterhoeven
2023-06-23 16:50 ` Laurent Pinchart
2023-06-23 17:55 ` Geert Uytterhoeven
2023-06-23 18:50 ` Laurent Pinchart
2023-06-25 8:58 ` Geert Uytterhoeven
2023-06-25 16:56 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 25/39] drm: renesas: shmobile: Rename shmob_drm_crtc.crtc Geert Uytterhoeven
2023-06-23 16:51 ` Laurent Pinchart
2023-06-27 14:38 ` [25/39] " Sui Jingfeng
2023-06-22 9:21 ` [PATCH 26/39] drm: renesas: shmobile: Rename shmob_drm_connector.connector Geert Uytterhoeven
2023-06-23 16:51 ` Laurent Pinchart
2023-06-27 14:40 ` [26/39] " Sui Jingfeng
2023-06-22 9:21 ` [PATCH 27/39] drm: renesas: shmobile: Rename shmob_drm_plane.plane Geert Uytterhoeven
2023-06-23 16:52 ` Laurent Pinchart
2023-06-27 14:40 ` [27/39] " Sui Jingfeng
2023-06-22 9:21 ` [PATCH 28/39] drm: renesas: shmobile: Use drm_crtc_handle_vblank() Geert Uytterhoeven
2023-06-23 16:53 ` Laurent Pinchart
2023-06-24 9:33 ` [28/39] " Sui Jingfeng
2023-06-25 8:55 ` Geert Uytterhoeven
2023-06-22 9:21 ` [PATCH 29/39] drm: renesas: shmobile: Move shmob_drm_crtc_finish_page_flip() Geert Uytterhoeven
2023-06-23 16:53 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 30/39] drm: renesas: shmobile: Wait for page flip when turning CRTC off Geert Uytterhoeven
2023-06-23 17:08 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 31/39] drm: renesas: shmobile: Turn vblank on/off when enabling/disabling CRTC Geert Uytterhoeven
2023-06-23 17:09 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 32/39] drm: renesas: shmobile: Shutdown the display on remove Geert Uytterhoeven
2023-06-23 17:10 ` Laurent Pinchart
2023-06-27 14:57 ` [32/39] " Sui Jingfeng
2023-07-05 10:29 ` Geert Uytterhoeven
2023-06-22 9:21 ` [PATCH 33/39] drm: renesas: shmobile: Cleanup encoder Geert Uytterhoeven
2023-06-23 17:12 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 34/39] drm: renesas: shmobile: Atomic conversion part 1 Geert Uytterhoeven
2023-06-22 9:21 ` [PATCH 35/39] drm: renesas: shmobile: Atomic conversion part 2 Geert Uytterhoeven
2023-06-22 9:21 ` [PATCH 36/39] drm: renesas: shmobile: Use suspend/resume helpers Geert Uytterhoeven
2023-06-23 17:14 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 37/39] drm: renesas: shmobile: Remove internal CRTC state tracking Geert Uytterhoeven
2023-06-23 17:15 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 38/39] drm: renesas: shmobile: Atomic conversion part 3 Geert Uytterhoeven
2023-06-23 17:18 ` Laurent Pinchart
2023-06-22 9:21 ` [PATCH 39/39] drm: renesas: shmobile: Add DT support Geert Uytterhoeven
2023-06-23 17:50 ` Laurent Pinchart [this message]
2023-06-23 17:54 ` Sam Ravnborg
2023-06-23 18:09 ` Geert Uytterhoeven
2023-06-23 18:52 ` Laurent Pinchart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230623175019.GO2112@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=conor+dt@kernel.org \
--cc=daniel@ffwll.ch \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=geert+renesas@glider.be \
--cc=kieran.bingham+renesas@ideasonboard.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=robh+dt@kernel.org \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox