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=-4.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED 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 BFCFEC43387 for ; Tue, 18 Dec 2018 14:14:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8EC10217D7 for ; Tue, 18 Dec 2018 14:14:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726931AbeLROOR convert rfc822-to-8bit (ORCPT ); Tue, 18 Dec 2018 09:14:17 -0500 Received: from mail.bootlin.com ([62.4.15.54]:59842 "EHLO mail.bootlin.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726426AbeLROOQ (ORCPT ); Tue, 18 Dec 2018 09:14:16 -0500 Received: by mail.bootlin.com (Postfix, from userid 110) id DB5B4207D9; Tue, 18 Dec 2018 15:14:12 +0100 (CET) Received: from xps13 (aaubervilliers-681-1-38-38.w90-88.abo.wanadoo.fr [90.88.157.38]) by mail.bootlin.com (Postfix) with ESMTPSA id 5DBFD2072C; Tue, 18 Dec 2018 15:14:12 +0100 (CET) Date: Tue, 18 Dec 2018 15:14:12 +0100 From: Miquel Raynal To: "Rafael J. Wysocki" Cc: Lorenzo Pieralisi , Stephen Boyd , sudeep.holla@arm.com, Gregory Clement , Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Thomas Petazzoni , Bjorn Helgaas , devicetree@vger.kernel.org, Rob Herring , Mark Rutland , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Antoine Tenart , Maxime Chevallier , Nadav Haklai Subject: Re: [PATCH 05/12] PCI: aardvark: add suspend to RAM support Message-ID: <20181218151412.4341718d@xps13> In-Reply-To: <28619896.152T6JUIHS@aspire.rjw.lan> References: <20181123141831.8214-1-miquel.raynal@bootlin.com> <61805564.abKDZ2rVK7@aspire.rjw.lan> <20181217155426.71058a03@xps13> <28619896.152T6JUIHS@aspire.rjw.lan> Organization: Bootlin X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Hi Rafael, Stephen & Bjorn, Glad to see you all in this thread that talks about: * adding S2RAM support to a PCIe controller driver * by taking into account that the PCI clock must be {enabled before,disabled after} the PCI IP itself * and that it requires some tweaking in the clock driver to promote the suspend/resume() callbacks to the NOIRQ phase (reference there [1]). Stephen, Rafael answered here to your remark (in thread [1]) about the NOIRQ promotion (see below). Bjorn, there is a question for you below about the need for a PCI controller driver to suspend/resume in the NOIRQ phase. Rafael, thanks for the explanation of what the PM core sequences really are, I would need you to confirm my approach that promotes the clock suspend/resume() callbacks to the NOIRQ phase, or otherwise give me pointers to an alternate solution (also below). "Rafael J. Wysocki" wrote on Tue, 18 Dec 2018 11:54:43 +0100: > On Monday, December 17, 2018 3:54:26 PM CET Miquel Raynal wrote: > > Hi Rafael, > > > > "Rafael J. Wysocki" wrote on Thu, 13 Dec 2018 > > 22:50:51 +0100: > > > > > On Thursday, December 13, 2018 3:30:00 PM CET Miquel Raynal wrote: > > > > Hi Lorenzo, > > > > > > > > > > If that's really the case, then I can see how one device and it's > > > > > > children are suspended and the irq for it is disabled but the providing > > > > > > devices (clk, regulator, bus controller, etc.) are still fully active > > > > > > and not suspended but in fact completely usable and able to service > > > > > > interrupts. If that all makes sense, then I would answer the question > > > > > > with a definitive "yes it's all fine" because the clk consumer could be > > > > > > in the NOIRQ phase of its suspend but the clk provider wouldn't have > > > > > > even started suspending yet when clk_disable_unprepare() is called. > > > > > > > > > > That's a very good summary and address my concern, I still question this > > > > > patch correctness (and many others that carry out clk operations in S2R > > > > > NOIRQ phase), they may work but do not tell me they are rock solid given > > > > > your accurate summary above. > > > > > > > > I understand your concern but I don't see any alternative right now > > > > and a deep rework of the PM core to respect such dependency is not > > > > something that can be done in a reasonable amount of time. > > > > > > Maybe you don't need to rework anything. :-) > > > > > > Have you considered using device links? > > > > Absolutely, yes :) I am actively working on it in parallel, you can > > check the third version there [1]. Stephen Boyd has a slightly > > different idea of how it should be done, I will propose a v4 this week, > > I can add you in copy if you are interested! > > > > Anyway, there is one thing that is still missing: > > * Let's have device A that requests clock B > > * With the device link series, A is linked (as a child) to B. > > * A suspend/resume hooks handle things in the NOIRQ phase. > > Why do you need them to run in the "noirq" phase in the first place? I suppose (and I would like Bjorn to validate my thoughts) that this is a limitation imposed by the PCI core, as described in this commit: commit ab14d45ea58eae67c739e4ba01871cae7b6c4586 Author: Thomas Petazzoni Date: Tue Mar 17 15:55:45 2015 +0100 PCI: mvebu: Add suspend/resume support Add suspend/resume support for the mvebu PCIe host driver. Without this commit, the system will panic at resume time when PCIe devices are connected. Note that we have to use the ->suspend_noirq() and ->resume_noirq() hooks, because at resume time, the PCI fixups are done at ->resume_noirq() time, so the PCIe controller has to be ready at this point. Signed-off-by: Thomas Petazzoni Signed-off-by: Bjorn Helgaas Acked-by: Jason Cooper > > > * B suspend/resume hooks handle things in the default phase. > > > > What I expected during a suspend: > > 1/ ->suspend_noirq(device A) > > 2/ ->suspend(clock B) > > This expectation is not in agreement with the documented suspend code flow, > however. > > Each phase of it is carried out for *all* devices completely before getting > to the next phase, "prepare" first, then "suspend", "suspend_late" and > "suspend_noirq", in this order. Thanks for clarifying, now it is clear and it also answers Stephen remark in the related thread [1]: [PATCH 2/4] clk: mvebu: armada-37xx-periph: change suspend/resume time Stephen, said: "This seems sad that the PM core can't "priority boost" any suspend/resume callbacks of a device that doesn't have noirq callbacks when a device that depends on it from the device link perspective does have noirq callbacks." > > > Unfortunately, device links do not seem to enforce any priority between > > phases (default/late/noirq) and what happens is: > > 1/ ->suspend(B) > > 2/ ->suspend_noirq(A) > > Which has no sense in my case. Hence, I had to request the clock > > suspend/resume callbacks to be upgraded to the NOIRQ phase as well (I > > don't have a better solution for now). This is still under discussion > > in a thread you have been recently added to by Bjorn, see [2]. > > > > So when I told you I was not confident in "reworking the PM core to > > respect such dependency", this is what I was referring to. I am > > definitely ready to help, but I don't feel I can do it alone. > > > > [1] https://www.spinics.net/lists/linux-clk/msg32824.html > > [2] https://marc.info/?l=linux-pm&m=154465198510735&w=2 > > The rework you seem to be talking about is not possible, I'm afraid. > Ok, then do you agree that the only solution in this case is what I propose in thread [1], ie. promoting the clock suspend/resume callbacks to the NOIRQ phase in order to ensure that they will run first (once device links will be merged too) ? [1] https://www.spinics.net/lists/linux-clk/msg32537.html Thank you very much for helping, Miquèl 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=-4.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED 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 D1D67C43387 for ; Tue, 18 Dec 2018 14:14:50 +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 9E55721873 for ; Tue, 18 Dec 2018 14:14:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="oEUh13ld" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9E55721873 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject: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=Ppkus0U9wFZwPI5Mud4AHmLAT3oKD5DtjvFNQMQdQ2E=; b=oEUh13ldXrEQJT JU9KGtB2ENoSdIhanB4lkJvFOW/QROOHtey5YsRKg9AQRkMeh5afRVeicqHscYRxGwd7yEb+rrSig wCyONdXguZaOAF5HE5TEgx3oBfBUVQxz3tBIG8nHaDEQ9NIjKnr4QOq8fB0/qkiGyHtRG9fGWo+Ht NCjidQdu2YOm/Ej0H4IFAKfP50CvHhnjpoj2GT0CYdo1uBfTZ5w8alaAadr7nttYRws3EfsVA44OE Z+By02IViomJLsbMQcH91eSQv/9h4JjUSlrsqbUGiZFdT8GQEcuOufeo3BePOFU33OU8+ztGZai7U SMuRDDjv8kPVTUY2gYdQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gZG8z-0008BX-08; Tue, 18 Dec 2018 14:14:45 +0000 Received: from mail.bootlin.com ([62.4.15.54]) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gZG8e-0007wA-DP for linux-arm-kernel@lists.infradead.org; Tue, 18 Dec 2018 14:14:31 +0000 Received: by mail.bootlin.com (Postfix, from userid 110) id DB5B4207D9; Tue, 18 Dec 2018 15:14:12 +0100 (CET) Received: from xps13 (aaubervilliers-681-1-38-38.w90-88.abo.wanadoo.fr [90.88.157.38]) by mail.bootlin.com (Postfix) with ESMTPSA id 5DBFD2072C; Tue, 18 Dec 2018 15:14:12 +0100 (CET) Date: Tue, 18 Dec 2018 15:14:12 +0100 From: Miquel Raynal To: "Rafael J. Wysocki" Subject: Re: [PATCH 05/12] PCI: aardvark: add suspend to RAM support Message-ID: <20181218151412.4341718d@xps13> In-Reply-To: <28619896.152T6JUIHS@aspire.rjw.lan> References: <20181123141831.8214-1-miquel.raynal@bootlin.com> <61805564.abKDZ2rVK7@aspire.rjw.lan> <20181217155426.71058a03@xps13> <28619896.152T6JUIHS@aspire.rjw.lan> Organization: Bootlin X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181218_061424_730170_C7E166E0 X-CRM114-Status: GOOD ( 33.96 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Andrew Lunn , Lorenzo Pieralisi , Jason Cooper , devicetree@vger.kernel.org, Stephen Boyd , linux-pci@vger.kernel.org, Gregory Clement , linux-kernel@vger.kernel.org, Maxime Chevallier , Nadav Haklai , Antoine Tenart , Rob Herring , Thomas Petazzoni , sudeep.holla@arm.com, Bjorn Helgaas , linux-arm-kernel@lists.infradead.org, Sebastian Hesselbarth Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgUmFmYWVsLCBTdGVwaGVuICYgQmpvcm4sCgpHbGFkIHRvIHNlZSB5b3UgYWxsIGluIHRoaXMg dGhyZWFkIHRoYXQgdGFsa3MgYWJvdXQ6CiAgKiBhZGRpbmcgUzJSQU0gc3VwcG9ydCB0byBhIFBD SWUgY29udHJvbGxlciBkcml2ZXIKICAqIGJ5IHRha2luZyBpbnRvIGFjY291bnQgdGhhdCB0aGUg UENJIGNsb2NrIG11c3QgYmUKICAgIHtlbmFibGVkIGJlZm9yZSxkaXNhYmxlZCBhZnRlcn0gdGhl IFBDSSBJUCBpdHNlbGYKICAqIGFuZCB0aGF0IGl0IHJlcXVpcmVzIHNvbWUgdHdlYWtpbmcgaW4g dGhlIGNsb2NrIGRyaXZlciB0bwogICAgcHJvbW90ZSB0aGUgc3VzcGVuZC9yZXN1bWUoKSBjYWxs YmFja3MgdG8gdGhlIE5PSVJRIHBoYXNlCiAgICAocmVmZXJlbmNlIHRoZXJlIFsxXSkuCgpTdGVw aGVuLCBSYWZhZWwgYW5zd2VyZWQgaGVyZSB0byB5b3VyIHJlbWFyayAoaW4gdGhyZWFkIFsxXSkg YWJvdXQgdGhlCk5PSVJRIHByb21vdGlvbiAoc2VlIGJlbG93KS4KCkJqb3JuLCB0aGVyZSBpcyBh IHF1ZXN0aW9uIGZvciB5b3UgYmVsb3cgYWJvdXQgdGhlIG5lZWQgZm9yIGEgUENJCmNvbnRyb2xs ZXIgZHJpdmVyIHRvIHN1c3BlbmQvcmVzdW1lIGluIHRoZSBOT0lSUSBwaGFzZS4KClJhZmFlbCwg dGhhbmtzIGZvciB0aGUgZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGUgUE0gY29yZSBzZXF1ZW5jZXMg cmVhbGx5CmFyZSwgSSB3b3VsZCBuZWVkIHlvdSB0byBjb25maXJtIG15IGFwcHJvYWNoIHRoYXQg cHJvbW90ZXMgdGhlIGNsb2NrCnN1c3BlbmQvcmVzdW1lKCkgY2FsbGJhY2tzIHRvIHRoZSBOT0lS USBwaGFzZSwgb3Igb3RoZXJ3aXNlIGdpdmUgbWUKcG9pbnRlcnMgdG8gYW4gYWx0ZXJuYXRlIHNv bHV0aW9uIChhbHNvIGJlbG93KS4KCgoiUmFmYWVsIEouIFd5c29ja2kiIDxyandAcmp3eXNvY2tp Lm5ldD4gd3JvdGUgb24gVHVlLCAxOCBEZWMgMjAxOAoxMTo1NDo0MyArMDEwMDoKCj4gT24gTW9u ZGF5LCBEZWNlbWJlciAxNywgMjAxOCAzOjU0OjI2IFBNIENFVCBNaXF1ZWwgUmF5bmFsIHdyb3Rl Ogo+ID4gSGkgUmFmYWVsLAo+ID4gCj4gPiAiUmFmYWVsIEouIFd5c29ja2kiIDxyandAcmp3eXNv Y2tpLm5ldD4gd3JvdGUgb24gVGh1LCAxMyBEZWMgMjAxOAo+ID4gMjI6NTA6NTEgKzAxMDA6Cj4g PiAgIAo+ID4gPiBPbiBUaHVyc2RheSwgRGVjZW1iZXIgMTMsIDIwMTggMzozMDowMCBQTSBDRVQg TWlxdWVsIFJheW5hbCB3cm90ZTogIAo+ID4gPiA+IEhpIExvcmVuem8sCj4gPiA+ID4gICAgIAo+ ID4gPiA+ID4gPiBJZiB0aGF0J3MgcmVhbGx5IHRoZSBjYXNlLCB0aGVuIEkgY2FuIHNlZSBob3cg b25lIGRldmljZSBhbmQgaXQncwo+ID4gPiA+ID4gPiBjaGlsZHJlbiBhcmUgc3VzcGVuZGVkIGFu ZCB0aGUgaXJxIGZvciBpdCBpcyBkaXNhYmxlZCBidXQgdGhlIHByb3ZpZGluZwo+ID4gPiA+ID4g PiBkZXZpY2VzIChjbGssIHJlZ3VsYXRvciwgYnVzIGNvbnRyb2xsZXIsIGV0Yy4pIGFyZSBzdGls bCBmdWxseSBhY3RpdmUKPiA+ID4gPiA+ID4gYW5kIG5vdCBzdXNwZW5kZWQgYnV0IGluIGZhY3Qg Y29tcGxldGVseSB1c2FibGUgYW5kIGFibGUgdG8gc2VydmljZQo+ID4gPiA+ID4gPiBpbnRlcnJ1 cHRzLiBJZiB0aGF0IGFsbCBtYWtlcyBzZW5zZSwgdGhlbiBJIHdvdWxkIGFuc3dlciB0aGUgcXVl c3Rpb24KPiA+ID4gPiA+ID4gd2l0aCBhIGRlZmluaXRpdmUgInllcyBpdCdzIGFsbCBmaW5lIiBi ZWNhdXNlIHRoZSBjbGsgY29uc3VtZXIgY291bGQgYmUKPiA+ID4gPiA+ID4gaW4gdGhlIE5PSVJR IHBoYXNlIG9mIGl0cyBzdXNwZW5kIGJ1dCB0aGUgY2xrIHByb3ZpZGVyIHdvdWxkbid0IGhhdmUK PiA+ID4gPiA+ID4gZXZlbiBzdGFydGVkIHN1c3BlbmRpbmcgeWV0IHdoZW4gY2xrX2Rpc2FibGVf dW5wcmVwYXJlKCkgaXMgY2FsbGVkLiAgICAgIAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBUaGF0J3Mg YSB2ZXJ5IGdvb2Qgc3VtbWFyeSBhbmQgYWRkcmVzcyBteSBjb25jZXJuLCBJIHN0aWxsIHF1ZXN0 aW9uIHRoaXMKPiA+ID4gPiA+IHBhdGNoIGNvcnJlY3RuZXNzIChhbmQgbWFueSBvdGhlcnMgdGhh dCBjYXJyeSBvdXQgY2xrIG9wZXJhdGlvbnMgaW4gUzJSCj4gPiA+ID4gPiBOT0lSUSBwaGFzZSks IHRoZXkgbWF5IHdvcmsgYnV0IGRvIG5vdCB0ZWxsIG1lIHRoZXkgYXJlIHJvY2sgc29saWQgZ2l2 ZW4KPiA+ID4gPiA+IHlvdXIgYWNjdXJhdGUgc3VtbWFyeSBhYm92ZS4gICAgCj4gPiA+ID4gCj4g PiA+ID4gSSB1bmRlcnN0YW5kIHlvdXIgY29uY2VybiBidXQgSSBkb24ndCBzZWUgYW55IGFsdGVy bmF0aXZlIHJpZ2h0IG5vdwo+ID4gPiA+IGFuZCBhIGRlZXAgcmV3b3JrIG9mIHRoZSBQTSBjb3Jl IHRvIHJlc3BlY3Qgc3VjaCBkZXBlbmRlbmN5IGlzIG5vdAo+ID4gPiA+IHNvbWV0aGluZyB0aGF0 IGNhbiBiZSBkb25lIGluIGEgcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4gICAgCj4gPiA+IAo+ ID4gPiBNYXliZSB5b3UgZG9uJ3QgbmVlZCB0byByZXdvcmsgYW55dGhpbmcuIDotKQo+ID4gPiAK PiA+ID4gSGF2ZSB5b3UgY29uc2lkZXJlZCB1c2luZyBkZXZpY2UgbGlua3M/ICAKPiA+IAo+ID4g QWJzb2x1dGVseSwgeWVzIDopIEkgYW0gYWN0aXZlbHkgd29ya2luZyBvbiBpdCBpbiBwYXJhbGxl bCwgeW91IGNhbgo+ID4gY2hlY2sgdGhlIHRoaXJkIHZlcnNpb24gdGhlcmUgWzFdLiBTdGVwaGVu IEJveWQgaGFzIGEgc2xpZ2h0bHkKPiA+IGRpZmZlcmVudCBpZGVhIG9mIGhvdyBpdCBzaG91bGQg YmUgZG9uZSwgSSB3aWxsIHByb3Bvc2UgYSB2NCB0aGlzIHdlZWssCj4gPiBJIGNhbiBhZGQgeW91 IGluIGNvcHkgaWYgeW91IGFyZSBpbnRlcmVzdGVkIQo+ID4gCj4gPiBBbnl3YXksIHRoZXJlIGlz IG9uZSB0aGluZyB0aGF0IGlzIHN0aWxsIG1pc3Npbmc6Cj4gPiAqIExldCdzIGhhdmUgZGV2aWNl IEEgdGhhdCByZXF1ZXN0cyBjbG9jayBCCj4gPiAqIFdpdGggdGhlIGRldmljZSBsaW5rIHNlcmll cywgQSBpcyBsaW5rZWQgKGFzIGEgY2hpbGQpIHRvIEIuCj4gPiAqIEEgc3VzcGVuZC9yZXN1bWUg aG9va3MgaGFuZGxlIHRoaW5ncyBpbiB0aGUgTk9JUlEgcGhhc2UuICAKPiAKPiBXaHkgZG8geW91 IG5lZWQgdGhlbSB0byBydW4gaW4gdGhlICJub2lycSIgcGhhc2UgaW4gdGhlIGZpcnN0IHBsYWNl PwoKSSBzdXBwb3NlIChhbmQgSSB3b3VsZCBsaWtlIEJqb3JuIHRvIHZhbGlkYXRlIG15IHRob3Vn aHRzKSB0aGF0IHRoaXMKaXMgYSBsaW1pdGF0aW9uIGltcG9zZWQgYnkgdGhlIFBDSSBjb3JlLCBh cyBkZXNjcmliZWQgaW4gdGhpcwpjb21taXQ6Cgpjb21taXQgYWIxNGQ0NWVhNThlYWU2N2M3Mzll NGJhMDE4NzFjYWU3YjZjNDU4NgpBdXRob3I6IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRh enpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgpEYXRlOiAgIFR1ZSBNYXIgMTcgMTU6NTU6NDUgMjAx NSArMDEwMAoKICAgIFBDSTogbXZlYnU6IEFkZCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0CgogICAg QWRkIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgZm9yIHRoZSBtdmVidSBQQ0llIGhvc3QgZHJpdmVy LiAgV2l0aG91dCB0aGlzCiAgICBjb21taXQsIHRoZSBzeXN0ZW0gd2lsbCBwYW5pYyBhdCByZXN1 bWUgdGltZSB3aGVuIFBDSWUgZGV2aWNlcyBhcmUKICAgIGNvbm5lY3RlZC4KCiAgICBOb3RlIHRo YXQgd2UgaGF2ZSB0byB1c2UgdGhlIC0+c3VzcGVuZF9ub2lycSgpIGFuZCAtPnJlc3VtZV9ub2ly cSgpIGhvb2tzLAogICAgYmVjYXVzZSBhdCByZXN1bWUgdGltZSwgdGhlIFBDSSBmaXh1cHMgYXJl IGRvbmUgYXQgLT5yZXN1bWVfbm9pcnEoKSB0aW1lLAogICAgc28gdGhlIFBDSWUgY29udHJvbGxl ciBoYXMgdG8gYmUgcmVhZHkgYXQgdGhpcyBwb2ludC4KCiAgICBTaWduZWQtb2ZmLWJ5OiBUaG9t YXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KICAgIFNp Z25lZC1vZmYtYnk6IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+CiAgICBBY2tl ZC1ieTogSmFzb24gQ29vcGVyIDxqYXNvbkBsYWtlZGFlbW9uLm5ldD4KCj4gCj4gPiAqIEIgc3Vz cGVuZC9yZXN1bWUgaG9va3MgaGFuZGxlIHRoaW5ncyBpbiB0aGUgZGVmYXVsdCBwaGFzZS4KPiA+ IAo+ID4gV2hhdCBJIGV4cGVjdGVkIGR1cmluZyBhIHN1c3BlbmQ6Cj4gPiAxLyAtPnN1c3BlbmRf bm9pcnEoZGV2aWNlIEEpCj4gPiAyLyAtPnN1c3BlbmQoY2xvY2sgQikgIAo+IAo+IFRoaXMgZXhw ZWN0YXRpb24gaXMgbm90IGluIGFncmVlbWVudCB3aXRoIHRoZSBkb2N1bWVudGVkIHN1c3BlbmQg Y29kZSBmbG93LAo+IGhvd2V2ZXIuCj4gCj4gRWFjaCBwaGFzZSBvZiBpdCBpcyBjYXJyaWVkIG91 dCBmb3IgKmFsbCogZGV2aWNlcyBjb21wbGV0ZWx5IGJlZm9yZSBnZXR0aW5nCj4gdG8gdGhlIG5l eHQgcGhhc2UsICJwcmVwYXJlIiBmaXJzdCwgdGhlbiAic3VzcGVuZCIsICJzdXNwZW5kX2xhdGUi IGFuZAo+ICJzdXNwZW5kX25vaXJxIiwgaW4gdGhpcyBvcmRlci4KClRoYW5rcyBmb3IgY2xhcmlm eWluZywgbm93IGl0IGlzIGNsZWFyIGFuZCBpdCBhbHNvIGFuc3dlcnMgU3RlcGhlbgpyZW1hcmsg aW4gdGhlIHJlbGF0ZWQgdGhyZWFkIFsxXToKCiAgICAgICAgW1BBVENIIDIvNF0gY2xrOiBtdmVi dTogYXJtYWRhLTM3eHgtcGVyaXBoOiBjaGFuZ2UKICAgICAgICBzdXNwZW5kL3Jlc3VtZSB0aW1l CgpTdGVwaGVuLCBzYWlkOgoKICAgICAgICAiVGhpcyBzZWVtcyBzYWQgdGhhdCB0aGUgUE0gY29y ZSBjYW4ndCAicHJpb3JpdHkgYm9vc3QiIGFueQogICAgICAgIHN1c3BlbmQvcmVzdW1lIGNhbGxi YWNrcyBvZiBhIGRldmljZSB0aGF0IGRvZXNuJ3QgaGF2ZSBub2lycSBjYWxsYmFja3MKICAgICAg ICB3aGVuIGEgZGV2aWNlIHRoYXQgZGVwZW5kcyBvbiBpdCBmcm9tIHRoZSBkZXZpY2UgbGluayBw ZXJzcGVjdGl2ZSBkb2VzCiAgICAgICAgaGF2ZSBub2lycSBjYWxsYmFja3MuIgoKPiAKPiA+IFVu Zm9ydHVuYXRlbHksIGRldmljZSBsaW5rcyBkbyBub3Qgc2VlbSB0byBlbmZvcmNlIGFueSBwcmlv cml0eSBiZXR3ZWVuCj4gPiBwaGFzZXMgKGRlZmF1bHQvbGF0ZS9ub2lycSkgYW5kIHdoYXQgaGFw cGVucyBpczoKPiA+IDEvIC0+c3VzcGVuZChCKQo+ID4gMi8gLT5zdXNwZW5kX25vaXJxKEEpCj4g PiBXaGljaCBoYXMgbm8gc2Vuc2UgaW4gbXkgY2FzZS4gSGVuY2UsIEkgaGFkIHRvIHJlcXVlc3Qg dGhlIGNsb2NrCj4gPiBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MgdG8gYmUgdXBncmFkZWQgdG8g dGhlIE5PSVJRIHBoYXNlIGFzIHdlbGwgKEkKPiA+IGRvbid0IGhhdmUgYSBiZXR0ZXIgc29sdXRp b24gZm9yIG5vdykuIFRoaXMgaXMgc3RpbGwgdW5kZXIgZGlzY3Vzc2lvbgo+ID4gaW4gYSB0aHJl YWQgeW91IGhhdmUgYmVlbiByZWNlbnRseSBhZGRlZCB0byBieSBCam9ybiwgc2VlIFsyXS4KPiA+ IAo+ID4gU28gd2hlbiBJIHRvbGQgeW91IEkgd2FzIG5vdCBjb25maWRlbnQgaW4gInJld29ya2lu ZyB0aGUgUE0gY29yZSB0bwo+ID4gcmVzcGVjdCBzdWNoIGRlcGVuZGVuY3kiLCB0aGlzIGlzIHdo YXQgSSB3YXMgcmVmZXJyaW5nIHRvLiBJIGFtCj4gPiBkZWZpbml0ZWx5IHJlYWR5IHRvIGhlbHAs IGJ1dCBJIGRvbid0IGZlZWwgSSBjYW4gZG8gaXQgYWxvbmUuCj4gPiAKPiA+IFsxXSBodHRwczov L3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1jbGsvbXNnMzI4MjQuaHRtbAo+ID4gWzJdIGh0 dHBzOi8vbWFyYy5pbmZvLz9sPWxpbnV4LXBtJm09MTU0NDY1MTk4NTEwNzM1Jnc9MiAgCj4gCj4g VGhlIHJld29yayB5b3Ugc2VlbSB0byBiZSB0YWxraW5nIGFib3V0IGlzIG5vdCBwb3NzaWJsZSwg SSdtIGFmcmFpZC4KPiAKCk9rLCB0aGVuIGRvIHlvdSBhZ3JlZSB0aGF0IHRoZSBvbmx5IHNvbHV0 aW9uIGluIHRoaXMgY2FzZSBpcyB3aGF0IEkKcHJvcG9zZSBpbiB0aHJlYWQgWzFdLCBpZS4gcHJv bW90aW5nIHRoZSBjbG9jayBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MKdG8gdGhlIE5PSVJRIHBo YXNlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZXkgd2lsbCBydW4gZmlyc3QgKG9uY2UKZGV2 aWNlIGxpbmtzIHdpbGwgYmUgbWVyZ2VkIHRvbykgPwoKWzFdIGh0dHBzOi8vd3d3LnNwaW5pY3Mu bmV0L2xpc3RzL2xpbnV4LWNsay9tc2czMjUzNy5odG1sCgoKVGhhbmsgeW91IHZlcnkgbXVjaCBm b3IgaGVscGluZywKTWlxdcOobAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5l bEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=