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=-9.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,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 CDF71C18E57 for ; Sat, 5 Dec 2020 19:53:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A8A9523110 for ; Sat, 5 Dec 2020 19:53:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726250AbgLETxa (ORCPT ); Sat, 5 Dec 2020 14:53:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726173AbgLETx2 (ORCPT ); Sat, 5 Dec 2020 14:53:28 -0500 Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1693C0613D1; Sat, 5 Dec 2020 11:52:41 -0800 (PST) Received: by mail-lj1-x242.google.com with SMTP id s11so1863826ljp.4; Sat, 05 Dec 2020 11:52:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=bBF57HirJUWNF1QYKQCv5cFAIUWWtnZdZjsBsF1FLJE=; b=IdysiPjmnPVweioFPBqM2j0kXFOrazfcFWyxe+MuLYeOEAC2vr1O37U8hUDQcLe8C5 xxd+KyrAq4eW4uYdJ69QH+WpDKc1Dhg1DCO0Iey/XGIdIydoRgvfFbdoalfIsJWZq2Z3 iMIgHy8nTthhfK6rf+aL8juA5ZMNuw7tVT+DeZbOcQcb+dyKG69/HmAjUD4ynpgbAqX/ uR3sJlzTwaCm9CDD7IP5d1l5VJZ3pMesUY3XUJj+wr2zZa1kQwiYbkkFR9JrMiADJFqy j3koh2M3FZ5JzRfwgDddQORHcQCV+tUDVOUggU4P0PK6r4Tug67HItzMaZr5sx1jLQ82 GBkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=bBF57HirJUWNF1QYKQCv5cFAIUWWtnZdZjsBsF1FLJE=; b=uYoYtlo/QRee2K8HOzaRcHCDc4/UxYIOJpbQcxgQrI3ku73g68Wm/lS69gO4XWChF/ wIa0u5gmCd0cLXsimBV+g4HLh+Hs7gc8XucDJGgdyVW7bTwdn1RJIIqUGj4j/x+M441j SweuuM+/qnRFNtSk0TlMQb3rJyxo+edzRA47wcVLKnYimNaA0G2g1IxUbljDuoD7b9NI MzkxDQ+kudRGaRhkf59+cmu4NPpdr7bC49MvBRBpEZv1ryQUvs/nNNYmPLIuvmJeefGh a07DwGCj+aeDaLIyPaF0YH86W7d/yaSo0PpYErbfyEGDx2pXp5qXQpSLjIqLFyQsjlvI fK4w== X-Gm-Message-State: AOAM530zKQx+6BcH+266KG8FD+lyhp9Bhxr3cII64zQYqGGwuFobnDGa 8tDDlkZQHUTHe6EhHq3dNCoS1TPYPSY= X-Google-Smtp-Source: ABdhPJzGAM8dSVUfPrR/U+Sun2Ezu5zVBu5XVo94j8F7KWeaq9PoGepIjjXZVKrnnHP9DQTWYaRB2Q== X-Received: by 2002:a2e:8053:: with SMTP id p19mr5590859ljg.321.1607197960096; Sat, 05 Dec 2020 11:52:40 -0800 (PST) Received: from [192.168.2.145] (109-252-192-53.dynamic.spd-mgts.ru. [109.252.192.53]) by smtp.googlemail.com with ESMTPSA id p28sm2465992ljn.22.2020.12.05.11.52.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 05 Dec 2020 11:52:39 -0800 (PST) Subject: Re: [PATCH v11 04/10] memory: tegra124-emc: Make driver modular To: Thierry Reding Cc: Jonathan Hunter , Georgi Djakov , Rob Herring , Michael Turquette , Stephen Boyd , Peter De Schrijver , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Mikko Perttunen , Viresh Kumar , Peter Geis , Nicolas Chauvet , Krzysztof Kozlowski , linux-tegra@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org References: <20201203192439.16177-1-digetx@gmail.com> <20201203192439.16177-5-digetx@gmail.com> From: Dmitry Osipenko Message-ID: <76eb57bf-feaf-ad86-a2d6-152897af7f2f@gmail.com> Date: Sat, 5 Dec 2020 22:52:38 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.2 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org 04.12.2020 19:41, Thierry Reding пишет: ... >> +bool tegra124_clk_emc_driver_available(struct clk_hw *hw) >> +{ >> + struct tegra_clk_emc *tegra = container_of(hw, struct tegra_clk_emc, hw); >> + >> + return tegra->prepare_timing_change && tegra->complete_timing_change; >> +} > > This looks a bit hackish and I prefer the way this was done for > Tegra210. I may have an opposite opinion :) > But that's mostly an implementation detail and we can always > restructure this if we want to. This is true. I'm not saying that the current v11 variant is absolutely ideal, but it should be good enough for the starter (IMO) and actually I don't have any ideas right about what could be done better. >> diff --git a/drivers/clk/tegra/clk-tegra124.c b/drivers/clk/tegra/clk-tegra124.c >> index e931319dcc9d..934520aab6e3 100644 >> --- a/drivers/clk/tegra/clk-tegra124.c >> +++ b/drivers/clk/tegra/clk-tegra124.c >> @@ -1500,6 +1500,26 @@ static void __init tegra124_132_clock_init_pre(struct device_node *np) >> writel(plld_base, clk_base + PLLD_BASE); >> } >> >> +static struct clk *tegra124_clk_src_onecell_get(struct of_phandle_args *clkspec, >> + void *data) >> +{ >> + struct clk_hw *hw; >> + struct clk *clk; >> + >> + clk = of_clk_src_onecell_get(clkspec, data); >> + if (IS_ERR(clk)) >> + return clk; >> + >> + hw = __clk_get_hw(clk); >> + >> + if (clkspec->args[0] == TEGRA124_CLK_EMC) { >> + if (!tegra124_clk_emc_driver_available(hw)) >> + return ERR_PTR(-EPROBE_DEFER); >> + } >> + >> + return clk; >> +} > > Hm... why exactly do we need this? On Tegra210 and later, the EMC driver > is the only consumer of the EMC clock and since it also provides some of > the necessary parts to scale the EMC clock, that's a chicken and egg > problem. The T124 EMC driver has an existing active user for the EMC clock, the devfreq/actmon driver which watches and drives the EMC clock rate. The EMC clock shan't be requested by the devfreq driver until EMC driver is ready, the only sensible way to achieve this is implemented by this patch. The devfreq driver doesn't support T210 (yet?) and you should witness the problem if you'll try to implement the T210 support. > I'm not sure I fully understand how this is supposed to work > here and why we can't do this in a similar way than Tegra210. The CCF returns -EPROBE_DEFER for clk_get() only until clock provider is registered, otherwise it returns a dummy/stub clock once provider is available and clk (of the provider) isn't registered. The CCF provider for the EMC clock is the tegra-clk driver, not the EMC driver. Once clk_get() is invoked by a clk user, the CCF performs the clk lookup using the DT specifier and this lookup is aborted with a -EPROBE_DEFER from the clk_src_onecell_get() callback if EMC driver isn't loaded yet. I don't think that there are any other variants to achieve this behaviour. I also prefer to have a clean separation of the clk and EMC drivers because this is a much more expressive variant than mixing drivers together in obscure way. The pre-T210 EMC drivers don't need to touch clk registers for programming of the memory timings, hence those EMC drivers are in a bit better position than the T210 driver. The T210 EMC driver also could have a cleaner separation by using a special tegra-clk API for the clk/EMC functions, instead of shoving a raw clk IO pointer to the EMC driver. It feels like I was already suggesting this about a half-year ago, before the T210 driver was merged. 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=-7.0 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, 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 C8977C0018C for ; Mon, 7 Dec 2020 08:57:36 +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 789D323108 for ; Mon, 7 Dec 2020 08:57:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 789D323108 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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 7F1C56E5A9; Mon, 7 Dec 2020 08:56:55 +0000 (UTC) Received: from mail-lj1-x241.google.com (mail-lj1-x241.google.com [IPv6:2a00:1450:4864:20::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id BD2566E446 for ; Sat, 5 Dec 2020 19:52:41 +0000 (UTC) Received: by mail-lj1-x241.google.com with SMTP id s9so10516920ljo.11 for ; Sat, 05 Dec 2020 11:52:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=bBF57HirJUWNF1QYKQCv5cFAIUWWtnZdZjsBsF1FLJE=; b=IdysiPjmnPVweioFPBqM2j0kXFOrazfcFWyxe+MuLYeOEAC2vr1O37U8hUDQcLe8C5 xxd+KyrAq4eW4uYdJ69QH+WpDKc1Dhg1DCO0Iey/XGIdIydoRgvfFbdoalfIsJWZq2Z3 iMIgHy8nTthhfK6rf+aL8juA5ZMNuw7tVT+DeZbOcQcb+dyKG69/HmAjUD4ynpgbAqX/ uR3sJlzTwaCm9CDD7IP5d1l5VJZ3pMesUY3XUJj+wr2zZa1kQwiYbkkFR9JrMiADJFqy j3koh2M3FZ5JzRfwgDddQORHcQCV+tUDVOUggU4P0PK6r4Tug67HItzMaZr5sx1jLQ82 GBkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=bBF57HirJUWNF1QYKQCv5cFAIUWWtnZdZjsBsF1FLJE=; b=K48VRd96xTXyQ97mKq6+32PefyItHgjpHwgq7d+JfAuZccpmU+L44jtnaXx5ikKcaI dKamPbnLlJlTkju2ahgJYpy6vNJviTEOcmav4LNjJBzE+cS2fBhN5ZmDKkVeSVerxPYg 36DmktRfaHYpQ15YUJolZZklM+XnWihOVlFT4x7ryOIGnt7VCNoUlyEjnCtOTIGNO7H+ gjWnVd5SQaRr76ov1c7Bx+jnb/YsbWBD6VxbUwNiK8K16shcLM/B0qEIJT5eB5/Rn26v /IfSi1303ZJU6gvZd7qdaoCvAWhJAeKyjhu76uEQQR2lD0WznrcOHI4eXEGHkNZp0cTs P/qw== X-Gm-Message-State: AOAM531szPa1kCeaSkqDRY6Bvc2zqP9bJILV0NYzGGy0h92UFY5FcU9Z 4O5BHtvnZ+XoJd8dNmhyO8M= X-Google-Smtp-Source: ABdhPJzGAM8dSVUfPrR/U+Sun2Ezu5zVBu5XVo94j8F7KWeaq9PoGepIjjXZVKrnnHP9DQTWYaRB2Q== X-Received: by 2002:a2e:8053:: with SMTP id p19mr5590859ljg.321.1607197960096; Sat, 05 Dec 2020 11:52:40 -0800 (PST) Received: from [192.168.2.145] (109-252-192-53.dynamic.spd-mgts.ru. [109.252.192.53]) by smtp.googlemail.com with ESMTPSA id p28sm2465992ljn.22.2020.12.05.11.52.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 05 Dec 2020 11:52:39 -0800 (PST) Subject: Re: [PATCH v11 04/10] memory: tegra124-emc: Make driver modular To: Thierry Reding References: <20201203192439.16177-1-digetx@gmail.com> <20201203192439.16177-5-digetx@gmail.com> From: Dmitry Osipenko Message-ID: <76eb57bf-feaf-ad86-a2d6-152897af7f2f@gmail.com> Date: Sat, 5 Dec 2020 22:52:38 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.2 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Mailman-Approved-At: Mon, 07 Dec 2020 08:56:49 +0000 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: devicetree@vger.kernel.org, Mikko Perttunen , dri-devel@lists.freedesktop.org, Nicolas Chauvet , Stephen Boyd , Viresh Kumar , Peter De Schrijver , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , Georgi Djakov , Chanwoo Choi , Kyungmin Park , Rob Herring , MyungJoo Ham , Peter Geis , linux-tegra@vger.kernel.org, Jonathan Hunter , Michael Turquette Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" MDQuMTIuMjAyMCAxOTo0MSwgVGhpZXJyeSBSZWRpbmcg0L/QuNGI0LXRgjoKLi4uCj4+ICtib29s IHRlZ3JhMTI0X2Nsa19lbWNfZHJpdmVyX2F2YWlsYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKPj4g K3sKPj4gKwlzdHJ1Y3QgdGVncmFfY2xrX2VtYyAqdGVncmEgPSBjb250YWluZXJfb2YoaHcsIHN0 cnVjdCB0ZWdyYV9jbGtfZW1jLCBodyk7Cj4+ICsKPj4gKwlyZXR1cm4gdGVncmEtPnByZXBhcmVf dGltaW5nX2NoYW5nZSAmJiB0ZWdyYS0+Y29tcGxldGVfdGltaW5nX2NoYW5nZTsKPj4gK30KPiAK PiBUaGlzIGxvb2tzIGEgYml0IGhhY2tpc2ggYW5kIEkgcHJlZmVyIHRoZSB3YXkgdGhpcyB3YXMg ZG9uZSBmb3IKPiBUZWdyYTIxMC4KCkkgbWF5IGhhdmUgYW4gb3Bwb3NpdGUgb3BpbmlvbiA6KQoK PiBCdXQgdGhhdCdzIG1vc3RseSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIHdlIGNhbiBh bHdheXMKPiByZXN0cnVjdHVyZSB0aGlzIGlmIHdlIHdhbnQgdG8uCgpUaGlzIGlzIHRydWUuIEkn bSBub3Qgc2F5aW5nIHRoYXQgdGhlIGN1cnJlbnQgdjExIHZhcmlhbnQgaXMgYWJzb2x1dGVseQpp ZGVhbCwgYnV0IGl0IHNob3VsZCBiZSBnb29kIGVub3VnaCBmb3IgdGhlIHN0YXJ0ZXIgKElNTykg YW5kIGFjdHVhbGx5IEkKZG9uJ3QgaGF2ZSBhbnkgaWRlYXMgcmlnaHQgYWJvdXQgd2hhdCBjb3Vs ZCBiZSBkb25lIGJldHRlci4KCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGst dGVncmExMjQuYyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTEyNC5jCj4+IGluZGV4IGU5 MzEzMTlkY2M5ZC4uOTM0NTIwYWFiNmUzIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2Nsay90ZWdy YS9jbGstdGVncmExMjQuYwo+PiArKysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmExMjQu Ywo+PiBAQCAtMTUwMCw2ICsxNTAwLDI2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB0ZWdyYTEyNF8x MzJfY2xvY2tfaW5pdF9wcmUoc3RydWN0IGRldmljZV9ub2RlICpucCkKPj4gIAl3cml0ZWwocGxs ZF9iYXNlLCBjbGtfYmFzZSArIFBMTERfQkFTRSk7Cj4+ICB9Cj4+ICAKPj4gK3N0YXRpYyBzdHJ1 Y3QgY2xrICp0ZWdyYTEyNF9jbGtfc3JjX29uZWNlbGxfZ2V0KHN0cnVjdCBvZl9waGFuZGxlX2Fy Z3MgKmNsa3NwZWMsCj4+ICsJCQkJCQl2b2lkICpkYXRhKQo+PiArewo+PiArCXN0cnVjdCBjbGtf aHcgKmh3Owo+PiArCXN0cnVjdCBjbGsgKmNsazsKPj4gKwo+PiArCWNsayA9IG9mX2Nsa19zcmNf b25lY2VsbF9nZXQoY2xrc3BlYywgZGF0YSk7Cj4+ICsJaWYgKElTX0VSUihjbGspKQo+PiArCQly ZXR1cm4gY2xrOwo+PiArCj4+ICsJaHcgPSBfX2Nsa19nZXRfaHcoY2xrKTsKPj4gKwo+PiArCWlm IChjbGtzcGVjLT5hcmdzWzBdID09IFRFR1JBMTI0X0NMS19FTUMpIHsKPj4gKwkJaWYgKCF0ZWdy YTEyNF9jbGtfZW1jX2RyaXZlcl9hdmFpbGFibGUoaHcpKQo+PiArCQkJcmV0dXJuIEVSUl9QVFIo LUVQUk9CRV9ERUZFUik7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIGNsazsKPj4gK30KPiAKPiBI bS4uLiB3aHkgZXhhY3RseSBkbyB3ZSBuZWVkIHRoaXM/IE9uIFRlZ3JhMjEwIGFuZCBsYXRlciwg dGhlIEVNQyBkcml2ZXIKPiBpcyB0aGUgb25seSBjb25zdW1lciBvZiB0aGUgRU1DIGNsb2NrIGFu ZCBzaW5jZSBpdCBhbHNvIHByb3ZpZGVzIHNvbWUgb2YKPiB0aGUgbmVjZXNzYXJ5IHBhcnRzIHRv IHNjYWxlIHRoZSBFTUMgY2xvY2ssIHRoYXQncyBhIGNoaWNrZW4gYW5kIGVnZwo+IHByb2JsZW0u CgpUaGUgVDEyNCBFTUMgZHJpdmVyIGhhcyBhbiBleGlzdGluZyBhY3RpdmUgdXNlciBmb3IgdGhl IEVNQyBjbG9jaywgdGhlCmRldmZyZXEvYWN0bW9uIGRyaXZlciB3aGljaCB3YXRjaGVzIGFuZCBk cml2ZXMgdGhlIEVNQyBjbG9jayByYXRlLiBUaGUKRU1DIGNsb2NrIHNoYW4ndCBiZSByZXF1ZXN0 ZWQgYnkgdGhlIGRldmZyZXEgZHJpdmVyIHVudGlsIEVNQyBkcml2ZXIgaXMKcmVhZHksIHRoZSBv bmx5IHNlbnNpYmxlIHdheSB0byBhY2hpZXZlIHRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgdGhpcyBw YXRjaC4KClRoZSBkZXZmcmVxIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgVDIxMCAoeWV0PykgYW5k IHlvdSBzaG91bGQgd2l0bmVzcwp0aGUgcHJvYmxlbSBpZiB5b3UnbGwgdHJ5IHRvIGltcGxlbWVu dCB0aGUgVDIxMCBzdXBwb3J0LgoKPiBJJ20gbm90IHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIGhv dyB0aGlzIGlzIHN1cHBvc2VkIHRvIHdvcmsKPiBoZXJlIGFuZCB3aHkgd2UgY2FuJ3QgZG8gdGhp cyBpbiBhIHNpbWlsYXIgd2F5IHRoYW4gVGVncmEyMTAuCgpUaGUgQ0NGIHJldHVybnMgLUVQUk9C RV9ERUZFUiBmb3IgY2xrX2dldCgpIG9ubHkgdW50aWwgY2xvY2sgcHJvdmlkZXIgaXMKcmVnaXN0 ZXJlZCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYSBkdW1teS9zdHViIGNsb2NrIG9uY2UgcHJvdmlk ZXIgaXMKYXZhaWxhYmxlIGFuZCBjbGsgKG9mIHRoZSBwcm92aWRlcikgaXNuJ3QgcmVnaXN0ZXJl ZC4gVGhlIENDRiBwcm92aWRlcgpmb3IgdGhlIEVNQyBjbG9jayBpcyB0aGUgdGVncmEtY2xrIGRy aXZlciwgbm90IHRoZSBFTUMgZHJpdmVyLgoKT25jZSBjbGtfZ2V0KCkgaXMgaW52b2tlZCBieSBh IGNsayB1c2VyLCB0aGUgQ0NGIHBlcmZvcm1zIHRoZSBjbGsgbG9va3VwCnVzaW5nIHRoZSBEVCBz cGVjaWZpZXIgYW5kIHRoaXMgbG9va3VwIGlzIGFib3J0ZWQgd2l0aCBhIC1FUFJPQkVfREVGRVIK ZnJvbSB0aGUgY2xrX3NyY19vbmVjZWxsX2dldCgpIGNhbGxiYWNrIGlmIEVNQyBkcml2ZXIgaXNu J3QgbG9hZGVkIHlldC4KSSBkb24ndCB0aGluayB0aGF0IHRoZXJlIGFyZSBhbnkgb3RoZXIgdmFy aWFudHMgdG8gYWNoaWV2ZSB0aGlzIGJlaGF2aW91ci4KCkkgYWxzbyBwcmVmZXIgdG8gaGF2ZSBh IGNsZWFuIHNlcGFyYXRpb24gb2YgdGhlIGNsayBhbmQgRU1DIGRyaXZlcnMKYmVjYXVzZSB0aGlz IGlzIGEgbXVjaCBtb3JlIGV4cHJlc3NpdmUgdmFyaWFudCB0aGFuIG1peGluZyBkcml2ZXJzCnRv Z2V0aGVyIGluIG9ic2N1cmUgd2F5LiBUaGUgcHJlLVQyMTAgRU1DIGRyaXZlcnMgZG9uJ3QgbmVl ZCB0byB0b3VjaApjbGsgcmVnaXN0ZXJzIGZvciBwcm9ncmFtbWluZyBvZiB0aGUgbWVtb3J5IHRp bWluZ3MsIGhlbmNlIHRob3NlIEVNQwpkcml2ZXJzIGFyZSBpbiBhIGJpdCBiZXR0ZXIgcG9zaXRp b24gdGhhbiB0aGUgVDIxMCBkcml2ZXIuCgpUaGUgVDIxMCBFTUMgZHJpdmVyIGFsc28gY291bGQg aGF2ZSBhIGNsZWFuZXIgc2VwYXJhdGlvbiBieSB1c2luZyBhCnNwZWNpYWwgdGVncmEtY2xrIEFQ SSBmb3IgdGhlIGNsay9FTUMgZnVuY3Rpb25zLCBpbnN0ZWFkIG9mIHNob3ZpbmcgYQpyYXcgY2xr IElPIHBvaW50ZXIgdG8gdGhlIEVNQyBkcml2ZXIuIEl0IGZlZWxzIGxpa2UgSSB3YXMgYWxyZWFk eQpzdWdnZXN0aW5nIHRoaXMgYWJvdXQgYSBoYWxmLXllYXIgYWdvLCBiZWZvcmUgdGhlIFQyMTAg ZHJpdmVyIHdhcyBtZXJnZWQuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAo=