Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp788267pxb; Thu, 21 Oct 2021 09:28:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyC2Rj9gpziOWPva25UH2ohvf0AMb6wyAlymjs9vXudvoRJsnd/Birsakpanj5lC0Wc9ig9 X-Received: by 2002:a17:906:3ce:: with SMTP id c14mr8746471eja.412.1634833724281; Thu, 21 Oct 2021 09:28:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634833724; cv=none; d=google.com; s=arc-20160816; b=wkkZS1ghWQBkvuFBSIK99TNteNOdEARpoPiRF1dDc/ms4gpevzU7npJ64AkStwfPlr KJl6EBmRQThxu4N54+jQ3/709L5xZDQIps+47L2VGTMIs8/uJzu7fhi6r9RbTuM7tDta 4B6LO5tkxt0ylvg/PkJDkewEUiXuhyA3AXMYtKz/ORfH0uCJDEvb5mVxwuOsjUNwzBsp rsA5O3m1mHcuLptXNJI6lSKNxAN7ViVRNWKSlOsLk0POp/q2HZLTjTbFxdVTM9nourZu 9iYN7LfuB1HjRJMf5/24c7KfZTabym1FPoDu4C2an6i7VhjPaM++W+JW69YQoo4DAiPv jpNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=MJX2i4HqBrM5vK2Tz/O1+2LEtyHzF3MISyrbDZ9H1L0=; b=w4BX3UG6kiixTv7Og3WbwNWqkp+Uo3hEUlyew/BQTLuZZuyY6V8KKTE8VVtS2JOwM3 ZuhWaAHKxvU5jA6zKu7UF5a03tWFlznB/ON64ELeyu1LCwjV3stI688fCzCV742Vduqk P4S7kb9B9isgMtqSe9f0b+AooPZPhJH8m80W0CZxW9ejraLP825dRxe00rnxfMzy8MF4 SGTmMiG392bXc151zm8+bmIU9XBBv8/NgCfoBXUjFypvdDezrmwiM2GvoCRDocB4jwHZ DRT2JIt8rr36/4RVvkDmK+fVcbtcz0wDEW6JhLWXaIsSkYCHiR3bCMpQOKMJ4w66obpR lmNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="Ei/6JKli"; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s13si10890857edd.588.2021.10.21.09.28.19; Thu, 21 Oct 2021 09:28:44 -0700 (PDT) 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=@gmail.com header.s=20210112 header.b="Ei/6JKli"; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231941AbhJUQ2T (ORCPT + 99 others); Thu, 21 Oct 2021 12:28:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39068 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231883AbhJUQ2S (ORCPT ); Thu, 21 Oct 2021 12:28:18 -0400 Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 24D55C061764; Thu, 21 Oct 2021 09:26:02 -0700 (PDT) Received: by mail-wm1-x335.google.com with SMTP id z11-20020a1c7e0b000000b0030db7b70b6bso307906wmc.1; Thu, 21 Oct 2021 09:26:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=MJX2i4HqBrM5vK2Tz/O1+2LEtyHzF3MISyrbDZ9H1L0=; b=Ei/6JKliMFXsBAo5RU5GpOOPsS7XlFzAhvK8H56I9S/O8dxSN9/RULALxLfxuRbMuj FLyXizJ3d75jhBhDABUjUAh3cIghGKGlS1MqR0SQQlhoBHiAx+eXzFdY+OpuKI+mr2g3 4Xm0/7J/FIE1xnZpo1dZUN8In7hgKaTV3xNLLuRgnc1Uh+ytshpF0U15u1Dxlup5aUz2 vUaxKT/nsqC8Q08oa3ZNyxO0cjW1oVVoiaoj3Fy3kptW2GdfJGMJgNACrO0OsfG4Jz4m ucK9MQlVBQo81f8YudTvTZHNo+3bKMTNHpgm0MKAGMSXXhxMlVFo7PAU3MmjA8XJn5qD O10w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=MJX2i4HqBrM5vK2Tz/O1+2LEtyHzF3MISyrbDZ9H1L0=; b=NxL1W44BDkjl89XHwLi8rhDurJWmpeBrgWAW6hxhHoD/o8bdeZ3gb774K30tmn7QZ/ vStAUhaZxytKUGPz9CBXsPQHi792AwL4q9gbl4Jb3KXlJiFMuoilFk31cDuGcYhJdY7I +pX7ALasYUcICGMkGYb52pzXIq42Esr8L2kG8l/q/V26rUP4cVJC3kHIgZLT2QKqeCqP Yz7KeP4Yhhhx/fNGPa6yFsyVNUg3IP0DfqGOsLsOE5IJWns58dL03jX1FJR0K4eA8oiJ pER7/j3zqTBveUZ5G2ik7drL5oIvIVAFoyfvYOQSWPoJD6qHTX8b0y3DXB/v5ac7WsGe AgNA== X-Gm-Message-State: AOAM532S+aLEM9W1Xb/k9+fYJ8NibhOnOtPOzb4/8UXacynWpnH6xQeY vMT/8BEViZu3V5iddy0z6EFtUTLCbbxXRWtRIMQ= X-Received: by 2002:a7b:c007:: with SMTP id c7mr22651421wmb.101.1634833560514; Thu, 21 Oct 2021 09:26:00 -0700 (PDT) MIME-Version: 1.0 References: <20211021073947.499373-1-maxime@cerno.tech> <20211021073947.499373-22-maxime@cerno.tech> In-Reply-To: <20211021073947.499373-22-maxime@cerno.tech> From: Rob Clark Date: Thu, 21 Oct 2021 09:30:39 -0700 Message-ID: Subject: Re: [PATCH v5 21/21] drm/msm/dsi: Adjust probe order To: Maxime Ripard Cc: Laurent Pinchart , Maarten Lankhorst , Thomas Zimmermann , Sam Ravnborg , Daniel Vetter , David Airlie , Thierry Reding , Andrzej Hajda , Robert Foss , Neil Armstrong , Jonas Karlman , Jernej Skrabec , Seung-Woo Kim , Xinliang Liu , "moderated list:ARM/S5P EXYNOS AR..." , Linux Kernel Mailing List , Tian Tao , freedreno , Chen Feng , Joonyoung Shim , Kyungmin Park , John Stultz , linux-arm-msm , Sean Paul , Inki Dae , Xinwei Kong , dri-devel , Rob Clark , Amit Pundir , Caleb Connolly Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Oct 21, 2021 at 12:41 AM Maxime Ripard wrote: > > From: Rob Clark > > Switch to the documented order dsi-host vs bridge probe. > > Tested-by: Amit Pundir > Tested-by: Caleb Connolly > Tested-by: John Stultz > Signed-off-by: Rob Clark > Signed-off-by: Maxime Ripard I guess this should probably land together w/ the rest of the series, so a-b for merging thru drm-misc BR, -R > --- > drivers/gpu/drm/msm/dsi/dsi.c | 50 ++++++++++++++++----------- > drivers/gpu/drm/msm/dsi/dsi.h | 2 +- > drivers/gpu/drm/msm/dsi/dsi_host.c | 22 ++++-------- > drivers/gpu/drm/msm/dsi/dsi_manager.c | 6 ++-- > drivers/gpu/drm/msm/msm_drv.h | 2 ++ > 5 files changed, 43 insertions(+), 39 deletions(-) > > diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c > index 614dc7f26f2c..ad73ebb84b2d 100644 > --- a/drivers/gpu/drm/msm/dsi/dsi.c > +++ b/drivers/gpu/drm/msm/dsi/dsi.c > @@ -112,18 +112,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data) > { > struct drm_device *drm = dev_get_drvdata(master); > struct msm_drm_private *priv = drm->dev_private; > - struct platform_device *pdev = to_platform_device(dev); > - struct msm_dsi *msm_dsi; > - > - DBG(""); > - msm_dsi = dsi_init(pdev); > - if (IS_ERR(msm_dsi)) { > - /* Don't fail the bind if the dsi port is not connected */ > - if (PTR_ERR(msm_dsi) == -ENODEV) > - return 0; > - else > - return PTR_ERR(msm_dsi); > - } > + struct msm_dsi *msm_dsi = dev_get_drvdata(dev); > > priv->dsi[msm_dsi->id] = msm_dsi; > > @@ -136,12 +125,8 @@ static void dsi_unbind(struct device *dev, struct device *master, > struct drm_device *drm = dev_get_drvdata(master); > struct msm_drm_private *priv = drm->dev_private; > struct msm_dsi *msm_dsi = dev_get_drvdata(dev); > - int id = msm_dsi->id; > > - if (priv->dsi[id]) { > - dsi_destroy(msm_dsi); > - priv->dsi[id] = NULL; > - } > + priv->dsi[msm_dsi->id] = NULL; > } > > static const struct component_ops dsi_ops = { > @@ -149,15 +134,40 @@ static const struct component_ops dsi_ops = { > .unbind = dsi_unbind, > }; > > -static int dsi_dev_probe(struct platform_device *pdev) > +int dsi_dev_attach(struct platform_device *pdev) > { > return component_add(&pdev->dev, &dsi_ops); > } > > -static int dsi_dev_remove(struct platform_device *pdev) > +void dsi_dev_detach(struct platform_device *pdev) > { > - DBG(""); > component_del(&pdev->dev, &dsi_ops); > +} > + > +static int dsi_dev_probe(struct platform_device *pdev) > +{ > + struct msm_dsi *msm_dsi; > + > + DBG(""); > + msm_dsi = dsi_init(pdev); > + if (IS_ERR(msm_dsi)) { > + /* Don't fail the bind if the dsi port is not connected */ > + if (PTR_ERR(msm_dsi) == -ENODEV) > + return 0; > + else > + return PTR_ERR(msm_dsi); > + } > + > + return 0; > +} > + > +static int dsi_dev_remove(struct platform_device *pdev) > +{ > + struct msm_dsi *msm_dsi = platform_get_drvdata(pdev); > + > + DBG(""); > + dsi_destroy(msm_dsi); > + > return 0; > } > > diff --git a/drivers/gpu/drm/msm/dsi/dsi.h b/drivers/gpu/drm/msm/dsi/dsi.h > index b50db91cb8a7..83787cbee419 100644 > --- a/drivers/gpu/drm/msm/dsi/dsi.h > +++ b/drivers/gpu/drm/msm/dsi/dsi.h > @@ -116,7 +116,7 @@ int msm_dsi_host_set_display_mode(struct mipi_dsi_host *host, > struct drm_panel *msm_dsi_host_get_panel(struct mipi_dsi_host *host); > unsigned long msm_dsi_host_get_mode_flags(struct mipi_dsi_host *host); > struct drm_bridge *msm_dsi_host_get_bridge(struct mipi_dsi_host *host); > -int msm_dsi_host_register(struct mipi_dsi_host *host, bool check_defer); > +int msm_dsi_host_register(struct mipi_dsi_host *host); > void msm_dsi_host_unregister(struct mipi_dsi_host *host); > int msm_dsi_host_set_src_pll(struct mipi_dsi_host *host, > struct msm_dsi_phy *src_phy); > diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c > index e269df285136..f741494b1bf6 100644 > --- a/drivers/gpu/drm/msm/dsi/dsi_host.c > +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c > @@ -1624,6 +1624,10 @@ static int dsi_host_attach(struct mipi_dsi_host *host, > if (ret) > return ret; > > + ret = dsi_dev_attach(msm_host->pdev); > + if (ret) > + return ret; > + > DBG("id=%d", msm_host->id); > if (msm_host->dev) > queue_work(msm_host->workqueue, &msm_host->hpd_work); > @@ -1636,6 +1640,8 @@ static int dsi_host_detach(struct mipi_dsi_host *host, > { > struct msm_dsi_host *msm_host = to_msm_dsi_host(host); > > + dsi_dev_detach(msm_host->pdev); > + > msm_host->device_node = NULL; > > DBG("id=%d", msm_host->id); > @@ -1970,7 +1976,7 @@ int msm_dsi_host_modeset_init(struct mipi_dsi_host *host, > return 0; > } > > -int msm_dsi_host_register(struct mipi_dsi_host *host, bool check_defer) > +int msm_dsi_host_register(struct mipi_dsi_host *host) > { > struct msm_dsi_host *msm_host = to_msm_dsi_host(host); > int ret; > @@ -1984,20 +1990,6 @@ int msm_dsi_host_register(struct mipi_dsi_host *host, bool check_defer) > return ret; > > msm_host->registered = true; > - > - /* If the panel driver has not been probed after host register, > - * we should defer the host's probe. > - * It makes sure panel is connected when fbcon detects > - * connector status and gets the proper display mode to > - * create framebuffer. > - * Don't try to defer if there is nothing connected to the dsi > - * output > - */ > - if (check_defer && msm_host->device_node) { > - if (IS_ERR(of_drm_find_panel(msm_host->device_node))) > - if (!of_drm_find_bridge(msm_host->device_node)) > - return -EPROBE_DEFER; > - } > } > > return 0; > diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c > index c41d39f5b7cf..fc949a84cef6 100644 > --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c > +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c > @@ -72,7 +72,7 @@ static int dsi_mgr_setup_components(int id) > int ret; > > if (!IS_BONDED_DSI()) { > - ret = msm_dsi_host_register(msm_dsi->host, true); > + ret = msm_dsi_host_register(msm_dsi->host); > if (ret) > return ret; > > @@ -92,10 +92,10 @@ static int dsi_mgr_setup_components(int id) > * because only master DSI device adds the panel to global > * panel list. The panel's device is the master DSI device. > */ > - ret = msm_dsi_host_register(slave_link_dsi->host, false); > + ret = msm_dsi_host_register(slave_link_dsi->host); > if (ret) > return ret; > - ret = msm_dsi_host_register(master_link_dsi->host, true); > + ret = msm_dsi_host_register(master_link_dsi->host); > if (ret) > return ret; > > diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h > index 8b005d1ac899..31d50e98a723 100644 > --- a/drivers/gpu/drm/msm/msm_drv.h > +++ b/drivers/gpu/drm/msm/msm_drv.h > @@ -344,6 +344,8 @@ int msm_edp_modeset_init(struct msm_edp *edp, struct drm_device *dev, > > struct msm_dsi; > #ifdef CONFIG_DRM_MSM_DSI > +int dsi_dev_attach(struct platform_device *pdev); > +void dsi_dev_detach(struct platform_device *pdev); > void __init msm_dsi_register(void); > void __exit msm_dsi_unregister(void); > int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev, > -- > 2.31.1 >