From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E4D6D310 for ; Mon, 6 Mar 2023 05:32:28 +0000 (UTC) Received: by mail-qv1-f43.google.com with SMTP id nv15so5885971qvb.7 for ; Sun, 05 Mar 2023 21:32:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678080747; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=MiPKMsiLMYcbxYp4rynCMsLu6OEagFUTtrUpOTm5FG4=; b=fFeQ+3l0U1qzYT1ysduN2sP0GdfNjC+8AF0rG6ywGf9vi6SrINzCLoPFKmgBsRRkYK gOLbqqCx7O2dWpJJL+GA27+EcmZ5ooeWJUGzHkk+3XL0hjGw6mxdUIGB6NbiKXeWxz4B wilnFH3qr/uU8kNpWYJG1BIL5c/UWzMAZX95L2u4fAji7ifhqlysAwg5bFQ9AWnWRXAB turO4Xhctv2S+cLzKLTrKZXxAQRcHPeosedXwn0aw8Sbhdunndq3E62VAllOlVKn+V6K +UimW74g+P8uXesrSOMIUKy++dFWpcc//YvdriqaMThusqA5kcjAvOVMN4CmPnNNBarE W40w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678080747; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=MiPKMsiLMYcbxYp4rynCMsLu6OEagFUTtrUpOTm5FG4=; b=NrVKKXGsQUeTtG4i53xEnLk9WjPQB8gogQm/8RdjOZS8oZAw3QiEM6c6wxMOluO9i7 jWhPM8+hZG1XvSYgyTCr57cLeX7nJxYSy0gYS9bx3qplEBMzvDu/0FPPV1MZoNMPeTlA ebfIGIRxwBy7tL74yIHw1hIfidJA/nTumTPeCSuJmF1ExVBtDehmHY7oZ9T3iq1PU2wv lPOGrrhZvCKsLlfakz+2noeCiFDYk5RwpbdTa/SmPFAW8Q+KLVQTf9SnLVG+P9tNPUIG 5KolFs6hTSwg407ockJoTvWfwChoYOS13T3zZxBNochRdv65QUGpdOBJpsqBQzdPfsJd dnIg== X-Gm-Message-State: AO0yUKXbeeZ2CMprX32N5R3uvnRqVs6JTVFuffTsBvZjg080wOPeyWHP E5dwRnOGcJIGjcBdXxMnMMA= X-Google-Smtp-Source: AK7set8x6C04G7U2rQVgc1T5sV7S1ZXKsemoJPLSenK3Bh4gKMTRpKktDP6kENr18uH4v3IYHuBG3w== X-Received: by 2002:ad4:5de8:0:b0:571:d69:da8c with SMTP id jn8-20020ad45de8000000b005710d69da8cmr15359208qvb.19.1678080747037; Sun, 05 Mar 2023 21:32:27 -0800 (PST) Received: from ?IPV6:2600:1700:2442:6db0:64c7:9450:aac2:7f08? ([2600:1700:2442:6db0:64c7:9450:aac2:7f08]) by smtp.gmail.com with ESMTPSA id x184-20020a3763c1000000b00738e8e81dc9sm6021908qkb.75.2023.03.05.21.32.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 05 Mar 2023 21:32:26 -0800 (PST) Message-ID: <3d64ed75-c9f7-391a-e125-7a7bf6a28bf6@gmail.com> Date: Sun, 5 Mar 2023 23:32:25 -0600 Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [PATCH 0/8] clk: Add kunit tests for fixed rate and parent data Content-Language: en-US To: Geert Uytterhoeven Cc: Stephen Boyd , David Gow , Rob Herring , Michael Turquette , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, patches@lists.linux.dev, Brendan Higgins , Greg Kroah-Hartman , "Rafael J . Wysocki" , Richard Weinberger , Anton Ivanov , Johannes Berg , Vincent Whitchurch , Christian Marangi , Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-um@lists.infradead.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com References: <20230302013822.1808711-1-sboyd@kernel.org> <3759b28cca7ab751296d4dd83f2dcc51.sboyd@kernel.org> From: Frank Rowand In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 3/5/23 03:26, Geert Uytterhoeven wrote: > Hi Frank, > > On Sun, Mar 5, 2023 at 4:33 AM Frank Rowand wrote: >> On 3/2/23 13:47, Geert Uytterhoeven wrote: >>> On Thu, Mar 2, 2023 at 8:28 PM Stephen Boyd wrote: >>>> Quoting Rob Herring (2023-03-02 09:32:09) >>>>> On Thu, Mar 2, 2023 at 2:14 AM David Gow wrote: >>>>>> On Thu, 2 Mar 2023 at 09:38, Stephen Boyd wrote: >>>>>>> This patch series adds unit tests for the clk fixed rate basic type and >>>>>>> the clk registration functions that use struct clk_parent_data. To get >>>>>>> there, we add support for loading a DTB into the UML kernel that's >>>>>>> running the unit tests along with probing platform drivers to bind to >>>>>>> device nodes specified in DT. >>>>>>> >>>>>>> With this series, we're able to exercise some of the code in the common >>>>>>> clk framework that uses devicetree lookups to find parents and the fixed >>>>>>> rate clk code that scans devicetree directly and creates clks. Please >>>>>>> review. >>>>>>> >>>>>> >>>>>> Thanks Stephen -- this is really neat! >>>>>> >>>>>> This works well here, and I love all of the tests for the >>>>>> KUnit/device-tree integration as well. >>>>>> >>>>>> I'm still looking through the details of it (alas, I've mostly lived >>>>>> in x86-land, so my device-tree knowledge is, uh, spotty to say the >>>>>> least), but apart from possibly renaming some things or similarly >>>>>> minor tweaks, I've not got any real suggestions thus far. >>>>>> >>>>>> I do wonder whether we'll want, on the KUnit side, to have some way of >>>>>> supporting KUnit device trees on non-UML architecctures (e.g., if we >>>>>> need to test something architecture-specific, or on a big-endian >>>>>> platform, etc), but I think that's a question for the future, rather >>>>>> than something that affects this series. >>>>> >>>>> I'll say that's a requirement. We should be able to structure the >>>>> tests to not interfere with the running system's DT. The DT unittest >>>>> does that. >>>> >>>> That could be another choice in the unit test choice menu. >>>> CONFIG_OF_KUNIT_NOT_UML that injects some built-in DTB overlay on an >>>> architecture that wants to run tests. >>> >>> As long as you use compatible values that don't exist elsewhere, >>> and don't overwrite anything, you can load your kunit test overlays >>> on any running system that has DT support. >>> >>>>> As a side topic, Is anyone looking at getting UML to work on arm64? >>>>> It's surprising how much x86 stuff there is which is I guess one >>>>> reason it hasn't happened. >>>> >>>> I've no idea but it would be nice indeed. >>> >>> I believe that's non-trivial. At least for arm32 (I didn't have any arm64 >>> systems last time I asked the experts). >>> >>>>>> Similarly, I wonder if there's something we could do with device tree >>>>>> overlays, in order to make it possible for tests to swap nodes in and >>>>>> out for testing. >>>>> >>>>> Yes, that's how the DT unittest works. But it is pretty much one big >>>>> overlay (ignoring the overlay tests). It could probably be more >>>>> modular where it is apply overlay, test, remove overlay, repeat. >>>> >>>> I didn't want to rely on the overlay code to inject DT nodes. Having >>>> tests written for the fake KUnit machine is simple. It closely matches >>>> how clk code probes the DTB and how nodes are created and populated on >>>> the platform bus as devices. CLK_OF_DECLARE() would need the overlay to >>>> be applied early too, which doesn't happen otherwise as far as I know. >>> >>> Don't all generic clock drivers also create a platform driver? >>> At least drivers/clk/clk-fixed-factor.c does. >>> >>>> But perhaps this design is too much of an end-to-end test and not a unit >>>> test? In the spirit of unit testing we shouldn't care about how the node >>>> is added to the live devicetree, just that there is a devicetree at all. >>>> >>>> Supporting overlays to more easily test combinations sounds like a good >>>> idea. Probably some kunit_*() prefixed functions could be used to >>>> apply a test managed overlay and automatically remove it when the test >>>> is over would work. The clk registration tests could use this API to >>>> inject an overlay and then manually call the of_platform_populate() >>>> function to create the platform device(s). The overlay could be built in >>>> drivers/clk/ too and then probably some macroish function can find the >>>> blob and apply it. >>> >>> No need to manually call of_platform_populate() to create the >>> platform devices. That is taken care of automatically when applying >>> an overlay. >>> >>>> Is there some way to delete the platform devices that we populate from >>>> the overlay? I'd like the tests to be hermetic. >> >>> Removing the overlay will delete the platform devices. >> >> I _think_ that is incorrect. Do you have a pointer to the overlay code that >> deletes the device? (If I remember correctly, the overlay remove code does not >> even check whether the device exists and whether a driver is bound to it -- but >> this is on my todo list to look into.) > > https://elixir.bootlin.com/linux/latest/source/drivers/of/platform.c#L769 Thanks! That is precisely what I failed to remember. -Frank > >>> All of that works if you have your own code to apply a DT overlay. >>> The recent fw_devlinks patches did cause some regressions, cfr. >>> https://lore.kernel.org/all/CAMuHMdXEnSD4rRJ-o90x4OprUacN_rJgyo8x6=9F9rZ+-KzjOg@mail.gmail.com > > Gr{oetje,eeting}s, > > Geert > 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 B8D1FC61DA4 for ; Mon, 6 Mar 2023 05:32:40 +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:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tjLCw6TktSJL8riSwbOb3htQgNfNl+z6y6nrVhUFOYo=; b=bcpjhz9GT/pjgV RKifrmm6xA4Y9o1Y84qndS6oWN7ugS4tK8rAkNeeo5y1af/Zd0M3WT9uH6M5Tpk6ENK53zWJjmLPd aKDfgDhcKTn2ZzFIbOt/lF0HhrG20X+I3jsC1kCme3ygkXRMJyu0wsycFHFvTLLy4GNVZXJNlbE8Q Tr+FdQ9ogMjxzKUjSKpABE7tQnd2d90WVfvnL7RVcrJnrbzjBeg/GXbIl36Lw6DNqEWr8/vK2CuTM dhFmOWO7uCxzpGc1Lk4+4os6vmiRTze8Zi/t10G6zUnJYYDMKC3JRyGT74frOTTJREq2GzBqFRu9t mtMtK16oLFexcWiXizlw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pZ3Sd-00BOpG-CG; Mon, 06 Mar 2023 05:32:35 +0000 Received: from mail-qv1-xf34.google.com ([2607:f8b0:4864:20::f34]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pZ3SZ-00BOno-39 for linux-um@lists.infradead.org; Mon, 06 Mar 2023 05:32:33 +0000 Received: by mail-qv1-xf34.google.com with SMTP id ks17so5891266qvb.6 for ; Sun, 05 Mar 2023 21:32:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678080747; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=MiPKMsiLMYcbxYp4rynCMsLu6OEagFUTtrUpOTm5FG4=; b=fFeQ+3l0U1qzYT1ysduN2sP0GdfNjC+8AF0rG6ywGf9vi6SrINzCLoPFKmgBsRRkYK gOLbqqCx7O2dWpJJL+GA27+EcmZ5ooeWJUGzHkk+3XL0hjGw6mxdUIGB6NbiKXeWxz4B wilnFH3qr/uU8kNpWYJG1BIL5c/UWzMAZX95L2u4fAji7ifhqlysAwg5bFQ9AWnWRXAB turO4Xhctv2S+cLzKLTrKZXxAQRcHPeosedXwn0aw8Sbhdunndq3E62VAllOlVKn+V6K +UimW74g+P8uXesrSOMIUKy++dFWpcc//YvdriqaMThusqA5kcjAvOVMN4CmPnNNBarE W40w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678080747; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=MiPKMsiLMYcbxYp4rynCMsLu6OEagFUTtrUpOTm5FG4=; b=J7L9zwtYmJtoucuf97QLexHgMLT03hLXHR7Mt6EQb4HfT1Yty8k65Tyerqz23a8IeO 600C+s40LoW+BjFJmokYordu3a3w1l+oVZprMxJUJISYZj3Fi53D0k6NyaYQwEvvN3Wu bQzpfZPdyZI+xHVOIcdie5bGqH2KRW7AOxUPZtwOVPEo0uohD+6lGPIvRN1qcHcfQyPl ceBJI+8XTH84iOYX6tgVa84+dnzoNXLWJfz00uOevnk1G3BKCq7xLY3jCRcn2yC3qW9v MjqqpGC1Yye8JRDzv4vgv9ZVOHxefjS9AV8+S09Jx/hrqfd8YcCY2XjxcuybPhRZIzCR EmbA== X-Gm-Message-State: AO0yUKXWdRzcu2r5H5Fre9NcjlOA+yA2PDvTCvlRjy1gYwQ6D/zhIj5o WNUCJ6/F2PXEohVREFFarRI= X-Google-Smtp-Source: AK7set8x6C04G7U2rQVgc1T5sV7S1ZXKsemoJPLSenK3Bh4gKMTRpKktDP6kENr18uH4v3IYHuBG3w== X-Received: by 2002:ad4:5de8:0:b0:571:d69:da8c with SMTP id jn8-20020ad45de8000000b005710d69da8cmr15359208qvb.19.1678080747037; Sun, 05 Mar 2023 21:32:27 -0800 (PST) Received: from ?IPV6:2600:1700:2442:6db0:64c7:9450:aac2:7f08? ([2600:1700:2442:6db0:64c7:9450:aac2:7f08]) by smtp.gmail.com with ESMTPSA id x184-20020a3763c1000000b00738e8e81dc9sm6021908qkb.75.2023.03.05.21.32.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 05 Mar 2023 21:32:26 -0800 (PST) Message-ID: <3d64ed75-c9f7-391a-e125-7a7bf6a28bf6@gmail.com> Date: Sun, 5 Mar 2023 23:32:25 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [PATCH 0/8] clk: Add kunit tests for fixed rate and parent data Content-Language: en-US To: Geert Uytterhoeven Cc: Stephen Boyd , David Gow , Rob Herring , Michael Turquette , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, patches@lists.linux.dev, Brendan Higgins , Greg Kroah-Hartman , "Rafael J . Wysocki" , Richard Weinberger , Anton Ivanov , Johannes Berg , Vincent Whitchurch , Christian Marangi , Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-um@lists.infradead.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com References: <20230302013822.1808711-1-sboyd@kernel.org> <3759b28cca7ab751296d4dd83f2dcc51.sboyd@kernel.org> From: Frank Rowand In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230305_213231_178511_139BBB6A X-CRM114-Status: GOOD ( 37.01 ) X-BeenThere: linux-um@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-um" Errors-To: linux-um-bounces+linux-um=archiver.kernel.org@lists.infradead.org T24gMy81LzIzIDAzOjI2LCBHZWVydCBVeXR0ZXJob2V2ZW4gd3JvdGU6Cj4gSGkgRnJhbmssCj4g Cj4gT24gU3VuLCBNYXIgNSwgMjAyMyBhdCA0OjMz4oCvQU0gRnJhbmsgUm93YW5kIDxmcm93YW5k Lmxpc3RAZ21haWwuY29tPiB3cm90ZToKPj4gT24gMy8yLzIzIDEzOjQ3LCBHZWVydCBVeXR0ZXJo b2V2ZW4gd3JvdGU6Cj4+PiBPbiBUaHUsIE1hciAyLCAyMDIzIGF0IDg6MjjigK9QTSBTdGVwaGVu IEJveWQgPHNib3lkQGtlcm5lbC5vcmc+IHdyb3RlOgo+Pj4+IFF1b3RpbmcgUm9iIEhlcnJpbmcg KDIwMjMtMDMtMDIgMDk6MzI6MDkpCj4+Pj4+IE9uIFRodSwgTWFyIDIsIDIwMjMgYXQgMjoxNOKA r0FNIERhdmlkIEdvdyA8ZGF2aWRnb3dAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4+Pj4+PiBPbiBUaHUs IDIgTWFyIDIwMjMgYXQgMDk6MzgsIFN0ZXBoZW4gQm95ZCA8c2JveWRAa2VybmVsLm9yZz4gd3Jv dGU6Cj4+Pj4+Pj4gVGhpcyBwYXRjaCBzZXJpZXMgYWRkcyB1bml0IHRlc3RzIGZvciB0aGUgY2xr IGZpeGVkIHJhdGUgYmFzaWMgdHlwZSBhbmQKPj4+Pj4+PiB0aGUgY2xrIHJlZ2lzdHJhdGlvbiBm dW5jdGlvbnMgdGhhdCB1c2Ugc3RydWN0IGNsa19wYXJlbnRfZGF0YS4gVG8gZ2V0Cj4+Pj4+Pj4g dGhlcmUsIHdlIGFkZCBzdXBwb3J0IGZvciBsb2FkaW5nIGEgRFRCIGludG8gdGhlIFVNTCBrZXJu ZWwgdGhhdCdzCj4+Pj4+Pj4gcnVubmluZyB0aGUgdW5pdCB0ZXN0cyBhbG9uZyB3aXRoIHByb2Jp bmcgcGxhdGZvcm0gZHJpdmVycyB0byBiaW5kIHRvCj4+Pj4+Pj4gZGV2aWNlIG5vZGVzIHNwZWNp ZmllZCBpbiBEVC4KPj4+Pj4+Pgo+Pj4+Pj4+IFdpdGggdGhpcyBzZXJpZXMsIHdlJ3JlIGFibGUg dG8gZXhlcmNpc2Ugc29tZSBvZiB0aGUgY29kZSBpbiB0aGUgY29tbW9uCj4+Pj4+Pj4gY2xrIGZy YW1ld29yayB0aGF0IHVzZXMgZGV2aWNldHJlZSBsb29rdXBzIHRvIGZpbmQgcGFyZW50cyBhbmQg dGhlIGZpeGVkCj4+Pj4+Pj4gcmF0ZSBjbGsgY29kZSB0aGF0IHNjYW5zIGRldmljZXRyZWUgZGly ZWN0bHkgYW5kIGNyZWF0ZXMgY2xrcy4gUGxlYXNlCj4+Pj4+Pj4gcmV2aWV3Lgo+Pj4+Pj4+Cj4+ Pj4+Pgo+Pj4+Pj4gVGhhbmtzIFN0ZXBoZW4gLS0gdGhpcyBpcyByZWFsbHkgbmVhdCEKPj4+Pj4+ Cj4+Pj4+PiBUaGlzIHdvcmtzIHdlbGwgaGVyZSwgYW5kIEkgbG92ZSBhbGwgb2YgdGhlIHRlc3Rz IGZvciB0aGUKPj4+Pj4+IEtVbml0L2RldmljZS10cmVlIGludGVncmF0aW9uIGFzIHdlbGwuCj4+ Pj4+Pgo+Pj4+Pj4gSSdtIHN0aWxsIGxvb2tpbmcgdGhyb3VnaCB0aGUgZGV0YWlscyBvZiBpdCAo YWxhcywgSSd2ZSBtb3N0bHkgbGl2ZWQKPj4+Pj4+IGluIHg4Ni1sYW5kLCBzbyBteSBkZXZpY2Ut dHJlZSBrbm93bGVkZ2UgaXMsIHVoLCBzcG90dHkgdG8gc2F5IHRoZQo+Pj4+Pj4gbGVhc3QpLCBi dXQgYXBhcnQgZnJvbSBwb3NzaWJseSByZW5hbWluZyBzb21lIHRoaW5ncyBvciBzaW1pbGFybHkK Pj4+Pj4+IG1pbm9yIHR3ZWFrcywgSSd2ZSBub3QgZ290IGFueSByZWFsIHN1Z2dlc3Rpb25zIHRo dXMgZmFyLgo+Pj4+Pj4KPj4+Pj4+IEkgZG8gd29uZGVyIHdoZXRoZXIgd2UnbGwgd2FudCwgb24g dGhlIEtVbml0IHNpZGUsIHRvIGhhdmUgc29tZSB3YXkgb2YKPj4+Pj4+IHN1cHBvcnRpbmcgS1Vu aXQgZGV2aWNlIHRyZWVzIG9uIG5vbi1VTUwgYXJjaGl0ZWNjdHVyZXMgKGUuZy4sIGlmIHdlCj4+ Pj4+PiBuZWVkIHRvIHRlc3Qgc29tZXRoaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgb3Igb24g YSBiaWctZW5kaWFuCj4+Pj4+PiBwbGF0Zm9ybSwgZXRjKSwgYnV0IEkgdGhpbmsgdGhhdCdzIGEg cXVlc3Rpb24gZm9yIHRoZSBmdXR1cmUsIHJhdGhlcgo+Pj4+Pj4gdGhhbiBzb21ldGhpbmcgdGhh dCBhZmZlY3RzIHRoaXMgc2VyaWVzLgo+Pj4+Pgo+Pj4+PiBJJ2xsIHNheSB0aGF0J3MgYSByZXF1 aXJlbWVudC4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3RydWN0dXJlIHRoZQo+Pj4+PiB0ZXN0cyB0 byBub3QgaW50ZXJmZXJlIHdpdGggdGhlIHJ1bm5pbmcgc3lzdGVtJ3MgRFQuIFRoZSBEVCB1bml0 dGVzdAo+Pj4+PiBkb2VzIHRoYXQuCj4+Pj4KPj4+PiBUaGF0IGNvdWxkIGJlIGFub3RoZXIgY2hv aWNlIGluIHRoZSB1bml0IHRlc3QgY2hvaWNlIG1lbnUuCj4+Pj4gQ09ORklHX09GX0tVTklUX05P VF9VTUwgdGhhdCBpbmplY3RzIHNvbWUgYnVpbHQtaW4gRFRCIG92ZXJsYXkgb24gYW4KPj4+PiBh cmNoaXRlY3R1cmUgdGhhdCB3YW50cyB0byBydW4gdGVzdHMuCj4+Pgo+Pj4gQXMgbG9uZyBhcyB5 b3UgdXNlIGNvbXBhdGlibGUgdmFsdWVzIHRoYXQgZG9uJ3QgZXhpc3QgZWxzZXdoZXJlLAo+Pj4g YW5kIGRvbid0IG92ZXJ3cml0ZSBhbnl0aGluZywgeW91IGNhbiBsb2FkIHlvdXIga3VuaXQgdGVz dCBvdmVybGF5cwo+Pj4gb24gYW55IHJ1bm5pbmcgc3lzdGVtIHRoYXQgaGFzIERUIHN1cHBvcnQu Cj4+Pgo+Pj4+PiBBcyBhIHNpZGUgdG9waWMsIElzIGFueW9uZSBsb29raW5nIGF0IGdldHRpbmcg VU1MIHRvIHdvcmsgb24gYXJtNjQ/Cj4+Pj4+IEl0J3Mgc3VycHJpc2luZyBob3cgbXVjaCB4ODYg c3R1ZmYgdGhlcmUgaXMgd2hpY2ggaXMgSSBndWVzcyBvbmUKPj4+Pj4gcmVhc29uIGl0IGhhc24n dCBoYXBwZW5lZC4KPj4+Pgo+Pj4+IEkndmUgbm8gaWRlYSBidXQgaXQgd291bGQgYmUgbmljZSBp bmRlZWQuCj4+Pgo+Pj4gSSBiZWxpZXZlIHRoYXQncyBub24tdHJpdmlhbC4gQXQgbGVhc3QgZm9y IGFybTMyIChJIGRpZG4ndCBoYXZlIGFueSBhcm02NAo+Pj4gc3lzdGVtcyBsYXN0IHRpbWUgSSBh c2tlZCB0aGUgZXhwZXJ0cykuCj4+Pgo+Pj4+Pj4gU2ltaWxhcmx5LCBJIHdvbmRlciBpZiB0aGVy ZSdzIHNvbWV0aGluZyB3ZSBjb3VsZCBkbyB3aXRoIGRldmljZSB0cmVlCj4+Pj4+PiBvdmVybGF5 cywgaW4gb3JkZXIgdG8gbWFrZSBpdCBwb3NzaWJsZSBmb3IgdGVzdHMgdG8gc3dhcCBub2RlcyBp biBhbmQKPj4+Pj4+IG91dCBmb3IgdGVzdGluZy4KPj4+Pj4KPj4+Pj4gWWVzLCB0aGF0J3MgaG93 IHRoZSBEVCB1bml0dGVzdCB3b3Jrcy4gQnV0IGl0IGlzIHByZXR0eSBtdWNoIG9uZSBiaWcKPj4+ Pj4gb3ZlcmxheSAoaWdub3JpbmcgdGhlIG92ZXJsYXkgdGVzdHMpLiBJdCBjb3VsZCBwcm9iYWJs eSBiZSBtb3JlCj4+Pj4+IG1vZHVsYXIgd2hlcmUgaXQgaXMgYXBwbHkgb3ZlcmxheSwgdGVzdCwg cmVtb3ZlIG92ZXJsYXksIHJlcGVhdC4KPj4+Pgo+Pj4+IEkgZGlkbid0IHdhbnQgdG8gcmVseSBv biB0aGUgb3ZlcmxheSBjb2RlIHRvIGluamVjdCBEVCBub2Rlcy4gSGF2aW5nCj4+Pj4gdGVzdHMg d3JpdHRlbiBmb3IgdGhlIGZha2UgS1VuaXQgbWFjaGluZSBpcyBzaW1wbGUuIEl0IGNsb3NlbHkg bWF0Y2hlcwo+Pj4+IGhvdyBjbGsgY29kZSBwcm9iZXMgdGhlIERUQiBhbmQgaG93IG5vZGVzIGFy ZSBjcmVhdGVkIGFuZCBwb3B1bGF0ZWQgb24KPj4+PiB0aGUgcGxhdGZvcm0gYnVzIGFzIGRldmlj ZXMuIENMS19PRl9ERUNMQVJFKCkgd291bGQgbmVlZCB0aGUgb3ZlcmxheSB0bwo+Pj4+IGJlIGFw cGxpZWQgZWFybHkgdG9vLCB3aGljaCBkb2Vzbid0IGhhcHBlbiBvdGhlcndpc2UgYXMgZmFyIGFz IEkga25vdy4KPj4+Cj4+PiBEb24ndCBhbGwgZ2VuZXJpYyBjbG9jayBkcml2ZXJzIGFsc28gY3Jl YXRlIGEgcGxhdGZvcm0gZHJpdmVyPwo+Pj4gQXQgbGVhc3QgZHJpdmVycy9jbGsvY2xrLWZpeGVk LWZhY3Rvci5jIGRvZXMuCj4+Pgo+Pj4+IEJ1dCBwZXJoYXBzIHRoaXMgZGVzaWduIGlzIHRvbyBt dWNoIG9mIGFuIGVuZC10by1lbmQgdGVzdCBhbmQgbm90IGEgdW5pdAo+Pj4+IHRlc3Q/IEluIHRo ZSBzcGlyaXQgb2YgdW5pdCB0ZXN0aW5nIHdlIHNob3VsZG4ndCBjYXJlIGFib3V0IGhvdyB0aGUg bm9kZQo+Pj4+IGlzIGFkZGVkIHRvIHRoZSBsaXZlIGRldmljZXRyZWUsIGp1c3QgdGhhdCB0aGVy ZSBpcyBhIGRldmljZXRyZWUgYXQgYWxsLgo+Pj4+Cj4+Pj4gU3VwcG9ydGluZyBvdmVybGF5cyB0 byBtb3JlIGVhc2lseSB0ZXN0IGNvbWJpbmF0aW9ucyBzb3VuZHMgbGlrZSBhIGdvb2QKPj4+PiBp ZGVhLiBQcm9iYWJseSBzb21lIGt1bml0XyooKSBwcmVmaXhlZCBmdW5jdGlvbnMgY291bGQgYmUg dXNlZCB0bwo+Pj4+IGFwcGx5IGEgdGVzdCBtYW5hZ2VkIG92ZXJsYXkgYW5kIGF1dG9tYXRpY2Fs bHkgcmVtb3ZlIGl0IHdoZW4gdGhlIHRlc3QKPj4+PiBpcyBvdmVyIHdvdWxkIHdvcmsuIFRoZSBj bGsgcmVnaXN0cmF0aW9uIHRlc3RzIGNvdWxkIHVzZSB0aGlzIEFQSSB0bwo+Pj4+IGluamVjdCBh biBvdmVybGF5IGFuZCB0aGVuIG1hbnVhbGx5IGNhbGwgdGhlIG9mX3BsYXRmb3JtX3BvcHVsYXRl KCkKPj4+PiBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIHBsYXRmb3JtIGRldmljZShzKS4gVGhlIG92 ZXJsYXkgY291bGQgYmUgYnVpbHQgaW4KPj4+PiBkcml2ZXJzL2Nsay8gdG9vIGFuZCB0aGVuIHBy b2JhYmx5IHNvbWUgbWFjcm9pc2ggZnVuY3Rpb24gY2FuIGZpbmQgdGhlCj4+Pj4gYmxvYiBhbmQg YXBwbHkgaXQuCj4+Pgo+Pj4gTm8gbmVlZCB0byBtYW51YWxseSBjYWxsIG9mX3BsYXRmb3JtX3Bv cHVsYXRlKCkgdG8gY3JlYXRlIHRoZQo+Pj4gcGxhdGZvcm0gZGV2aWNlcy4gVGhhdCBpcyB0YWtl biBjYXJlIG9mIGF1dG9tYXRpY2FsbHkgd2hlbiBhcHBseWluZwo+Pj4gYW4gb3ZlcmxheS4KPj4+ Cj4+Pj4gSXMgdGhlcmUgc29tZSB3YXkgdG8gZGVsZXRlIHRoZSBwbGF0Zm9ybSBkZXZpY2VzIHRo YXQgd2UgcG9wdWxhdGUgZnJvbQo+Pj4+IHRoZSBvdmVybGF5PyBJJ2QgbGlrZSB0aGUgdGVzdHMg dG8gYmUgaGVybWV0aWMuCj4+Cj4+PiBSZW1vdmluZyB0aGUgb3ZlcmxheSB3aWxsIGRlbGV0ZSB0 aGUgcGxhdGZvcm0gZGV2aWNlcy4KPj4KPj4gSSBfdGhpbmtfIHRoYXQgaXMgaW5jb3JyZWN0LiAg RG8geW91IGhhdmUgYSBwb2ludGVyIHRvIHRoZSBvdmVybGF5IGNvZGUgdGhhdAo+PiBkZWxldGVz IHRoZSBkZXZpY2U/ICAoSWYgSSByZW1lbWJlciBjb3JyZWN0bHksIHRoZSBvdmVybGF5IHJlbW92 ZSBjb2RlIGRvZXMgbm90Cj4+IGV2ZW4gY2hlY2sgd2hldGhlciB0aGUgZGV2aWNlIGV4aXN0cyBh bmQgd2hldGhlciBhIGRyaXZlciBpcyBib3VuZCB0byBpdCAtLSBidXQKPj4gdGhpcyBpcyBvbiBt eSB0b2RvIGxpc3QgdG8gbG9vayBpbnRvLikKPiAKPiBodHRwczovL2VsaXhpci5ib290bGluLmNv bS9saW51eC9sYXRlc3Qvc291cmNlL2RyaXZlcnMvb2YvcGxhdGZvcm0uYyNMNzY5CgpUaGFua3Mh ICBUaGF0IGlzIHByZWNpc2VseSB3aGF0IEkgZmFpbGVkIHRvIHJlbWVtYmVyLgoKLUZyYW5rCgo+ IAo+Pj4gQWxsIG9mIHRoYXQgd29ya3MgaWYgeW91IGhhdmUgeW91ciBvd24gY29kZSB0byBhcHBs eSBhIERUIG92ZXJsYXkuCj4+PiBUaGUgcmVjZW50IGZ3X2RldmxpbmtzIHBhdGNoZXMgZGlkIGNh dXNlIHNvbWUgcmVncmVzc2lvbnMsIGNmci4KPj4+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2Fs bC9DQU11SE1kWEVuU0Q0clJKLW85MHg0T3ByVWFjTl9ySmd5bzh4Nj05RjlyWistS3pqT2dAbWFp bC5nbWFpbC5jb20KPiAKPiBHcntvZXRqZSxlZXRpbmd9cywKPiAKPiAgICAgICAgICAgICAgICAg ICAgICAgICBHZWVydAo+IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmxpbnV4LXVtIG1haWxpbmcgbGlzdApsaW51eC11bUBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtdW0K