From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3D1FD2108 for ; Wed, 2 Nov 2022 13:12:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 869CDC433C1; Wed, 2 Nov 2022 13:12:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1667394778; bh=JuzdzoZQv7vx3g4XLThOhs8ysZfBBda2DUoWLO5jrQw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ShqS8vce3zJSYQHz986Lcb8b1A4C+a5Cfdtrqa+Cfg+H4aDm6iqVp2CEkhLwtUCgZ EsvnoxPMYkzOb5qIUHwG8gPu5V5lLa09QbqoRpNZsZ+svDiuWeAfAfSjf9/CARFGFA NZ38eYXCEhAh/IZPoS8araweWXwQK2I9jsFdFSXlFhgoLD8yAU7E53f91e0yyZ+yNN Cl08KmvPM2SkQIxLcVV6GHWgyOK/nEfLbImosWEHC6gASiZZ25pldDlA1MahVgU8DS d43veR4iZCA2UAhhztusfvzh4he2WZnYNnHIaJHBY9mdS6u3Zn3xH9+q+eaif9+sYb q2cLLYL3knpGA== Date: Wed, 2 Nov 2022 13:12:53 +0000 From: Lee Jones To: "Russell King (Oracle)" Cc: Hector Martin , Arnd Bergmann , Linus Walleij , Alyssa Rosenzweig , asahi@lists.linux.dev, Bartosz Golaszewski , linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, Sven Peter Subject: Re: [PATCH 4/6] platform/apple: Add new Apple Mac SMC driver Message-ID: References: <82088b05-2a0d-69cc-ba2c-d61c74c9d855@marcan.st> <4faa5e4c-b43b-12e4-2259-c2595bd55b97@marcan.st> Precedence: bulk X-Mailing-List: asahi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Mon, 31 Oct 2022, Russell King (Oracle) wrote: > On Mon, Oct 31, 2022 at 05:23:12PM +0000, Lee Jones wrote: > > I see that you pass a bunch of function pointers from the RTKit > > implementation into the SMC. Which in turn offers an exported > > (apple_smc_*) API. In most of the frameworks I have knowledge of, the > > core provides the Ops structure and it's populated by the client > > device. > > Sorry Lee, I don't get this point. From what I can see, the > apple_smc_backend_ops struct is owned by the core System Management > Controller code, and RTKit backend fills in an instance of these ops > and provides that to the core SMC code. The RTKit backend is just > how we walk to the System Management Controller. It is not a client. > > I don't see this being any different to struct file_operations, > seq_operations, vm_operations_struct, block_Device_operations, > and so on and so forth. > > Having read your response, I wonder if you're confused about what the > smc_core and smc_rtkit code actually are - because you seem to think > that smc_rtkit is a _client_ of the smc_core code. It isn't, as I > explain above, it's how we talk to the System Management Controller, > and smc_core provides a uniform interface to the client drivers such > as GPIO, RTC etc. > > Essentially, we have: > > Hardware Backend Core Clients > .---- RTC > / .--- GPIO > Mailbox -- RTKit -- SMC Core -- MFD -- HID > \ `--- Power > `---- Reboot The issue I see with the current implementation is that, what you are calling the SMC Core here, is being viewed as the parent to all of these client (child / sub) devices. However, in reality, the SMC Core is little more than a function pointer shim / pass-through without it's own Device. In order for it to register the child-devices, it's effectively borrowing and branching off of the RTKit's Device, which from a Device Driver hierarchy stand-point feels odd. > RTKit is just _one_ possible backend, there are other backends that > can be used to interface to the underlying platform implementation to > talk to the SMC. Right, this is the tricky part. The way I see it, the best route would be to make the RTKit, which is the real Linux Device (with real resources), the direct parent (no sharing) and move it to MFD. However, the looming question then becomes, "what happens when the RTKit is removed and swapped out for something else?", does that mean anything you swap it out with will need to become an MFD also? How would the children get registered otherwise? The TL;DR is, I can see why it's been architected this way, but it doesn't really fit in with the Device Driver norms, which makes it quite difficult to shoehorn in without the issues (using MFD API outside of MFD and borrowing Devices) we're encountering here. > > I'm sure having that clear in my head will go some ways to put me in a > > position to advise you further. > > > > > > Request the device-wide memory (and other shared resources) here. > > > > > > That's what smc_rtkit.c does, but you seem not to want that code in mfd. > > > > I'm not sure I explicitly said that. > > On Fri, Sep 09, 2022 at 08:50:07AM +0100, Lee Jones wrote: > | If we were to design and build it up again from scratch, I'd suggest > | that the MFD part would be the core-driver / entry-point. That driver > | should request and initialise shared resources and register the other > | devices, which is essentially the MFD's mantra. > > This is exactly what smc_rtkit is doing, which as I've mentioned above > is the backend provider of access to the System Management Controller. > Backend-independent access to the System Management Controller is done > via smc_core which - at least to me - seems to be entirely correct, > and it seems entirely appropriate that this should be responsible for > creating the individual clients that make use of the System Management > Controller's facilities such as GPIO, RTC etc. Making a shim-layer without a real Device become a parent to sub-devices is the part I'm finding most difficult to swallow. > > "call into" was not a good choice of words here. Simply, let the > > child devices go about their business and do whatever they were > > designed to do. > > ... by calling into the code which provides them with access to the > System Management Controller - that being through smc_core and > ultimately which ever backend is used to finally communicate with the > System Management Controller. Right. No problem with that part. Mailbox, I2C, SPI, MMIO, USB, makes no difference to me. > At this point, I'm wondering whether you're somehow expecting client > devices to map memory and read/write some registers. This is not that > kind of setup. The address space is entirely virtual, through a set > of four byte keys that indicate to the System Management Controller > which fine-grained resource one wants to access. That being an > individual GPIO line or some other parameter of the system. No, not at all. A public API mapping to whatever the H/W communication strategy (I2C, SPI, ...) is a perfectly viable implementation. > The memory that you see smc_rtkit claim is for passing messages, none > of the clients have a right to directly access that memory - indeed, > doing so would be a total layering violation and really bad bit of > design. This is not a concept I have an issue understanding. > So, I hope my response helps fill in some of the detail about what > this code is doing, how it works and how it's been designed. I have a strong grasp of the concept presented. :) If we can find an acceptable way to create a proper and correct device hierarchy, I think we're in a good place. My present suggestion is to make the RTKit the MFD and spawn the child devices directly from it. -- Lee Jones [李琼斯] 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 1269AC43219 for ; Wed, 2 Nov 2022 13:15:46 +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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vsBAL1no2zmd1Qo/5JzoI3NOyVS7jlr2wApXEqjdsd0=; b=0TK/anEPpFcaZn oymuUiYDWelNrl44ibNRZ5imzyztRQt8lmgViJDgIzAfbxXiPuTMBmwiriZgS4Tve0IlC/0MfJjKC uXmtwN5umC+Eauy1RWJvfEwvFqDBYujcgrFyeuQNkXgFCWJaKjT3UJJUq294r4CPLebWYPqre17n8 NqtMEzGgBSu447FLQy7n1pMQCc80eceYkbbukx74GNeFNSGl98Cq8GyiTh7f3cLTmcD5VD+xwmRYq hHWDiT3Un5MZ3viCQ6weflNTg+lBzBvwYhqEnGLqPISwRn8CA0X8sA3Fz4MfG2uJLAaSaOVPYuuXJ /QVMFNyM3yPZYhNIG1og==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oqDZe-00BByZ-NU; Wed, 02 Nov 2022 13:14:31 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oqDYD-00BB9d-Qc for linux-arm-kernel@lists.infradead.org; Wed, 02 Nov 2022 13:13:03 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 3A2DFB822A6; Wed, 2 Nov 2022 13:13:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 869CDC433C1; Wed, 2 Nov 2022 13:12:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1667394778; bh=JuzdzoZQv7vx3g4XLThOhs8ysZfBBda2DUoWLO5jrQw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ShqS8vce3zJSYQHz986Lcb8b1A4C+a5Cfdtrqa+Cfg+H4aDm6iqVp2CEkhLwtUCgZ EsvnoxPMYkzOb5qIUHwG8gPu5V5lLa09QbqoRpNZsZ+svDiuWeAfAfSjf9/CARFGFA NZ38eYXCEhAh/IZPoS8araweWXwQK2I9jsFdFSXlFhgoLD8yAU7E53f91e0yyZ+yNN Cl08KmvPM2SkQIxLcVV6GHWgyOK/nEfLbImosWEHC6gASiZZ25pldDlA1MahVgU8DS d43veR4iZCA2UAhhztusfvzh4he2WZnYNnHIaJHBY9mdS6u3Zn3xH9+q+eaif9+sYb q2cLLYL3knpGA== Date: Wed, 2 Nov 2022 13:12:53 +0000 From: Lee Jones To: "Russell King (Oracle)" Cc: Hector Martin , Arnd Bergmann , Linus Walleij , Alyssa Rosenzweig , asahi@lists.linux.dev, Bartosz Golaszewski , linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, Sven Peter Subject: Re: [PATCH 4/6] platform/apple: Add new Apple Mac SMC driver Message-ID: References: <82088b05-2a0d-69cc-ba2c-d61c74c9d855@marcan.st> <4faa5e4c-b43b-12e4-2259-c2595bd55b97@marcan.st> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221102_061302_184268_8F627028 X-CRM114-Status: GOOD ( 48.92 ) 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 T24gTW9uLCAzMSBPY3QgMjAyMiwgUnVzc2VsbCBLaW5nIChPcmFjbGUpIHdyb3RlOgoKPiBPbiBN b24sIE9jdCAzMSwgMjAyMiBhdCAwNToyMzoxMlBNICswMDAwLCBMZWUgSm9uZXMgd3JvdGU6Cj4g PiBJIHNlZSB0aGF0IHlvdSBwYXNzIGEgYnVuY2ggb2YgZnVuY3Rpb24gcG9pbnRlcnMgZnJvbSB0 aGUgUlRLaXQKPiA+IGltcGxlbWVudGF0aW9uIGludG8gdGhlIFNNQy4gIFdoaWNoIGluIHR1cm4g b2ZmZXJzIGFuIGV4cG9ydGVkCj4gPiAoYXBwbGVfc21jXyopIEFQSS4gIEluIG1vc3Qgb2YgdGhl IGZyYW1ld29ya3MgSSBoYXZlIGtub3dsZWRnZSBvZiwgdGhlCj4gPiBjb3JlIHByb3ZpZGVzIHRo ZSBPcHMgc3RydWN0dXJlIGFuZCBpdCdzIHBvcHVsYXRlZCBieSB0aGUgY2xpZW50Cj4gPiBkZXZp Y2UuCj4gCj4gU29ycnkgTGVlLCBJIGRvbid0IGdldCB0aGlzIHBvaW50LiBGcm9tIHdoYXQgSSBj YW4gc2VlLCB0aGUKPiBhcHBsZV9zbWNfYmFja2VuZF9vcHMgc3RydWN0IGlzIG93bmVkIGJ5IHRo ZSBjb3JlIFN5c3RlbSBNYW5hZ2VtZW50Cj4gQ29udHJvbGxlciBjb2RlLCBhbmQgUlRLaXQgYmFj a2VuZCBmaWxscyBpbiBhbiBpbnN0YW5jZSBvZiB0aGVzZSBvcHMKPiBhbmQgcHJvdmlkZXMgdGhh dCB0byB0aGUgY29yZSBTTUMgY29kZS4gVGhlIFJUS2l0IGJhY2tlbmQgaXMganVzdAo+IGhvdyB3 ZSB3YWxrIHRvIHRoZSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyLiBJdCBpcyBub3QgYSBj bGllbnQuCj4gCj4gSSBkb24ndCBzZWUgdGhpcyBiZWluZyBhbnkgZGlmZmVyZW50IHRvIHN0cnVj dCBmaWxlX29wZXJhdGlvbnMsCj4gc2VxX29wZXJhdGlvbnMsIHZtX29wZXJhdGlvbnNfc3RydWN0 LCBibG9ja19EZXZpY2Vfb3BlcmF0aW9ucywKPiBhbmQgc28gb24gYW5kIHNvIGZvcnRoLgo+IAo+ IEhhdmluZyByZWFkIHlvdXIgcmVzcG9uc2UsIEkgd29uZGVyIGlmIHlvdSdyZSBjb25mdXNlZCBh Ym91dCB3aGF0IHRoZQo+IHNtY19jb3JlIGFuZCBzbWNfcnRraXQgY29kZSBhY3R1YWxseSBhcmUg LSBiZWNhdXNlIHlvdSBzZWVtIHRvIHRoaW5rCj4gdGhhdCBzbWNfcnRraXQgaXMgYSBfY2xpZW50 XyBvZiB0aGUgc21jX2NvcmUgY29kZS4gSXQgaXNuJ3QsIGFzIEkKPiBleHBsYWluIGFib3ZlLCBp dCdzIGhvdyB3ZSB0YWxrIHRvIHRoZSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyLAo+IGFu ZCBzbWNfY29yZSBwcm92aWRlcyBhIHVuaWZvcm0gaW50ZXJmYWNlIHRvIHRoZSBjbGllbnQgZHJp dmVycyBzdWNoCj4gYXMgR1BJTywgUlRDIGV0Yy4KPiAKPiBFc3NlbnRpYWxseSwgd2UgaGF2ZToK PiAKPiBIYXJkd2FyZSAgIEJhY2tlbmQgICAgQ29yZSAgICAgICAgICAgICBDbGllbnRzCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi0tLS0gUlRDCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvIC4tLS0gR1BJTwo+IE1haWxib3ggLS0gUlRLaXQgLS0gU01DIENv cmUgLS0gTUZEIC0tIEhJRAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCBgLS0t IFBvd2VyCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0tLS0gUmVib290CgpU aGUgaXNzdWUgSSBzZWUgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyB0aGF0LCB3 aGF0IHlvdSBhcmUKY2FsbGluZyB0aGUgU01DIENvcmUgaGVyZSwgaXMgYmVpbmcgdmlld2VkIGFz IHRoZSBwYXJlbnQgdG8gYWxsIG9mCnRoZXNlIGNsaWVudCAoY2hpbGQgLyBzdWIpIGRldmljZXMu ICBIb3dldmVyLCBpbiByZWFsaXR5LCB0aGUgU01DIENvcmUKaXMgbGl0dGxlIG1vcmUgdGhhbiBh IGZ1bmN0aW9uIHBvaW50ZXIgc2hpbSAvIHBhc3MtdGhyb3VnaCB3aXRob3V0Cml0J3Mgb3duIERl dmljZS4gIEluIG9yZGVyIGZvciBpdCB0byByZWdpc3RlciB0aGUgY2hpbGQtZGV2aWNlcywgaXQn cwplZmZlY3RpdmVseSBib3Jyb3dpbmcgYW5kIGJyYW5jaGluZyBvZmYgb2YgdGhlIFJUS2l0J3Mg RGV2aWNlLCB3aGljaApmcm9tIGEgRGV2aWNlIERyaXZlciBoaWVyYXJjaHkgc3RhbmQtcG9pbnQg ZmVlbHMgb2RkLgoKPiBSVEtpdCBpcyBqdXN0IF9vbmVfIHBvc3NpYmxlIGJhY2tlbmQsIHRoZXJl IGFyZSBvdGhlciBiYWNrZW5kcyB0aGF0Cj4gY2FuIGJlIHVzZWQgdG8gaW50ZXJmYWNlIHRvIHRo ZSB1bmRlcmx5aW5nIHBsYXRmb3JtIGltcGxlbWVudGF0aW9uIHRvCj4gdGFsayB0byB0aGUgU01D LgoKUmlnaHQsIHRoaXMgaXMgdGhlIHRyaWNreSBwYXJ0LiAgVGhlIHdheSBJIHNlZSBpdCwgdGhl IGJlc3Qgcm91dGUKd291bGQgYmUgdG8gbWFrZSB0aGUgUlRLaXQsIHdoaWNoIGlzIHRoZSByZWFs IExpbnV4IERldmljZSAod2l0aCByZWFsCnJlc291cmNlcyksIHRoZSBkaXJlY3QgcGFyZW50IChu byBzaGFyaW5nKSBhbmQgbW92ZSBpdCB0byBNRkQuCgpIb3dldmVyLCB0aGUgbG9vbWluZyBxdWVz dGlvbiB0aGVuIGJlY29tZXMsICJ3aGF0IGhhcHBlbnMgd2hlbiB0aGUKUlRLaXQgaXMgcmVtb3Zl ZCBhbmQgc3dhcHBlZCBvdXQgZm9yIHNvbWV0aGluZyBlbHNlPyIsIGRvZXMgdGhhdCBtZWFuCmFu eXRoaW5nIHlvdSBzd2FwIGl0IG91dCB3aXRoIHdpbGwgbmVlZCB0byBiZWNvbWUgYW4gTUZEIGFs c28/ICBIb3cKd291bGQgdGhlIGNoaWxkcmVuIGdldCByZWdpc3RlcmVkIG90aGVyd2lzZT8KClRo ZSBUTDtEUiBpcywgSSBjYW4gc2VlIHdoeSBpdCdzIGJlZW4gYXJjaGl0ZWN0ZWQgdGhpcyB3YXks IGJ1dCBpdApkb2Vzbid0IHJlYWxseSBmaXQgaW4gd2l0aCB0aGUgRGV2aWNlIERyaXZlciBub3Jt cywgd2hpY2ggbWFrZXMgaXQKcXVpdGUgZGlmZmljdWx0IHRvIHNob2Vob3JuIGluIHdpdGhvdXQg dGhlIGlzc3VlcyAodXNpbmcgTUZEIEFQSQpvdXRzaWRlIG9mIE1GRCBhbmQgYm9ycm93aW5nIERl dmljZXMpIHdlJ3JlIGVuY291bnRlcmluZyBoZXJlLgoKPiA+IEknbSBzdXJlIGhhdmluZyB0aGF0 IGNsZWFyIGluIG15IGhlYWQgd2lsbCBnbyBzb21lIHdheXMgdG8gcHV0IG1lIGluIGEKPiA+IHBv c2l0aW9uIHRvIGFkdmlzZSB5b3UgZnVydGhlci4KPiA+IAo+ID4gPiA+IFJlcXVlc3QgdGhlIGRl dmljZS13aWRlIG1lbW9yeSAoYW5kIG90aGVyIHNoYXJlZCByZXNvdXJjZXMpIGhlcmUuCj4gPiA+ IAo+ID4gPiBUaGF0J3Mgd2hhdCBzbWNfcnRraXQuYyBkb2VzLCBidXQgeW91IHNlZW0gbm90IHRv IHdhbnQgdGhhdCBjb2RlIGluIG1mZC4KPiA+IAo+ID4gSSdtIG5vdCBzdXJlIEkgZXhwbGljaXRs eSBzYWlkIHRoYXQuCj4gCj4gT24gRnJpLCBTZXAgMDksIDIwMjIgYXQgMDg6NTA6MDdBTSArMDEw MCwgTGVlIEpvbmVzIHdyb3RlOgo+IHwgSWYgd2Ugd2VyZSB0byBkZXNpZ24gYW5kIGJ1aWxkIGl0 IHVwIGFnYWluIGZyb20gc2NyYXRjaCwgSSdkIHN1Z2dlc3QKPiB8IHRoYXQgdGhlIE1GRCBwYXJ0 IHdvdWxkIGJlIHRoZSBjb3JlLWRyaXZlciAvIGVudHJ5LXBvaW50LiAgVGhhdCBkcml2ZXIKPiB8 IHNob3VsZCByZXF1ZXN0IGFuZCBpbml0aWFsaXNlIHNoYXJlZCByZXNvdXJjZXMgYW5kIHJlZ2lz dGVyIHRoZSBvdGhlcgo+IHwgZGV2aWNlcywgd2hpY2ggaXMgZXNzZW50aWFsbHkgdGhlIE1GRCdz IG1hbnRyYS4KPiAKPiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBzbWNfcnRraXQgaXMgZG9pbmcsIHdo aWNoIGFzIEkndmUgbWVudGlvbmVkIGFib3ZlCj4gaXMgdGhlIGJhY2tlbmQgcHJvdmlkZXIgb2Yg YWNjZXNzIHRvIHRoZSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyLgo+IEJhY2tlbmQtaW5k ZXBlbmRlbnQgYWNjZXNzIHRvIHRoZSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIGlzIGRv bmUKPiB2aWEgc21jX2NvcmUgd2hpY2ggLSBhdCBsZWFzdCB0byBtZSAtIHNlZW1zIHRvIGJlIGVu dGlyZWx5IGNvcnJlY3QsCj4gYW5kIGl0IHNlZW1zIGVudGlyZWx5IGFwcHJvcHJpYXRlIHRoYXQg dGhpcyBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yCj4gY3JlYXRpbmcgdGhlIGluZGl2aWR1YWwg Y2xpZW50cyB0aGF0IG1ha2UgdXNlIG9mIHRoZSBTeXN0ZW0gTWFuYWdlbWVudAo+IENvbnRyb2xs ZXIncyBmYWNpbGl0aWVzIHN1Y2ggYXMgR1BJTywgUlRDIGV0Yy4KCk1ha2luZyBhIHNoaW0tbGF5 ZXIgd2l0aG91dCBhIHJlYWwgRGV2aWNlIGJlY29tZSBhIHBhcmVudCB0bwpzdWItZGV2aWNlcyBp cyB0aGUgcGFydCBJJ20gZmluZGluZyBtb3N0IGRpZmZpY3VsdCB0byBzd2FsbG93LgoKPiA+ICJj YWxsIGludG8iIHdhcyBub3QgYSBnb29kIGNob2ljZSBvZiB3b3JkcyBoZXJlLiAgU2ltcGx5LCBs ZXQgdGhlCj4gPiBjaGlsZCBkZXZpY2VzIGdvIGFib3V0IHRoZWlyIGJ1c2luZXNzIGFuZCBkbyB3 aGF0ZXZlciB0aGV5IHdlcmUKPiA+IGRlc2lnbmVkIHRvIGRvLgo+IAo+IC4uLiBieSBjYWxsaW5n IGludG8gdGhlIGNvZGUgd2hpY2ggcHJvdmlkZXMgdGhlbSB3aXRoIGFjY2VzcyB0byB0aGUKPiBT eXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIC0gdGhhdCBiZWluZyB0aHJvdWdoIHNtY19jb3Jl IGFuZAo+IHVsdGltYXRlbHkgd2hpY2ggZXZlciBiYWNrZW5kIGlzIHVzZWQgdG8gZmluYWxseSBj b21tdW5pY2F0ZSB3aXRoIHRoZQo+IFN5c3RlbSBNYW5hZ2VtZW50IENvbnRyb2xsZXIuCgpSaWdo dC4gIE5vIHByb2JsZW0gd2l0aCB0aGF0IHBhcnQuCgpNYWlsYm94LCBJMkMsIFNQSSwgTU1JTywg VVNCLCBtYWtlcyBubyBkaWZmZXJlbmNlIHRvIG1lLgoKPiBBdCB0aGlzIHBvaW50LCBJJ20gd29u ZGVyaW5nIHdoZXRoZXIgeW91J3JlIHNvbWVob3cgZXhwZWN0aW5nIGNsaWVudAo+IGRldmljZXMg dG8gbWFwIG1lbW9yeSBhbmQgcmVhZC93cml0ZSBzb21lIHJlZ2lzdGVycy4gVGhpcyBpcyBub3Qg dGhhdAo+IGtpbmQgb2Ygc2V0dXAuIFRoZSBhZGRyZXNzIHNwYWNlIGlzIGVudGlyZWx5IHZpcnR1 YWwsIHRocm91Z2ggYSBzZXQKPiBvZiBmb3VyIGJ5dGUga2V5cyB0aGF0IGluZGljYXRlIHRvIHRo ZSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyCj4gd2hpY2ggZmluZS1ncmFpbmVkIHJlc291 cmNlIG9uZSB3YW50cyB0byBhY2Nlc3MuIFRoYXQgYmVpbmcgYW4KPiBpbmRpdmlkdWFsIEdQSU8g bGluZSBvciBzb21lIG90aGVyIHBhcmFtZXRlciBvZiB0aGUgc3lzdGVtLgoKTm8sIG5vdCBhdCBh bGwuICBBIHB1YmxpYyBBUEkgbWFwcGluZyB0byB3aGF0ZXZlciB0aGUgSC9XIGNvbW11bmljYXRp b24Kc3RyYXRlZ3kgKEkyQywgU1BJLCAuLi4pIGlzIGEgcGVyZmVjdGx5IHZpYWJsZSBpbXBsZW1l bnRhdGlvbi4KCj4gVGhlIG1lbW9yeSB0aGF0IHlvdSBzZWUgc21jX3J0a2l0IGNsYWltIGlzIGZv ciBwYXNzaW5nIG1lc3NhZ2VzLCBub25lCj4gb2YgdGhlIGNsaWVudHMgaGF2ZSBhIHJpZ2h0IHRv IGRpcmVjdGx5IGFjY2VzcyB0aGF0IG1lbW9yeSAtIGluZGVlZCwKPiBkb2luZyBzbyB3b3VsZCBi ZSBhIHRvdGFsIGxheWVyaW5nIHZpb2xhdGlvbiBhbmQgcmVhbGx5IGJhZCBiaXQgb2YKPiBkZXNp Z24uCgpUaGlzIGlzIG5vdCBhIGNvbmNlcHQgSSBoYXZlIGFuIGlzc3VlIHVuZGVyc3RhbmRpbmcu Cgo+IFNvLCBJIGhvcGUgbXkgcmVzcG9uc2UgaGVscHMgZmlsbCBpbiBzb21lIG9mIHRoZSBkZXRh aWwgYWJvdXQgd2hhdAo+IHRoaXMgY29kZSBpcyBkb2luZywgaG93IGl0IHdvcmtzIGFuZCBob3cg aXQncyBiZWVuIGRlc2lnbmVkLgoKSSBoYXZlIGEgc3Ryb25nIGdyYXNwIG9mIHRoZSBjb25jZXB0 IHByZXNlbnRlZC4gOikKCklmIHdlIGNhbiBmaW5kIGFuIGFjY2VwdGFibGUgd2F5IHRvIGNyZWF0 ZSBhIHByb3BlciBhbmQgY29ycmVjdCBkZXZpY2UKaGllcmFyY2h5LCBJIHRoaW5rIHdlJ3JlIGlu IGEgZ29vZCBwbGFjZS4gIE15IHByZXNlbnQgc3VnZ2VzdGlvbiBpcyB0bwptYWtlIHRoZSBSVEtp dCB0aGUgTUZEIGFuZCBzcGF3biB0aGUgY2hpbGQgZGV2aWNlcyBkaXJlY3RseSBmcm9tIGl0LgoK LS0gCkxlZSBKb25lcyBb5p2O55C85pavXQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=