Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp366831pxb; Thu, 21 Oct 2021 00:47:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxmqVT+57N4CAVxAKkdsQtXdfOuv/U3ZJSWpWaxmcZG/+Oi41+okUG6uux9aNglLREQC1qB X-Received: by 2002:a17:906:b08a:: with SMTP id x10mr5507061ejy.257.1634802429716; Thu, 21 Oct 2021 00:47:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634802429; cv=none; d=google.com; s=arc-20160816; b=EHvdLiBJ1/i3lw21+qCTwLOEO6Oz1pZfI2dWot8kEwJHwjDqyd+fjVSu2YohGfr0Tj JzTEC3JycOB4EiPndOCshOW4fTe8ptScV4QKylTKs211gJvWLX1dEZUeRameYw3OKbpt EyqRBBu3MzLCNTjnZa8t/pZ57mQaoDJzYRSs5CqFAJTQEytIdxEyK5UopH9auRMzxL+B g2dbfg1JmE4HUCIPif/0GFPjrikX/5ha5QuFOlF1eEJfajqeZ36ZQaqNMq3k2CtJde2R kuWHkWSWJQBYOwxZf0TZQQzbW+t0EDp8Mc5sOnMQ+IpsEBZQJvVWtFtZlyzKep1X+gS7 hLiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=IjJ7Xg/H84lYBrLNnbeRdHfHU/7mTRchCznYNagdcAY=; b=Ecg4btgO8p99prsIwBRYeVfX5GtwzYAHOpFn88GfFN0SnvAMds/NAEqbJ8OIVeOEQ0 Pkam3qI5ThSZp0tFeavXkDhwHomidpeI5VQGQh8xzArgvriJyPrxCdaf4OrXW+wtKhce AHVGmIgJbwhydRtBuptuEoIHCFCqQcBqGYY0MaNm7nmoJiIyHvwNEEStJY2C247UXKdq ifqCJUE88npB9TESNafFCurbwqbWl0u1ZhjODYr4x6193i3klRIKkiE2uc0MGd1bgoiW h7RKb6gjhdoCTRK+Q3ZCaEg4Q3R4jFSw3JP6vt6xFO6L7jAR+gC/2BTcrDxP+CJJyHUA hTig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=LyUaKYLH; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=eKCsAx4T; 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=cerno.tech Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u11si149194edx.361.2021.10.21.00.46.46; Thu, 21 Oct 2021 00:47:09 -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=@cerno.tech header.s=fm1 header.b=LyUaKYLH; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=eKCsAx4T; 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=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231903AbhJUHoY (ORCPT + 99 others); Thu, 21 Oct 2021 03:44:24 -0400 Received: from wnew3-smtp.messagingengine.com ([64.147.123.17]:57147 "EHLO wnew3-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231770AbhJUHn3 (ORCPT ); Thu, 21 Oct 2021 03:43:29 -0400 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailnew.west.internal (Postfix) with ESMTP id 369122B0041E; Thu, 21 Oct 2021 03:41:11 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Thu, 21 Oct 2021 03:41:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm1; bh=IjJ7Xg/H84lYB rLNnbeRdHfHU/7mTRchCznYNagdcAY=; b=LyUaKYLH0kcqISbLnmU7sV/YXwVDW ZK+PFB/ikBYxIRt68IJ/5hhqvdPT67JRYSFehAGwBsdlkN+512JrGFLY9lFUo1wq wF0fYONzSi9K4b3W7pdiRvbqElia23ZhW+yd+fmBn69XAowp7yTw8ySFx820AdnR E8hg0pkrWjDk43dEzQV+ulRWgI13RyOhjUrTEbleBD0D5PoDW4Xlks2HM8zbaHbj q0S6BAHDNiGGe8iJtLDdZQYTizHoZ0Hp0E4k/4TxDGvamHqgQOnF405Ow954YI/E JnphBWBVNOIp97KueoVp9s4tsoDUtINCqz2F244W5uqhyW42FF9eZ3QDw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; bh=IjJ7Xg/H84lYBrLNnbeRdHfHU/7mTRchCznYNagdcAY=; b=eKCsAx4T OIsGhqbGD3/BfVNYl4xAVnV6IuBCGNV8lo824neSJ9Q0JBRxcJWGMLXOH/tmAAzl 5nHmiLJNVvkgtBpzmST98uG2Ik6HutWL2dzoWns3ML9Wrf64YUyAriGunE71C1bm 5D2T/LiQv3e2C2hKR4ci9kwm3XmQ52r0MupwLJZps+hSJAxs34fwNYhu6OmQ4Gez Xa2so4NPoMpl/v5eybeh+k9tjxXruwj7DYszOP7tikRGaA7aQzeJFN13xOz+YFbV S3wSJGPuQoIhuZrUFZLTLEMzWT3aR8e97FaPuYX1cmh/0Ok0JhSYjit+BPzkRkwV 54u+8Edhigz8GQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrvddvhedgudduiecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufffkofgjfhgggfestdekredtredttdenucfhrhhomhepofgrgihi mhgvucftihhprghrugcuoehmrgigihhmvgestggvrhhnohdrthgvtghhqeenucggtffrrg htthgvrhhnpedvkeelveefffekjefhffeuleetleefudeifeehuddugffghffhffehveev heehvdenucevlhhushhtvghrufhiiigvpeefnecurfgrrhgrmhepmhgrihhlfhhrohhmpe hmrgigihhmvgestggvrhhnohdrthgvtghh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 21 Oct 2021 03:41:10 -0400 (EDT) From: Maxime Ripard To: Laurent Pinchart , Maarten Lankhorst , Thomas Zimmermann , Maxime Ripard , Sam Ravnborg , Daniel Vetter , David Airlie , Thierry Reding , Andrzej Hajda , Robert Foss , Neil Armstrong , Jonas Karlman , Jernej Skrabec Cc: Seung-Woo Kim , Xinliang Liu , linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Tian Tao , freedreno@lists.freedesktop.org, Chen Feng , Joonyoung Shim , Kyungmin Park , John Stultz , Rob Clark , linux-arm-msm@vger.kernel.org, Sean Paul , Inki Dae , Xinwei Kong , dri-devel@lists.freedesktop.org Subject: [PATCH v5 17/21] drm/bridge: sn65dsi86: Register and attach our DSI device at probe Date: Thu, 21 Oct 2021 09:39:43 +0200 Message-Id: <20211021073947.499373-18-maxime@cerno.tech> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211021073947.499373-1-maxime@cerno.tech> References: <20211021073947.499373-1-maxime@cerno.tech> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to avoid any probe ordering issue, the best practice is to move the secondary MIPI-DSI device registration and attachment to the MIPI-DSI host at probe time. Let's do this. Acked-by: Sam Ravnborg Signed-off-by: Maxime Ripard --- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 77 ++++++++++++++------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c index 36a82e3d17ab..b6ce6776cdf1 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c @@ -655,58 +655,27 @@ static struct ti_sn65dsi86 *bridge_to_ti_sn65dsi86(struct drm_bridge *bridge) return container_of(bridge, struct ti_sn65dsi86, bridge); } -static int ti_sn_bridge_attach(struct drm_bridge *bridge, - enum drm_bridge_attach_flags flags) +static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata) { int ret, val; - struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge); struct mipi_dsi_host *host; struct mipi_dsi_device *dsi; struct device *dev = pdata->dev; const struct mipi_dsi_device_info info = { .type = "ti_sn_bridge", .channel = 0, .node = NULL, - }; + }; - if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) { - DRM_ERROR("Fix bridge driver to make connector optional!"); - return -EINVAL; - } - - pdata->aux.drm_dev = bridge->dev; - ret = drm_dp_aux_register(&pdata->aux); - if (ret < 0) { - drm_err(bridge->dev, "Failed to register DP AUX channel: %d\n", ret); - return ret; - } - - ret = ti_sn_bridge_connector_init(pdata); - if (ret < 0) - goto err_conn_init; - - /* - * TODO: ideally finding host resource and dsi dev registration needs - * to be done in bridge probe. But some existing DSI host drivers will - * wait for any of the drm_bridge/drm_panel to get added to the global - * bridge/panel list, before completing their probe. So if we do the - * dsi dev registration part in bridge probe, before populating in - * the global bridge list, then it will cause deadlock as dsi host probe - * will never complete, neither our bridge probe. So keeping it here - * will satisfy most of the existing host drivers. Once the host driver - * is fixed we can move the below code to bridge probe safely. - */ host = of_find_mipi_dsi_host_by_node(pdata->host_node); if (!host) { DRM_ERROR("failed to find dsi host\n"); - ret = -ENODEV; - goto err_dsi_host; + return -ENODEV; } dsi = devm_mipi_dsi_device_register_full(dev, host, &info); if (IS_ERR(dsi)) { DRM_ERROR("failed to create dsi device\n"); - ret = PTR_ERR(dsi); - goto err_dsi_host; + return PTR_ERR(dsi); } /* TODO: setting to 4 MIPI lanes always for now */ @@ -721,12 +690,38 @@ static int ti_sn_bridge_attach(struct drm_bridge *bridge, if (!(val & DPPLL_CLK_SRC_DSICLK)) dsi->mode_flags |= MIPI_DSI_CLOCK_NON_CONTINUOUS; + pdata->dsi = dsi; + ret = devm_mipi_dsi_attach(dev, dsi); if (ret < 0) { DRM_ERROR("failed to attach dsi to host\n"); - goto err_dsi_host; + return ret; } - pdata->dsi = dsi; + + return 0; +} + +static int ti_sn_bridge_attach(struct drm_bridge *bridge, + enum drm_bridge_attach_flags flags) +{ + struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge); + int ret; + + if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) { + DRM_ERROR("Fix bridge driver to make connector optional!"); + return -EINVAL; + } + + pdata->aux.drm_dev = bridge->dev; + ret = drm_dp_aux_register(&pdata->aux); + if (ret < 0) { + drm_err(bridge->dev, "Failed to register DP AUX channel: %d\n", ret); + return ret; + } + + ret = ti_sn_bridge_connector_init(pdata); + if (ret < 0) + goto err_conn_init; /* We never want the next bridge to *also* create a connector: */ flags |= DRM_BRIDGE_ATTACH_NO_CONNECTOR; @@ -1224,7 +1219,15 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev, drm_bridge_add(&pdata->bridge); + ret = ti_sn_attach_host(pdata); + if (ret) + goto err_remove_bridge; + return 0; + +err_remove_bridge: + drm_bridge_remove(&pdata->bridge); + return ret; } static void ti_sn_bridge_remove(struct auxiliary_device *adev) -- 2.31.1