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=-1.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS 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 678C1C43219 for ; Mon, 29 Apr 2019 12:23:51 +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 250E42087B for ; Mon, 29 Apr 2019 12:23:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="HJ76S9S6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 250E42087B 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-mtd-bounces+linux-mtd=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=SXhYx1M2yo/+2Z68dWztAeYNHQjDrnFVASPAPqFpXdw=; b=HJ76S9S6lLRTtR 5C6rImFGXLVhCMTAQ1FKXMqtrd8qwtlNiN3E063jjKM0FsI884PpAdD830/+AhdRaZKq05a5b56uX oDOo8gqDfKBjpgoeMyypBOa7AYHNEmJi88Bqwl1hbC5q0knR1B8j8elN0PgkrA42k6r9cHY1depcp skEwjTiwIDiSDnDo9I9ZxT8QCFmjHtrGJEna7KlTVFfVYfFDaLg+p+rI1jLyRugpPAjJgxH7InZsW EyX+wZQfQQulh+Bi1lWZjdzIlueNds/zOu/cGveDB6I/ncxAVvBIZBDEGNiNzgNNj0D7qjatrZdx3 aPH0xwB9ySVOKirNy+KA==; 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 1hL5Jz-0001oy-7Z; Mon, 29 Apr 2019 12:23:47 +0000 Received: from relay9-d.mail.gandi.net ([217.70.183.199]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hL5Jv-0001o2-8W for linux-mtd@lists.infradead.org; Mon, 29 Apr 2019 12:23:45 +0000 X-Originating-IP: 90.88.147.33 Received: from xps13 (aaubervilliers-681-1-27-33.w90-88.abo.wanadoo.fr [90.88.147.33]) (Authenticated sender: miquel.raynal@bootlin.com) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 07C55FF810; Mon, 29 Apr 2019 12:23:33 +0000 (UTC) Date: Mon, 29 Apr 2019 14:23:32 +0200 From: Miquel Raynal To: Naga Sureshkumar Relli Subject: Re: [LINUX PATCH v14] mtd: rawnand: pl353: Add basic driver for arm pl353 smc nand interface Message-ID: <20190429142332.27a2cba5@xps13> In-Reply-To: References: <1555326613-26739-1-git-send-email-naga.sureshkumar.relli@xilinx.com> <20190425112338.dipgmqqfuj45gx6s@laureti-dev> 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-20190429_052343_605306_F4CE1A28 X-CRM114-Status: GOOD ( 36.17 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "bbrezillon@kernel.org" , Helmut Grohne , "richard@nod.at" , "linux-kernel@vger.kernel.org" , "marek.vasut@gmail.com" , "linux-mtd@lists.infradead.org" , "nagasureshkumarrelli@gmail.com" , Michal Simek , "computersforpeace@gmail.com" , "dwmw2@infradead.org" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgTmFnYSwKCj4gPiA+ICsJdTMyIGFkZHJzOwo+ID4gPiArCXUzMiBuYWRkcnM7Cj4gPiA+ICsJ dTMyIGFkZHI1Owo+ID4gPiArCXUzMiBhZGRyNjsgIAo+ID4gCj4gPiBXaHkgYXJlIGFkZHI1IGFu ZCBhZGRyNiB1MzI/IFlvdSBvbmx5IGV2ZXIgc3RvcmUgdTggdmFsdWVzIGluIGhlcmUuIEhvdyBh Ym91dCBtZXJnaW5nCj4gPiB0aGVtIGludG8gYW4gdTE2IGFkZHI1Nj8gRG9pbmcgc28gd291bGQg bWFrZSB0aGUgYWNjZXNzIGluIHBsMzUzX25hbmRfZXhlY19vcF9jbWQKPiA+IHNpbXBsZXIgYW5k IG1vdmUgYSBsaXR0bGUgY29tcGxleGl0eSBpbnRvIHBsMzUzX25mY19wYXJzZV9pbnN0cnVjdGlv bnMuICAKPiBXaWxsIHRyeSB0aGlzLiBCdXQgSSBkb24ndCBzZWUgYW55IGNvbXBsZXggbG9naWMg aW52b2x2ZWQgdXNpbmcgYWRkcjUgYW5kIGFkZHI2LgoKVGhpcyBpcyBhIHJlbGljIG9mIGEgdG9v IHF1aWNrIGNvcHkgZnJvbSBtYXJ2ZWxsX25hbmQuYy4gUGxlYXNlIG1hdGNoCnRoZSBzdHJ1Y3R1 cmUgd2l0aCB5b3VyIGNvbnRyb2xsZXIgbWVtb3J5IGxheW91dCBpbnN0ZWFkLgoKPiA+ID4gKwlj b25zdCBzdHJ1Y3QgbmFuZF9vcF9pbnN0ciAqZGF0YV9pbnN0cjsgfTsKPiA+ID4gKwo+ID4gPiAr LyoqCj4gPiA+ICsgKiBzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyIC0gRGVmaW5lcyB0aGUg TkFORCBmbGFzaCBjb250cm9sbGVyIGRyaXZlcgo+ID4gPiArICoJCQkJICBpbnN0YW5jZQo+ID4g PiArICogQGNoaXA6CQlOQU5EIGNoaXAgaW5mb3JtYXRpb24gc3RydWN0dXJlCj4gPiA+ICsgKiBA ZGV2OgkJUGFyZW50IGRldmljZSAodXNlZCB0byBwcmludCBlcnJvciBtZXNzYWdlcykKPiA+ID4g KyAqIEByZWdzOgkJVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBOQU5EIGZsYXNoIGRldmljZQo+ID4g PiArICogQGJ1Zl9hZGRyOgkJVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBOQU5EIGZsYXNoIGRldmlj ZSBmb3IKPiA+ID4gKyAqCQkJZGF0YSByZWFkL3dyaXRlcwo+ID4gPiArICogQGFkZHJfY3ljbGVz OglBZGRyZXNzIGN5Y2xlcwo+ID4gPiArICogQG1jbGs6CQlNZW1vcnkgY29udHJvbGxlciBjbG9j awo+ID4gPiArICogQGJ1c3dpZHRoOgkJQnVzIHdpZHRoIDggb3IgMTYKPiA+ID4gKyAqLwo+ID4g PiArc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciB7Cj4gPiA+ICsJc3RydWN0IG5hbmRfY29u dHJvbGxlciBjb250cm9sbGVyOwo+ID4gPiArCXN0cnVjdCBuYW5kX2NoaXAgY2hpcDsKPiA+ID4g KwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiA+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+ID4gPiAr CXZvaWQgX19pb21lbSAqYnVmX2FkZHI7ICAKPiA+IAo+ID4gSSBmaW5kIHRoZSB1c2Ugb2YgYnVm X2FkZHIgdW5mb3J0dW5hdGUuIEl0IGlzIGNvbnN1bWVkIGJ5IHR3byBmdW5jdGlvbnMKPiA+IHBs MzUzX25hbmRfcmVhZF9kYXRhX29wIGFuZCBwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AuIEFsbCBv dGhlciBmdW5jdGlvbnMgdXBkYXRlIGl0cwo+ID4gdmFsdWUuIFNlbWFudGljYWxseSwgaXRzIHZh bHVlIGlzIHJlZ3MgKyBzb21lIGZsYWdzLiBGb3IgdGhlIHVwZGF0ZXJzIHRoYXQgbWVhbnMgYSBj b21wbGV4IGxvZ2ljCj4gPiB3aGVyZSB0aGV5IGZpcnN0IGhhdmUgdG8gc3VidHJhY3QgcmVnLCB0 aGVuIGNoYW5nZSBmbGFncyBhbmQgYWRkIHJlZyBhZ2Fpbi4gVG8gbWFrZSBtYXR0ZXJzCj4gPiB3 b3JzZSwgdGhpcyBjb21wdXRhdGlvbiBpbnZvbHZlcyBfX2ZvcmNlIGNhc3RzIGJldHdlZW4gbG9u ZyBhbmQgX19pb21lbSAod2hpY2ggeWllbGRlZAo+ID4gY29tcGxhaW50cyBpbiBlYXJsaWVyIHJl dmlld3MpLiAgSSB0aGluayBpdCB3b3VsZCBzaW1wbGlmeSB0aGUgY29kZSBpZiB5b3UgcmVwbGFj ZWQgYnVmX2FkZHIgd2l0aAo+ID4gc29tZXRoaW5nIGxpa2UgYWRkcl9mbGFncyBhbmQgdGhlbiBj b21wdXRlIGJ1Zl9hZGRyIGFzIHJlZ3MgKyBhZGRyX2ZsYWdzIGluIHRob3NlIHR3bwo+ID4gY29u c3VtZXJzLiBXaGF0IGRvIHlvdSB0aGluaz8gIAo+IFRoaXMgZGVmaW5pdGVseSBzaW1wbGlmaWVz IHRoZSBkcml2ZXIgbG9naWMsIHdlIGhhdmUgdG8gZG8gdGhhdC4KPiBJIHRyaWVkIGl0IHByZXZp b3VzbHksIHJlZ2FyZGluZyBfX2ZvcmNlIGFuZCBfX2lvbWVtIGNhc3RpbmcgY2hhbmdlcywgYnV0 IHRoZSBkcml2ZXIgZnVuY3Rpb25hbGl0eSB3YXMgYnJva2VuCj4gV2l0aCB0aGlzIHVwZGF0ZS4K PiBMZXQgbWUgdXBkYXRlIGl0IGFuZCBjaGVjayBpdCBhZ2Fpbi4KPiBCdXQganVzdCB3YW50ZWQg dG8ga25vdywgZG8geW91IHNlZSBpc3N1ZXMgd2l0aCB0aGVzZSBfX2ZvcmNlIGFuZCBfX2lvbWVt IGNhc3RpbmdzPwo+ID4gICAKPiA+ID4gKwl1OCBhZGRyX2N5Y2xlczsKPiA+ID4gKwlzdHJ1Y3Qg Y2xrICptY2xrOyAgCj4gPiAKPiA+IEFsbCB5b3UgbmVlZCBoZXJlIGlzIHRoZSBtZW1vcnkgY2xv Y2sgZnJlcXVlbmN5LiBXb3VsZG4ndCBpdCBiZSBlYXNpZXIgdG8gZXh0cmFjdCB0aGF0Cj4gPiBm cmVxdWVuY3kgb25jZSBkdXJpbmcgcHJvYmUgYW5kIHN0b3JlIGl0IGhlcmU/IFRoYXQgYXNzdW1l cyBhIGNvbnN0YW50IGZyZXF1ZW5jeSwgYnV0IGlmIHRoZQo+ID4gZnJlcXVlbmN5IGlzbid0IGNv bnN0YW50LCB5b3UgaGF2ZSBhIHJhY2UgY29uZGl0aW9uLiAgCj4gVGhhdCBpcyB3aGF0IHdlIGFy ZSBkb2luZyBpbiB0aGUgcHJvYmUuCj4gSW4gdGhlIHByb2JlLCB3ZSBhcmUgZ2V0dGluZyBtY2xr IHVzaW5nIG9mX2Nsa19nZXQoKSBhbmQgdGhlbiB3ZSBhcmUgZ2V0dGluZyB0aGUgYWN0dWFsIGZy ZXF1ZW5jeQo+IFVzaW5nIGNsa19nZXRfcmF0ZSgpLgo+IEFuZCB0aGlzIGlzIGNvbnN0YW50IGZy ZXF1ZW5jeSBvbmx5KGdldHRpbmcgZnJvbSBkdHMpCgpXaGF0IEhlbG11dCBwcm9wb3NlcyBpcywg SSB0aGluaywgc2F2aW5nIHRoZSBjbG9jayBmcmVxdWVuY3kgdG8gYXZvaWQKcmVxdWVzdGluZyBp dCBldmVyeXRpbWUgeW91IHdhbnQgdG8gdXNlIGl0IChpZiB0aGlzIGlzIGRvbmUgbWFueSB0aW1l cykuCgpbLi4uXQoKPiA+ID4gKwo+ID4gPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24g KiBjaGlwLT5lY2MuYnl0ZXMpICsgMjsKPiA+ID4gKwlvb2JyZWdpb24tPmxlbmd0aCA9IDUwOwo+ ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgcGwzNTNfZWNjX29vYmxheW91dDY0X29wcyA9 IHsKPiA+ID4gKwkuZWNjID0gcGwzNTNfZWNjX29vYmxheW91dDY0X2VjYywKPiA+ID4gKwkuZnJl ZSA9IHBsMzUzX2VjY19vb2JsYXlvdXQ2NF9mcmVlLAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiAr LyogR2VuZXJpYyBmbGFzaCBiYnQgZGVjcmlwdG9ycyAqLwo+ID4gPiArc3RhdGljIHU4IGJidF9w YXR0ZXJuW10gPSB7ICdCJywgJ2InLCAndCcsICcwJyB9OyBzdGF0aWMgdTgKPiA+ID4gK21pcnJv cl9wYXR0ZXJuW10gPSB7ICcxJywgJ3QnLCAnYicsICdCJyB9Owo+ID4gPiArCj4gPiA+ICtzdGF0 aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGJidF9tYWluX2Rlc2NyID0gewo+ID4gPiArCS5vcHRp b25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfQ1JFQVRFIHwgIAo+ID4gTkFORF9C QlRfV1JJVEUgIAo+ID4gPiArCQl8IE5BTkRfQkJUXzJCSVQgfCBOQU5EX0JCVF9WRVJTSU9OIHwg TkFORF9CQlRfUEVSQ0hJUCwKPiA+ID4gKwkub2ZmcyA9IDQsCj4gPiA+ICsJLmxlbiA9IDQsCj4g PiA+ICsJLnZlcm9mZnMgPSAyMCwKPiA+ID4gKwkubWF4YmxvY2tzID0gNCwKPiA+ID4gKwkucGF0 dGVybiA9IGJidF9wYXR0ZXJuICAKPiA+IAo+ID4gSSBoYXZlIGEgZ2VuZXJhbCBxdWVzdGlvbiBj b25jZXJuaW5nIHRoZSBuYW5kIGZyYW1ld29yayBoZXJlLiBUaGUgcGF0dGVybiBtZW1iZXIgaW4g c3RydWN0Cj4gPiBuYW5kX2JidF9kZXNjciBpcyBub3QgZGVjbGFyZWQgY29uc3QuCj4gPiBUaGVy ZWZvcmUsIGJidF9wYXR0ZXJuIGNhbm5vdCBiZSBjb25zdCBoZXJlLiBBcyBmYXIgYXMgSSBsb29r ZWQsIGFsbCBhY2Nlc3NlcyBvZiBwYXR0ZXJuIHVzZSBpdAo+ID4gd2l0aCBtZW1jbXAgb3IgYXMg c291cmNlIGZvciBtZW1jcHkuIEFsc28gdGhlIGRpc2tvbmNoaXAuYyBkcml2ZXIgYXNzaWducyBh IHN0cmluZyBjb25zdGFudAo+ID4gaGVyZS4gVGhpcyBzdWdnZXN0cywgdGhhdCBwYXR0ZXJuIHNo b3VsZCBiZSBkZWNsYXJlZCBjb25zdCBvciB0aGF0IGRpc2tvbmNoaXAuYyBpcyBkb2luZyBpdAo+ ID4gd3JvbmcuICAKPiBNYXkgYmUgTWlxdWVsIGNhbiBjb21tZW50IG9uIHRoaXMuCgpJIGRpZCBu b3QgY2hlY2sgZGlza29uY2hpcC5jJ3MgaW1wbGVtZW50YXRpb24gYnV0IHR1cm5pbmcgaXQgaW50 byBjb25zdApzZWVtcyByZWFzb25hYmxlIHRvIG1lLiBIb3dldmVyIGluIHRoZSBzY29wZSBvZiB0 aGlzIGRyaXZlciwgTmFnYSwgeW91CmNhbiBrZWVwIGl0IGFzIGl0IGlzIHJpZ2h0IG5vdy4KCj4g PiAgIAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNj ciBiYnRfbWlycm9yX2Rlc2NyID0gewo+ID4gPiArCS5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJM T0NLIHwgTkFORF9CQlRfQ1JFQVRFIHwgIAo+ID4gTkFORF9CQlRfV1JJVEUgIAo+ID4gPiArCQl8 IE5BTkRfQkJUXzJCSVQgfCBOQU5EX0JCVF9WRVJTSU9OIHwgTkFORF9CQlRfUEVSQ0hJUCwKPiA+ ID4gKwkub2ZmcyA9IDQsCj4gPiA+ICsJLmxlbiA9IDQsCj4gPiA+ICsJLnZlcm9mZnMgPSAyMCwK PiA+ID4gKwkubWF4YmxvY2tzID0gNCwKPiA+ID4gKwkucGF0dGVybiA9IG1pcnJvcl9wYXR0ZXJu Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBwbDM1M19uZmNfZm9yY2VfYnl0 ZV9hY2Nlc3Moc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKPiA+ID4gKwkJCQkJYm9vbCBmb3JjZV84 Yml0KQo+ID4gPiArewo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsJc3RydWN0IHBsMzUzX25hbmRf Y29udHJvbGxlciAqeG5mYyA9Cj4gPiA+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwz NTNfbmFuZF9jb250cm9sbGVyLCBjaGlwKTsKPiA+ID4gKwo+ID4gPiArCWlmICh4bmZjLT5idXN3 aWR0aCA9PSA4KSAgCj4gPiAKPiA+IFRoaXMgYnVzd2lkdGggbWVtYmVyIGlzIG5ldmVyIGFzc2ln bmVkIGFueXdoZXJlLiBUaHVzIHRoZSB2YWx1ZSBpcyBhbHdheXMgMCBhbmQgdGhpcwo+ID4gY29t cGFyaXNvbiBhbHdheXMgZmFpbHMuICAKPiBObywgaW4gdGhlIHByb2JlIHdlIHNob3VsZCB1cGRh dGUgdGhpcywgYnkgcmVhZGluZyBpdCBmcm9tIGR0cy4KPiBVbmZvcnR1bmF0ZWx5LCB0aGUgYXNz aWdubWVudCB3YXMgcmVtb3ZlZCwgZHVyaW5nIGNoZWNrcGF0Y2ggY2xlYW4gdXAoaXRzIG15IGVk aXRvciBpc3N1ZSkuCj4gSSB3aWxsIHVwZGF0ZSBpdC4gCgpUaGlzIGFuc3dlciBpcyBzY2FyeSwg dGhlcmUgYXJlIHByb2JhYmx5IG1hbnkgb3RoZXIgcGxhY2VzIHdoZXJlIHlvdQpkZWxldGVkIHVz ZWZ1bCBjb2RlIHRoZW4/CgoKClsuLi5dCgo+ID4gPiArLyogTkFORCBmcmFtZXdvcmsgLT5leGVj X29wKCkgaG9va3MgYW5kIHJlbGF0ZWQgaGVscGVycyAqLwpzdGF0aWMKPiA+ID4gK3ZvaWQgcGwz NTNfbmZjX3BhcnNlX2luc3RydWN0aW9ucyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+ID4gPiAr CQkJCQkgY29uc3Qgc3RydWN0IG5hbmRfc3Vib3AgKnN1Ym9wLAo+ID4gPiArCQkJCQkgc3RydWN0 IHBsMzUzX25mY19vcCAqbmZjX29wKQo+ID4gPiArewo+ID4gPiArCWNvbnN0IHN0cnVjdCBuYW5k X29wX2luc3RyICppbnN0ciA9IE5VTEw7Cj4gPiA+ICsJdW5zaWduZWQgaW50IG9wX2lkLCBvZmZz ZXQsIG5hZGRyczsKPiA+ID4gKwlpbnQgaTsKPiA+ID4gKwljb25zdCB1OCAqYWRkcnM7Cj4gPiA+ ICsKPiA+ID4gKwltZW1zZXQobmZjX29wLCAwLCBzaXplb2Yoc3RydWN0IHBsMzUzX25mY19vcCkp Owo+ID4gPiArCWZvciAob3BfaWQgPSAwOyBvcF9pZCA8IHN1Ym9wLT5uaW5zdHJzOyBvcF9pZCsr KSB7Cj4gPiA+ICsJCWluc3RyID0gJnN1Ym9wLT5pbnN0cnNbb3BfaWRdOwo+ID4gPiArCj4gPiA+ ICsJCXN3aXRjaCAoaW5zdHItPnR5cGUpIHsKPiA+ID4gKwkJY2FzZSBOQU5EX09QX0NNRF9JTlNU UjoKPiA+ID4gKwkJCWlmIChvcF9pZCkKPiA+ID4gKwkJCQluZmNfb3AtPmNtbmRzWzFdID0gaW5z dHItPmN0eC5jbWQub3Bjb2RlOwo+ID4gPiArCQkJZWxzZQo+ID4gPiArCQkJCW5mY19vcC0+Y21u ZHNbMF0gPSBpbnN0ci0+Y3R4LmNtZC5vcGNvZGU7Cj4gPiA+ICsJCQluZmNfb3AtPmNsZV9hbGVf ZGVsYXlfbnMgPSBpbnN0ci0+ZGVsYXlfbnM7Cj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwo+ID4g PiArCQljYXNlIE5BTkRfT1BfQUREUl9JTlNUUjoKPiA+ID4gKwkJCW9mZnNldCA9IG5hbmRfc3Vi b3BfZ2V0X2FkZHJfc3RhcnRfb2ZmKHN1Ym9wLCBvcF9pZCk7Cj4gPiA+ICsJCQluYWRkcnMgPSBu YW5kX3N1Ym9wX2dldF9udW1fYWRkcl9jeWMoc3Vib3AsIG9wX2lkKTsKPiA+ID4gKwkJCWFkZHJz ID0gJmluc3RyLT5jdHguYWRkci5hZGRyc1tvZmZzZXRdOwo+ID4gPiArCQkJbmZjX29wLT5hZGRy cyA9IGluc3RyLT5jdHguYWRkci5hZGRyc1tvZmZzZXRdOwo+ID4gPiArCQkJZm9yIChpID0gMDsg aSA8IG1pbl90KHVuc2lnbmVkIGludCwgNCwgbmFkZHJzKTsgaSsrKSB7Cj4gPiA+ICsJCQkJbmZj X29wLT5hZGRycyB8PSBpbnN0ci0+Y3R4LmFkZHIuYWRkcnNbaV0gPDwgIAo+ID4gCj4gPiBJIGRv bid0IHF1aXRlIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgZG9lcywgYnV0IGl0IGxvb2tzIHN0 cmFuZ2UgdG8gbWUuIEkgY29tcGFyZWQgaXQgdG8gb3RoZXIKPiA+IGRyaXZlcnMuIFRoZSBjb2Rl IGhlcmUgaXMgcXVpdGUgc2ltaWxhciB0byBtYXJ2ZWxsX25hbmQuYy4gSXQgc2VlbXMgbGlrZSB3 ZSBhcmUgY29weWluZyBhCj4gPiB2YXJ5aW5nIG51bWJlciAoMCB0byA2KSBvZiBhZGRyZXNzZXMg ZnJvbSB0aGUgYnVmZmVyIGluc3RyLT5jdHguYWRkci5hZGRycy4gSG93ZXZlciB0aGVpcgo+ID4g aW5kaWNlcyBhcmUgc3BlY2lhbDogMCwgMSwgMiwgMywgb2Zmc2V0ICsgNCwgb2Zmc2V0ICsgNS4g VGhpcyBpcyBub24tY29uc2VjdXRpdmUgYW5kIGRpZmZlcmVudCBmcm9tCj4gPiBtYXJ2ZWxsX25h bmQuYyBpbiB0aGlzIHJlZ2FyZC4gQ291bGQgaXQgYmUgdGhhdCB5b3UgcmVhbGx5IG1lYW50IGlu ZGV4IG9mZnNldCtpIGhlcmU/ICAKPiBJIGRpZG4ndCBnZXQsIHdoYXQgeW91IGFyZSBzYXlpbmcg aGVyZS4KPiBJdCBpcyBhYm91dCB1cGRhdGluZyBwYWdlIGFuZCBjb2x1bW4gYWRkcmVzc2VzLgo+ IEFyZSB5b3UgYXNraW5nIG1lIHRvIHJlbW92ZSBuZmNfb3AtPmFkZHJzID0gaW5zdHItPmN0eC5h ZGRyLmFkZHJzW29mZnNldF07IGJlZm9yZSBmb3IgbG9vcD8KPiAKPiA+ICAgCj4gPiA+ICsJCQkJ CQkgKDggKiBpKTsKPiA+ID4gKwkJCX0KPiA+ID4gKwo+ID4gPiArCQkJaWYgKG5hZGRycyA+PSA1 KQo+ID4gPiArCQkJCW5mY19vcC0+YWRkcjUgPSBhZGRyc1s0XTsKPiA+ID4gKwkJCWlmIChuYWRk cnMgPj0gNikKPiA+ID4gKwkJCQluZmNfb3AtPmFkZHI2ID0gYWRkcnNbNV07CgpBbHNvLCB5b3Ug cHJvYmFibHkgZG9uJ3QgbmVlZCBhZGRyNSBhbmQgYWRkcjYgaGVyZSwgdGhleSB3ZXJlIG5lZWRl ZCBpbgptYXJ2ZWxsX25hbmQuYyBiZWNhdXNlIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGluIHRocmVl IGRpZmZlcmVudApyZWdpc3RlcnMgYW5kIGFyZSBsaW1pdGVkIHRvIDYgY3ljbGVzLCBidXQgdGhp cyBpcyBwcm9iYWJseSBub3QgdGhlCmNhc2UgaW4geW91ciBkcml2ZXIuCgo+ID4gPiArCQkJbmZj X29wLT5uYWRkcnMgPSBuYW5kX3N1Ym9wX2dldF9udW1fYWRkcl9jeWMoc3Vib3AsCj4gPiA+ICsJ CQkJCQkJCSAgICAgb3BfaWQpOwo+ID4gPiArCQkJbmZjX29wLT5jbGVfYWxlX2RlbGF5X25zID0g aW5zdHItPmRlbGF5X25zOwo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsKPiA+ID4gKwkJY2FzZSBO QU5EX09QX0RBVEFfSU5fSU5TVFI6Cj4gPiA+ICsJCQluZmNfb3AtPmRhdGFfaW5zdHIgPSBpbnN0 cjsKPiA+ID4gKwkJCW5mY19vcC0+ZGF0YV9pbnN0cl9pZHggPSBvcF9pZDsKPiA+ID4gKwkJCWJy ZWFrOwo+ID4gPiArCj4gPiA+ICsJCWNhc2UgTkFORF9PUF9EQVRBX09VVF9JTlNUUjoKPiA+ID4g KwkJCW5mY19vcC0+ZGF0YV9pbnN0ciA9IGluc3RyOwo+ID4gPiArCQkJbmZjX29wLT5kYXRhX2lu c3RyX2lkeCA9IG9wX2lkOwo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsKPiA+ID4gKwkJY2FzZSBO QU5EX09QX1dBSVRSRFlfSU5TVFI6Cj4gPiA+ICsJCQluZmNfb3AtPnJkeV90aW1lb3V0X21zID0g aW5zdHItPmN0eC53YWl0cmR5LnRpbWVvdXRfbXM7Cj4gPiA+ICsJCQluZmNfb3AtPnJkeV9kZWxh eV9ucyA9IGluc3RyLT5kZWxheV9uczsKPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiArCQl9Cj4gPiA+ ICsJfQo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBjb25kX2RlbGF5KHVuc2ln bmVkIGludCBucykgewo+ID4gPiArCWlmICghbnMpCj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ ID4gPiArCWlmIChucyA8IDEwMDAwKQo+ID4gPiArCQluZGVsYXkobnMpOwo+ID4gPiArCWVsc2UK PiA+ID4gKwkJdWRlbGF5KERJVl9ST1VORF9VUChucywgMTAwMCkpOwo+ID4gPiArfSAgCj4gPiAK ClsuLi5dCgo+ID4gPiArCj4gPiA+ICsJd3JpdGVsX3JlbGF4ZWQoY21kX3BoYXNlX2RhdGEsICh2 b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWNtZF9waGFzZV9hZGRyKTsKPiA+ID4gKwlpZiAoIW5mY19v cC5kYXRhX2luc3RyKSB7Cj4gPiA+ICsJCWlmIChuZmNfb3AucmR5X3RpbWVvdXRfbXMpIHsKPiA+ ID4gKwkJCWlmIChwbDM1M193YWl0X2Zvcl9kZXZfcmVhZHkoY2hpcCkpCj4gPiA+ICsJCQkJcmV0 dXJuIC1FVElNRURPVVQ7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4gPiArCQlyZXR1cm4gMDsKPiA+ ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZWFkaW5nID0gKG5mY19vcC5kYXRhX2luc3RyLT50eXBl ID09IE5BTkRfT1BfREFUQV9JTl9JTlNUUik7Cj4gPiA+ICsJaWYgKCFyZWFkaW5nKSB7Cj4gPiA+ ICsJCWxlbiA9IG5hbmRfc3Vib3BfZ2V0X2RhdGFfbGVuKHN1Ym9wLCBvcF9pZCk7Cj4gPiA+ICsJ CXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChjaGlwLCBpbnN0ci0+Y3R4LmRhdGEuYnVmLm91dCwK PiA+ID4gKwkJCQkJIGxlbiwgaW5zdHItPmN0eC5kYXRhLmZvcmNlXzhiaXQpOwo+ID4gPiArCQlp ZiAobmZjX29wLnJkeV90aW1lb3V0X21zKSB7Cj4gPiA+ICsJCQlpZiAocGwzNTNfd2FpdF9mb3Jf ZGV2X3JlYWR5KGNoaXApKQo+ID4gPiArCQkJCXJldHVybiAtRVRJTUVET1VUOwo+ID4gPiArCQl9 Cj4gPiA+ICsKPiA+ID4gKwkJY29uZF9kZWxheShuZmNfb3AucmR5X2RlbGF5X25zKTsKPiA+ID4g Kwl9Cj4gPiA+ICsKPiA+ID4gKwlpZiAocmVhZGluZykgeyAgCj4gPiAKPiA+IFlvdSBjb3VsZCB1 c2UgYW4gZWxzZSBicmFuY2ggaW5zdGVhZCBvZiBpbnZlcnRpbmcgdGhlIGNvbmRpdGlvbiBoZXJl Lgo+ID4gV2hlbiBNaXF1ZWwgY29tcGxhaW5lZCBhYm91dCB0aGlzIGluIHYxMywgeW91IHNhaWQg eW91J2QgY2hhbmdlIGl0LCBidXQgeW91IGRpZG4ndC4gIAo+IFNvcnJ5IGZvciB0aGF0LiBJIHdp bGwgY2hhbmdlIGl0LgoKWWVzIHBsZWFzZSwgYmUgY2FyZWZ1bCBhbmQgbm90IGluIGEgaHVycnkg d2hlbiByZS1wb3N0aW5nLCBpdCBhbHJlYWR5CnRha2VzIHF1aXRlIHNvbWUgdGltZSB0byByZXZp ZXcgdGhlIGVudGlyZSBkcml2ZXIuCgpUaGFua3MsCk1pcXXDqGwKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lv biBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1tdGQvCg==