Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp4770484pxb; Mon, 15 Feb 2021 00:12:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJxfR8+S40yUo4WjzigdN/Ofrh3UwuPE1eJrbuqURnF8q6fRF//6cI2L3HTJb5gUSI0AKTvW X-Received: by 2002:a50:ed97:: with SMTP id h23mr4103133edr.353.1613376767812; Mon, 15 Feb 2021 00:12:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613376767; cv=none; d=google.com; s=arc-20160816; b=eLLP+bM5DMovkGTy8CB1mHA5djSALUQwpjZdnmlYJWxinH9OyMieyBNcYrDkwi8/q7 L8rLAM3X/xUc8BSq+EmsQ8jBshTSTan9oHiHcJvL/TkDQhtWcBlFb8XTseharNLnXM2V Aw2HGuBFuTjocXqmhJVPKdePLo5gVKQJ3+1t9oMAn28zHdeNL8EJVRlB9gnG4LfI3tr1 JoAPS/1/Oheqp54R69kRiFY4KTj++Vx/V7Tlb4nHAZXK84WGC9301iNvqZscB5S4cMb+ JEvB5IcDM8Z6mLq6mEigFaAurmD0a8M78bsfXe1tLdJ/EBiCzoE1hDcqlbuAUbA8V+yW 35HQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:references:cc :to:subject:from:dkim-signature; bh=HOKWY9ja0XIA6P079lELOlmBVjhPUFu51o8zyaRJWOI=; b=ZzCgDj3pgBE7EMy0W1Z/IsELmtqQ4xrckmdKuNXCTxksP+HSRpwJdEz83zNXLGrwjV YSYxHYk/eR2phw9b4E1AZeiip2/+2zuo+0UsGCdpTSWlnMmWYm8/25XbtjN+eSbMW0eo DQnj25dIzyTT681AO63AQw4i7tnBCkAtygOxYqH089tqE+24BIZKVqrJK8+tla4hbCY4 W08nL7K/+3kDdi25+TdICyYoiob79+2GNzfpb4fo08GDiMC2C5CnwXDl7tpLmawjdf/0 qVgFXp0fr6PEKB+24OP26g/x9riD4ia+Ssk4KDXgOuHvtgaaKtBs5My/PsdaF9zZL8Oz eRow== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@foss.st.com header.s=selector1 header.b=FP3e2OQF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=foss.st.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z16si1966238ejp.84.2021.02.15.00.12.11; Mon, 15 Feb 2021 00:12:47 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@foss.st.com header.s=selector1 header.b=FP3e2OQF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=foss.st.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229783AbhBOIKh (ORCPT + 99 others); Mon, 15 Feb 2021 03:10:37 -0500 Received: from mx07-00178001.pphosted.com ([185.132.182.106]:2660 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229597AbhBOIKg (ORCPT ); Mon, 15 Feb 2021 03:10:36 -0500 Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 11F7vobR007207; Mon, 15 Feb 2021 09:09:21 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=from : subject : to : cc : references : message-id : date : mime-version : in-reply-to : content-type : content-transfer-encoding; s=selector1; bh=HOKWY9ja0XIA6P079lELOlmBVjhPUFu51o8zyaRJWOI=; b=FP3e2OQFOY6I5ccWP3JEkKPfznJxyTW3ozVr8iAAo/+q14uiiRG7EVQZzC+gRrypU5ad u/oDIBLyNLiwNCwSPAuFj1cHWQzogQA06miU50Qi227Q3lM0nuBFw7htfMBErgCj5mO8 6oLF/wZ7LXOiRIs8EXz5nAoLmhYzM2LXQJoYWBFXkescRjk769fT381TkXig3KTGB5R1 VLGqt0JELRUhqkJf3ZE1GX9FWm6FOTFZzyo9QY2e0P0w5P/pnPB8C64Fwa2EqDGcEpIA GVrnY9drLRMZeH8o5GM7d7HEubXcTfKjOFlaTBAq4hbllCla5JEsHmB9np7criiU/7Sx aA== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 36p54792v2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Feb 2021 09:09:21 +0100 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id EB50B10002A; Mon, 15 Feb 2021 09:09:18 +0100 (CET) Received: from Webmail-eu.st.com (sfhdag2node3.st.com [10.75.127.6]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id BE482211F0E; Mon, 15 Feb 2021 09:09:18 +0100 (CET) Received: from lmecxl0951.lme.st.com (10.75.127.46) by SFHDAG2NODE3.st.com (10.75.127.6) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Mon, 15 Feb 2021 09:09:17 +0100 From: yannick Fertre Subject: Re: [PATCH] drm/bridge: dw-mipi-dsi: Move drm_bridge_add into probe To: Jagan Teki , Andrzej Hajda , Neil Armstrong , "Laurent Pinchart" , Sandy Huang , Heiko Stubner , Yannick Fertre , Philippe Cornu CC: Marek Vasut , Vincent Abriou , Jernej Skrabec , Jonas Karlman , Sam Ravnborg , , , References: <20210203091306.140518-1-jagan@amarulasolutions.com> Message-ID: Date: Mon, 15 Feb 2021 09:09:00 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20210203091306.140518-1-jagan@amarulasolutions.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.75.127.46] X-ClientProxiedBy: SFHDAG1NODE3.st.com (10.75.127.3) To SFHDAG2NODE3.st.com (10.75.127.6) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.369,18.0.737 definitions=2021-02-15_02:2021-02-12,2021-02-15 signatures=0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello Jagan, I tested your patch on the stm32mp1 board. Unfortunately, the dsi panel does not probe well with this patch. The problem is due to the panel which is placed in the node of the dsi bridge (no problem with i2c devices). Regarding component bindings for stm drivers, I am currently working on a new version. Best regards Yannick On 2/3/21 10:13 AM, Jagan Teki wrote: > Usual I2C configured DSI bridge drivers have drm_bridge_add > in probe and mipi_dsi_attach in bridge attach functions. > > With, this approach the drm pipeline is unable to find the > dsi bridge in stm drm drivers since the dw-mipi-dsi bridge is > adding drm bridge during bridge attach operations instead of > the probe. > > This specific issue may not encounter for rockchip drm dsi > drivers, since rockchip drm uses component binding operations, > unlike stm drm drivers. > > So, possible solutions are > 1. Move drm_bridge_add into the dw-mipi-dsi probe. > 2. Add mipi_dsi_attach in the bridge drivers probe. > 3. Add component binding operations for stm drm drivers. > > Option 1 is a relatively possible solution as most of the > mainline drm dsi with bridge drivers have a similar approach > to their dsi host vs bridge registration. > > Signed-off-by: Jagan Teki > --- > drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 35 +++++++++---------- > 1 file changed, 17 insertions(+), 18 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c > index 6b268f9445b3..8a535041f071 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c > @@ -314,8 +314,6 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host, > { > struct dw_mipi_dsi *dsi = host_to_dsi(host); > const struct dw_mipi_dsi_plat_data *pdata = dsi->plat_data; > - struct drm_bridge *bridge; > - struct drm_panel *panel; > int ret; > > if (device->lanes > dsi->plat_data->max_data_lanes) { > @@ -329,22 +327,6 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host, > dsi->format = device->format; > dsi->mode_flags = device->mode_flags; > > - ret = drm_of_find_panel_or_bridge(host->dev->of_node, 1, 0, > - &panel, &bridge); > - if (ret) > - return ret; > - > - if (panel) { > - bridge = drm_panel_bridge_add_typed(panel, > - DRM_MODE_CONNECTOR_DSI); > - if (IS_ERR(bridge)) > - return PTR_ERR(bridge); > - } > - > - dsi->panel_bridge = bridge; > - > - drm_bridge_add(&dsi->bridge); > - > if (pdata->host_ops && pdata->host_ops->attach) { > ret = pdata->host_ops->attach(pdata->priv_data, device); > if (ret < 0) > @@ -1105,6 +1087,8 @@ __dw_mipi_dsi_probe(struct platform_device *pdev, > struct device *dev = &pdev->dev; > struct reset_control *apb_rst; > struct dw_mipi_dsi *dsi; > + struct drm_bridge *bridge; > + struct drm_panel *panel; > int ret; > > dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL); > @@ -1167,6 +1151,20 @@ __dw_mipi_dsi_probe(struct platform_device *pdev, > dw_mipi_dsi_debugfs_init(dsi); > pm_runtime_enable(dev); > > + ret = drm_of_find_panel_or_bridge(dev->of_node, 1, 0, > + &panel, &bridge); > + if (ret) > + return ERR_PTR(ret); > + > + if (panel) { > + bridge = drm_panel_bridge_add_typed(panel, > + DRM_MODE_CONNECTOR_DSI); > + if (IS_ERR(bridge)) > + return ERR_PTR(-ENODEV); > + } > + > + dsi->panel_bridge = bridge; > + > dsi->dsi_host.ops = &dw_mipi_dsi_host_ops; > dsi->dsi_host.dev = dev; > ret = mipi_dsi_host_register(&dsi->dsi_host); > @@ -1181,6 +1179,7 @@ __dw_mipi_dsi_probe(struct platform_device *pdev, > #ifdef CONFIG_OF > dsi->bridge.of_node = pdev->dev.of_node; > #endif > + drm_bridge_add(&dsi->bridge); > > return dsi; > } >