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=-19.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable 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 089B5C4320A for ; Wed, 18 Aug 2021 05:59:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DE4B861076 for ; Wed, 18 Aug 2021 05:59:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237987AbhHRF7o (ORCPT ); Wed, 18 Aug 2021 01:59:44 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:25814 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237892AbhHRF7n (ORCPT ); Wed, 18 Aug 2021 01:59:43 -0400 Received: from epcas1p1.samsung.com (unknown [182.195.41.45]) by mailout1.samsung.com (KnoxPortal) with ESMTP id 20210818055908epoutp01d956d2ef6f7a874cbc275bad07114ad7~cURx_BuAm2604726047epoutp01e for ; Wed, 18 Aug 2021 05:59:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.samsung.com 20210818055908epoutp01d956d2ef6f7a874cbc275bad07114ad7~cURx_BuAm2604726047epoutp01e DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1629266348; bh=j5yG67Q1qH/KzoH+iRAnhmptxxBdmKCQjW0XIsEf0gI=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=iAzKKB2IC/+Z2h+Zc+jMmEaiKKMTE5S9mo7fpnSqOZ/4ZIXIAtEAILDzb7fKE0tZL EvjlodI3YjTQx5RDEvwKpEaNOw/hx28lHGdcvjTDywtQUlq2fiUWAyscNUy8I5ud1x Xxy+RIIPqWeYdBadxJwLEUYH2zK0rg1yjHlpXV8E= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas1p3.samsung.com (KnoxPortal) with ESMTP id 20210818055906epcas1p3930e8b08063f705a85423d5f0ca734fc~cURwwqNm31467114671epcas1p37; Wed, 18 Aug 2021 05:59:06 +0000 (GMT) Received: from epsmges1p5.samsung.com (unknown [182.195.40.157]) by epsnrtp4.localdomain (Postfix) with ESMTP id 4GqHK305V9z4x9Pv; Wed, 18 Aug 2021 05:59:03 +0000 (GMT) Received: from epcas1p3.samsung.com ( [182.195.41.47]) by epsmges1p5.samsung.com (Symantec Messaging Gateway) with SMTP id FB.1D.13454.6A1AC116; Wed, 18 Aug 2021 14:59:02 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas1p3.samsung.com (KnoxPortal) with ESMTPA id 20210818055902epcas1p39a2034b036d42523c908f7a77b6ace26~cURsu-jap1467614676epcas1p3m; Wed, 18 Aug 2021 05:59:02 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20210818055902epsmtrp248a5a6c996e5006822f553b0b91d0948~cURstxmb23178431784epsmtrp2k; Wed, 18 Aug 2021 05:59:02 +0000 (GMT) X-AuditID: b6c32a39-16fff7000002348e-6e-611ca1a6b8e5 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id C2.17.08394.6A1AC116; Wed, 18 Aug 2021 14:59:02 +0900 (KST) Received: from [10.113.221.211] (unknown [10.113.221.211]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20210818055901epsmtip25516c96e78cb857ce22a5b7d85fed532~cURsVjYe-1153711537epsmtip2i; Wed, 18 Aug 2021 05:59:01 +0000 (GMT) Subject: Re: [RFC PATCH 06/17] drm/exynos: dsi: Handle exynos specifics via driver_data To: Laurent Pinchart Cc: Sam Ravnborg , Jagan Teki , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Andrzej Hajda , Neil Armstrong , Robert Foss , Frieder Schrempf , Daniel Vetter , Marek Vasut , Krzysztof Kozlowski , Fabio Estevam , devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org, dri-devel@lists.freedesktop.org, NXP Linux Team , linux-amarula , linux-arm-kernel@lists.infradead.org From: Inki Dae Message-ID: <9165278a-547f-cb11-9609-ecf498192db7@samsung.com> Date: Wed, 18 Aug 2021 15:09:16 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA02Tf0wTZxjH816v19IMvVXQd+gG3LIY2KCUWncwcE4N3ASEiYuKZuwCNwqU tmlBGQkZ4GD8EEJlCtYNUAooAoYfMhggsxBQx9ZhQNAMGIMswCo/KkyEZO7KYcZ/n+/zfL/3 vM97eYU8cZ7ASRirSmS0KlpJYCK0pdtN4lF1dRftVfNQTj6p/5VPVvfX88iyHpYGl+cxcmIo lMyvZNVSYyFGTo8NoGTD0xWE/CXDIiBz9EYBWV14ByMbJx/xydzVGzyyxHwHIS1Z6YA0FZwi rYYJHnn9xW1AlhTNYPsdqLrFcT41P5IpoAxp+RhVariHUm2GUQF1Jfsyn6romEGonqEKPvX7 ow6MGs/rQ6gm41dUw1wrQhkvDWFUQXMNoJ41vhW2NSLeT8HQ0YzWhVFFqaNjVTH+RFB45MFI +V4vqYfUh3yfcFHRCYw/cSg4zCMgVsmuTbicoZVJbCmM1ukIyT4/rTopkXFRqHWJ/gSjiVZq fDSeOjpBl6SK8YxSJ/hKvby85azx83jF47JOVGM6kVzUYeSngYnAXGAnhPgeePPuJTQXiIRi vBXAqt5bGCesAA6OdiGc+AfA2hUT71VkNsPI5xqdALaYszZc86y4axHYXNvwk7Bn7QViYwec hPnXioHNxMMzMbj4wIzaGhj+DtRfH8dsbI/vgzdWa9cDKFtfKr0AbOzIfsjcXo5yntfh/ctT 62yH+8LRrI51Dw/fAZ9MlSEcO8Nzt6/wbMMgXm0Hp/94vnHuQzC9+yXK8TY429cs4NgJPpvr xLjAOQD1JT8jnMgGcHRyeCMhg12VRWxDyI5wg7d+lHBlV9i29v3GKbbAueXzfJsF4vYwO0vM WQjYOzACOIbwN6Me45iCC00DaCFwNWzazbBpH8OmfQz/Dy4HaA3Yzmh0CTGMTqqRb/7hjWD9 Vbj7tILipwueJoAIgQlAIY9wsN8tdKLF9tH0lymMVh2pTVIyOhOQs7et5zk5RqnZZ6VKjJTK vWUyGblHulculRI77HUhO2kxHkMnMvEMo2G0r3KI0M4pDcke+9QtsP34fe+Is11z0+nKvy+K Q7Jcv80ISK3L6zsSZJG+Zi472h4cWR6RM4xvf9inm7CY2luNvVZrfalkOHMcnrgp37IWGn44 TuUs+yRnsuFfl5Imb02nYUli1Z+0Br5cVla/W1iTV5Uiq7j33rFj/R8rZgu+eAM7krt7KKxt kAnoK34uMvsB36nkitTCgZDVltqFo99ZP5tVp7uFvv0B841P1djps6a/UsZFi2r31MNB569e e5wQd2po59aM5tnS5P5gR8tHlaLK+hb3pm5JHO/iyP4Ldc6nP2zuPr528OuinzKmwtV1uYrM ifjiH9rCHtQnvel4gAiYObMS8WcBseuAiEB1ClrqztPq6P8AuM3ydp4EAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA02SZ0xTURhAvW/1tRZ9FghXHCQ1LiJV4rpB3KIvxgRXXCjyos+KQm1a6opR cKDUQIoowjMytAKiotSCEIsmpYobFEsQQYJgFGSIhShCjB0x4d+59zvn+/XRuOwr4U9Hq+J4 jYqLkVMSorRSHhCUlzuem3W3ZQxqKHpDovxXRTjKtjnpfX8PhVrs4Sj5hvPVZzJQ6NuntwQq 7vqNodcnO0UoKdUoQvmGRxQytdaRSP/nJo4yqh9hqDMxASBrSgT6KbTgqGCgBKCMtHZqiQ97 p7eZZHvqz4hYIT6ZYrOEZwRbLjSJ2CvnMkn2uqUdY2326yTbWGeh2ObzVRh733iCLe4uw1hj up1iU8yFgHWYJq4dvU0SupuPiT7Ia2YuipLs/ZBdQaitWw6nWYxkPGhZpQdiGjJzYMdJI6kH ElrGPASw1l5F6AHtHEBoLqE96A0rK7UepQtAc2MKcLXezFZoGxzAXOzDIJh87TJwSTiTRMHi zHbMU9RgcNBSSrgsipkMUwuaKRd7MYvgzT+33TXh/O/LuuDe6uvc6sjpID3OGPg8s83dipkQ 2JRocTs4MxUOZb3DPewHG9qyMQ8HwFMlV3ADkAnDcmFYIgxLhGFJDiAKwVherY1VxmqD1cEq /pBCy8VqdSqlYteBWBNw30Lg9DLwoPCHwgowGlgBpHG5j9dU2p+Tee3mjhzlNQd2anQxvNYK xtGE3M+rRv98p4xRcnH8fp5X85r/U4wW+8djQqTOEFXbUECziY43/TVwqV09oti8TLpr36a+ kbq4AOlTQ8aMsFH4LHliZvw7X2XjvsjcW979FYt1rb8r5oZz0uDq1UnYpPW/TofkdPwU+VTe eIhfPaSncgP3v1RJu3tE6Oy0jbaVIxzd+T8uRryvW5KuWO6bhKLEqfderJwzpdT8vaiXWTh7 e6tv7bkzbXf0XeIVgTb/z93WeRW612HTdlSp4kxkQkaIzG/dqpTzQ1in9yA6Pt+RAL5kVUOx pHcDJY2Ifpy3pr5x1Mzw7LzQsUV/04fGHddM+tj3+PRhe2vyns1PtwZFTLCcbf82oHiyZ8Gx tGfKupDymkv5keUBoWFyQruXCw7ENVruH/npcxp6AwAA X-CMS-MailID: 20210818055902epcas1p39a2034b036d42523c908f7a77b6ace26 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20210725172551epcas1p31dff839439ac37757cf061405b5ac65c References: <20210704090230.26489-1-jagan@amarulasolutions.com> <20210704090230.26489-7-jagan@amarulasolutions.com> <79ef7f71-b167-2368-e0fd-d4ccaee596c2@samsung.com> Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Hi Laurent, 21. 8. 13. 오후 9:16에 Laurent Pinchart 이(가) 쓴 글: > Hi Inki, > > On Fri, Aug 13, 2021 at 03:50:56PM +0900, Inki Dae wrote: >> 21. 7. 26. 오전 2:25에 Sam Ravnborg 이(가) 쓴 글: >>> On Sun, Jul 04, 2021 at 02:32:19PM +0530, Jagan Teki wrote: >>>> Exynos DSI driver is actually a Samsung MIPI DSIM bridge >>>> IP which is also used in i.MX8MM platforms. >>>> >>>> Right now the existing driver has some exynos drm specific >>>> code bases like te_irq, crtc and component_ops. >>>> >>>> In order to switch this driver into a common bridge driver >>>> We can see 2 options to handle the exynos specific code. >>>> >>>> A. Drop the component_ops, and rework other specifics. >>>> This may lead to more foundation work as it requires >>>> more changes in exynos drm drivers stack. >>>> >>>> B. Handle the exynos specifics via driver data, and make >>>> the common bridge work in different platforms and plan >>>> for option A in future. >>>> >>>> So, this patch is trying to add option B) changes to handle >>>> exynos specifics via driver_data. >>> >>> We really should find someone that has the time, energy, knowledge and >>> hardware that can include device_link support once anf for all for >>> bridges. >>> Then we would avoid hacks like this. >>> >>> I see no other options at the moment, but look forward for a better >>> solution. >> >> I'm not sure that it's correct to share this mipi dsi driver with >> I.MX8MM SoC even though it's a same IP because this MIPI DSI device >> isn't peripheral device but in SoC. >> >> It would mean that Exynos MIPI DSI device depends on SoC architecture, >> and Exynos and I.MX series are totally different SoC. So if we share >> the same driver for the MIPI DSI device then many things we didn't >> predict may happen in the future. > > Isn't that true for external components true thought ? Any driver shared > by multiple systems will face this issue, where it will be developed > with some use cases in mind, and regressions may happen when the driver > is then extended to support other use cases not required for the > original platform. > > In general we don't want multiple drivers for the same IP core unless > there are valid technical reasons for that. It's the whole point of the > device tree, being able to describe how IP cores are integrated, so that > code can be reused across platforms. Of course, integration differences > between SoCs can sometimes vary wildly and require some amount of glue > code. Agree with you. It would be a good chance to clarify what we need to share same device driver without any regress in this time. > >> I don't want to make Jagan's efforts >> in vain for the community but clarify whether this is correct way or >> not. If this is only the way we have to go then we could more focus on >> actual solution not such hack. Impossible work with Jagan alone I >> think. > > I do agree that we need more correct solutions and less hacks in general > :-) The issues faced on Exynos also exist on other platforms, so it > would be much better to solve them well once that duplicating > implementations with less test coverage and reviews. There have been > efforts in the past to address some of these issues, which have resulted > in solutions such as the component framework. However, I'd argued that Yeah, most of ARM systems have various separate devices but DRM subsytem wanted each ARM driver to work like one device driver for all of them. And the component framework has been adopted by several ARM DRM drivers for it including Exynos. > we've never taken it to the last step, and have always stopped with half > solutions. The component framework, for instance, is painful to use, and > the handling of .remove() in most drivers is completely broken because > of that (not just because of that though, we have issues in the DRM core > that make hot-unplug just impossible to handle safetly). This may be one of what we have to clarify. I think ARM DRM drivers need component framework or similar thing to address probing order issue. So would we need to enhance existing compoent framework to be suitable for DRM subsystem, or introducing an alternative solution? Otherwise, would there be some way to address the probing order issue without the compoment framework? > >> So let's get started with a question, >> - Is MIPI-DSI bridge device or Encoder device? I think that MIPI-DSI >> is a Encoder device managed by atomic KMS. If MIPI-DSI should be >> handled as bridge device then does now drm bridge framework provide >> everything to share one driver with one more SoC? I mean something >> that drm bridge has to consider for such driver support, which is >> shared with one more SoC. > > The DRM "encoder" concept was a bit of a historical mistake that we are > stuck with as drm_encoder is exposed to userspace. It comes from a time > where nobody was envisioning chaining multiple encoders. DRM is moving > to modelling every component after the CRTC as a bridge. This brings Thanks for explanation and seems correct direction. :) However, there would be something we have to address before changing the existing modeling because any regress shouldn't be allowed. Thanks, Inki Dae > much more flexibility, and in that model, the drm_encoder becomes more > or less a stub. > > The DRM bridge API has been extended in the past to support more > features, and if anything is still missing that makes it difficult to > move away from drm_encoder, we can of course address the issues in > drm_bridge. > >> And Display mode - VIDEO and COMMAND mode - is generic type of MIPI >> DSI, and also componentised subsystem is a generic solution to resolve >> probing order issue not Exynos specific feature. These are driver >> specific ones not Exynos SoC I think. As SoC specific things should be >> considered, I think MIPI DSI Driver - interrupt handler and probing >> order things are really specific to device driver - should be >> separated but we could share the control part of the device. >> >> I was busy with other projects so didn't care of Linux DRM world so >> there may be my missing something. >> >>>> Signed-off-by: Jagan Teki >>>> --- >>>> drivers/gpu/drm/exynos/exynos_drm_dsi.c | 37 +++++++++++++++++++------ >>>> 1 file changed, 29 insertions(+), 8 deletions(-) >>>> >>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c >>>> index 99a1b8c22313..53d878d4d2d7 100644 >>>> --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c >>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c >>>> @@ -250,6 +250,7 @@ struct exynos_dsi_driver_data { >>>> unsigned int wait_for_reset; >>>> unsigned int num_bits_resol; >>>> const unsigned int *reg_values; >>>> + bool exynos_specific; >>>> }; >>>> >>>> struct exynos_dsi { >>>> @@ -459,6 +460,7 @@ static const struct exynos_dsi_driver_data exynos3_dsi_driver_data = { >>>> .wait_for_reset = 1, >>>> .num_bits_resol = 11, >>>> .reg_values = reg_values, >>>> + .exynos_specific = true, >>>> }; >>>> >>>> static const struct exynos_dsi_driver_data exynos4_dsi_driver_data = { >>>> @@ -471,6 +473,7 @@ static const struct exynos_dsi_driver_data exynos4_dsi_driver_data = { >>>> .wait_for_reset = 1, >>>> .num_bits_resol = 11, >>>> .reg_values = reg_values, >>>> + .exynos_specific = true, >>>> }; >>>> >>>> static const struct exynos_dsi_driver_data exynos5_dsi_driver_data = { >>>> @@ -481,6 +484,7 @@ static const struct exynos_dsi_driver_data exynos5_dsi_driver_data = { >>>> .wait_for_reset = 1, >>>> .num_bits_resol = 11, >>>> .reg_values = reg_values, >>>> + .exynos_specific = true, >>>> }; >>>> >>>> static const struct exynos_dsi_driver_data exynos5433_dsi_driver_data = { >>>> @@ -492,6 +496,7 @@ static const struct exynos_dsi_driver_data exynos5433_dsi_driver_data = { >>>> .wait_for_reset = 0, >>>> .num_bits_resol = 12, >>>> .reg_values = exynos5433_reg_values, >>>> + .exynos_specific = true, >>>> }; >>>> >>>> static const struct exynos_dsi_driver_data exynos5422_dsi_driver_data = { >>>> @@ -503,6 +508,7 @@ static const struct exynos_dsi_driver_data exynos5422_dsi_driver_data = { >>>> .wait_for_reset = 1, >>>> .num_bits_resol = 12, >>>> .reg_values = exynos5422_reg_values, >>>> + .exynos_specific = true, >>>> }; >>>> >>>> static const struct of_device_id exynos_dsi_of_match[] = { >>>> @@ -1484,7 +1490,8 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host, >>>> * If attached panel device is for command mode one, dsi should register >>>> * TE interrupt handler. >>>> */ >>>> - if (!(device->mode_flags & MIPI_DSI_MODE_VIDEO)) { >>>> + if (dsi->driver_data->exynos_specific && >>>> + !(device->mode_flags & MIPI_DSI_MODE_VIDEO)) { >>>> int ret = exynos_dsi_register_te_irq(dsi, &device->dev); >>>> if (ret) >>>> return ret; >>>> @@ -1495,8 +1502,9 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host, >>>> dsi->lanes = device->lanes; >>>> dsi->format = device->format; >>>> dsi->mode_flags = device->mode_flags; >>>> - exynos_drm_crtc_get_by_type(drm, EXYNOS_DISPLAY_TYPE_LCD)->i80_mode = >>>> - !(dsi->mode_flags & MIPI_DSI_MODE_VIDEO); >>>> + if (dsi->driver_data->exynos_specific) >>>> + exynos_drm_crtc_get_by_type(drm, EXYNOS_DISPLAY_TYPE_LCD)->i80_mode = >>>> + !(dsi->mode_flags & MIPI_DSI_MODE_VIDEO); >>>> >>>> mutex_unlock(&drm->mode_config.mutex); >>>> >>>> @@ -1515,7 +1523,8 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host *host, >>>> if (drm->mode_config.poll_enabled) >>>> drm_kms_helper_hotplug_event(drm); >>>> >>>> - exynos_dsi_unregister_te_irq(dsi); >>>> + if (dsi->driver_data->exynos_specific) >>>> + exynos_dsi_unregister_te_irq(dsi); >>>> >>>> return 0; >>>> } >>>> @@ -1737,6 +1746,15 @@ static int exynos_dsi_probe(struct platform_device *pdev) >>>> if (ret) >>>> return ret; >>>> >>>> + if (!dsi->driver_data->exynos_specific) { >>>> + ret = mipi_dsi_host_register(&dsi->dsi_host); >>>> + if (ret) { >>>> + dev_err(dev, "failed to register mipi dsi host: %d\n", >>>> + ret); >>>> + return ret; >>>> + } >>>> + } >>>> + >>>> platform_set_drvdata(pdev, dsi); >>>> >>>> pm_runtime_enable(dev); >>>> @@ -1747,9 +1765,11 @@ static int exynos_dsi_probe(struct platform_device *pdev) >>>> >>>> drm_bridge_add(&dsi->bridge); >>>> >>>> - ret = component_add(dev, &exynos_dsi_component_ops); >>>> - if (ret) >>>> - goto err_disable_runtime; >>>> + if (dsi->driver_data->exynos_specific) { >>>> + ret = component_add(dev, &exynos_dsi_component_ops); >>>> + if (ret) >>>> + goto err_disable_runtime; >>>> + } >>>> >>>> return 0; >>>> >>>> @@ -1767,7 +1787,8 @@ static int exynos_dsi_remove(struct platform_device *pdev) >>>> >>>> pm_runtime_disable(&pdev->dev); >>>> >>>> - component_del(&pdev->dev, &exynos_dsi_component_ops); >>>> + if (dsi->driver_data->exynos_specific) >>>> + component_del(&pdev->dev, &exynos_dsi_component_ops); >>>> >>>> return 0; >>>> } > 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=-17.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham 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 5641EC4338F for ; Wed, 18 Aug 2021 06:03:05 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 0D3FA61058 for ; Wed, 18 Aug 2021 06:03:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 0D3FA61058 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To:MIME-Version: Date:Message-ID:From:Cc:To:Subject:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=oVP2oI6JDOvDSTd8zcTr/qx1kXRL0Dct3nV22RC2SzU=; b=Ni6lfrCTEXq1ok AEDFBkBnr2n8hLUtnAOlSTGBe/Uu9Qvu/TddMUoy49fJwv0hc7CZkrEsAB3L1JWf2sove15awiCLH wKl50ocn9hcMizxbGRtslQuNTrmNpdC1SalCETz0FehZAkr5OKulJTGKj8M1WEnCxq/GVXJbTKTuQ waqHkm4I9xgP1AMtzuCVAqDtbYJgb0snHWnTVK0bVs9lNZDWx0HqeRnC1rFJCwKBJuwDMeVplgZMV BEYc09YXy61ymvTdxR4kO7qUw3Slyn6nSnTgo0GejxqJ80WtzlD92sUkVf5miy++xr+R53vOTuK+p 1A6cyYk2x01IZl0gVujQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mGEbl-004HhA-Em; Wed, 18 Aug 2021 05:59:25 +0000 Received: from mailout3.samsung.com ([203.254.224.33]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mGEbf-004HfP-6H for linux-arm-kernel@lists.infradead.org; Wed, 18 Aug 2021 05:59:23 +0000 Received: from epcas1p1.samsung.com (unknown [182.195.41.45]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20210818055908epoutp0380b0503004edf7b92253635d12458485~cURx9xKX-1907119071epoutp03M for ; Wed, 18 Aug 2021 05:59:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20210818055908epoutp0380b0503004edf7b92253635d12458485~cURx9xKX-1907119071epoutp03M DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1629266348; bh=j5yG67Q1qH/KzoH+iRAnhmptxxBdmKCQjW0XIsEf0gI=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=iAzKKB2IC/+Z2h+Zc+jMmEaiKKMTE5S9mo7fpnSqOZ/4ZIXIAtEAILDzb7fKE0tZL EvjlodI3YjTQx5RDEvwKpEaNOw/hx28lHGdcvjTDywtQUlq2fiUWAyscNUy8I5ud1x Xxy+RIIPqWeYdBadxJwLEUYH2zK0rg1yjHlpXV8E= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas1p3.samsung.com (KnoxPortal) with ESMTP id 20210818055906epcas1p3930e8b08063f705a85423d5f0ca734fc~cURwwqNm31467114671epcas1p37; Wed, 18 Aug 2021 05:59:06 +0000 (GMT) Received: from epsmges1p5.samsung.com (unknown [182.195.40.157]) by epsnrtp4.localdomain (Postfix) with ESMTP id 4GqHK305V9z4x9Pv; Wed, 18 Aug 2021 05:59:03 +0000 (GMT) Received: from epcas1p3.samsung.com ( [182.195.41.47]) by epsmges1p5.samsung.com (Symantec Messaging Gateway) with SMTP id FB.1D.13454.6A1AC116; Wed, 18 Aug 2021 14:59:02 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas1p3.samsung.com (KnoxPortal) with ESMTPA id 20210818055902epcas1p39a2034b036d42523c908f7a77b6ace26~cURsu-jap1467614676epcas1p3m; Wed, 18 Aug 2021 05:59:02 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20210818055902epsmtrp248a5a6c996e5006822f553b0b91d0948~cURstxmb23178431784epsmtrp2k; Wed, 18 Aug 2021 05:59:02 +0000 (GMT) X-AuditID: b6c32a39-16fff7000002348e-6e-611ca1a6b8e5 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id C2.17.08394.6A1AC116; Wed, 18 Aug 2021 14:59:02 +0900 (KST) Received: from [10.113.221.211] (unknown [10.113.221.211]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20210818055901epsmtip25516c96e78cb857ce22a5b7d85fed532~cURsVjYe-1153711537epsmtip2i; Wed, 18 Aug 2021 05:59:01 +0000 (GMT) Subject: Re: [RFC PATCH 06/17] drm/exynos: dsi: Handle exynos specifics via driver_data To: Laurent Pinchart Cc: Sam Ravnborg , Jagan Teki , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Andrzej Hajda , Neil Armstrong , Robert Foss , Frieder Schrempf , Daniel Vetter , Marek Vasut , Krzysztof Kozlowski , Fabio Estevam , devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org, dri-devel@lists.freedesktop.org, NXP Linux Team , linux-amarula , linux-arm-kernel@lists.infradead.org From: Inki Dae Message-ID: <9165278a-547f-cb11-9609-ecf498192db7@samsung.com> Date: Wed, 18 Aug 2021 15:09:16 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA02Tf0wTZxjH816v19IMvVXQd+gG3LIY2KCUWncwcE4N3ASEiYuKZuwCNwqU tmlBGQkZ4GD8EEJlCtYNUAooAoYfMhggsxBQx9ZhQNAMGIMswCo/KkyEZO7KYcZ/n+/zfL/3 vM97eYU8cZ7ASRirSmS0KlpJYCK0pdtN4lF1dRftVfNQTj6p/5VPVvfX88iyHpYGl+cxcmIo lMyvZNVSYyFGTo8NoGTD0xWE/CXDIiBz9EYBWV14ByMbJx/xydzVGzyyxHwHIS1Z6YA0FZwi rYYJHnn9xW1AlhTNYPsdqLrFcT41P5IpoAxp+RhVariHUm2GUQF1Jfsyn6romEGonqEKPvX7 ow6MGs/rQ6gm41dUw1wrQhkvDWFUQXMNoJ41vhW2NSLeT8HQ0YzWhVFFqaNjVTH+RFB45MFI +V4vqYfUh3yfcFHRCYw/cSg4zCMgVsmuTbicoZVJbCmM1ukIyT4/rTopkXFRqHWJ/gSjiVZq fDSeOjpBl6SK8YxSJ/hKvby85azx83jF47JOVGM6kVzUYeSngYnAXGAnhPgeePPuJTQXiIRi vBXAqt5bGCesAA6OdiGc+AfA2hUT71VkNsPI5xqdALaYszZc86y4axHYXNvwk7Bn7QViYwec hPnXioHNxMMzMbj4wIzaGhj+DtRfH8dsbI/vgzdWa9cDKFtfKr0AbOzIfsjcXo5yntfh/ctT 62yH+8LRrI51Dw/fAZ9MlSEcO8Nzt6/wbMMgXm0Hp/94vnHuQzC9+yXK8TY429cs4NgJPpvr xLjAOQD1JT8jnMgGcHRyeCMhg12VRWxDyI5wg7d+lHBlV9i29v3GKbbAueXzfJsF4vYwO0vM WQjYOzACOIbwN6Me45iCC00DaCFwNWzazbBpH8OmfQz/Dy4HaA3Yzmh0CTGMTqqRb/7hjWD9 Vbj7tILipwueJoAIgQlAIY9wsN8tdKLF9tH0lymMVh2pTVIyOhOQs7et5zk5RqnZZ6VKjJTK vWUyGblHulculRI77HUhO2kxHkMnMvEMo2G0r3KI0M4pDcke+9QtsP34fe+Is11z0+nKvy+K Q7Jcv80ISK3L6zsSZJG+Zi472h4cWR6RM4xvf9inm7CY2luNvVZrfalkOHMcnrgp37IWGn44 TuUs+yRnsuFfl5Imb02nYUli1Z+0Br5cVla/W1iTV5Uiq7j33rFj/R8rZgu+eAM7krt7KKxt kAnoK34uMvsB36nkitTCgZDVltqFo99ZP5tVp7uFvv0B841P1djps6a/UsZFi2r31MNB569e e5wQd2po59aM5tnS5P5gR8tHlaLK+hb3pm5JHO/iyP4Ldc6nP2zuPr528OuinzKmwtV1uYrM ifjiH9rCHtQnvel4gAiYObMS8WcBseuAiEB1ClrqztPq6P8AuM3ydp4EAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA02SZ0xTURhAvW/1tRZ9FghXHCQ1LiJV4rpB3KIvxgRXXCjyos+KQm1a6opR cKDUQIoowjMytAKiotSCEIsmpYobFEsQQYJgFGSIhShCjB0x4d+59zvn+/XRuOwr4U9Hq+J4 jYqLkVMSorRSHhCUlzuem3W3ZQxqKHpDovxXRTjKtjnpfX8PhVrs4Sj5hvPVZzJQ6NuntwQq 7vqNodcnO0UoKdUoQvmGRxQytdaRSP/nJo4yqh9hqDMxASBrSgT6KbTgqGCgBKCMtHZqiQ97 p7eZZHvqz4hYIT6ZYrOEZwRbLjSJ2CvnMkn2uqUdY2326yTbWGeh2ObzVRh733iCLe4uw1hj up1iU8yFgHWYJq4dvU0SupuPiT7Ia2YuipLs/ZBdQaitWw6nWYxkPGhZpQdiGjJzYMdJI6kH ElrGPASw1l5F6AHtHEBoLqE96A0rK7UepQtAc2MKcLXezFZoGxzAXOzDIJh87TJwSTiTRMHi zHbMU9RgcNBSSrgsipkMUwuaKRd7MYvgzT+33TXh/O/LuuDe6uvc6sjpID3OGPg8s83dipkQ 2JRocTs4MxUOZb3DPewHG9qyMQ8HwFMlV3ADkAnDcmFYIgxLhGFJDiAKwVherY1VxmqD1cEq /pBCy8VqdSqlYteBWBNw30Lg9DLwoPCHwgowGlgBpHG5j9dU2p+Tee3mjhzlNQd2anQxvNYK xtGE3M+rRv98p4xRcnH8fp5X85r/U4wW+8djQqTOEFXbUECziY43/TVwqV09oti8TLpr36a+ kbq4AOlTQ8aMsFH4LHliZvw7X2XjvsjcW979FYt1rb8r5oZz0uDq1UnYpPW/TofkdPwU+VTe eIhfPaSncgP3v1RJu3tE6Oy0jbaVIxzd+T8uRryvW5KuWO6bhKLEqfderJwzpdT8vaiXWTh7 e6tv7bkzbXf0XeIVgTb/z93WeRW612HTdlSp4kxkQkaIzG/dqpTzQ1in9yA6Pt+RAL5kVUOx pHcDJY2Ifpy3pr5x1Mzw7LzQsUV/04fGHddM+tj3+PRhe2vyns1PtwZFTLCcbf82oHiyZ8Gx tGfKupDymkv5keUBoWFyQruXCw7ENVruH/npcxp6AwAA X-CMS-MailID: 20210818055902epcas1p39a2034b036d42523c908f7a77b6ace26 X-Msg-Generator: CA X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20210725172551epcas1p31dff839439ac37757cf061405b5ac65c References: <20210704090230.26489-1-jagan@amarulasolutions.com> <20210704090230.26489-7-jagan@amarulasolutions.com> <79ef7f71-b167-2368-e0fd-d4ccaee596c2@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210817_225919_607488_3C5422AD X-CRM114-Status: GOOD ( 60.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgTGF1cmVudCwKCjIxLiA4LiAxMy4g7Jik7ZuEIDk6MTbsl5AgTGF1cmVudCBQaW5jaGFydCDs nbQo6rCAKSDsk7Qg6riAOgo+IEhpIElua2ksCj4gCj4gT24gRnJpLCBBdWcgMTMsIDIwMjEgYXQg MDM6NTA6NTZQTSArMDkwMCwgSW5raSBEYWUgd3JvdGU6Cj4+IDIxLiA3LiAyNi4g7Jik7KCEIDI6 MjXsl5AgU2FtIFJhdm5ib3JnIOydtCjqsIApIOyTtCDquIA6Cj4+PiBPbiBTdW4sIEp1bCAwNCwg MjAyMSBhdCAwMjozMjoxOVBNICswNTMwLCBKYWdhbiBUZWtpIHdyb3RlOgo+Pj4+IEV4eW5vcyBE U0kgZHJpdmVyIGlzIGFjdHVhbGx5IGEgU2Ftc3VuZyBNSVBJIERTSU0gYnJpZGdlCj4+Pj4gSVAg d2hpY2ggaXMgYWxzbyB1c2VkIGluIGkuTVg4TU0gcGxhdGZvcm1zLgo+Pj4+Cj4+Pj4gUmlnaHQg bm93IHRoZSBleGlzdGluZyBkcml2ZXIgaGFzIHNvbWUgZXh5bm9zIGRybSBzcGVjaWZpYwo+Pj4+ IGNvZGUgYmFzZXMgbGlrZSB0ZV9pcnEsIGNydGMgYW5kIGNvbXBvbmVudF9vcHMuCj4+Pj4KPj4+ PiBJbiBvcmRlciB0byBzd2l0Y2ggdGhpcyBkcml2ZXIgaW50byBhIGNvbW1vbiBicmlkZ2UgZHJp dmVyCj4+Pj4gV2UgY2FuIHNlZSAyIG9wdGlvbnMgdG8gaGFuZGxlIHRoZSBleHlub3Mgc3BlY2lm aWMgY29kZS4KPj4+Pgo+Pj4+IEEuIERyb3AgdGhlIGNvbXBvbmVudF9vcHMsIGFuZCByZXdvcmsg b3RoZXIgc3BlY2lmaWNzLgo+Pj4+ICAgIFRoaXMgbWF5IGxlYWQgdG8gbW9yZSBmb3VuZGF0aW9u IHdvcmsgYXMgaXQgcmVxdWlyZXMKPj4+PiAgICBtb3JlIGNoYW5nZXMgaW4gZXh5bm9zIGRybSBk cml2ZXJzIHN0YWNrLgo+Pj4+Cj4+Pj4gQi4gSGFuZGxlIHRoZSBleHlub3Mgc3BlY2lmaWNzIHZp YSBkcml2ZXIgZGF0YSwgYW5kIG1ha2UKPj4+PiAgICB0aGUgY29tbW9uIGJyaWRnZSB3b3JrIGlu IGRpZmZlcmVudCBwbGF0Zm9ybXMgYW5kIHBsYW4KPj4+PiAgICBmb3Igb3B0aW9uIEEgaW4gZnV0 dXJlLgo+Pj4+Cj4+Pj4gU28sIHRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIGFkZCBvcHRpb24gQikg Y2hhbmdlcyB0byBoYW5kbGUKPj4+PiBleHlub3Mgc3BlY2lmaWNzIHZpYSBkcml2ZXJfZGF0YS4K Pj4+Cj4+PiBXZSByZWFsbHkgc2hvdWxkIGZpbmQgc29tZW9uZSB0aGF0IGhhcyB0aGUgdGltZSwg ZW5lcmd5LCBrbm93bGVkZ2UgYW5kCj4+PiBoYXJkd2FyZSB0aGF0IGNhbiBpbmNsdWRlIGRldmlj ZV9saW5rIHN1cHBvcnQgb25jZSBhbmYgZm9yIGFsbCBmb3IKPj4+IGJyaWRnZXMuCj4+PiBUaGVu IHdlIHdvdWxkIGF2b2lkIGhhY2tzIGxpa2UgdGhpcy4KPj4+Cj4+PiBJIHNlZSBubyBvdGhlciBv cHRpb25zIGF0IHRoZSBtb21lbnQsIGJ1dCBsb29rIGZvcndhcmQgZm9yIGEgYmV0dGVyCj4+PiBz b2x1dGlvbi4KPj4KPj4gSSdtIG5vdCBzdXJlIHRoYXQgaXQncyBjb3JyZWN0IHRvIHNoYXJlIHRo aXMgbWlwaSBkc2kgZHJpdmVyIHdpdGgKPj4gSS5NWDhNTSBTb0MgZXZlbiB0aG91Z2ggaXQncyBh IHNhbWUgSVAgYmVjYXVzZSB0aGlzIE1JUEkgRFNJIGRldmljZQo+PiBpc24ndCBwZXJpcGhlcmFs IGRldmljZSBidXQgaW4gU29DLgo+Pgo+PiBJdCB3b3VsZCBtZWFuIHRoYXQgRXh5bm9zIE1JUEkg RFNJIGRldmljZSBkZXBlbmRzIG9uIFNvQyBhcmNoaXRlY3R1cmUsCj4+IGFuZCBFeHlub3MgYW5k IEkuTVggc2VyaWVzIGFyZSB0b3RhbGx5IGRpZmZlcmVudCBTb0MuIFNvIGlmIHdlIHNoYXJlCj4+ IHRoZSBzYW1lIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGRldmljZSB0aGVuIG1hbnkgdGhpbmdz IHdlIGRpZG4ndAo+PiBwcmVkaWN0IG1heSBoYXBwZW4gaW4gdGhlIGZ1dHVyZS4KPiAKPiBJc24n dCB0aGF0IHRydWUgZm9yIGV4dGVybmFsIGNvbXBvbmVudHMgdHJ1ZSB0aG91Z2h0ID8gQW55IGRy aXZlciBzaGFyZWQKPiBieSBtdWx0aXBsZSBzeXN0ZW1zIHdpbGwgZmFjZSB0aGlzIGlzc3VlLCB3 aGVyZSBpdCB3aWxsIGJlIGRldmVsb3BlZAo+IHdpdGggc29tZSB1c2UgY2FzZXMgaW4gbWluZCwg YW5kIHJlZ3Jlc3Npb25zIG1heSBoYXBwZW4gd2hlbiB0aGUgZHJpdmVyCj4gaXMgdGhlbiBleHRl bmRlZCB0byBzdXBwb3J0IG90aGVyIHVzZSBjYXNlcyBub3QgcmVxdWlyZWQgZm9yIHRoZQo+IG9y aWdpbmFsIHBsYXRmb3JtLgo+IAo+IEluIGdlbmVyYWwgd2UgZG9uJ3Qgd2FudCBtdWx0aXBsZSBk cml2ZXJzIGZvciB0aGUgc2FtZSBJUCBjb3JlIHVubGVzcwo+IHRoZXJlIGFyZSB2YWxpZCB0ZWNo bmljYWwgcmVhc29ucyBmb3IgdGhhdC4gSXQncyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlCj4gZGV2 aWNlIHRyZWUsIGJlaW5nIGFibGUgdG8gZGVzY3JpYmUgaG93IElQIGNvcmVzIGFyZSBpbnRlZ3Jh dGVkLCBzbyB0aGF0Cj4gY29kZSBjYW4gYmUgcmV1c2VkIGFjcm9zcyBwbGF0Zm9ybXMuIE9mIGNv dXJzZSwgaW50ZWdyYXRpb24gZGlmZmVyZW5jZXMKPiBiZXR3ZWVuIFNvQ3MgY2FuIHNvbWV0aW1l cyB2YXJ5IHdpbGRseSBhbmQgcmVxdWlyZSBzb21lIGFtb3VudCBvZiBnbHVlCj4gY29kZS4KCkFn cmVlIHdpdGggeW91LiBJdCB3b3VsZCBiZSBhIGdvb2QgY2hhbmNlIHRvIGNsYXJpZnkgd2hhdCB3 ZSBuZWVkIHRvIHNoYXJlIHNhbWUgZGV2aWNlIGRyaXZlciB3aXRob3V0IGFueSByZWdyZXNzIGlu IHRoaXMgdGltZS4KCj4gCj4+IEkgZG9uJ3Qgd2FudCB0byBtYWtlIEphZ2FuJ3MgZWZmb3J0cwo+ PiBpbiB2YWluIGZvciB0aGUgY29tbXVuaXR5IGJ1dCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyBj b3JyZWN0IHdheSBvcgo+PiBub3QuIElmIHRoaXMgaXMgb25seSB0aGUgd2F5IHdlIGhhdmUgdG8g Z28gdGhlbiB3ZSBjb3VsZCBtb3JlIGZvY3VzIG9uCj4+IGFjdHVhbCBzb2x1dGlvbiBub3Qgc3Vj aCBoYWNrLiBJbXBvc3NpYmxlIHdvcmsgd2l0aCBKYWdhbiBhbG9uZSBJCj4+IHRoaW5rLgo+IAo+ IEkgZG8gYWdyZWUgdGhhdCB3ZSBuZWVkIG1vcmUgY29ycmVjdCBzb2x1dGlvbnMgYW5kIGxlc3Mg aGFja3MgaW4gZ2VuZXJhbAo+IDotKSBUaGUgaXNzdWVzIGZhY2VkIG9uIEV4eW5vcyBhbHNvIGV4 aXN0IG9uIG90aGVyIHBsYXRmb3Jtcywgc28gaXQKPiB3b3VsZCBiZSBtdWNoIGJldHRlciB0byBz b2x2ZSB0aGVtIHdlbGwgb25jZSB0aGF0IGR1cGxpY2F0aW5nCj4gaW1wbGVtZW50YXRpb25zIHdp dGggbGVzcyB0ZXN0IGNvdmVyYWdlIGFuZCByZXZpZXdzLiBUaGVyZSBoYXZlIGJlZW4KPiBlZmZv cnRzIGluIHRoZSBwYXN0IHRvIGFkZHJlc3Mgc29tZSBvZiB0aGVzZSBpc3N1ZXMsIHdoaWNoIGhh dmUgcmVzdWx0ZWQKPiBpbiBzb2x1dGlvbnMgc3VjaCBhcyB0aGUgY29tcG9uZW50IGZyYW1ld29y ay4gSG93ZXZlciwgSSdkIGFyZ3VlZCB0aGF0CgpZZWFoLCBtb3N0IG9mIEFSTSBzeXN0ZW1zIGhh dmUgdmFyaW91cyBzZXBhcmF0ZSBkZXZpY2VzIGJ1dCBEUk0gc3Vic3l0ZW0gd2FudGVkIGVhY2gg QVJNIGRyaXZlciB0byB3b3JrIGxpa2Ugb25lIGRldmljZSBkcml2ZXIgZm9yIGFsbCBvZiB0aGVt LiBBbmQgdGhlIGNvbXBvbmVudCBmcmFtZXdvcmsgaGFzIGJlZW4gYWRvcHRlZCBieSBzZXZlcmFs IEFSTSBEUk0gZHJpdmVycyBmb3IgaXQgaW5jbHVkaW5nIEV4eW5vcy4KCj4gd2UndmUgbmV2ZXIg dGFrZW4gaXQgdG8gdGhlIGxhc3Qgc3RlcCwgYW5kIGhhdmUgYWx3YXlzIHN0b3BwZWQgd2l0aCBo YWxmCj4gc29sdXRpb25zLiBUaGUgY29tcG9uZW50IGZyYW1ld29yaywgZm9yIGluc3RhbmNlLCBp cyBwYWluZnVsIHRvIHVzZSwgYW5kCj4gdGhlIGhhbmRsaW5nIG9mIC5yZW1vdmUoKSBpbiBtb3N0 IGRyaXZlcnMgaXMgY29tcGxldGVseSBicm9rZW4gYmVjYXVzZQo+IG9mIHRoYXQgKG5vdCBqdXN0 IGJlY2F1c2Ugb2YgdGhhdCB0aG91Z2gsIHdlIGhhdmUgaXNzdWVzIGluIHRoZSBEUk0gY29yZQo+ IHRoYXQgbWFrZSBob3QtdW5wbHVnIGp1c3QgaW1wb3NzaWJsZSB0byBoYW5kbGUgc2FmZXRseSku CgpUaGlzIG1heSBiZSBvbmUgb2Ygd2hhdCB3ZSBoYXZlIHRvIGNsYXJpZnkuIEkgdGhpbmsgQVJN IERSTSBkcml2ZXJzIG5lZWQgY29tcG9uZW50IGZyYW1ld29yayBvciBzaW1pbGFyIHRoaW5nIHRv IGFkZHJlc3MgcHJvYmluZyBvcmRlciBpc3N1ZS4KU28gd291bGQgd2UgbmVlZCB0byBlbmhhbmNl IGV4aXN0aW5nIGNvbXBvZW50IGZyYW1ld29yayB0byBiZSBzdWl0YWJsZSBmb3IgRFJNIHN1YnN5 c3RlbSwgb3IgaW50cm9kdWNpbmcgYW4gYWx0ZXJuYXRpdmUgc29sdXRpb24/CgpPdGhlcndpc2Us IHdvdWxkIHRoZXJlIGJlIHNvbWUgd2F5IHRvIGFkZHJlc3MgdGhlIHByb2Jpbmcgb3JkZXIgaXNz dWUgd2l0aG91dCB0aGUgY29tcG9tZW50IGZyYW1ld29yaz8KCj4gCj4+IFNvIGxldCdzIGdldCBz dGFydGVkIHdpdGggYSBxdWVzdGlvbiwKPj4gLSBJcyBNSVBJLURTSSBicmlkZ2UgZGV2aWNlIG9y IEVuY29kZXIgZGV2aWNlPyBJIHRoaW5rIHRoYXQgTUlQSS1EU0kKPj4gaXMgYSBFbmNvZGVyIGRl dmljZSBtYW5hZ2VkIGJ5IGF0b21pYyBLTVMuIElmIE1JUEktRFNJIHNob3VsZCBiZQo+PiBoYW5k bGVkIGFzIGJyaWRnZSBkZXZpY2UgdGhlbiBkb2VzIG5vdyBkcm0gYnJpZGdlIGZyYW1ld29yayBw cm92aWRlCj4+IGV2ZXJ5dGhpbmcgdG8gc2hhcmUgb25lIGRyaXZlciB3aXRoIG9uZSBtb3JlIFNv Qz8gSSBtZWFuIHNvbWV0aGluZwo+PiB0aGF0IGRybSBicmlkZ2UgaGFzIHRvIGNvbnNpZGVyIGZv ciBzdWNoIGRyaXZlciBzdXBwb3J0LCB3aGljaCBpcwo+PiBzaGFyZWQgd2l0aCBvbmUgbW9yZSBT b0MuCj4gCj4gVGhlIERSTSAiZW5jb2RlciIgY29uY2VwdCB3YXMgYSBiaXQgb2YgYSBoaXN0b3Jp Y2FsIG1pc3Rha2UgdGhhdCB3ZSBhcmUKPiBzdHVjayB3aXRoIGFzIGRybV9lbmNvZGVyIGlzIGV4 cG9zZWQgdG8gdXNlcnNwYWNlLiBJdCBjb21lcyBmcm9tIGEgdGltZQo+IHdoZXJlIG5vYm9keSB3 YXMgZW52aXNpb25pbmcgY2hhaW5pbmcgbXVsdGlwbGUgZW5jb2RlcnMuIERSTSBpcyBtb3ZpbmcK PiB0byBtb2RlbGxpbmcgZXZlcnkgY29tcG9uZW50IGFmdGVyIHRoZSBDUlRDIGFzIGEgYnJpZGdl LiBUaGlzIGJyaW5ncwoKVGhhbmtzIGZvciBleHBsYW5hdGlvbiBhbmQgc2VlbXMgY29ycmVjdCBk aXJlY3Rpb24uIDopIEhvd2V2ZXIsIHRoZXJlIHdvdWxkIGJlIHNvbWV0aGluZyB3ZSBoYXZlIHRv IGFkZHJlc3MgYmVmb3JlIGNoYW5naW5nIHRoZSBleGlzdGluZyBtb2RlbGluZyBiZWNhdXNlIGFu eSByZWdyZXNzIHNob3VsZG4ndCBiZSBhbGxvd2VkLgoKVGhhbmtzLApJbmtpIERhZQoKPiBtdWNo IG1vcmUgZmxleGliaWxpdHksIGFuZCBpbiB0aGF0IG1vZGVsLCB0aGUgZHJtX2VuY29kZXIgYmVj b21lcyBtb3JlCj4gb3IgbGVzcyBhIHN0dWIuCj4gCj4gVGhlIERSTSBicmlkZ2UgQVBJIGhhcyBi ZWVuIGV4dGVuZGVkIGluIHRoZSBwYXN0IHRvIHN1cHBvcnQgbW9yZQo+IGZlYXR1cmVzLCBhbmQg aWYgYW55dGhpbmcgaXMgc3RpbGwgbWlzc2luZyB0aGF0IG1ha2VzIGl0IGRpZmZpY3VsdCB0bwo+ IG1vdmUgYXdheSBmcm9tIGRybV9lbmNvZGVyLCB3ZSBjYW4gb2YgY291cnNlIGFkZHJlc3MgdGhl IGlzc3VlcyBpbgo+IGRybV9icmlkZ2UuCj4gCj4+IEFuZCBEaXNwbGF5IG1vZGUgLSBWSURFTyBh bmQgQ09NTUFORCBtb2RlIC0gaXMgZ2VuZXJpYyB0eXBlIG9mIE1JUEkKPj4gRFNJLCBhbmQgYWxz byBjb21wb25lbnRpc2VkIHN1YnN5c3RlbSBpcyBhIGdlbmVyaWMgc29sdXRpb24gdG8gcmVzb2x2 ZQo+PiBwcm9iaW5nIG9yZGVyIGlzc3VlIG5vdCBFeHlub3Mgc3BlY2lmaWMgZmVhdHVyZS4gVGhl c2UgYXJlIGRyaXZlcgo+PiBzcGVjaWZpYyBvbmVzIG5vdCBFeHlub3MgU29DIEkgdGhpbmsuIEFz IFNvQyBzcGVjaWZpYyB0aGluZ3Mgc2hvdWxkIGJlCj4+IGNvbnNpZGVyZWQsIEkgdGhpbmsgTUlQ SSBEU0kgRHJpdmVyIC0gaW50ZXJydXB0IGhhbmRsZXIgYW5kIHByb2JpbmcKPj4gb3JkZXIgdGhp bmdzIGFyZSByZWFsbHkgc3BlY2lmaWMgdG8gZGV2aWNlIGRyaXZlciAtIHNob3VsZCBiZQo+PiBz ZXBhcmF0ZWQgYnV0IHdlIGNvdWxkIHNoYXJlIHRoZSBjb250cm9sIHBhcnQgb2YgdGhlIGRldmlj ZS4KPj4KPj4gSSB3YXMgYnVzeSB3aXRoIG90aGVyIHByb2plY3RzIHNvIGRpZG4ndCBjYXJlIG9m IExpbnV4IERSTSB3b3JsZCBzbwo+PiB0aGVyZSBtYXkgYmUgbXkgbWlzc2luZyBzb21ldGhpbmcu Cj4+Cj4+Pj4gU2lnbmVkLW9mZi1ieTogSmFnYW4gVGVraSA8amFnYW5AYW1hcnVsYXNvbHV0aW9u cy5jb20+Cj4+Pj4gLS0tCj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9k c2kuYyB8IDM3ICsrKysrKysrKysrKysrKysrKystLS0tLS0KPj4+PiAgMSBmaWxlIGNoYW5nZWQs IDI5IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4+Pj4KPj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJt L2V4eW5vcy9leHlub3NfZHJtX2RzaS5jCj4+Pj4gaW5kZXggOTlhMWI4YzIyMzEzLi41M2Q4Nzhk NGQyZDcgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJt X2RzaS5jCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RzaS5j Cj4+Pj4gQEAgLTI1MCw2ICsyNTAsNyBAQCBzdHJ1Y3QgZXh5bm9zX2RzaV9kcml2ZXJfZGF0YSB7 Cj4+Pj4gIAl1bnNpZ25lZCBpbnQgd2FpdF9mb3JfcmVzZXQ7Cj4+Pj4gIAl1bnNpZ25lZCBpbnQg bnVtX2JpdHNfcmVzb2w7Cj4+Pj4gIAljb25zdCB1bnNpZ25lZCBpbnQgKnJlZ192YWx1ZXM7Cj4+ Pj4gKwlib29sIGV4eW5vc19zcGVjaWZpYzsKPj4+PiAgfTsKPj4+PiAgCj4+Pj4gIHN0cnVjdCBl eHlub3NfZHNpIHsKPj4+PiBAQCAtNDU5LDYgKzQ2MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZXh5bm9zX2RzaV9kcml2ZXJfZGF0YSBleHlub3MzX2RzaV9kcml2ZXJfZGF0YSA9IHsKPj4+PiAg CS53YWl0X2Zvcl9yZXNldCA9IDEsCj4+Pj4gIAkubnVtX2JpdHNfcmVzb2wgPSAxMSwKPj4+PiAg CS5yZWdfdmFsdWVzID0gcmVnX3ZhbHVlcywKPj4+PiArCS5leHlub3Nfc3BlY2lmaWMgPSB0cnVl LAo+Pj4+ICB9Owo+Pj4+ICAKPj4+PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfZHNpX2Ry aXZlcl9kYXRhIGV4eW5vczRfZHNpX2RyaXZlcl9kYXRhID0gewo+Pj4+IEBAIC00NzEsNiArNDcz LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfZHNpX2RyaXZlcl9kYXRhIGV4eW5vczRf ZHNpX2RyaXZlcl9kYXRhID0gewo+Pj4+ICAJLndhaXRfZm9yX3Jlc2V0ID0gMSwKPj4+PiAgCS5u dW1fYml0c19yZXNvbCA9IDExLAo+Pj4+ICAJLnJlZ192YWx1ZXMgPSByZWdfdmFsdWVzLAo+Pj4+ ICsJLmV4eW5vc19zcGVjaWZpYyA9IHRydWUsCj4+Pj4gIH07Cj4+Pj4gIAo+Pj4+ICBzdGF0aWMg Y29uc3Qgc3RydWN0IGV4eW5vc19kc2lfZHJpdmVyX2RhdGEgZXh5bm9zNV9kc2lfZHJpdmVyX2Rh dGEgPSB7Cj4+Pj4gQEAgLTQ4MSw2ICs0ODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5v c19kc2lfZHJpdmVyX2RhdGEgZXh5bm9zNV9kc2lfZHJpdmVyX2RhdGEgPSB7Cj4+Pj4gIAkud2Fp dF9mb3JfcmVzZXQgPSAxLAo+Pj4+ICAJLm51bV9iaXRzX3Jlc29sID0gMTEsCj4+Pj4gIAkucmVn X3ZhbHVlcyA9IHJlZ192YWx1ZXMsCj4+Pj4gKwkuZXh5bm9zX3NwZWNpZmljID0gdHJ1ZSwKPj4+ PiAgfTsKPj4+PiAgCj4+Pj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX2RzaV9kcml2ZXJf ZGF0YSBleHlub3M1NDMzX2RzaV9kcml2ZXJfZGF0YSA9IHsKPj4+PiBAQCAtNDkyLDYgKzQ5Niw3 IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX2RzaV9kcml2ZXJfZGF0YSBleHlub3M1NDMz X2RzaV9kcml2ZXJfZGF0YSA9IHsKPj4+PiAgCS53YWl0X2Zvcl9yZXNldCA9IDAsCj4+Pj4gIAku bnVtX2JpdHNfcmVzb2wgPSAxMiwKPj4+PiAgCS5yZWdfdmFsdWVzID0gZXh5bm9zNTQzM19yZWdf dmFsdWVzLAo+Pj4+ICsJLmV4eW5vc19zcGVjaWZpYyA9IHRydWUsCj4+Pj4gIH07Cj4+Pj4gIAo+ Pj4+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19kc2lfZHJpdmVyX2RhdGEgZXh5bm9zNTQy Ml9kc2lfZHJpdmVyX2RhdGEgPSB7Cj4+Pj4gQEAgLTUwMyw2ICs1MDgsNyBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGV4eW5vc19kc2lfZHJpdmVyX2RhdGEgZXh5bm9zNTQyMl9kc2lfZHJpdmVyX2Rh dGEgPSB7Cj4+Pj4gIAkud2FpdF9mb3JfcmVzZXQgPSAxLAo+Pj4+ICAJLm51bV9iaXRzX3Jlc29s ID0gMTIsCj4+Pj4gIAkucmVnX3ZhbHVlcyA9IGV4eW5vczU0MjJfcmVnX3ZhbHVlcywKPj4+PiAr CS5leHlub3Nfc3BlY2lmaWMgPSB0cnVlLAo+Pj4+ICB9Owo+Pj4+ICAKPj4+PiAgc3RhdGljIGNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZXh5bm9zX2RzaV9vZl9tYXRjaFtdID0gewo+Pj4+IEBA IC0xNDg0LDcgKzE0OTAsOCBAQCBzdGF0aWMgaW50IGV4eW5vc19kc2lfaG9zdF9hdHRhY2goc3Ry dWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4+Pj4gIAkgKiBJZiBhdHRhY2hlZCBwYW5lbCBkZXZp Y2UgaXMgZm9yIGNvbW1hbmQgbW9kZSBvbmUsIGRzaSBzaG91bGQgcmVnaXN0ZXIKPj4+PiAgCSAq IFRFIGludGVycnVwdCBoYW5kbGVyLgo+Pj4+ICAJICovCj4+Pj4gLQlpZiAoIShkZXZpY2UtPm1v ZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKSkgewo+Pj4+ICsJaWYgKGRzaS0+ZHJpdmVy X2RhdGEtPmV4eW5vc19zcGVjaWZpYyAmJgo+Pj4+ICsJICAgICEoZGV2aWNlLT5tb2RlX2ZsYWdz ICYgTUlQSV9EU0lfTU9ERV9WSURFTykpIHsKPj4+PiAgCQlpbnQgcmV0ID0gZXh5bm9zX2RzaV9y ZWdpc3Rlcl90ZV9pcnEoZHNpLCAmZGV2aWNlLT5kZXYpOwo+Pj4+ICAJCWlmIChyZXQpCj4+Pj4g IAkJCXJldHVybiByZXQ7Cj4+Pj4gQEAgLTE0OTUsOCArMTUwMiw5IEBAIHN0YXRpYyBpbnQgZXh5 bm9zX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKPj4+PiAgCWRz aS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOwo+Pj4+ICAJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZv cm1hdDsKPj4+PiAgCWRzaS0+bW9kZV9mbGFncyA9IGRldmljZS0+bW9kZV9mbGFnczsKPj4+PiAt CWV4eW5vc19kcm1fY3J0Y19nZXRfYnlfdHlwZShkcm0sIEVYWU5PU19ESVNQTEFZX1RZUEVfTENE KS0+aTgwX21vZGUgPQo+Pj4+IC0JCQkhKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVf VklERU8pOwo+Pj4+ICsJaWYgKGRzaS0+ZHJpdmVyX2RhdGEtPmV4eW5vc19zcGVjaWZpYykKPj4+ PiArCQlleHlub3NfZHJtX2NydGNfZ2V0X2J5X3R5cGUoZHJtLCBFWFlOT1NfRElTUExBWV9UWVBF X0xDRCktPmk4MF9tb2RlID0KPj4+PiArCQkJCQkgICAgIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJ X0RTSV9NT0RFX1ZJREVPKTsKPj4+PiAgCj4+Pj4gIAltdXRleF91bmxvY2soJmRybS0+bW9kZV9j b25maWcubXV0ZXgpOwo+Pj4+ICAKPj4+PiBAQCAtMTUxNSw3ICsxNTIzLDggQEAgc3RhdGljIGlu dCBleHlub3NfZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAo+Pj4+ ICAJaWYgKGRybS0+bW9kZV9jb25maWcucG9sbF9lbmFibGVkKQo+Pj4+ICAJCWRybV9rbXNfaGVs cGVyX2hvdHBsdWdfZXZlbnQoZHJtKTsKPj4+PiAgCj4+Pj4gLQlleHlub3NfZHNpX3VucmVnaXN0 ZXJfdGVfaXJxKGRzaSk7Cj4+Pj4gKwlpZiAoZHNpLT5kcml2ZXJfZGF0YS0+ZXh5bm9zX3NwZWNp ZmljKQo+Pj4+ICsJCWV4eW5vc19kc2lfdW5yZWdpc3Rlcl90ZV9pcnEoZHNpKTsKPj4+PiAgCj4+ Pj4gIAlyZXR1cm4gMDsKPj4+PiAgfQo+Pj4+IEBAIC0xNzM3LDYgKzE3NDYsMTUgQEAgc3RhdGlj IGludCBleHlub3NfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+Pj4g IAlpZiAocmV0KQo+Pj4+ICAJCXJldHVybiByZXQ7Cj4+Pj4gIAo+Pj4+ICsJaWYgKCFkc2ktPmRy aXZlcl9kYXRhLT5leHlub3Nfc3BlY2lmaWMpIHsKPj4+PiArCQlyZXQgPSBtaXBpX2RzaV9ob3N0 X3JlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKPj4+PiArCQlpZiAocmV0KSB7Cj4+Pj4gKwkJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG1pcGkgZHNpIGhvc3Q6ICVkXG4iLAo+Pj4+ ICsJCQkJcmV0KTsKPj4+PiArCQkJcmV0dXJuIHJldDsKPj4+PiArCQl9Cj4+Pj4gKwl9Cj4+Pj4g Kwo+Pj4+ICAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpKTsKPj4+PiAgCj4+Pj4gIAlw bV9ydW50aW1lX2VuYWJsZShkZXYpOwo+Pj4+IEBAIC0xNzQ3LDkgKzE3NjUsMTEgQEAgc3RhdGlj IGludCBleHlub3NfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+Pj4g IAo+Pj4+ICAJZHJtX2JyaWRnZV9hZGQoJmRzaS0+YnJpZGdlKTsKPj4+PiAgCj4+Pj4gLQlyZXQg PSBjb21wb25lbnRfYWRkKGRldiwgJmV4eW5vc19kc2lfY29tcG9uZW50X29wcyk7Cj4+Pj4gLQlp ZiAocmV0KQo+Pj4+IC0JCWdvdG8gZXJyX2Rpc2FibGVfcnVudGltZTsKPj4+PiArCWlmIChkc2kt PmRyaXZlcl9kYXRhLT5leHlub3Nfc3BlY2lmaWMpIHsKPj4+PiArCQlyZXQgPSBjb21wb25lbnRf YWRkKGRldiwgJmV4eW5vc19kc2lfY29tcG9uZW50X29wcyk7Cj4+Pj4gKwkJaWYgKHJldCkKPj4+ PiArCQkJZ290byBlcnJfZGlzYWJsZV9ydW50aW1lOwo+Pj4+ICsJfQo+Pj4+ICAKPj4+PiAgCXJl dHVybiAwOwo+Pj4+ICAKPj4+PiBAQCAtMTc2Nyw3ICsxNzg3LDggQEAgc3RhdGljIGludCBleHlu b3NfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+ICAKPj4+PiAg CXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKPj4+PiAgCj4+Pj4gLQljb21wb25lbnRf ZGVsKCZwZGV2LT5kZXYsICZleHlub3NfZHNpX2NvbXBvbmVudF9vcHMpOwo+Pj4+ICsJaWYgKGRz aS0+ZHJpdmVyX2RhdGEtPmV4eW5vc19zcGVjaWZpYykKPj4+PiArCQljb21wb25lbnRfZGVsKCZw ZGV2LT5kZXYsICZleHlub3NfZHNpX2NvbXBvbmVudF9vcHMpOwo+Pj4+ICAKPj4+PiAgCXJldHVy biAwOwo+Pj4+ICB9Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==