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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 29383C43217 for ; Fri, 30 Sep 2022 09:02:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231288AbiI3JCf (ORCPT ); Fri, 30 Sep 2022 05:02:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58574 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231305AbiI3JCZ (ORCPT ); Fri, 30 Sep 2022 05:02:25 -0400 Received: from mail-vk1-xa30.google.com (mail-vk1-xa30.google.com [IPv6:2607:f8b0:4864:20::a30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EC1F41F7B03 for ; Fri, 30 Sep 2022 02:02:22 -0700 (PDT) Received: by mail-vk1-xa30.google.com with SMTP id r193so1911761vke.13 for ; Fri, 30 Sep 2022 02:02:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date; bh=PSqoEVotgmjM+vKbcyqTnmnsL1AtbCbSLlqCZ9LYa+I=; b=kAIczKy6ILtAWOt6uc/yYPESwoBRujTEBY7Pu4c/LbbLxYgCq9yfbVMd2MfttwGxEL oEzMaPyjKDvAQgWqUT+PS46hPZuVhu7mO96PVcmjULwrmkLz3+/kyg4pVyl7iSJS1x+5 WrsKXgLmzhtGP5eWBkf0F77QQlhFYm4JLyWhM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date; bh=PSqoEVotgmjM+vKbcyqTnmnsL1AtbCbSLlqCZ9LYa+I=; b=gqI/tLO5ZrANNf+H0j5k7ErOBr8IQ7osC7fAwaUVO/U4aTCzF+zHr+y+IZKIr+yirQ OKmjZgB0dADh8Enbrzlzk4Yg7+SSL1PT0bWytZQDoh3m1Gd+IsJJz3OWxwJAAU5AqcI4 w38kSvATnRGi6Uo7hBpkDRUj+OYcq8bQ3PUau9JBcpjnI6QCKNuoMbZ6bvDTvOQeXZn1 pEnR02/tSFd2kSMfM7phkjrZ8Wllq8tZS5IoYA6ggRtSYlU9B1d3CMcinaLT3fPM3p+U w+DNlciTUTxV5Pgxv2nMBE5sKy4YWRJDFBI/LHo0dEOjzCIzCBzN5WfaYpgynj02a9Zm uXGg== X-Gm-Message-State: ACrzQf269iYqCxZ02VD+27iGQ3SugwI4xH9TvWi/BHHFb23EtIQ/xI3w BtdX6tUDXw9HimAQbZZcyilHhlToNzd1c5hsflAQiw== X-Google-Smtp-Source: AMsMyM5V7CeePFmL7SoCh0B05e+v9Y3Oa9k4tJJBheukGXk3m1Nb8OFy00tgLDNtRzVOTBAwoYP0OjoVoXJK0rVpDwQ= X-Received: by 2002:a1f:9cc5:0:b0:3a2:bd20:8fc6 with SMTP id f188-20020a1f9cc5000000b003a2bd208fc6mr3818193vke.22.1664528541609; Fri, 30 Sep 2022 02:02:21 -0700 (PDT) MIME-Version: 1.0 References: <20220927101128.44758-1-angelogioacchino.delregno@collabora.com> <20220927101128.44758-9-angelogioacchino.delregno@collabora.com> <79490e834466628a1b92e51f65aeb9e9ce82ddce.camel@mediatek.com> <5d8af9a1-3afc-bd69-8f34-164284a452c2@collabora.com> <5d62200e-e058-29ea-063f-91dd1fd92cf7@collabora.com> In-Reply-To: <5d62200e-e058-29ea-063f-91dd1fd92cf7@collabora.com> From: Chen-Yu Tsai Date: Fri, 30 Sep 2022 17:02:10 +0800 Message-ID: Subject: Re: [PATCH v3 08/10] clk: mediatek: clk-mt8195-topckgen: Drop univplls from mfg mux parents To: AngeloGioacchino Del Regno Cc: =?UTF-8?B?TWFuZHlKSCBMaXUgKOWKieS6uuWDlik=?= , "matthias.bgg@gmail.com" , "linux-mediatek@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "mturquette@baylibre.com" , "jose.exposito89@gmail.com" , "drinkcat@chromium.org" , "devicetree@vger.kernel.org" , "sboyd@kernel.org" , =?UTF-8?B?Q2h1bi1KaWUgQ2hlbiAo6Zmz5rWa5qGAKQ==?= , "linux-arm-kernel@lists.infradead.org" , =?UTF-8?B?TWlsZXMgQ2hlbiAo6Zmz5rCR5qi6KQ==?= , =?UTF-8?B?V2VpeWkgTHUgKOWRguWogeWEgCk=?= , "linux-clk@vger.kernel.org" , =?UTF-8?B?UmV4LUJDIENoZW4gKOmZs+afj+i+sCk=?= , "krzysztof.kozlowski+dt@linaro.org" , "nfraprado@collabora.com" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Sep 30, 2022 at 4:58 PM AngeloGioacchino Del Regno wrote: > > Il 30/09/22 10:44, Chen-Yu Tsai ha scritto: > > On Fri, Sep 30, 2022 at 4:29 PM AngeloGioacchino Del Regno > > wrote: > >> > >> Il 30/09/22 07:59, MandyJH Liu (=E5=8A=89=E4=BA=BA=E5=83=96) ha scritt= o: > >>> On Tue, 2022-09-27 at 12:11 +0200, AngeloGioacchino Del Regno wrote: > >>>> These PLLs are conflicting with GPU rates that can be generated by > >>>> the GPU-dedicated MFGPLL and would require a special clock handler > >>>> to be used, for very little and ignorable power consumption benefits= . > >>>> Also, we're in any case unable to set the rate of these PLLs to > >>>> something else that is sensible for this task, so simply drop them: > >>>> this will make the GPU to be clocked exclusively from MFGPLL for > >>>> "fast" rates, while still achieving the right "safe" rate during > >>>> PLL frequency locking. > >>>> > >>>> Signed-off-by: AngeloGioacchino Del Regno < > >>>> angelogioacchino.delregno@collabora.com> > >>>> Reviewed-by: Chen-Yu Tsai > >>>> --- > >>>> drivers/clk/mediatek/clk-mt8195-topckgen.c | 9 ++++++--- > >>>> 1 file changed, 6 insertions(+), 3 deletions(-) > >>>> > >>>> diff --git a/drivers/clk/mediatek/clk-mt8195-topckgen.c > >>>> b/drivers/clk/mediatek/clk-mt8195-topckgen.c > >>>> index 4dde23bece66..8cbab5ca2e58 100644 > >>>> --- a/drivers/clk/mediatek/clk-mt8195-topckgen.c > >>>> +++ b/drivers/clk/mediatek/clk-mt8195-topckgen.c > >>>> @@ -298,11 +298,14 @@ static const char * const ipu_if_parents[] =3D= { > >>>> "mmpll_d4" > >>>> }; > >>>> > >>>> +/* > >>>> + * MFG can be also parented to "univpll_d6" and "univpll_d7": > >>>> + * these have been removed from the parents list to let us > >>>> + * achieve GPU DVFS without any special clock handlers. > >>>> + */ > >>>> static const char * const mfg_parents[] =3D { > >>>> "clk26m", > >>>> - "mainpll_d5_d2", > >>>> - "univpll_d6", > >>>> - "univpll_d7" > >>>> + "mainpll_d5_d2" > >>>> }; > >>>> > >>>> static const char * const camtg_parents[] =3D { > >>> There might be a problem here. Since the univpll_d6 and univpll_d7 ar= e > >>> available parents in hardware design and they can be selected other > >>> than kernel stage, like bootloader, the clk tree listed in clk_summar= y > >>> cannot show the real parent-child relationship in such case. > >> > >> I agree about that, but the clock framework will change the parent to > >> the "best parent" in that case... this was done to avoid writing compl= icated > >> custom clock ops just for that one. > >> > >> This issue is present only on MT8195, so it can be safely solved this = way, > >> at least for now. > >> > >> Should this become a thing on another couple SoCs, it'll then make sen= se > >> to write custom clock ops just for the MFG. > > > > Would CLK_SET_RATE_NO_REPARENT on the fast mux coupled with forcing > > the clk tree to a state that we like (mfgpll->fast_mux->gate) work? > > I'm not sure that it would, and then this would mean that we'd have to ad= d > assigned-clock-parents to the devicetree and the day we will introduce th= e > "complicated custom clock ops" for that, we'll most probably have to chan= ge > the devicetree as well... which is something that I'm a bit reluctant to = do > as a kernel upgrade doesn't automatically mean that you upgrade the DT wi= th > it to get the "new full functionality". You can also do it by doing clk_set_parent() in the clock driver after the clocks are registered, or just write to the register before the clock is registered. We do the latter in some of the sunxi-ng drivers, though IIRC it was to force a certain divider on what we expose as a fixed divider clock. ChenYu > Introducing the new clock ops for the mfg mux is something that will happ= en > for sure, but if we don't get new SoCs with a similar "issue", I don't fe= el > confident to write them, as I fear these won't be as flexible as needed a= nd > will eventually need a rewrite; that's why I want to wait to get the same > situation on "something new". > > In my opinion, it is safe to keep this change as it is, even though I do > understand the shown concerns about the eventual unability to show the tr= ee > relationship in case the bootloader chooses to initialize the mfg mux wit= h > a univpll parent. > > Regards, > Angelo > 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 40AAEC433F5 for ; Fri, 30 Sep 2022 09:03:30 +0000 (UTC) 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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8XRO567C6jwUAuJ2Nc06o9JtBwixXa9I9azWWKDvHes=; b=sp1Sq/XBBtRQky QzBvggJ9WC9yBOdMfTXuTkjOwVD1Ubw6BIFswhRDT1D44/8K1iif2uCcG6BkbV5Yt1uOGXdTxoUJ/ sctw3TQM2Scx/OzPYPsrB+u4vxQxJIgJLJoT2dwKsPeazywm2EU8dBUZHtfqfovcK4xm9eVBXu/rK MqKhqnkPaHtBVdb4JqGUa1fXQhMi46F3V/EQFf0ndu1Ie58zSRqdbesRq/lmANQllMksDL+1zN0Z0 IAC2xYRHAKuCNEPV1LTm/0h28fQACrVGtdCcAxMCs4iU4NtvluD9yGZtMDwlRGT3J4ezv4wAfS2jV KHuM4G+EYqTKCPWoGF2g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oeBud-008E7j-Ro; Fri, 30 Sep 2022 09:02:28 +0000 Received: from mail-vk1-xa2d.google.com ([2607:f8b0:4864:20::a2d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oeBua-008E5k-Nn for linux-arm-kernel@lists.infradead.org; Fri, 30 Sep 2022 09:02:26 +0000 Received: by mail-vk1-xa2d.google.com with SMTP id k9so1929666vke.4 for ; Fri, 30 Sep 2022 02:02:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date; bh=PSqoEVotgmjM+vKbcyqTnmnsL1AtbCbSLlqCZ9LYa+I=; b=kAIczKy6ILtAWOt6uc/yYPESwoBRujTEBY7Pu4c/LbbLxYgCq9yfbVMd2MfttwGxEL oEzMaPyjKDvAQgWqUT+PS46hPZuVhu7mO96PVcmjULwrmkLz3+/kyg4pVyl7iSJS1x+5 WrsKXgLmzhtGP5eWBkf0F77QQlhFYm4JLyWhM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date; bh=PSqoEVotgmjM+vKbcyqTnmnsL1AtbCbSLlqCZ9LYa+I=; b=ZCCpWcsTzF4DMLgX9DkMNTVpW01FK12ooovglXv3Y98UYMPPW+MrqMRO4qy2lTv2km eroSFNHmQYX/KbYElNXvUQOjqxwYos41c1Ahx03FrbbrA25/gkB/uge6DU4rmxqjTSUN X7SP/5iBkQD5aNCZ1GmW/qz4IaJrsPW82a3hCQIUytxaXvOJxGoS72fzPN3yB0mjioU9 hJDk2oKDe6QR4USzW4js8GyKyGyNvIsKPEfMN3uMUe0iEEMn05Yvm7sl6x4+0RNC6s3u F9L1FZgrGaO8XtgvcCMR7sJEntsaTb9IR9/KRGcKHOMekYn5or5iFwKX+/pySgvDs5y/ 6ilw== X-Gm-Message-State: ACrzQf124FfQ1mj5PYoxMjzFiIa9xzbi3ZA5kYWZ4xthgEQ3CNtqwuGF YoPrnAcgk/jRPzIPWuBcuXYVRMX2ZP1R4ZOoul5zzA== X-Google-Smtp-Source: AMsMyM5V7CeePFmL7SoCh0B05e+v9Y3Oa9k4tJJBheukGXk3m1Nb8OFy00tgLDNtRzVOTBAwoYP0OjoVoXJK0rVpDwQ= X-Received: by 2002:a1f:9cc5:0:b0:3a2:bd20:8fc6 with SMTP id f188-20020a1f9cc5000000b003a2bd208fc6mr3818193vke.22.1664528541609; Fri, 30 Sep 2022 02:02:21 -0700 (PDT) MIME-Version: 1.0 References: <20220927101128.44758-1-angelogioacchino.delregno@collabora.com> <20220927101128.44758-9-angelogioacchino.delregno@collabora.com> <79490e834466628a1b92e51f65aeb9e9ce82ddce.camel@mediatek.com> <5d8af9a1-3afc-bd69-8f34-164284a452c2@collabora.com> <5d62200e-e058-29ea-063f-91dd1fd92cf7@collabora.com> In-Reply-To: <5d62200e-e058-29ea-063f-91dd1fd92cf7@collabora.com> From: Chen-Yu Tsai Date: Fri, 30 Sep 2022 17:02:10 +0800 Message-ID: Subject: Re: [PATCH v3 08/10] clk: mediatek: clk-mt8195-topckgen: Drop univplls from mfg mux parents To: AngeloGioacchino Del Regno Cc: =?UTF-8?B?TWFuZHlKSCBMaXUgKOWKieS6uuWDlik=?= , "matthias.bgg@gmail.com" , "linux-mediatek@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "mturquette@baylibre.com" , "jose.exposito89@gmail.com" , "drinkcat@chromium.org" , "devicetree@vger.kernel.org" , "sboyd@kernel.org" , =?UTF-8?B?Q2h1bi1KaWUgQ2hlbiAo6Zmz5rWa5qGAKQ==?= , "linux-arm-kernel@lists.infradead.org" , =?UTF-8?B?TWlsZXMgQ2hlbiAo6Zmz5rCR5qi6KQ==?= , =?UTF-8?B?V2VpeWkgTHUgKOWRguWogeWEgCk=?= , "linux-clk@vger.kernel.org" , =?UTF-8?B?UmV4LUJDIENoZW4gKOmZs+afj+i+sCk=?= , "krzysztof.kozlowski+dt@linaro.org" , "nfraprado@collabora.com" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220930_020224_787666_9E218388 X-CRM114-Status: GOOD ( 41.49 ) 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 T24gRnJpLCBTZXAgMzAsIDIwMjIgYXQgNDo1OCBQTSBBbmdlbG9HaW9hY2NoaW5vIERlbCBSZWdu bwo8YW5nZWxvZ2lvYWNjaGluby5kZWxyZWdub0Bjb2xsYWJvcmEuY29tPiB3cm90ZToKPgo+IEls IDMwLzA5LzIyIDEwOjQ0LCBDaGVuLVl1IFRzYWkgaGEgc2NyaXR0bzoKPiA+IE9uIEZyaSwgU2Vw IDMwLCAyMDIyIGF0IDQ6MjkgUE0gQW5nZWxvR2lvYWNjaGlubyBEZWwgUmVnbm8KPiA+IDxhbmdl bG9naW9hY2NoaW5vLmRlbHJlZ25vQGNvbGxhYm9yYS5jb20+IHdyb3RlOgo+ID4+Cj4gPj4gSWwg MzAvMDkvMjIgMDc6NTksIE1hbmR5SkggTGl1ICjlionkurrlg5YpIGhhIHNjcml0dG86Cj4gPj4+ IE9uIFR1ZSwgMjAyMi0wOS0yNyBhdCAxMjoxMSArMDIwMCwgQW5nZWxvR2lvYWNjaGlubyBEZWwg UmVnbm8gd3JvdGU6Cj4gPj4+PiBUaGVzZSBQTExzIGFyZSBjb25mbGljdGluZyB3aXRoIEdQVSBy YXRlcyB0aGF0IGNhbiBiZSBnZW5lcmF0ZWQgYnkKPiA+Pj4+IHRoZSBHUFUtZGVkaWNhdGVkIE1G R1BMTCBhbmQgd291bGQgcmVxdWlyZSBhIHNwZWNpYWwgY2xvY2sgaGFuZGxlcgo+ID4+Pj4gdG8g YmUgdXNlZCwgZm9yIHZlcnkgbGl0dGxlIGFuZCBpZ25vcmFibGUgcG93ZXIgY29uc3VtcHRpb24g YmVuZWZpdHMuCj4gPj4+PiBBbHNvLCB3ZSdyZSBpbiBhbnkgY2FzZSB1bmFibGUgdG8gc2V0IHRo ZSByYXRlIG9mIHRoZXNlIFBMTHMgdG8KPiA+Pj4+IHNvbWV0aGluZyBlbHNlIHRoYXQgaXMgc2Vu c2libGUgZm9yIHRoaXMgdGFzaywgc28gc2ltcGx5IGRyb3AgdGhlbToKPiA+Pj4+IHRoaXMgd2ls bCBtYWtlIHRoZSBHUFUgdG8gYmUgY2xvY2tlZCBleGNsdXNpdmVseSBmcm9tIE1GR1BMTCBmb3IK PiA+Pj4+ICJmYXN0IiByYXRlcywgd2hpbGUgc3RpbGwgYWNoaWV2aW5nIHRoZSByaWdodCAic2Fm ZSIgcmF0ZSBkdXJpbmcKPiA+Pj4+IFBMTCBmcmVxdWVuY3kgbG9ja2luZy4KPiA+Pj4+Cj4gPj4+ PiBTaWduZWQtb2ZmLWJ5OiBBbmdlbG9HaW9hY2NoaW5vIERlbCBSZWdubyA8Cj4gPj4+PiBhbmdl bG9naW9hY2NoaW5vLmRlbHJlZ25vQGNvbGxhYm9yYS5jb20+Cj4gPj4+PiBSZXZpZXdlZC1ieTog Q2hlbi1ZdSBUc2FpIDx3ZW5zdEBjaHJvbWl1bS5vcmc+Cj4gPj4+PiAtLS0KPiA+Pj4+ICAgIGRy aXZlcnMvY2xrL21lZGlhdGVrL2Nsay1tdDgxOTUtdG9wY2tnZW4uYyB8IDkgKysrKysrLS0tCj4g Pj4+PiAgICAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+ ID4+Pj4KPiA+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tZWRpYXRlay9jbGstbXQ4MTk1 LXRvcGNrZ2VuLmMKPiA+Pj4+IGIvZHJpdmVycy9jbGsvbWVkaWF0ZWsvY2xrLW10ODE5NS10b3Bj a2dlbi5jCj4gPj4+PiBpbmRleCA0ZGRlMjNiZWNlNjYuLjhjYmFiNWNhMmU1OCAxMDA2NDQKPiA+ Pj4+IC0tLSBhL2RyaXZlcnMvY2xrL21lZGlhdGVrL2Nsay1tdDgxOTUtdG9wY2tnZW4uYwo+ID4+ Pj4gKysrIGIvZHJpdmVycy9jbGsvbWVkaWF0ZWsvY2xrLW10ODE5NS10b3Bja2dlbi5jCj4gPj4+ PiBAQCAtMjk4LDExICsyOTgsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpcHVfaWZf cGFyZW50c1tdID0gewo+ID4+Pj4gICAgICAgIm1tcGxsX2Q0Igo+ID4+Pj4gICAgfTsKPiA+Pj4+ Cj4gPj4+PiArLyoKPiA+Pj4+ICsgKiBNRkcgY2FuIGJlIGFsc28gcGFyZW50ZWQgdG8gInVuaXZw bGxfZDYiIGFuZCAidW5pdnBsbF9kNyI6Cj4gPj4+PiArICogdGhlc2UgaGF2ZSBiZWVuIHJlbW92 ZWQgZnJvbSB0aGUgcGFyZW50cyBsaXN0IHRvIGxldCB1cwo+ID4+Pj4gKyAqIGFjaGlldmUgR1BV IERWRlMgd2l0aG91dCBhbnkgc3BlY2lhbCBjbG9jayBoYW5kbGVycy4KPiA+Pj4+ICsgKi8KPiA+ Pj4+ICAgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWZnX3BhcmVudHNbXSA9IHsKPiA+Pj4+ ICAgICAgICJjbGsyNm0iLAo+ID4+Pj4gLSAgICAibWFpbnBsbF9kNV9kMiIsCj4gPj4+PiAtICAg ICJ1bml2cGxsX2Q2IiwKPiA+Pj4+IC0gICAgInVuaXZwbGxfZDciCj4gPj4+PiArICAgICJtYWlu cGxsX2Q1X2QyIgo+ID4+Pj4gICAgfTsKPiA+Pj4+Cj4gPj4+PiAgICBzdGF0aWMgY29uc3QgY2hh ciAqIGNvbnN0IGNhbXRnX3BhcmVudHNbXSA9IHsKPiA+Pj4gVGhlcmUgbWlnaHQgYmUgYSBwcm9i bGVtIGhlcmUuIFNpbmNlIHRoZSB1bml2cGxsX2Q2IGFuZCB1bml2cGxsX2Q3IGFyZQo+ID4+PiBh dmFpbGFibGUgcGFyZW50cyBpbiBoYXJkd2FyZSBkZXNpZ24gYW5kIHRoZXkgY2FuIGJlIHNlbGVj dGVkIG90aGVyCj4gPj4+IHRoYW4ga2VybmVsIHN0YWdlLCBsaWtlIGJvb3Rsb2FkZXIsIHRoZSBj bGsgdHJlZSBsaXN0ZWQgaW4gY2xrX3N1bW1hcnkKPiA+Pj4gY2Fubm90IHNob3cgdGhlIHJlYWwg cGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcCBpbiBzdWNoIGNhc2UuCj4gPj4KPiA+PiBJIGFncmVl IGFib3V0IHRoYXQsIGJ1dCB0aGUgY2xvY2sgZnJhbWV3b3JrIHdpbGwgY2hhbmdlIHRoZSBwYXJl bnQgdG8KPiA+PiB0aGUgImJlc3QgcGFyZW50IiBpbiB0aGF0IGNhc2UuLi4gdGhpcyB3YXMgZG9u ZSB0byBhdm9pZCB3cml0aW5nIGNvbXBsaWNhdGVkCj4gPj4gY3VzdG9tIGNsb2NrIG9wcyBqdXN0 IGZvciB0aGF0IG9uZS4KPiA+Pgo+ID4+IFRoaXMgaXNzdWUgaXMgcHJlc2VudCBvbmx5IG9uIE1U ODE5NSwgc28gaXQgY2FuIGJlIHNhZmVseSBzb2x2ZWQgdGhpcyB3YXksCj4gPj4gYXQgbGVhc3Qg Zm9yIG5vdy4KPiA+Pgo+ID4+IFNob3VsZCB0aGlzIGJlY29tZSBhIHRoaW5nIG9uIGFub3RoZXIg Y291cGxlIFNvQ3MsIGl0J2xsIHRoZW4gbWFrZSBzZW5zZQo+ID4+IHRvIHdyaXRlIGN1c3RvbSBj bG9jayBvcHMganVzdCBmb3IgdGhlIE1GRy4KPiA+Cj4gPiBXb3VsZCBDTEtfU0VUX1JBVEVfTk9f UkVQQVJFTlQgb24gdGhlIGZhc3QgbXV4IGNvdXBsZWQgd2l0aCBmb3JjaW5nCj4gPiB0aGUgY2xr IHRyZWUgdG8gYSBzdGF0ZSB0aGF0IHdlIGxpa2UgKG1mZ3BsbC0+ZmFzdF9tdXgtPmdhdGUpIHdv cms/Cj4KPiBJJ20gbm90IHN1cmUgdGhhdCBpdCB3b3VsZCwgYW5kIHRoZW4gdGhpcyB3b3VsZCBt ZWFuIHRoYXQgd2UnZCBoYXZlIHRvIGFkZAo+IGFzc2lnbmVkLWNsb2NrLXBhcmVudHMgdG8gdGhl IGRldmljZXRyZWUgYW5kIHRoZSBkYXkgd2Ugd2lsbCBpbnRyb2R1Y2UgdGhlCj4gImNvbXBsaWNh dGVkIGN1c3RvbSBjbG9jayBvcHMiIGZvciB0aGF0LCB3ZSdsbCBtb3N0IHByb2JhYmx5IGhhdmUg dG8gY2hhbmdlCj4gdGhlIGRldmljZXRyZWUgYXMgd2VsbC4uLiB3aGljaCBpcyBzb21ldGhpbmcg dGhhdCBJJ20gYSBiaXQgcmVsdWN0YW50IHRvIGRvCj4gYXMgYSBrZXJuZWwgdXBncmFkZSBkb2Vz bid0IGF1dG9tYXRpY2FsbHkgbWVhbiB0aGF0IHlvdSB1cGdyYWRlIHRoZSBEVCB3aXRoCj4gaXQg dG8gZ2V0IHRoZSAibmV3IGZ1bGwgZnVuY3Rpb25hbGl0eSIuCgpZb3UgY2FuIGFsc28gZG8gaXQg YnkgZG9pbmcgY2xrX3NldF9wYXJlbnQoKSBpbiB0aGUgY2xvY2sgZHJpdmVyIGFmdGVyIHRoZQpj bG9ja3MgYXJlIHJlZ2lzdGVyZWQsIG9yIGp1c3Qgd3JpdGUgdG8gdGhlIHJlZ2lzdGVyIGJlZm9y ZSB0aGUgY2xvY2sgaXMKcmVnaXN0ZXJlZC4KCldlIGRvIHRoZSBsYXR0ZXIgaW4gc29tZSBvZiB0 aGUgc3VueGktbmcgZHJpdmVycywgdGhvdWdoIElJUkMgaXQgd2FzIHRvCmZvcmNlIGEgY2VydGFp biBkaXZpZGVyIG9uIHdoYXQgd2UgZXhwb3NlIGFzIGEgZml4ZWQgZGl2aWRlciBjbG9jay4KCkNo ZW5ZdQoKPiBJbnRyb2R1Y2luZyB0aGUgbmV3IGNsb2NrIG9wcyBmb3IgdGhlIG1mZyBtdXggaXMg c29tZXRoaW5nIHRoYXQgd2lsbCBoYXBwZW4KPiBmb3Igc3VyZSwgYnV0IGlmIHdlIGRvbid0IGdl dCBuZXcgU29DcyB3aXRoIGEgc2ltaWxhciAiaXNzdWUiLCBJIGRvbid0IGZlZWwKPiBjb25maWRl bnQgdG8gd3JpdGUgdGhlbSwgYXMgSSBmZWFyIHRoZXNlIHdvbid0IGJlIGFzIGZsZXhpYmxlIGFz IG5lZWRlZCBhbmQKPiB3aWxsIGV2ZW50dWFsbHkgbmVlZCBhIHJld3JpdGU7IHRoYXQncyB3aHkg SSB3YW50IHRvIHdhaXQgdG8gZ2V0IHRoZSBzYW1lCj4gc2l0dWF0aW9uIG9uICJzb21ldGhpbmcg bmV3Ii4KPgo+IEluIG15IG9waW5pb24sIGl0IGlzIHNhZmUgdG8ga2VlcCB0aGlzIGNoYW5nZSBh cyBpdCBpcywgZXZlbiB0aG91Z2ggSSBkbwo+IHVuZGVyc3RhbmQgdGhlIHNob3duIGNvbmNlcm5z IGFib3V0IHRoZSBldmVudHVhbCB1bmFiaWxpdHkgdG8gc2hvdyB0aGUgdHJlZQo+IHJlbGF0aW9u c2hpcCBpbiBjYXNlIHRoZSBib290bG9hZGVyIGNob29zZXMgdG8gaW5pdGlhbGl6ZSB0aGUgbWZn IG11eCB3aXRoCj4gYSB1bml2cGxsIHBhcmVudC4KPgo+IFJlZ2FyZHMsCj4gQW5nZWxvCj4KCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwK