From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A1610C388F9 for ; Wed, 11 Nov 2020 10:18:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 44C5220795 for ; Wed, 11 Nov 2020 10:18:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726755AbgKKKSM (ORCPT ); Wed, 11 Nov 2020 05:18:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726557AbgKKKSM (ORCPT ); Wed, 11 Nov 2020 05:18:12 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 46171C0613D1 for ; Wed, 11 Nov 2020 02:18:12 -0800 (PST) Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kcnCc-0007WQ-QQ; Wed, 11 Nov 2020 11:18:10 +0100 Received: from mtr by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1kcnCa-0004L6-H0; Wed, 11 Nov 2020 11:18:08 +0100 Date: Wed, 11 Nov 2020 11:18:08 +0100 From: Michael Tretter To: Inki Dae Cc: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, kernel@pengutronix.de, Laurent.pinchart@ideasonboard.com, krzk@kernel.org, narmstrong@baylibre.com, b.zolnierkie@samsung.com, sylvester.nawrocki@gmail.com, a.hajda@samsung.com, jy0922.shim@samsung.com, sw0312.kim@samsung.com Subject: Re: [PATCH v2 00/16] drm/exynos: Convert driver to drm bridge Message-ID: <20201111101808.GA16630@pengutronix.de> References: <20200911135413.3654800-1-m.tretter@pengutronix.de> <20201110081336.GB13669@pengutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-IRC: #ptxdist @freenode X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-Uptime: 11:17:33 up 265 days, 17:48, 92 users, load average: 0.20, 0.28, 0.27 User-Agent: Mutt/1.10.1 (2018-07-13) X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: mtr@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-samsung-soc@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org On Wed, 11 Nov 2020 12:11:15 +0900, Inki Dae wrote: > 20. 11. 11. 오후 12:04에 Inki Dae 이(가) 쓴 글: > > 20. 11. 10. 오후 5:13에 Michael Tretter 이(가) 쓴 글: > >> On Mon, 09 Nov 2020 12:15:39 +0900, Inki Dae wrote: > >>> 20. 9. 11. 오후 10:53에 Michael Tretter 이(가) 쓴 글: > >>>> This is v2 of the series to convert the Exynos MIPI DSI driver into a drm > >>>> bridge and make it usable with other drivers. Although the driver is > >>>> converted, it still supports the component framework API to stay compliant > >>>> with the Exynos DRM driver. > >>>> > >>>> The Exynos MIPI DSI Phy is also found on the i.MX8M Mini. However, on the > >>>> i.MX8M Mini, the bridge is driven by an LCDIF display controller instead of > >>>> the Exynos Decon. The driver for the LCDIF does not use the component > >>>> framework, but uses drm bridges. > >>>> > >>>> I don't have any Exynos SoC to actually test the series. I build a dummy to > >>>> test the bridge with a component driver, to make sure that at least the > >>>> initialization is working. Furthermore, tested the driver as a bridge with a > >>>> few additional unfinished patches on the i.MX8M Mini EVK. However, somebody > >>>> should verify that the driver is still working on Exynos hardware. > >>>> > >>>> I also changed the order of the patches to first make the driver more platform > >>>> independent (patches 2 to 8), then convert to a drm bridge driver (patches 10 > >>> > >>> Just a fundamental question, A MIPI-DSI(Display Serial Interface) bus device > >>> would be one of an encoder type of devices not bridge such as DSI to LVDS > >>> and LVDS to DSI bridge devices, and also image enhancer and image compressor > >>> in case of Exynos. > >> > >> I don't understand, why the MIPI-DSI bus device would be an encoder type and > >> DSI to LVDS or MIPI-DSI to HDMI would be bridges. For example, the device tree > >> documentation for the DSIM states that the DSIM receives RGB video as input > >> and produces MIPI-DSI as output. Thus, the DSIM is basically a parallel RGB to > > > > MIPI-DSI receives RGB video as input and encodes it to MIPI packet and then transfers the packet to MIPI panel. > > And finally, MIPI panel decodes the packet and updates it - RGB data - on its SRAM. > > > > MIPI-DSI driver programs how the RGB video should be made as MIPI packet. For more detail, you could refer to MIPI-DSI spec. > > This would be why we handle MIPI-DSI driver as an encoder like other ARM SoC DRM drivers did. > > > >> MIPI-DSI bridge and the encoder is the LCD controller that encodes the video > >> data as parallel RGB. > >> > >> On the i.MX8MM, the LCDIF is already the encoder. On Exynos, the series > >> implements the encoder in the platform glue, but in the end the encoder can > >> probably be moved to the DECON. > > > > As you know, Display controller can transfer RGB video to various devices such as RGB panel, CPU panel, LVDS panel via LVDS bridge, MIPI panel via MIPI-DSI bus device, and so on like below, > > > > Display Controller --> RGB panel or CPU panel. > > Display Controller --> LVDS bridge --> LVDS panel. > > Display Controller --> MIPI DSI bus device --> MIPI Panel. > > ... > > > > Display controller drivers such as FIMD and DECON series in case of Exynos don't create an encoder driver-internally instead of it depends on Display pipeline configuration - what kind of Display panel is used. > > In fact, if the Display pipeline uses RGB panel or CPU panel without Display bus device such as MIPI-DSI, then FIMD and DECON drivers create an encoder for it internally - just we separated the code to consider other type of panels. What happens if I add a MIPI-DSI --> HDMI bridge to the Display pipeline? Then the Pipeline is Display Controller --> MIPI DSI bus device --> HDMI bridge --> HDMI Panel If the type of the Display panel decides which part of the pipeline provides the encoder, the HDMI bridge driver would be responsible for creating the encoder, right? Thus, the MIPI-DSI driver would not be responsible for creating the encoder and would also get the encoder from another driver. Therefore, I prefer to think of the Display Controller as the encoder and other bridges are just bridges. BTW, this is exactly the Display pipeline that is used on the i.MX8MM EVK. > > > > On the I.MX8MM, could you share how to handle an encoder if some board has only MIPI-DSI panel, and in this case, where is an encoder for it created? I looked into I.MX8MM DRM driver but didn't find MIPI-DSI driver. > > Seems that they support only parallel display, HDMI and LVDS panel. > > One more thing, If I saw correctly, the LVDS driver of IMX DRM - lmx_ldb - creates an encoder internally like MIPI-DSI driver of Exynos DRM did. Yes, but the IMX DRM driver is not used on the i.MX8MM. The i.MX8MM uses the LCDIF display controller instead of the IPU of the i.MX6. The driver for the LCDIF is the mxsfb driver, which in turn uses the drm_simple_display_pipe, which already provides the encoder. Therefore, to use a bridge driver with a driver based on a drm_simple_display_pipe, the bridge driver must accept other encoders. Michael > > > > > Thanks, > > Inki Dae > > > >> > >>> Why do you want to convert such MIPI-DSI driver to bridge type of driver? > >>> Seems not sensible. The reason would be just to share MIPI-DSI phy driver > >>> for Exynos with i.MX8M Mini? > >> > >> Yes, the reason is that the driver should be shared between Exynos and > >> i.MX8MM. It is the same IP and I don't see a reason why we should introduce > >> another driver for the same IP if the driver works for both SoCs. > >> > >> Michael > >> > > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 81B38C4742C for ; Wed, 11 Nov 2020 10:18:15 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DFCDF20795 for ; Wed, 11 Nov 2020 10:18:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DFCDF20795 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id EFB5189EB4; Wed, 11 Nov 2020 10:18:13 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by gabe.freedesktop.org (Postfix) with ESMTPS id 74B5689EB4 for ; Wed, 11 Nov 2020 10:18:12 +0000 (UTC) Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kcnCc-0007WQ-QQ; Wed, 11 Nov 2020 11:18:10 +0100 Received: from mtr by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1kcnCa-0004L6-H0; Wed, 11 Nov 2020 11:18:08 +0100 Date: Wed, 11 Nov 2020 11:18:08 +0100 From: Michael Tretter To: Inki Dae Subject: Re: [PATCH v2 00/16] drm/exynos: Convert driver to drm bridge Message-ID: <20201111101808.GA16630@pengutronix.de> References: <20200911135413.3654800-1-m.tretter@pengutronix.de> <20201110081336.GB13669@pengutronix.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-IRC: #ptxdist @freenode X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-Uptime: 11:17:33 up 265 days, 17:48, 92 users, load average: 0.20, 0.28, 0.27 User-Agent: Mutt/1.10.1 (2018-07-13) X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: mtr@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-samsung-soc@vger.kernel.org, jy0922.shim@samsung.com, narmstrong@baylibre.com, b.zolnierkie@samsung.com, sw0312.kim@samsung.com, krzk@kernel.org, a.hajda@samsung.com, dri-devel@lists.freedesktop.org, kernel@pengutronix.de, sylvester.nawrocki@gmail.com, Laurent.pinchart@ideasonboard.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gV2VkLCAxMSBOb3YgMjAyMCAxMjoxMToxNSArMDkwMCwgSW5raSBEYWUgd3JvdGU6Cj4gMjAu IDExLiAxMS4g7Jik7ZuEIDEyOjA07JeQIElua2kgRGFlIOydtCjqsIApIOyTtCDquIA6Cj4gPiAy MC4gMTEuIDEwLiDsmKTtm4QgNToxM+yXkCBNaWNoYWVsIFRyZXR0ZXIg7J20KOqwgCkg7JO0IOq4 gDoKPiA+PiBPbiBNb24sIDA5IE5vdiAyMDIwIDEyOjE1OjM5ICswOTAwLCBJbmtpIERhZSB3cm90 ZToKPiA+Pj4gMjAuIDkuIDExLiDsmKTtm4QgMTA6NTPsl5AgTWljaGFlbCBUcmV0dGVyIOydtCjq sIApIOyTtCDquIA6Cj4gPj4+PiBUaGlzIGlzIHYyIG9mIHRoZSBzZXJpZXMgdG8gY29udmVydCB0 aGUgRXh5bm9zIE1JUEkgRFNJIGRyaXZlciBpbnRvIGEgZHJtCj4gPj4+PiBicmlkZ2UgYW5kIG1h a2UgaXQgdXNhYmxlIHdpdGggb3RoZXIgZHJpdmVycy4gQWx0aG91Z2ggdGhlIGRyaXZlciBpcwo+ ID4+Pj4gY29udmVydGVkLCBpdCBzdGlsbCBzdXBwb3J0cyB0aGUgY29tcG9uZW50IGZyYW1ld29y ayBBUEkgdG8gc3RheSBjb21wbGlhbnQKPiA+Pj4+IHdpdGggdGhlIEV4eW5vcyBEUk0gZHJpdmVy Lgo+ID4+Pj4KPiA+Pj4+IFRoZSBFeHlub3MgTUlQSSBEU0kgUGh5IGlzIGFsc28gZm91bmQgb24g dGhlIGkuTVg4TSBNaW5pLiBIb3dldmVyLCBvbiB0aGUKPiA+Pj4+IGkuTVg4TSBNaW5pLCB0aGUg YnJpZGdlIGlzIGRyaXZlbiBieSBhbiBMQ0RJRiBkaXNwbGF5IGNvbnRyb2xsZXIgaW5zdGVhZCBv Zgo+ID4+Pj4gdGhlIEV4eW5vcyBEZWNvbi4gVGhlIGRyaXZlciBmb3IgdGhlIExDRElGIGRvZXMg bm90IHVzZSB0aGUgY29tcG9uZW50Cj4gPj4+PiBmcmFtZXdvcmssIGJ1dCB1c2VzIGRybSBicmlk Z2VzLgo+ID4+Pj4KPiA+Pj4+IEkgZG9uJ3QgaGF2ZSBhbnkgRXh5bm9zIFNvQyB0byBhY3R1YWxs eSB0ZXN0IHRoZSBzZXJpZXMuIEkgYnVpbGQgYSBkdW1teSB0bwo+ID4+Pj4gdGVzdCB0aGUgYnJp ZGdlIHdpdGggYSBjb21wb25lbnQgZHJpdmVyLCB0byBtYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCB0 aGUKPiA+Pj4+IGluaXRpYWxpemF0aW9uIGlzIHdvcmtpbmcuIEZ1cnRoZXJtb3JlLCB0ZXN0ZWQg dGhlIGRyaXZlciBhcyBhIGJyaWRnZSB3aXRoIGEKPiA+Pj4+IGZldyBhZGRpdGlvbmFsIHVuZmlu aXNoZWQgcGF0Y2hlcyBvbiB0aGUgaS5NWDhNIE1pbmkgRVZLLiBIb3dldmVyLCBzb21lYm9keQo+ ID4+Pj4gc2hvdWxkIHZlcmlmeSB0aGF0IHRoZSBkcml2ZXIgaXMgc3RpbGwgd29ya2luZyBvbiBF eHlub3MgaGFyZHdhcmUuCj4gPj4+Pgo+ID4+Pj4gSSBhbHNvIGNoYW5nZWQgdGhlIG9yZGVyIG9m IHRoZSBwYXRjaGVzIHRvIGZpcnN0IG1ha2UgdGhlIGRyaXZlciBtb3JlIHBsYXRmb3JtCj4gPj4+ PiBpbmRlcGVuZGVudCAocGF0Y2hlcyAyIHRvIDgpLCB0aGVuIGNvbnZlcnQgdG8gYSBkcm0gYnJp ZGdlIGRyaXZlciAocGF0Y2hlcyAxMAo+ID4+Pgo+ID4+PiBKdXN0IGEgZnVuZGFtZW50YWwgcXVl c3Rpb24sIEEgTUlQSS1EU0koRGlzcGxheSBTZXJpYWwgSW50ZXJmYWNlKSBidXMgZGV2aWNlCj4g Pj4+IHdvdWxkIGJlIG9uZSBvZiBhbiBlbmNvZGVyIHR5cGUgb2YgZGV2aWNlcyBub3QgYnJpZGdl IHN1Y2ggYXMgRFNJIHRvIExWRFMKPiA+Pj4gYW5kIExWRFMgdG8gRFNJIGJyaWRnZSBkZXZpY2Vz LCBhbmQgYWxzbyBpbWFnZSBlbmhhbmNlciBhbmQgaW1hZ2UgY29tcHJlc3Nvcgo+ID4+PiBpbiBj YXNlIG9mIEV4eW5vcy4KPiA+Pgo+ID4+IEkgZG9uJ3QgdW5kZXJzdGFuZCwgd2h5IHRoZSBNSVBJ LURTSSBidXMgZGV2aWNlIHdvdWxkIGJlIGFuIGVuY29kZXIgdHlwZSBhbmQKPiA+PiBEU0kgdG8g TFZEUyBvciBNSVBJLURTSSB0byBIRE1JIHdvdWxkIGJlIGJyaWRnZXMuIEZvciBleGFtcGxlLCB0 aGUgZGV2aWNlIHRyZWUKPiA+PiBkb2N1bWVudGF0aW9uIGZvciB0aGUgRFNJTSBzdGF0ZXMgdGhh dCB0aGUgRFNJTSByZWNlaXZlcyBSR0IgdmlkZW8gYXMgaW5wdXQKPiA+PiBhbmQgcHJvZHVjZXMg TUlQSS1EU0kgYXMgb3V0cHV0LiBUaHVzLCB0aGUgRFNJTSBpcyBiYXNpY2FsbHkgYSBwYXJhbGxl bCBSR0IgdG8KPiA+IAo+ID4gTUlQSS1EU0kgcmVjZWl2ZXMgUkdCIHZpZGVvIGFzIGlucHV0IGFu ZCBlbmNvZGVzIGl0IHRvIE1JUEkgcGFja2V0IGFuZCB0aGVuIHRyYW5zZmVycyB0aGUgcGFja2V0 IHRvIE1JUEkgcGFuZWwuCj4gPiBBbmQgZmluYWxseSwgTUlQSSBwYW5lbCBkZWNvZGVzIHRoZSBw YWNrZXQgYW5kIHVwZGF0ZXMgaXQgLSBSR0IgZGF0YSAtIG9uIGl0cyBTUkFNLgo+ID4gCj4gPiBN SVBJLURTSSBkcml2ZXIgcHJvZ3JhbXMgaG93IHRoZSBSR0IgdmlkZW8gc2hvdWxkIGJlIG1hZGUg YXMgTUlQSSBwYWNrZXQuIEZvciBtb3JlIGRldGFpbCwgeW91IGNvdWxkIHJlZmVyIHRvIE1JUEkt RFNJIHNwZWMuCj4gPiBUaGlzIHdvdWxkIGJlIHdoeSB3ZSBoYW5kbGUgTUlQSS1EU0kgZHJpdmVy IGFzIGFuIGVuY29kZXIgbGlrZSBvdGhlciBBUk0gU29DIERSTSBkcml2ZXJzIGRpZC4KPiA+IAo+ ID4+IE1JUEktRFNJIGJyaWRnZSBhbmQgdGhlIGVuY29kZXIgaXMgdGhlIExDRCBjb250cm9sbGVy IHRoYXQgZW5jb2RlcyB0aGUgdmlkZW8KPiA+PiBkYXRhIGFzIHBhcmFsbGVsIFJHQi4KPiA+Pgo+ ID4+IE9uIHRoZSBpLk1YOE1NLCB0aGUgTENESUYgaXMgYWxyZWFkeSB0aGUgZW5jb2Rlci4gT24g RXh5bm9zLCB0aGUgc2VyaWVzCj4gPj4gaW1wbGVtZW50cyB0aGUgZW5jb2RlciBpbiB0aGUgcGxh dGZvcm0gZ2x1ZSwgYnV0IGluIHRoZSBlbmQgdGhlIGVuY29kZXIgY2FuCj4gPj4gcHJvYmFibHkg YmUgbW92ZWQgdG8gdGhlIERFQ09OLgo+ID4gCj4gPiBBcyB5b3Uga25vdywgRGlzcGxheSBjb250 cm9sbGVyIGNhbiB0cmFuc2ZlciBSR0IgdmlkZW8gdG8gdmFyaW91cyBkZXZpY2VzIHN1Y2ggYXMg UkdCIHBhbmVsLCBDUFUgcGFuZWwsIExWRFMgcGFuZWwgdmlhIExWRFMgYnJpZGdlLCBNSVBJIHBh bmVsIHZpYSBNSVBJLURTSSBidXMgZGV2aWNlLCBhbmQgc28gb24gbGlrZSBiZWxvdywKPiA+IAo+ ID4gRGlzcGxheSBDb250cm9sbGVyIC0tPiBSR0IgcGFuZWwgb3IgQ1BVIHBhbmVsLgo+ID4gRGlz cGxheSBDb250cm9sbGVyIC0tPiBMVkRTIGJyaWRnZSAtLT4gTFZEUyBwYW5lbC4KPiA+IERpc3Bs YXkgQ29udHJvbGxlciAtLT4gTUlQSSBEU0kgYnVzIGRldmljZSAtLT4gTUlQSSBQYW5lbC4KPiA+ IC4uLgo+ID4gCj4gPiBEaXNwbGF5IGNvbnRyb2xsZXIgZHJpdmVycyBzdWNoIGFzIEZJTUQgYW5k IERFQ09OIHNlcmllcyBpbiBjYXNlIG9mIEV4eW5vcyBkb24ndCBjcmVhdGUgYW4gZW5jb2RlciBk cml2ZXItaW50ZXJuYWxseSBpbnN0ZWFkIG9mIGl0IGRlcGVuZHMgb24gRGlzcGxheSBwaXBlbGlu ZSBjb25maWd1cmF0aW9uIC0gd2hhdCBraW5kIG9mIERpc3BsYXkgcGFuZWwgaXMgdXNlZC4KPiA+ IEluIGZhY3QsIGlmIHRoZSBEaXNwbGF5IHBpcGVsaW5lIHVzZXMgUkdCIHBhbmVsIG9yIENQVSBw YW5lbCB3aXRob3V0IERpc3BsYXkgYnVzIGRldmljZSBzdWNoIGFzIE1JUEktRFNJLCB0aGVuIEZJ TUQgYW5kIERFQ09OIGRyaXZlcnMgY3JlYXRlIGFuIGVuY29kZXIgZm9yIGl0IGludGVybmFsbHkg LSBqdXN0IHdlIHNlcGFyYXRlZCB0aGUgY29kZSB0byBjb25zaWRlciBvdGhlciB0eXBlIG9mIHBh bmVscy4KCldoYXQgaGFwcGVucyBpZiBJIGFkZCBhIE1JUEktRFNJIC0tPiBIRE1JIGJyaWRnZSB0 byB0aGUgRGlzcGxheSBwaXBlbGluZT8gVGhlbgp0aGUgUGlwZWxpbmUgaXMKCkRpc3BsYXkgQ29u dHJvbGxlciAtLT4gTUlQSSBEU0kgYnVzIGRldmljZSAtLT4gSERNSSBicmlkZ2UgLS0+IEhETUkg UGFuZWwKCklmIHRoZSB0eXBlIG9mIHRoZSBEaXNwbGF5IHBhbmVsIGRlY2lkZXMgd2hpY2ggcGFy dCBvZiB0aGUgcGlwZWxpbmUgcHJvdmlkZXMKdGhlIGVuY29kZXIsIHRoZSBIRE1JIGJyaWRnZSBk cml2ZXIgd291bGQgYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZQplbmNvZGVyLCByaWdo dD8gVGh1cywgdGhlIE1JUEktRFNJIGRyaXZlciB3b3VsZCBub3QgYmUgcmVzcG9uc2libGUgZm9y CmNyZWF0aW5nIHRoZSBlbmNvZGVyIGFuZCB3b3VsZCBhbHNvIGdldCB0aGUgZW5jb2RlciBmcm9t IGFub3RoZXIgZHJpdmVyLgpUaGVyZWZvcmUsIEkgcHJlZmVyIHRvIHRoaW5rIG9mIHRoZSBEaXNw bGF5IENvbnRyb2xsZXIgYXMgdGhlIGVuY29kZXIgYW5kCm90aGVyIGJyaWRnZXMgYXJlIGp1c3Qg YnJpZGdlcy4KCkJUVywgdGhpcyBpcyBleGFjdGx5IHRoZSBEaXNwbGF5IHBpcGVsaW5lIHRoYXQg aXMgdXNlZCBvbiB0aGUgaS5NWDhNTSBFVksuCgo+ID4gCj4gPiBPbiB0aGUgSS5NWDhNTSwgY291 bGQgeW91IHNoYXJlIGhvdyB0byBoYW5kbGUgYW4gZW5jb2RlciBpZiBzb21lIGJvYXJkIGhhcyBv bmx5IE1JUEktRFNJIHBhbmVsLCBhbmQgaW4gdGhpcyBjYXNlLCB3aGVyZSBpcyBhbiBlbmNvZGVy IGZvciBpdCBjcmVhdGVkPyBJIGxvb2tlZCBpbnRvIEkuTVg4TU0gRFJNIGRyaXZlciBidXQgZGlk bid0IGZpbmQgTUlQSS1EU0kgZHJpdmVyLgo+ID4gU2VlbXMgdGhhdCB0aGV5IHN1cHBvcnQgb25s eSBwYXJhbGxlbCBkaXNwbGF5LCBIRE1JIGFuZCBMVkRTIHBhbmVsLgo+IAo+IE9uZSBtb3JlIHRo aW5nLCBJZiBJIHNhdyBjb3JyZWN0bHksIHRoZSBMVkRTIGRyaXZlciBvZiBJTVggRFJNIC0gbG14 X2xkYiAtIGNyZWF0ZXMgYW4gZW5jb2RlciBpbnRlcm5hbGx5IGxpa2UgTUlQSS1EU0kgZHJpdmVy IG9mIEV4eW5vcyBEUk0gZGlkLgoKWWVzLCBidXQgdGhlIElNWCBEUk0gZHJpdmVyIGlzIG5vdCB1 c2VkIG9uIHRoZSBpLk1YOE1NLiBUaGUgaS5NWDhNTSB1c2VzIHRoZQpMQ0RJRiBkaXNwbGF5IGNv bnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgSVBVIG9mIHRoZSBpLk1YNi4gVGhlIGRyaXZlciBmb3Ig dGhlCkxDRElGIGlzIHRoZSBteHNmYiBkcml2ZXIsIHdoaWNoIGluIHR1cm4gdXNlcyB0aGUgZHJt X3NpbXBsZV9kaXNwbGF5X3BpcGUsCndoaWNoIGFscmVhZHkgcHJvdmlkZXMgdGhlIGVuY29kZXIu IFRoZXJlZm9yZSwgdG8gdXNlIGEgYnJpZGdlIGRyaXZlciB3aXRoIGEKZHJpdmVyIGJhc2VkIG9u IGEgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUsIHRoZSBicmlkZ2UgZHJpdmVyIG11c3QgYWNjZXB0 IG90aGVyCmVuY29kZXJzLgoKTWljaGFlbAoKPiAKPiA+IAo+ID4gVGhhbmtzLAo+ID4gSW5raSBE YWUKPiA+IAo+ID4+Cj4gPj4+IFdoeSBkbyB5b3Ugd2FudCB0byBjb252ZXJ0IHN1Y2ggTUlQSS1E U0kgZHJpdmVyIHRvIGJyaWRnZSB0eXBlIG9mIGRyaXZlcj8KPiA+Pj4gU2VlbXMgbm90IHNlbnNp YmxlLiBUaGUgcmVhc29uIHdvdWxkIGJlIGp1c3QgdG8gc2hhcmUgTUlQSS1EU0kgcGh5IGRyaXZl cgo+ID4+PiBmb3IgRXh5bm9zIHdpdGggaS5NWDhNIE1pbmk/Cj4gPj4KPiA+PiBZZXMsIHRoZSBy ZWFzb24gaXMgdGhhdCB0aGUgZHJpdmVyIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBFeHlub3Mg YW5kCj4gPj4gaS5NWDhNTS4gSXQgaXMgdGhlIHNhbWUgSVAgYW5kIEkgZG9uJ3Qgc2VlIGEgcmVh c29uIHdoeSB3ZSBzaG91bGQgaW50cm9kdWNlCj4gPj4gYW5vdGhlciBkcml2ZXIgZm9yIHRoZSBz YW1lIElQIGlmIHRoZSBkcml2ZXIgd29ya3MgZm9yIGJvdGggU29Dcy4KPiA+Pgo+ID4+IE1pY2hh ZWwKPiA+Pgo+ID4gCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=