Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752937AbdFVM3Q (ORCPT ); Thu, 22 Jun 2017 08:29:16 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:24998 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751118AbdFVM3N (ORCPT ); Thu, 22 Jun 2017 08:29:13 -0400 X-AuditID: cbfec7f4-f79806d000001279-56-594bb815919b Subject: Re: [PATCH 1/7] drm/bridge: Support hotplugging panel-bridge. To: Boris Brezillon , Archit Taneja , Laurent Pinchart Cc: Mark Rutland , devicetree@vger.kernel.org, Linux Kernel Mailing List , "dri-devel@lists.freedesktop.org" , Philippe Cornu , Rob Herring , Thierry Reding From: Andrzej Hajda Message-id: <7ce4f741-309a-2eaa-381c-8033f089651a@samsung.com> Date: Thu, 22 Jun 2017 14:29:07 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 MIME-version: 1.0 In-reply-to: <20170622112332.7ec7b65c@bbrezillon> Content-type: text/plain; charset=utf-8 Content-transfer-encoding: 7bit Content-language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA01SeyxVcRz3u+fce4+7bjtd5BtK3S2N5bVpncmsZO3IH/VHD2zKKccjz92D hWokedwUonQZpdg8wi4ZhryiUUqSXUZWqpuih0esWNc9bP77fL7fz/fx+e5LYLKXQjMiODyK VYQzoXKRBK/vXuq3NWnw9HZoVO6nrqZOC6k27QOcKurqF1Jv53+IqLSsR2JqsKlARJUMDwio iWtaIZXc0iWmlpoK8YMSurKwEtGDNzME9KR6ANGNqjExnZ96T0iry9NE9Htlj4D+tNiC0bPq HccNfSQu/mxocAyrsHf1kwRl5z/GIlssLyY3V+EJaGhbOjIkgHSCst4bOI+3wuvxatEqlpEl CBabfdORRIdnEYyW/MPWC2ZHF3A+UYqgtWZexJPPCIY/LOhVRuQReDFSoFcZkyoE40PfxKsE I58KoDRtQbCqEpHWsFyr0Q+Ukq6QONaur8bJ3bAy0yVcxSakFxRnZ4l5zRZYvD2uX9aQdITu PyN6Pabro53LxnlsCbWV02txU0hK1ui3APKXGMYW63XDCB3ZDuo2jIfuMJjoxlszgqmeOjGP LSAttV3AlyoR/L71XMyTHAQrP/PWjnEAOnsGhPywzZBdf3etqRRSr8t4CQ2aKi3iw4fgY208 f61cHOaaJwSZaKdqgzXVBjuqDXZUG+zcR3g5MmajubBAlnOy45gwLjo80O58RJga6Z6sb6Vn rgE97HbuQCSB5Juk1JWj3jIhE8PFhnUgIDC5sTSnxtNbJvVnYuNYRcRZRXQoy3UgcwKXm0ol ve+8ZGQgE8WGsGwkq1jPCghDswTkUVPUisbdlRqnaIMzIZ17X+108bH6MkXEpeQfzvTdJ7FR 1SKblEt16r66TLMnsu8d0lwHo2d/rU7valkxNy2LR8uTFse4akJb8SZJoXErvnPC45y1tsrc b84oMABXn5opHnCyzVBhTHhASaG60GvWAOwvnLy8pyFByeR9da6Q41wQ42iDKTjmP8oo6Rtg AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrLIsWRmVeSWpSXmKPExsVy+t/xa7qiO7wjDfZflbNo6njLanHgxUIW i/lHzrFaXPn6ns2ic+ISdovLu+awWSy9fpHJ4kHLC1aL1r1H2C1+7prH4sDlsWbeGkaPy329 TB5PNl1k9Ng56y67x+yOmawem1Z1snnc7z7O5PH0x15mj8+b5AI4o9xsMlITU1KLFFLzkvNT MvPSbZVCQ9x0LZQU8hJzU22VInR9Q4KUFMoSc0qBPCMDNODgHOAerKRvl+CWMWn2WuaCvfIV rXvWsTQwXpXsYuTkkBAwkfh8+xsLhC0mceHeerYuRi4OIYEljBLzTmxghnCeMUp8Xv6FFaRK WMBN4sytOSwgCRGBWYwS59/2MYE4zAL7mSSOnvvGAtEylUXixvKtjCAtbAKaEn8332QDsXkF 7CQa7x5kBrFZBFQl/r07AjZWVCBCYtf1A6wQNYISPybfAzuKU8BQ4tj3W0D1HEAb1CWmTMkF CTMLyEtsXvOWGcIWl2huvckygVFwFpLuWQgds5B0zELSsYCRZRWjSGppcW56brGhXnFibnFp Xrpecn7uJkZgVG879nPzDsZLG4MPMQpwMCrx8E5o8IoUYk0sK67MPcQowcGsJMI7ZYN3pBBv SmJlVWpRfnxRaU5q8SFGU6DXJjJLiSbnAxNOXkm8oYmhuaWhkbGFhbmRkZI4b8mHK+FCAumJ JanZqakFqUUwfUwcnFINjDnCDupC8v/rn/G++dzH5KI2d3mHV8K2B4FHArdkO5sHvPOJmu6e V8uyMnDHAv6+21GnfyS8qGt7+eb2Xd9ZBUGTX5jtlF7pt09UPtJ0t4vzm0e1CfX6PzNfvm3S Xe9+6g7v3Fip6H3SWn0Hip4VOUf87zq902xu5wTjG9u6ZxWf9r6yoaxAS4mlOCPRUIu5qDgR AHrkLrcAAwAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170622122909eucas1p296b309ef3981db8113ecf77cc8066b8f X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRvsgrw=?= =?UTF-8?B?7ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRtTYW1z?= =?UTF-8?B?dW5nIEVsZWN0cm9uaWNzG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjczOTI=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170622092354epcas1p2eb523cbfb64a4da2dc0b188df760d493 X-RootMTR: 20170622092354epcas1p2eb523cbfb64a4da2dc0b188df760d493 References: <20170615204130.19255-1-eric@anholt.net> <20170615204130.19255-2-eric@anholt.net> <777ee1b1-e5ce-ea29-8a48-f792354a22d1@codeaurora.org> <871sqkouvr.fsf@eliezer.anholt.net> <8e148170-b626-b426-3c94-b93d2746f4ce@codeaurora.org> <871sqe7ei0.fsf@eliezer.anholt.net> <20170622112332.7ec7b65c@bbrezillon> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3954 Lines: 73 On 22.06.2017 11:23, Boris Brezillon wrote: > On Thu, 22 Jun 2017 13:47:43 +0530 > Archit Taneja wrote: > >> On 06/22/2017 01:20 PM, Benjamin Gaignard wrote: >>> 2017-06-20 19:31 GMT+02:00 Eric Anholt : >>>> Archit Taneja writes: >>>> >>>>> On 06/16/2017 08:13 PM, Eric Anholt wrote: >>>>>> Archit Taneja writes: >>>>>> >>>>>>> On 06/16/2017 02:11 AM, Eric Anholt wrote: >>>>>>>> If the panel-bridge is being set up after the drm_mode_config_reset(), >>>>>>>> then the connector's state would never get initialized, and we'd >>>>>>>> dereference the NULL in the hotplug path. We also need to register >>>>>>>> the connector, so that userspace can get at it. >>>>>>>> >>>>>>> Shouldn't the KMS driver make sure the panel-bridge is set up before >>>>>>> drm_mode_config_reset? Is it the case when we're inserting the >>>>>>> panel-bridge driver as a module? >>>>>>> >>>>>>> >>>>>>> All the connectors that have been added are registered automatically >>>>>>> when drm_dev_register() is called by the KMS driver. Registering a >>>>>>> connector in the middle of setting up our driver is prone to race >>>>>>> conditions if the userspace decides to use them immediately. >>>>>> Yeah, this is fixing initializing panel_bridge at DSI host_attach time, >>>>>> which in the case of a panel module that creates the DSI device >>>>>> (adv7533-style, like you said I should use as a reference) will be after >>>>>> drm_mode_config_reset() and drm_dev_register(). >>>>> Okay. In the case of the msm kms driver, we defer probe until the >>>>> adv7533 module is inserted, only then we proceed to drm_mode_config_reset() >>>>> and drm_dev_register(). I assumed this was the general practice followed by >>>>> most kms drivers. I.,e the kms driver defers probe until all connector >>>>> related modules are inserted, and only then proceed to create a drm device. >>>> The problem, though, is the panel driver needs the MIPI DSI host to >>>> exist to call mipi_dsi_device_register_full() during the probe process. >>>> The adv7533 driver gets around this by registering the DSI device in the >>>> bridge attach step, but drm_panel doesn't have an attach step. >> I'm not sure how we can get around this. We had discussion about this on irc >> recently, but couldn't come up with a good conclusion. We could come up with a >> panel_attach() callback to make it similar to bridges, but that's just us avoiding >> the real issue. > How about making DSI dev registration fully asynchronous, that is, DSI > devs declared in the DT under the DSI host node will be > registered/attached at probe time, and devs using another control bus > (like the adv7533 controller over i2c) will be registered afterwards. > > That implies moving the drm_brige registration logic outside of the DSI > host ->probe() path. The idea would be to check if all devs connected > to the DSI bus are ready at dsi_host->attach() time. If they are, we > can finally register the XXX -> DSI bridge. If they're not (because > some devs connected to the DSI bus have not been probed yet), then we > do not register the drm_bridge and wait for the next dsi_host->attach() > event. I guess you assumes that dsi-host knows all devs connected to it, thanks to: - subnodes of the host - ie. devices controlled via dsi bus, - graph links from host ports/endpoints - ie. devices controlled by other buses, for example adv7533. I would separate both abstractions to make it more clear: 1. MIPI bus should be registered early - to allow create/bind devices on it, 2. drm_bridge should be registered only if all required sinks (bridges/panels) are registered. First point seems OK, I am not sure about the 2nd one - if used consistently, it would require building pipeline from sink to source. By the way is there any pipeline with two consecutive external bridges in the mainline? Regards Andrzej