From owner-freebsd-arm@freebsd.org Tue Dec 3 00:05:07 2019 Return-Path: Delivered-To: freebsd-arm@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CFB231BCBC9 for ; Tue, 3 Dec 2019 00:05:07 +0000 (UTC) (envelope-from ian@freebsd.org) Received: from outbound3d.ore.mailhop.org (outbound3d.ore.mailhop.org [54.186.57.195]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 47Rj0g2Bz4z4Z4v for ; Tue, 3 Dec 2019 00:05:07 +0000 (UTC) (envelope-from ian@freebsd.org) ARC-Seal: i=1; a=rsa-sha256; t=1575331505; cv=none; d=outbound.mailhop.org; s=arc-outbound20181012; b=khrMpYCFNdrIM8lf3NaZuJjnMCzEFcRCK7MFF/ZX15cuc39UXsvZ1tKQRbEHipTqgpVnDfYdNd8sz qt9VHuxDlHJ/SWwMWUC63uVqLQHnoXOD8G+Xb3HA4GStJwXEqSJZzV7htPKp4HOXhOt5ivOEjJN8QY 0cFMiuaxx8ItUDqwlTd6tjEkT6gDhKS1/ew8Moo+BM+nku6vSBS8MU4N7jw9ne8HjJ+IktlncjTEX+ Dn0EfPQCHj+Iys8aQf0R5nwPU9FxScRqjVBb4AtEcsNmr3XcZtcrY9k86uoyTXKR5dpk0U5SB3JBmD AuCng6CfMPZeP4cTqaSAIn7Cp9rJ8Ng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=outbound.mailhop.org; s=arc-outbound20181012; h=mime-version:content-type:references:in-reply-to:date:cc:to:from:subject: message-id:dkim-signature:from; bh=wzgFVCXFuS1yjKT+2q+2Tw/kBMZxsI6O4WnNcIjgawM=; b=iY9rSx0pkQ+R3XRhqAgR3+4VFSkXTiSj/lNEttV8TdY1cQ9+fR/jWU9kXH7abttYARdcwGC7wZMvs PpB3hffaWqOTLAcKmzLjosjyQDGvMMIrApuChu8KjnBjK/mLM2MXCiftW7gHztfMuRs1boEItjqxgt pTiJ0BXp21NlPnNnqIcFZPAPvK+dniyvAg9lSjnjEOVxIVSG2pPe3mMPMQsweabGo4+SWM+elH+Byq Q8n24h4+2N6j27o91+cbFOyMKW+PwyH9ftxRAJaTmzMPbR8vJgbG6K+nxU/bqgMzPvr/bnc1ATx7Cj RBYgby2GnG1nyNK6Y0ycXHhX2jqMc+Q== ARC-Authentication-Results: i=1; outbound3.ore.mailhop.org; spf=softfail smtp.mailfrom=freebsd.org smtp.remote-ip=67.177.211.60; dmarc=none header.from=freebsd.org; arc=none header.oldest-pass=0; DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outbound.mailhop.org; s=dkim-high; h=mime-version:content-type:references:in-reply-to:date:cc:to:from:subject: message-id:from; bh=wzgFVCXFuS1yjKT+2q+2Tw/kBMZxsI6O4WnNcIjgawM=; b=agdvMPf/onQorev2X0700g7VnbqLMFQrYWq1DwQzmLQjXZQShKofizJx9M1TP+FeSz4hPx3b7iatA Metouu9TnF3TtzkqcliiY50cvN0Nb7O7KHYZVXxMdzkxgc4hngepS4RmpaDGtXQdoKmrhmYkg4cfh6 mrPkHSQ+X8NpT768wAf3pwiSDlklRY0w54CpGdeKmeZ0OToZcNrcTtxxCi+RPxRF1K8BHU4n7STAa3 0AA+jUmIElGCkEwtCTj5LeUaNE+D/eZHBorgeEPamR3GINJwknVgneSVgGMCopZrqjT5Pe2YAnzzWv /c/oG+PchhV30YXU6tk4HZoP8+WhklA== X-MHO-RoutePath: aGlwcGll X-MHO-User: 8bf70368-1560-11ea-b80c-052b4a66b6b2 X-Report-Abuse-To: https://support.duocircle.com/support/solutions/articles/5000540958-duocircle-standard-smtp-abuse-information X-Originating-IP: 67.177.211.60 X-Mail-Handler: DuoCircle Outbound SMTP Received: from ilsoft.org (unknown [67.177.211.60]) by outbound3.ore.mailhop.org (Halon) with ESMTPSA id 8bf70368-1560-11ea-b80c-052b4a66b6b2; Tue, 03 Dec 2019 00:05:03 +0000 (UTC) Received: from rev (rev [172.22.42.240]) by ilsoft.org (8.15.2/8.15.2) with ESMTP id xB304wMU097597; Mon, 2 Dec 2019 17:04:59 -0700 (MST) (envelope-from ian@freebsd.org) Message-ID: Subject: Re: gpioiic FDT overlays for sun8i-h3 From: Ian Lepore To: Nick Kostirya Cc: Milan Obuch , freebsd-arm@freebsd.org Date: Mon, 02 Dec 2019 17:04:58 -0700 In-Reply-To: <20191129201244.0bc85b09@thinkpad> References: <20191128152901.39dbeb4d@thinkpad> <20191128062149.577be86eb7dc15ae5805f31a@bidouilliste.com> <20191129153754.28fb5763@thinkpad> <20191129144316.739c8664@zeta.dino.sk> <20191129155431.05d4e14f@thinkpad> <20191129150944.67a2b723a6724c46f7559f96@bidouilliste.com> <0ce78262af1dd3b404b9a85a780933d7e11f008e.camel@freebsd.org> <20191129201244.0bc85b09@thinkpad> Content-Type: multipart/mixed; boundary="=-MzQpjdwgpxxGsx/on2aO" X-Mailer: Evolution 3.28.5 FreeBSD GNOME Team Mime-Version: 1.0 X-Rspamd-Queue-Id: 47Rj0g2Bz4z4Z4v X-Spamd-Bar: - Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-1.83 / 15.00]; local_wl_from(0.00)[freebsd.org]; NEURAL_HAM_MEDIUM(-0.94)[-0.937,0]; NEURAL_HAM_LONG(-0.89)[-0.891,0]; ASN(0.00)[asn:16509, ipnet:54.186.0.0/15, country:US] X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Dec 2019 00:05:07 -0000 --=-MzQpjdwgpxxGsx/on2aO Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Fri, 2019-11-29 at 20:12 +0200, Nick Kostirya via freebsd-arm wrote: > On Fri, 29 Nov 2019 09:23:31 -0700 > Ian Lepore wrote: > > > [...] > > > > I am working on this, though. I'm thinking we should have something > > usable later today, or at worst by the end of the weekend if it turns > > complicated. > > > > -- Ian > > Thank you very match!!! > > I hope the new driver can be used in FreeBSD 12. > > Well, it did turn complicated, but I got it all worked out. Are you building an image from source code, or using a downloaded snapshot or release image, or what? If you are building from source, apply the attached patch to your source tree and rebuild the kernel. If you are using a prebuilt image, then I'll get these changes merged to the stable-12 tree this week, and the next stable-12 snapshot images will include what you need. I think those images get built every Thursday. -- Ian --=-MzQpjdwgpxxGsx/on2aO Content-Disposition: attachment; filename="gpioiic_for_stable-12.diff" Content-Type: text/x-patch; name="gpioiic_for_stable-12.diff"; charset="UTF-8" Content-Transfer-Encoding: base64 SW5kZXg6IHNoYXJlL21hbi9tYW40L2dwaW9paWMuNAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzaGFyZS9tYW4v bWFuNC9ncGlvaWljLjQJKHJldmlzaW9uIDM1NTMxNSkKKysrIHNoYXJlL21hbi9tYW40L2dwaW9p aWMuNAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogLlwiCiAuXCIgJEZyZWVCU0Qk CiAuXCIKLS5EZCBNYXkgMTQsIDIwMTQKKy5EZCBEZWNlbWJlciAxLCAyMDE5CiAuRHQgR1BJT0lJ QyA0CiAuT3MKIC5TaCBOQU1FCkBAIC0zNywzMSArMzcsMzUgQEAga2VybmVsIGNvbmZpZ3VyYXRp b24gZmlsZToKIC5CZCAtcmFnZ2VkIC1vZmZzZXQgaW5kZW50CiAuQ2QgImRldmljZSBncGlvIgog LkNkICJkZXZpY2UgZ3Bpb2lpYyIKLS5DZCAiZGV2aWNlIGlpYyIKIC5DZCAiZGV2aWNlIGlpY2Ji IgogLkNkICJkZXZpY2UgaWljYnVzIgogLkVkCisuUHAKK0FsdGVybmF0aXZlbHksIHRvIGxvYWQg dGhlIGRyaXZlciBhcyBhCittb2R1bGUgYXQgYm9vdCB0aW1lLCBwbGFjZSB0aGUgZm9sbG93aW5n IGxpbmUgaW4KKy5YciBsb2FkZXIuY29uZiA1IDoKKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVu dAorZ3Bpb2lpY19sb2FkPSJZRVMiCisuRWQKIC5TaCBERVNDUklQVElPTgogVGhlCiAuTm0KIGRy aXZlciBwcm92aWRlcyBhbiBJSUMgYml0LWJhbmdpbmcgaW50ZXJmYWNlIHVzaW5nIHR3byBHUElP IHBpbnMgZm9yIHRoZQotU0NMIGFuZCBTREEgb24gdGhlCi0uTm0gZ3Bpb2J1cyAuCitTQ0wgYW5k IFNEQSBsaW5lcyBvbiB0aGUgYnVzLgorLlBwCiAuTm0KLWltcGxlbWVudHMgYW4gb3BlbiBjb2xs ZWN0b3Iga2luZCBvZiBvdXRwdXQsIGFzIHJlY29tbWVuZGVkIGJ5IHRoZSBzdGFuZGFyZCwKLXdo ZW4gZHJpdmluZyB0aGUgcGlucyBvbiB0aGUKLS5ObSBncGlvYnVzICwKLWkuZSwgdGhleSBhcmUg bmV2ZXIgc3dpdGNoZWQgdG8gdGhlIGxvZ2ljYWwgdmFsdWUgb2YgJzEnLAotb3IgdGhleSBhcmUg JzAnIG9yIHNpbXBseSBvcGVuIChIaS1aL3RyaS1zdGF0ZSkuCi1TbyB0aGUgcHVsbHVwIHJlc2lz dG9ycyBhcmUgcmVxdWlyZWQgc28KLS5ObQotY2FuIHdvcmsuCitzaW11bGF0ZXMgYW4gb3BlbiBj b2xsZWN0b3Iga2luZCBvZiBvdXRwdXQgd2hlbiBtYW5hZ2luZyB0aGUgcGlucyBvbiB0aGUKK2J1 cywgZXZlbiBvbiBzeXN0ZW1zIHdoaWNoIGRvbid0IGRpcmVjdGx5IHN1cHBvcnQgY29uZmlndXJp bmcgZ3BpbyBwaW5zCitpbiB0aGF0IG1vZGUuCitUaGUgcGlucyBhcmUgbmV2ZXIgZHJpdmVuIHRv IHRoZSBsb2dpY2FsIHZhbHVlIG9mICcxJy4KK1RoZXkgYXJlIGRyaXZlbiB0byAnMCcgb3Igc3dp dGNoZWQgdG8gaW5wdXQgbW9kZSAoSGktWi90cmktc3RhdGUpLCBhbmQKK2FuIGV4dGVybmFsIHB1 bGx1cCByZXNpc3RvciBwdWxscyB0aGUgbGluZSB0byB0aGUgMSBzdGF0ZSB1bmxlc3Mgc29tZQor b3RoZXIgZGV2aWNlIG9uIHRoZSBidXMgaXMgZHJpdmluZyBpdCB0byAwLgogLlBwCisuU2ggSElO VFMgQ09ORklHVVJBVElPTgogT24gYQogLlhyIGRldmljZS5oaW50cyA1Ci1iYXNlZCBzeXN0ZW0s IGxpa2UKLS5MaSBNSVBTICwKLXRoZXNlIHZhbHVlcyBhcmUgY29uZmlndXJhYmxlIGZvciB0aGUK K2Jhc2VkIHN5c3RlbSwgc3VjaCBhcyBNSVBTLCB0aGVzZSB2YWx1ZXMgYXJlIGNvbmZpZ3VyYWJs ZSBmb3IKIC5ObSA6CiAuQmwgLXRhZyAtd2lkdGggIi5WYSBoaW50LmdwaW9paWMuJWQuYXRYWFgi CiAuSXQgVmEgaGludC5ncGlvaWljLiVkLmF0CkBAIC02OCw3ICs3Miw3IEBAIE9uIGEKIFRoZQog Lk5tIGdwaW9idXMKIHlvdSBhcmUgYXR0YWNoaW5nIHRvLgotTm9ybWFsbHkganVzdCBncGlvYnVz MC4KK05vcm1hbGx5IGp1c3QgZ3Bpb2J1czAgb24gc3lzdGVtcyB3aXRoIGEgc2luZ2xlIGJhbmsg b2YgZ3BpbyBwaW5zLgogLkl0IFZhIGhpbnQuZ3Bpb2lpYy4lZC5waW5zCiBUaGlzIGlzIGEgYml0 bWFzayBvZiB0aGUgcGlucyBvbiB0aGUKIC5ObSBncGlvYnVzCkBAIC03OCw2ICs4Miw5IEBAIFRv IGNvbmZpZ3VyZSBwaW4gMCBhbmQgNywgdXNlIHRoZSBiaXRtYXNrIG9mCiAwYjEwMDAwMDAxIGFu ZCBjb252ZXJ0IGl0IHRvIGEgaGV4YWRlY2ltYWwgdmFsdWUgb2YgMHgwMDgxLgogUGxlYXNlIG5v dGUgdGhhdCB0aGlzIG1hc2sgc2hvdWxkIG9ubHkgZXZlciBoYXZlIHR3byBiaXRzIHNldAogKGFu eSBvdGhlciBiaXRzIC0gaS5lLiwgcGlucyAtIHdpbGwgYmUgaWdub3JlZCkuCitCZWNhdXNlCisu Tm0KK211c3QgYmUgYSBjaGlsZCBvZiB0aGUgZ3Bpb2J1cywgYm90aCBncGlvIHBpbnMgbXVzdCBi ZSBwYXJ0IG9mIHRoYXQgYnVzLgogLkl0IFZhIGhpbnQuZ3Bpb2lpYy4lZC5zY2wKIEluZGljYXRl cyB3aGljaCBiaXQgaW4gdGhlCiAuVmEgaGludC5ncGlvaWljLiVkLnBpbnMKQEAgLTkxLDM1ICs5 OCwzMiBAQCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgU0RBVEEKIHNvdXJjZS4KIE9wdGlvbmFsLCBk ZWZhdWx0cyB0byAxLgogLkVsCi0uUHAKLU9uIGEKKy5TaCBGRFQgQ09ORklHVVJBVElPTgorT24g YW4KIC5YciBGRFQgNAotYmFzZWQgc3lzdGVtLCBsaWtlCi0uTGkgQVJNICwKLXRoZSBEVFMgcGFy dCBmb3IgYQorYmFzZWQgc3lzdGVtLCBzdWNoIGFzIEFSTSwgdGhlIERUUyBub2RlIGZvcgogLk5t IGdwaW9paWMKLWRldmljZSB1c3VhbGx5IGxvb2tzIGxpa2U6Citjb25mb3JtcyB0byB0aGUgc3Rh bmRhcmQgYmluZGluZ3MgZG9jdW1lbnQgaTJjL2kyYy1ncGlvLnlhbWwuCitUaGUgZGV2aWNlIG5v ZGUgdHlwaWNhbGx5IGFwcGVhcnMgYXQgdGhlIHJvb3Qgb2YgdGhlIGRldmljZSB0cmVlLgorVGhl IGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEKKy5ObQorbm9kZSB3aXRoIG9uZSBzbGF2ZSBk ZXZpY2UKK29uIHRoZSBJSUMgYnVzOgogLkJkIC1saXRlcmFsCi1ncGlvOiBncGlvIHsKLQotCWdw aW8tY29udHJvbGxlcjsKLQkuLi4KLQorLyB7CiAJZ3Bpb2lpYzAgewotCQljb21wYXRpYmxlID0g ImdwaW9paWMiOwotCQkvKgotCQkgKiBBdHRhY2ggdG8gR1BJTyBwaW5zIDIxIGFuZCAyMi4gIFNl dCB0aGVtCi0JCSAqIGluaXRpYWxseSBhcyBpbnB1dHMuCi0JCSAqLwotCQlncGlvcyA9IDwmZ3Bp byAyMSAxIDAKLQkJCSAmZ3BpbyAyMiAxIDA+OwotCQlzY2wgPSA8MD47CQkvKiBHUElPIHBpbiAy MSAtIG9wdGlvbmFsICovCi0JCXNkYSA9IDwxPjsJCS8qIEdQSU8gcGluIDIyIC0gb3B0aW9uYWwg Ki8KKwkJY29tcGF0aWJsZSA9ICJpMmMtZ3BpbyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVs dCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9ncGlvaWljMD47CisJCXNjbC1ncGlvcyA9IDwm Z3BpbzEgIDUgR1BJT19BQ1RJVkVfSElHSD47CisJCXNkYS1ncGlvcyA9IDwmZ3BpbzcgMTEgR1BJ T19BQ1RJVkVfSElHSD47CisJCXN0YXR1cyA9ICJva2F5IjsKIAotCQkvKiBUaGlzIGlzIGFuIGV4 YW1wbGUgb2YgYSBncGlvaWljIGNoaWxkLiAqLwotCQlncGlvaWljLWNoaWxkMCB7Ci0JCQljb21w YXRpYmxlID0gImxtNzUiOwotCQkJaTJjLWFkZHJlc3MgPSA8MHg0Zj47CisJCS8qIE9uZSBzbGF2 ZSBkZXZpY2Ugb24gdGhlIGkyYyBidXMuICovCisJCXJ0Y0A1MSB7CisJCQljb21wYXRpYmxlPSJu eHAscGNmMjEyNyI7CisJCQlyZWcgPSA8MHg1MT47CisJCQlzdGF0dXMgPSAib2theSI7CiAJCX07 CiAJfTsKIH07CkBAIC0xMjgsMzUgKzEzMiwxOSBAQCBPcHRpb25hbCwgZGVmYXVsdHMgdG8gMS4K IFdoZXJlOgogLkJsIC10YWcgLXdpZHRoICIuVmEgY29tcGF0aWJsZSIKIC5JdCBWYSBjb21wYXRp YmxlCi1TaG91bGQgYWx3YXlzIGJlIHNldCB0byAiZ3Bpb2lpYyIuCi0uSXQgVmEgZ3Bpb3MKLVRo ZQotLlZhIGdwaW9zCi1wcm9wZXJ0eSBpbmRpY2F0ZXMgd2hpY2ggR1BJTyBwaW5zIHNob3VsZCBi ZSB1c2VkIGZvciBTQ0xPQ0sgYW5kIFNEQVRBCi1vbiB0aGUgR1BJTyBJSUMgYml0LWJhbmdpbmcg YnVzLgotRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUKLS5WYSBncGlvcwotcHJvcGVydHksIHBs ZWFzZSBjb25zdWx0Ci0uUGEgL3Vzci9zcmMvc3lzL2R0cy9iaW5kaW5ncy1ncGlvLnR4dCAuCi0u SXQgVmEgc2NsCi1UaGUKLS5WYSBzY2wKLW9wdGlvbiBpbmRpY2F0ZXMgd2hpY2ggYml0IGluIHRo ZQotLlZhIGdwaW9zCi1zaG91bGQgYmUgdXNlZCBhcyB0aGUgU0NMT0NLIHNvdXJjZS4KLU9wdGlv bmFsLCBkZWZhdWx0cyB0byAwLgotLkl0IFZhIHNkYQotVGhlCi0uVmEgc2RhCi1vcHRpb24gaW5k aWNhdGVzIHdoaWNoIGJpdCBpbiB0aGUKLS5WYSBncGlvcwotc2hvdWxkIGJlIHVzZWQgYXMgdGhl IFNEQVRBIHNvdXJjZS4KLU9wdGlvbmFsLCBkZWZhdWx0cyB0byAxLgorU2hvdWxkIGJlIHNldCB0 byAiaTJjLWdwaW8iLgorVGhlIGRlcHJlY2F0ZWQgc3RyaW5nICJncGlvaWljIiBpcyBhbHNvIGFj Y2VwdGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKy5JdCBWYSBzY2wtZ3Bpb3MgVmEg c2RhLWdwaW9zCitUaGVzZSBwcm9wZXJ0aWVzIGluZGljYXRlIHdoaWNoIEdQSU8gcGlucyBzaG91 bGQgYmUgdXNlZCBmb3IgY2xvY2sKK2FuZCBkYXRhIG9uIHRoZSBHUElPIElJQyBiaXQtYmFuZ2lu ZyBidXMuCitUaGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IHRoZSB0d28gcGlucyBiZWxvbmcg dG8gdGhlIHNhbWUgZ3BpbyBjb250cm9sbGVyLgorLkl0IFZhIHBpbmN0cmwtbmFtZXMgcGluY3Ry bC0wCitUaGVzZSBwcm9wZXJ0aWVzIG1heSBiZSByZXF1aXJlZCB0byBjb25maWd1cmUgdGhlIGNo b3NlbiBwaW5zIGFzIGdwaW8KK3BpbnMsIHVubGVzcyB0aGUgcGlucyBkZWZhdWx0IHRvIHRoYXQg c3RhdGUgb24geW91ciBzeXN0ZW0uCiAuRWwKIC5TaCBTRUUgQUxTTwogLlhyIGZkdCA0ICwKIC5Y ciBncGlvIDQgLAotLlhyIGdwaW9sZWQgNCAsCiAuWHIgaWljIDQgLAogLlhyIGlpY2JiIDQgLAog LlhyIGlpY2J1cyA0CkluZGV4OiBzeXMvZGV2L2dwaW8vZ3Bpb2J1cy5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IHN5cy9kZXYvZ3Bpby9ncGlvYnVzLmMJKHJldmlzaW9uIDM1NTMxNSkKKysrIHN5cy9kZXYvZ3Bp by9ncGlvYnVzLmMJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDE4IEBAIHN0YXRpYyBpbnQg Z3Bpb2J1c19waW5fZ2V0KGRldmljZV90LCBkZXZpY2VfdCwgdWluCiBzdGF0aWMgaW50IGdwaW9i dXNfcGluX3RvZ2dsZShkZXZpY2VfdCwgZGV2aWNlX3QsIHVpbnQzMl90KTsKIAogLyoKKyAqIGdw aW9idXNfcGluIGZsYWdzCisgKiAgVGhlIGZsYWdzIGluIHN0cnVjdCBncGlvYnVzX3BpbiBhcmUg bm90IHJlbGF0ZWQgdG8gdGhlIGZsYWdzIHVzZWQgYnkgdGhlCisgKiAgbG93LWxldmVsIGNvbnRy b2xsZXIgZHJpdmVyIGluIHN0cnVjdCBncGlvX3Bpbi4gIEN1cnJlbnRseSwgb25seSBwaW5zCisg KiAgYWNxdWlyZWQgdmlhIEZEVCBkYXRhIGhhdmUgZ3Bpb2J1c19waW4uZmxhZ3Mgc2V0LCBzb3Vy Y2VkIGZyb20gdGhlIGZsYWdzIGluCisgKiAgdGhlIEZEVCBwcm9wZXJ0aWVzLiAgSW4gdGhlb3J5 LCB0aGVzZSBmbGFncyBhcmUgZGVmaW5lZCBwZXItcGxhdGZvcm0uICBJbgorICogIHByYWN0aWNl IHRoZXkgYXJlIGFsd2F5cyB0aGUgZmxhZ3MgZnJvbSB0aGUgZHQtYmluZGluZ3MvZ3Bpby9ncGlv LmggZmlsZS4KKyAqICBUaGUgb25seSBvbmUgb2YgdGhvc2UgZmxhZ3Mgd2UgY3VycmVudGx5IHN1 cHBvcnQgaXMgZm9yIGhhbmRsaW5nIGFjdGl2ZS1sb3cKKyAqICBwaW5zLCBzbyB3ZSBqdXN0IGRl ZmluZSB0aGF0IGZsYWcgaGVyZSBpbnN0ZWFkIG9mIGluY2x1ZGluZyBhIEdQTCdkIGhlYWRlci4K KyAqLworI2RlZmluZQlHUElPX0FDVElWRV9MT1cgMQorCisvKgogICogWFhYIC0+IE1vdmUgbWUg dG8gYmV0dGVyIHBsYWNlIC0gZ3Bpb19zdWJyLmM/CiAgKiBBbHNvLCB0aGlzIGZ1bmN0aW9uIG11 c3QgYmUgY2hhbmdlZCB3aGVuIGludGVycnVwdCBjb25maWd1cmF0aW9uCiAgKiBkYXRhIHdpbGwg YmUgbW92ZWQgaW50byBzdHJ1Y3QgcmVzb3VyY2UuCkBAIC0xMzUsNiArMTQ3LDExNCBAQCBncGlv X2NoZWNrX2ZsYWdzKHVpbnQzMl90IGNhcHMsIHVpbnQzMl90IGZsYWdzKQogCXJldHVybiAoMCk7 CiB9CiAKK2ludAorZ3Bpb19waW5fZ2V0X2J5X2J1c19waW5udW0oZGV2aWNlX3QgYnVzZGV2LCB1 aW50MzJfdCBwaW5udW0sIGdwaW9fcGluX3QgKnBwaW4pCit7CisJZ3Bpb19waW5fdCBwaW47CisJ aW50IGVycjsKKworCWVyciA9IGdwaW9idXNfYWNxdWlyZV9waW4oYnVzZGV2LCBwaW5udW0pOwor CWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIChFQlVTWSk7CisKKwlwaW4gPSBtYWxsb2Moc2l6ZW9m KCpwaW4pLCBNX0RFVkJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOworCisJcGluLT5kZXYgPSBkZXZp Y2VfZ2V0X3BhcmVudChidXNkZXYpOworCXBpbi0+cGluID0gcGlubnVtOworCXBpbi0+ZmxhZ3Mg PSAwOworCisJKnBwaW4gPSBwaW47CisJcmV0dXJuICgwKTsKK30KKworaW50CitncGlvX3Bpbl9n ZXRfYnlfY2hpbGRfaW5kZXgoZGV2aWNlX3QgY2hpbGRkZXYsIHVpbnQzMl90IGlkeCwgZ3Bpb19w aW5fdCAqcHBpbikKK3sKKwlzdHJ1Y3QgZ3Bpb2J1c19pdmFyICpkZXZpOworCisJZGV2aSA9IEdQ SU9CVVNfSVZBUihjaGlsZGRldik7CisJaWYgKGlkeCA+PSBkZXZpLT5ucGlucykKKwkJcmV0dXJu IChFSU5WQUwpOworCisJcmV0dXJuIChncGlvX3Bpbl9nZXRfYnlfYnVzX3Bpbm51bShkZXZpY2Vf Z2V0X3BhcmVudChjaGlsZGRldiksCisJICAgIGRldmktPnBpbnNbaWR4XSwgcHBpbikpOworfQor CitpbnQKK2dwaW9fcGluX2dldGNhcHMoZ3Bpb19waW5fdCBwaW4sIHVpbnQzMl90ICpjYXBzKQor eworCisJS0FTU0VSVChwaW4gIT0gTlVMTCwgKCJHUElPIHBpbiBpcyBOVUxMLiIpKTsKKwlLQVNT RVJUKHBpbi0+ZGV2ICE9IE5VTEwsICgiR1BJTyBwaW4gZGV2aWNlIGlzIE5VTEwuIikpOworCXJl dHVybiAoR1BJT19QSU5fR0VUQ0FQUyhwaW4tPmRldiwgcGluLT5waW4sIGNhcHMpKTsKK30KKwor aW50CitncGlvX3Bpbl9pc19hY3RpdmUoZ3Bpb19waW5fdCBwaW4sIGJvb2wgKmFjdGl2ZSkKK3sK KwlpbnQgcnY7CisJdWludDMyX3QgdG1wOworCisJS0FTU0VSVChwaW4gIT0gTlVMTCwgKCJHUElP IHBpbiBpcyBOVUxMLiIpKTsKKwlLQVNTRVJUKHBpbi0+ZGV2ICE9IE5VTEwsICgiR1BJTyBwaW4g ZGV2aWNlIGlzIE5VTEwuIikpOworCXJ2ID0gR1BJT19QSU5fR0VUKHBpbi0+ZGV2LCBwaW4tPnBp biwgJnRtcCk7CisJaWYgKHJ2ICAhPSAwKSB7CisJCXJldHVybiAocnYpOworCX0KKworCWlmIChw aW4tPmZsYWdzICYgR1BJT19BQ1RJVkVfTE9XKQorCQkqYWN0aXZlID0gdG1wID09IDA7CisJZWxz ZQorCQkqYWN0aXZlID0gdG1wICE9IDA7CisJcmV0dXJuICgwKTsKK30KKwordm9pZAorZ3Bpb19w aW5fcmVsZWFzZShncGlvX3Bpbl90IGdwaW8pCit7CisJZGV2aWNlX3QgYnVzZGV2OworCisJaWYg KGdwaW8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJS0FTU0VSVChncGlvLT5kZXYgIT0gTlVMTCwg KCJHUElPIHBpbiBkZXZpY2UgaXMgTlVMTC4iKSk7CisKKwlidXNkZXYgPSBHUElPX0dFVF9CVVMo Z3Bpby0+ZGV2KTsKKwlpZiAoYnVzZGV2ICE9IE5VTEwpCisJCWdwaW9idXNfcmVsZWFzZV9waW4o YnVzZGV2LCBncGlvLT5waW4pOworCisJZnJlZShncGlvLCBNX0RFVkJVRik7Cit9CisKK2ludAor Z3Bpb19waW5fc2V0X2FjdGl2ZShncGlvX3Bpbl90IHBpbiwgYm9vbCBhY3RpdmUpCit7CisJaW50 IHJ2OworCXVpbnQzMl90IHRtcDsKKworCWlmIChwaW4tPmZsYWdzICYgR1BJT19BQ1RJVkVfTE9X KQorCQl0bXAgPSBhY3RpdmUgPyAwIDogMTsKKwllbHNlCisJCXRtcCA9IGFjdGl2ZSA/IDEgOiAw OworCisJS0FTU0VSVChwaW4gIT0gTlVMTCwgKCJHUElPIHBpbiBpcyBOVUxMLiIpKTsKKwlLQVNT RVJUKHBpbi0+ZGV2ICE9IE5VTEwsICgiR1BJTyBwaW4gZGV2aWNlIGlzIE5VTEwuIikpOworCXJ2 ID0gR1BJT19QSU5fU0VUKHBpbi0+ZGV2LCBwaW4tPnBpbiwgdG1wKTsKKwlyZXR1cm4gKHJ2KTsK K30KKworaW50CitncGlvX3Bpbl9zZXRmbGFncyhncGlvX3Bpbl90IHBpbiwgdWludDMyX3QgZmxh Z3MpCit7CisJaW50IHJ2OworCisJS0FTU0VSVChwaW4gIT0gTlVMTCwgKCJHUElPIHBpbiBpcyBO VUxMLiIpKTsKKwlLQVNTRVJUKHBpbi0+ZGV2ICE9IE5VTEwsICgiR1BJTyBwaW4gZGV2aWNlIGlz IE5VTEwuIikpOworCisJcnYgPSBHUElPX1BJTl9TRVRGTEFHUyhwaW4tPmRldiwgcGluLT5waW4s IGZsYWdzKTsKKwlyZXR1cm4gKHJ2KTsKK30KKwogc3RhdGljIHZvaWQKIGdwaW9idXNfcHJpbnRf cGlucyhzdHJ1Y3QgZ3Bpb2J1c19pdmFyICpkZXZpLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4p CiB7CkBAIC0zNzAsOCArNDkwLDYgQEAgZ3Bpb2J1c19wYXJzZV9waW5zKHN0cnVjdCBncGlvYnVz X3NvZnRjICpzYywgZGV2aWMKIAkJZGV2aS0+cGluc1tucGlucysrXSA9IGk7CiAJfQogCi0JaWYg KGdwaW9idXNfYWNxdWlyZV9jaGlsZF9waW5zKHNjLT5zY19idXNkZXYsIGNoaWxkKSAhPSAwKQot CQlyZXR1cm4gKEVJTlZBTCk7CiAJcmV0dXJuICgwKTsKIH0KIApAQCAtNDI1LDggKzU0Myw2IEBA IGdwaW9idXNfcGFyc2VfcGluX2xpc3Qoc3RydWN0IGdwaW9idXNfc29mdGMgKnNjLCBkCiAJCXAg PSBlbmRwICsgMTsKIAl9CiAKLQlpZiAoZ3Bpb2J1c19hY3F1aXJlX2NoaWxkX3BpbnMoc2MtPnNj X2J1c2RldiwgY2hpbGQpICE9IDApCi0JCXJldHVybiAoRUlOVkFMKTsKIAlyZXR1cm4gKDApOwog fQogCkluZGV4OiBzeXMvZGV2L2dwaW8vZ3Bpb2J1c3Zhci5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9k ZXYvZ3Bpby9ncGlvYnVzdmFyLmgJKHJldmlzaW9uIDM1NTMxNSkKKysrIHN5cy9kZXYvZ3Bpby9n cGlvYnVzdmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBpbnQgb2Z3X2dw aW9idXNfcGFyc2VfZ3Bpb3MoZGV2aWNlX3QsIGNoYXIgKiwgc3RydQogdm9pZCBvZndfZ3Bpb2J1 c19yZWdpc3Rlcl9wcm92aWRlcihkZXZpY2VfdCk7CiB2b2lkIG9md19ncGlvYnVzX3VucmVnaXN0 ZXJfcHJvdmlkZXIoZGV2aWNlX3QpOwogCi0vKiBDb25zdW1lcnMgaW50ZXJmYWNlLiAqLworLyog QWNxdWlyZSBhIHBpbiBieSBwYXJzaW5nIEZEVCBkYXRhLiAqLwogaW50IGdwaW9fcGluX2dldF9i eV9vZndfbmFtZShkZXZpY2VfdCBjb25zdW1lciwgcGhhbmRsZV90IG5vZGUsCiAgICAgY2hhciAq bmFtZSwgZ3Bpb19waW5fdCAqZ3Bpbyk7CiBpbnQgZ3Bpb19waW5fZ2V0X2J5X29md19pZHgoZGV2 aWNlX3QgY29uc3VtZXIsIHBoYW5kbGVfdCBub2RlLApAQCAtMTUwLDE0ICsxNTAsMjkgQEAgaW50 IGdwaW9fcGluX2dldF9ieV9vZndfcHJvcGVydHkoZGV2aWNlX3QgY29uc3VtZXIKICAgICBjaGFy ICpuYW1lLCBncGlvX3Bpbl90ICpncGlvKTsKIGludCBncGlvX3Bpbl9nZXRfYnlfb2Z3X3Byb3Bp ZHgoZGV2aWNlX3QgY29uc3VtZXIsIHBoYW5kbGVfdCBub2RlLAogICAgIGNoYXIgKm5hbWUsIGlu dCBpZHgsIGdwaW9fcGluX3QgKmdwaW8pOworI2VuZGlmIC8qIEZEVCAqLworCisvKiBBY3F1aXJl IGEgcGluIGJ5IGJ1cyBhbmQgcGluIG51bWJlci4gKi8KK2ludCBncGlvX3Bpbl9nZXRfYnlfYnVz X3Bpbm51bShkZXZpY2VfdCBfYnVzLCB1aW50MzJfdCBfcGlubnVtLCBncGlvX3Bpbl90ICpfZ3Ap OworCisvKiBBY3F1aXJlIGEgcGluIGJ5IGNoaWxkIGFuZCBpbmRleCAodXNlZCBieSBkaXJlY3Qg Y2hpbGRyZW4gb2YgZ3Bpb2J1cykuICovCitpbnQgZ3Bpb19waW5fZ2V0X2J5X2NoaWxkX2luZGV4 KGRldmljZV90IF9jaGlsZCwgdWludDMyX3QgX2lkeCwgZ3Bpb19waW5fdCAqX2dwKTsKKworLyog UmVsZWFzZSBhIHBpbiBhY3F1aXJlZCB2aWEgYW55IGdwaW9fcGluX2dldF94eHgoKSBmdW5jdGlv bi4gKi8KIHZvaWQgZ3Bpb19waW5fcmVsZWFzZShncGlvX3Bpbl90IGdwaW8pOworCisvKiBXb3Jr IHdpdGggZ3BpbyBwaW5zIGFjcXVpcmVkIHVzaW5nIHRoZSBmdW5jdGlvbnMgYWJvdmUuICovCiBp bnQgZ3Bpb19waW5fZ2V0Y2FwcyhncGlvX3Bpbl90IHBpbiwgdWludDMyX3QgKmNhcHMpOwogaW50 IGdwaW9fcGluX2lzX2FjdGl2ZShncGlvX3Bpbl90IHBpbiwgYm9vbCAqYWN0aXZlKTsKIGludCBn cGlvX3Bpbl9zZXRfYWN0aXZlKGdwaW9fcGluX3QgcGluLCBib29sIGFjdGl2ZSk7CiBpbnQgZ3Bp b19waW5fc2V0ZmxhZ3MoZ3Bpb19waW5fdCBwaW4sIHVpbnQzMl90IGZsYWdzKTsKLSNlbmRpZgog c3RydWN0IHJlc291cmNlICpncGlvX2FsbG9jX2ludHJfcmVzb3VyY2UoZGV2aWNlX3QgY29uc3Vt ZXJfZGV2LCBpbnQgKnJpZCwKICAgICB1X2ludCBhbGxvY19mbGFncywgZ3Bpb19waW5fdCBwaW4s IHVpbnQzMl90IGludHJfbW9kZSk7CisKKy8qCisgKiBGdW5jdGlvbnMgc2hhcmVkIGJldHdlZW4g Z3Bpb2J1cyBhbmQgb3RoZXIgYnVzIGNsYXNzZXMgdGhhdCBkZXJpdmUgZnJvbSBpdDsKKyAqIHRo ZXNlIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IG90aGVyIGRyaXZlcnMuCisgKi8K IGludCBncGlvX2NoZWNrX2ZsYWdzKHVpbnQzMl90LCB1aW50MzJfdCk7CiBkZXZpY2VfdCBncGlv YnVzX2F0dGFjaF9idXMoZGV2aWNlX3QpOwogaW50IGdwaW9idXNfZGV0YWNoX2J1cyhkZXZpY2Vf dCk7CkluZGV4OiBzeXMvZGV2L2dwaW8vZ3Bpb2lpYy5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYv Z3Bpby9ncGlvaWljLmMJKHJldmlzaW9uIDM1NTMxNSkKKysrIHN5cy9kZXYvZ3Bpby9ncGlvaWlj LmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw5IEBACiAvKi0KLSAqIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtRnJlZUJTRAorICogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZQogICoKICAqIENvcHlyaWdodCAoYykgMjAwOSBPbGVrc2FuZHIgVHlt b3NoZW5rbyA8Z29uem9AZnJlZWJzZC5vcmc+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTHVpeiBP dGF2aW8gTyBTb3V6YQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg MjAxOSBJYW4gTGVwb3JlIDxpYW5AZnJlZWJzZC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKQEAgLTM5LDE0ICszOSw4IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNpbmNs dWRlIDxzeXMva2VybmVsLmg+CiAjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgogCi0jaWZkZWYgRkRU Ci0jaW5jbHVkZSA8ZGV2L2ZkdC9mZHRfY29tbW9uLmg+Ci0jaW5jbHVkZSA8ZGV2L29mdy9vZndf YnVzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPGRldi9ncGlvL2dwaW9idXN2YXIuaD4KICNpbmNs dWRlIDxkZXYvaWljYnVzL2lpY29uZi5oPgotI2luY2x1ZGUgPGRldi9paWNidXMvaWljYnVzLmg+ CiAKICNpbmNsdWRlICJncGlvYnVzX2lmLmgiCiAjaW5jbHVkZSAiaWljYmJfaWYuaCIKQEAgLTU3 LDIwMCArNTEsMjgxIEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKIAogc3RydWN0IGdwaW9paWNf c29mdGMgCiB7Ci0JZGV2aWNlX3QJc2NfZGV2OwotCWRldmljZV90CXNjX2J1c2RldjsKLQlpbnQJ CXNjbF9waW47Ci0JaW50CQlzZGFfcGluOworCWRldmljZV90CWRldjsKKwlncGlvX3Bpbl90CXNj bHBpbjsKKwlncGlvX3Bpbl90CXNkYXBpbjsKIH07CiAKLXN0YXRpYyBpbnQgZ3Bpb2lpY19wcm9i ZShkZXZpY2VfdCk7Ci1zdGF0aWMgaW50IGdwaW9paWNfYXR0YWNoKGRldmljZV90KTsKKyNpZmRl ZiBGRFQKIAotLyogaWljYmIgaW50ZXJmYWNlICovCi1zdGF0aWMgdm9pZCBncGlvaWljX3Jlc2V0 X2J1cyhkZXZpY2VfdCk7Ci1zdGF0aWMgdm9pZCBncGlvaWljX3NldHNkYShkZXZpY2VfdCwgaW50 KTsKLXN0YXRpYyB2b2lkIGdwaW9paWNfc2V0c2NsKGRldmljZV90LCBpbnQpOwotc3RhdGljIGlu dCBncGlvaWljX2dldHNkYShkZXZpY2VfdCk7Ci1zdGF0aWMgaW50IGdwaW9paWNfZ2V0c2NsKGRl dmljZV90KTsKLXN0YXRpYyBpbnQgZ3Bpb2lpY19yZXNldChkZXZpY2VfdCwgdV9jaGFyLCB1X2No YXIsIHVfY2hhciAqKTsKKyNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KIAorc3RhdGljIHN0 cnVjdCBvZndfY29tcGF0X2RhdGEgY29tcGF0X2RhdGFbXSA9IHsKKwl7ImkyYy1ncGlvIiwgIHRy dWV9LCAvKiBTdGFuZGFyZCBkZXZpY2V0cmVlIGNvbXBhdCBzdHJpbmcgKi8KKwl7ImdwaW9paWMi LCAgIHRydWV9LCAvKiBEZXByZWNhdGVkIG9sZCBmcmVlYnNkIGNvbXBhdCBzdHJpbmcgKi8KKwl7 TlVMTCwgICAgICAgIGZhbHNlfQorfTsKK09GV0JVU19QTlBfSU5GTyhjb21wYXRfZGF0YSk7CitT SU1QTEVCVVNfUE5QX0lORk8oY29tcGF0X2RhdGEpOworCitzdGF0aWMgcGhhbmRsZV90CitncGlv aWljX2dldF9ub2RlKGRldmljZV90IGJ1cywgZGV2aWNlX3QgZGV2KQoreworCisJLyogU2hhcmUg b3VyIGZkdCBub2RlIHdpdGggaWljYnVzIHNvIGl0IGNhbiBmaW5kIGl0cyBjaGlsZCBub2Rlcy4g Ki8KKwlyZXR1cm4gKG9md19idXNfZ2V0X25vZGUoYnVzKSk7Cit9CisKIHN0YXRpYyBpbnQKLWdw aW9paWNfcHJvYmUoZGV2aWNlX3QgZGV2KQorZ3Bpb2lpY19zZXR1cF9mZHRfcGlucyhzdHJ1Y3Qg Z3Bpb2lpY19zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGdwaW9idXNfaXZhciAqZGV2aTsKKwlwaGFu ZGxlX3Qgbm9kZTsKKwlpbnQgZXJyOwogCi0jaWZkZWYgRkRUCi0JaWYgKCFvZndfYnVzX3N0YXR1 c19va2F5KGRldikpCi0JCXJldHVybiAoRU5YSU8pOwotCWlmICghb2Z3X2J1c19pc19jb21wYXRp YmxlKGRldiwgImdwaW9paWMiKSkKLQkJcmV0dXJuIChFTlhJTyk7Ci0jZW5kaWYKLQlkZXZpID0g R1BJT0JVU19JVkFSKGRldik7Ci0JaWYgKGRldmktPm5waW5zIDwgR1BJT0lJQ19NSU5fUElOUykg ewotCQlkZXZpY2VfcHJpbnRmKGRldiwKLQkJICAgICJncGlvaWljIG5lZWRzIGF0IGxlYXN0ICVk IEdQSU8gcGlucyAob25seSAlZCBnaXZlbikuXG4iLAotCQkgICAgR1BJT0lJQ19NSU5fUElOUywg ZGV2aS0+bnBpbnMpOwotCQlyZXR1cm4gKEVOWElPKTsKKwlub2RlID0gb2Z3X2J1c19nZXRfbm9k ZShzYy0+ZGV2KTsKKworCS8qCisJICogSGlzdG9yaWNhbGx5LCB3ZSB1c2VkIHRoZSBmaXJzdCB0 d28gYXJyYXkgZWxlbWVudHMgb2YgdGhlIGdwaW9zCisJICogcHJvcGVydHkuICBUaGUgbW9kZXJu IGJpbmRpbmdzIHNwZWNpZnkgc2VwYXJhdGUgc2NsLWdwaW9zIGFuZAorCSAqIHNkYS1ncGlvcyBw cm9wZXJ0aWVzLiAgV2UgY29wZSB3aXRoIHdoaWNoZXZlciBpcyBwcmVzZW50LgorCSAqLworCWlm IChPRl9oYXNwcm9wKG5vZGUsICJncGlvcyIpKSB7CisJCWlmICgoZXJyID0gZ3Bpb19waW5fZ2V0 X2J5X29md19pZHgoc2MtPmRldiwgbm9kZSwKKwkJICAgIEdQSU9JSUNfU0NMX0RGTFQsICZzYy0+ c2NscGluKSkgIT0gMCkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiaW52YWxpZCBncGlv cyBwcm9wZXJ0eVxuIik7CisJCQlyZXR1cm4gKGVycik7CisJCX0KKwkJaWYgKChlcnIgPSBncGlv X3Bpbl9nZXRfYnlfb2Z3X2lkeChzYy0+ZGV2LCBub2RlLAorCQkgICAgR1BJT0lJQ19TREFfREZM VCwgJnNjLT5zZGFwaW4pKSAhPSAwKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJpdmFs aWQgZ3Bpb3MgcHJvcGVydHlcbiIpOworCQkJcmV0dXJuIChlcnIpOworCQl9CisJfSBlbHNlIHsK KwkJaWYgKChlcnIgPSBncGlvX3Bpbl9nZXRfYnlfb2Z3X3Byb3BlcnR5KHNjLT5kZXYsIG5vZGUs CisJCSAgICAic2NsLWdwaW9zIiwgJnNjLT5zY2xwaW4pKSAhPSAwKSB7CisJCQlkZXZpY2VfcHJp bnRmKHNjLT5kZXYsICJtaXNzaW5nIHNjbC1ncGlvcyBwcm9wZXJ0eVxuIik7CisJCQlyZXR1cm4g KGVycik7CisJCX0KKwkJaWYgKChlcnIgPSBncGlvX3Bpbl9nZXRfYnlfb2Z3X3Byb3BlcnR5KHNj LT5kZXYsIG5vZGUsCisJCSAgICAic2RhLWdwaW9zIiwgJnNjLT5zZGFwaW4pKSAhPSAwKSB7CisJ CQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJtaXNzaW5nIHNkYS1ncGlvcyBwcm9wZXJ0eVxuIik7 CisJCQlyZXR1cm4gKGVycik7CisJCX0KIAl9Ci0JZGV2aWNlX3NldF9kZXNjKGRldiwgIkdQSU8g STJDIGJpdC1iYW5naW5nIGRyaXZlciIpOwotCi0JcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7 CisJcmV0dXJuICgwKTsKIH0KKyNlbmRpZiAvKiBGRFQgKi8KIAogc3RhdGljIGludAotZ3Bpb2lp Y19hdHRhY2goZGV2aWNlX3QgZGV2KQorZ3Bpb2lpY19zZXR1cF9oaW50ZWRfcGlucyhzdHJ1Y3Qg Z3Bpb2lpY19zb2Z0YyAqc2MpCiB7Ci0JZGV2aWNlX3QJCWJpdGJhbmc7Ci0jaWZkZWYgRkRUCi0J cGhhbmRsZV90CQlub2RlOwotCXBjZWxsX3QJCQlwaW47Ci0jZW5kaWYKLQlzdHJ1Y3QgZ3Bpb2J1 c19pdmFyCSpkZXZpOwotCXN0cnVjdCBncGlvaWljX3NvZnRjCSpzYzsKKwlkZXZpY2VfdCBidXNk ZXY7CisJY29uc3QgY2hhciAqYnVzbmFtZSwgKmRldm5hbWU7CisJaW50IGVyciwgbnVtcGlucywg c2NsbnVtLCBzZGFudW0sIHVuaXQ7CiAKLQlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLQlz Yy0+c2NfZGV2ID0gZGV2OwotCXNjLT5zY19idXNkZXYgPSBkZXZpY2VfZ2V0X3BhcmVudChkZXYp OwotCWlmIChyZXNvdXJjZV9pbnRfdmFsdWUoZGV2aWNlX2dldF9uYW1lKGRldiksCi0JCWRldmlj ZV9nZXRfdW5pdChkZXYpLCAic2NsIiwgJnNjLT5zY2xfcGluKSkKLQkJc2MtPnNjbF9waW4gPSBH UElPSUlDX1NDTF9ERkxUOwotCWlmIChyZXNvdXJjZV9pbnRfdmFsdWUoZGV2aWNlX2dldF9uYW1l KGRldiksCi0JCWRldmljZV9nZXRfdW5pdChkZXYpLCAic2RhIiwgJnNjLT5zZGFfcGluKSkKLQkJ c2MtPnNkYV9waW4gPSBHUElPSUlDX1NEQV9ERkxUOworCWRldm5hbWUgPSBkZXZpY2VfZ2V0X25h bWUoc2MtPmRldik7CisJdW5pdCA9IGRldmljZV9nZXRfdW5pdChzYy0+ZGV2KTsKKwlidXNkZXYg PSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ZGV2KTsKIAorCS8qCisJICogSWYgdGhlcmUgaXMgbm90 IGFuICJhdCIgaGludCBuYW1pbmcgb3VyIGFjdHVhbCBwYXJlbnQsIHRoZW4gd2UKKwkgKiB3ZXJl bid0IGluc3RhbnRpYXRlZCBhcyBhIGNoaWxkIG9mIGdwaW9idXMgdmlhIGhpbnRzLCBhbmQgd2Ug dGh1cworCSAqIGNhbid0IGFjY2VzcyBpdmFycyB0aGF0IG9ubHkgZXhpc3QgZm9yIHN1Y2ggY2hp bGRyZW4uCisJICovCisJaWYgKHJlc291cmNlX3N0cmluZ192YWx1ZShkZXZuYW1lLCB1bml0LCAi YXQiLCAmYnVzbmFtZSkgIT0gMCB8fAorCSAgICAoc3RyY21wKGJ1c25hbWUsIGRldmljZV9nZXRf bmFtZXVuaXQoYnVzZGV2KSkgIT0gMCAmJgorCSAgICAgc3RyY21wKGJ1c25hbWUsIGRldmljZV9n ZXRfbmFtZShidXNkZXYpKSAhPSAwKSkgeworCQlyZXR1cm4gKEVOT0VOVCk7CisJfQorCisJLyog TWFrZSBzdXJlIHRoZXJlIHdlcmUgaGludHMgZm9yIGF0IGxlYXN0IHR3byBwaW5zLiAqLworCW51 bXBpbnMgPSBncGlvYnVzX2dldF9ucGlucyhzYy0+ZGV2KTsKKwlpZiAobnVtcGlucyA8IEdQSU9J SUNfTUlOX1BJTlMpIHsKICNpZmRlZiBGRFQKLQlpZiAoKG5vZGUgPSBvZndfYnVzX2dldF9ub2Rl KGRldikpID09IC0xKQotCQlyZXR1cm4gKEVOWElPKTsKLQlpZiAoT0ZfZ2V0ZW5jcHJvcChub2Rl LCAic2NsIiwgJnBpbiwgc2l6ZW9mKHBpbikpID4gMCkKLQkJc2MtPnNjbF9waW4gPSAoaW50KXBp bjsKLQlpZiAoT0ZfZ2V0ZW5jcHJvcChub2RlLCAic2RhIiwgJnBpbiwgc2l6ZW9mKHBpbikpID4g MCkKLQkJc2MtPnNkYV9waW4gPSAoaW50KXBpbjsKKwkJLyoKKwkJICogQmUgc2lsZW50IHdoZW4g dGhlcmUgYXJlIG5vIGhpbnRzIG9uIEZEVCBzeXN0ZW1zOyB0aGUgRkRUCisJCSAqIGRhdGEgd2ls bCBwcm92aWRlIHRoZSBwaW4gY29uZmlnICh3ZSdsbCB3aGluZSBpZiBpdCBkb2Vzbid0KS4KKwkJ ICovCisJCWlmIChudW1waW5zID09IDApIHsKKwkJCXJldHVybiAoRU5PRU5UKTsKKwkJfQogI2Vu ZGlmCisJCWRldmljZV9wcmludGYoc2MtPmRldiwgCisJCSAgICAiaW52YWxpZCBwaW5zIGhpbnQ7 IGl0IG11c3QgY29udGFpbiBhdCBsZWFzdCAlZCBwaW5zXG4iLAorCQkgICAgR1BJT0lJQ19NSU5f UElOUyk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CiAKLQlpZiAoc2MtPnNjbF9waW4gPCAwIHx8 IHNjLT5zY2xfcGluID4gMSkKLQkJc2MtPnNjbF9waW4gPSBHUElPSUlDX1NDTF9ERkxUOwotCWlm IChzYy0+c2RhX3BpbiA8IDAgfHwgc2MtPnNkYV9waW4gPiAxKQotCQlzYy0+c2RhX3BpbiA9IEdQ SU9JSUNfU0RBX0RGTFQ7CisJLyoKKwkgKiBPdXIgcGFyZW50IGJ1cyBoYXMgYWxyZWFkeSBwYXJz ZWQgdGhlIHBpbnMgaGludCBhbmQgaXQgd2lsbCB1c2UgdGhhdAorCSAqIGluZm8gd2hlbiB3ZSBj YWxsIGdwaW9fcGluX2dldF9ieV9jaGlsZF9pbmRleCgpLiAgQnV0IHdlIGhhdmUgdG8KKwkgKiBo YW5kbGUgdGhlIHNjbC9zZGEgaW5kZXggaGludHMgdGhhdCB0ZWxsIHVzIHdoaWNoIG9mIHRoZSB0 d28gcGlucyBpcworCSAqIHRoZSBjbG9jayBhbmQgd2hpY2ggaXMgdGhlIGRhdGEuICBUaGV5J3Jl IG9wdGlvbmFsLCBidXQgaWYgcHJlc2VudAorCSAqIHRoZXkgbXVzdCBiZSBhIHZhbGlkIGluZGV4 ICgwIDw9IGluZGV4IDwgbnVtcGlucykuCisJICovCisJaWYgKChlcnIgPSByZXNvdXJjZV9pbnRf dmFsdWUoZGV2bmFtZSwgdW5pdCwgInNjbCIsICZzY2xudW0pKSAhPSAwKQorCQlzY2xudW0gPSBH UElPSUlDX1NDTF9ERkxUOworCWVsc2UgaWYgKHNjbG51bSA8IDAgfHwgc2NsbnVtID49IG51bXBp bnMpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiaW52YWxpZCBzY2wgaGludCAlZFxuIiwg c2NsbnVtKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAoKGVyciA9IHJlc291cmNlX2lu dF92YWx1ZShkZXZuYW1lLCB1bml0LCAic2RhIiwgJnNkYW51bSkpICE9IDApCisJCXNkYW51bSA9 IEdQSU9JSUNfU0RBX0RGTFQ7CisJZWxzZSBpZiAoc2RhbnVtIDwgMCB8fCBzZGFudW0gPj0gbnVt cGlucykgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJpbnZhbGlkIHNkYSBoaW50ICVkXG4i LCBzZGFudW0pOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQogCi0JZGV2aSA9IEdQSU9CVVNfSVZB UihkZXYpOwotCWRldmljZV9wcmludGYoZGV2LCAiU0NMIHBpbjogJWQsIFNEQSBwaW46ICVkXG4i LAotCSAgICBkZXZpLT5waW5zW3NjLT5zY2xfcGluXSwgZGV2aS0+cGluc1tzYy0+c2RhX3Bpbl0p OworCS8qIEFsbG9jYXRlIGdwaW9idXNfcGluIHN0cnVjdHMgZm9yIHRoZSBwaW5zIHdlIGZvdW5k IGFib3ZlLiAqLworCWlmICgoZXJyID0gZ3Bpb19waW5fZ2V0X2J5X2NoaWxkX2luZGV4KHNjLT5k ZXYsIHNjbG51bSwKKwkgICAgJnNjLT5zY2xwaW4pKSAhPSAwKQorCQlyZXR1cm4gKGVycik7CisJ aWYgKChlcnIgPSBncGlvX3Bpbl9nZXRfYnlfY2hpbGRfaW5kZXgoc2MtPmRldiwgc2RhbnVtLAor CSAgICAmc2MtPnNkYXBpbikpICE9IDApCisJCXJldHVybiAoZXJyKTsKIAotCS8qIGFkZCBnZW5l cmljIGJpdC1iYW5naW5nIGNvZGUgKi8KLQliaXRiYW5nID0gZGV2aWNlX2FkZF9jaGlsZChkZXYs ICJpaWNiYiIsIC0xKTsKLQlkZXZpY2VfcHJvYmVfYW5kX2F0dGFjaChiaXRiYW5nKTsKLQogCXJl dHVybiAoMCk7CiB9CiAKLXN0YXRpYyBpbnQKLWdwaW9paWNfZGV0YWNoKGRldmljZV90IGRldikK K3N0YXRpYyB2b2lkCitncGlvaWljX3NldHNkYShkZXZpY2VfdCBkZXYsIGludCB2YWwpCiB7CisJ c3RydWN0IGdwaW9paWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWludCBl cnI7CiAKLQlidXNfZ2VuZXJpY19kZXRhY2goZGV2KTsKLQlkZXZpY2VfZGVsZXRlX2NoaWxkcmVu KGRldik7Ci0JcmV0dXJuICgwKTsKKwkvKgorCSAqIFNvbWUgY29udHJvbGxlcnMgY2Fubm90IHNl dCBhbiBvdXRwdXQgdmFsdWUgd2hpbGUgYSBwaW4gaXMgaW4gaW5wdXQKKwkgKiBtb2RlOyBpbiB0 aGF0IGNhc2Ugd2Ugc2V0IHRoZSBwaW4gYWdhaW4gYWZ0ZXIgY2hhbmdpbmcgbW9kZS4KKwkgKi8K KwllcnIgPSBncGlvX3Bpbl9zZXRfYWN0aXZlKHNjLT5zZGFwaW4sIHZhbCk7CisJZ3Bpb19waW5f c2V0ZmxhZ3Moc2MtPnNkYXBpbiwgR1BJT19QSU5fT1VUUFVUIHwgR1BJT19QSU5fT1BFTkRSQUlO KTsKKwlpZiAoZXJyICE9IDApCisJCWdwaW9fcGluX3NldF9hY3RpdmUoc2MtPnNkYXBpbiwgdmFs KTsKIH0KIAotLyoKLSAqIFJlc2V0IGJ1cyBieSBzZXR0aW5nIFNEQSBmaXJzdCBhbmQgdGhlbiBT Q0wuIAotICogTXVzdCBhbHdheXMgYmUgY2FsbGVkIHdpdGggZ3BpbyBidXMgbG9ja2VkLgotICov CiBzdGF0aWMgdm9pZAotZ3Bpb2lpY19yZXNldF9idXMoZGV2aWNlX3QgZGV2KQorZ3Bpb2lpY19z ZXRzY2woZGV2aWNlX3QgZGV2LCBpbnQgdmFsKQogewotCXN0cnVjdCBncGlvaWljX3NvZnRjCQkq c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IGdwaW9paWNfc29mdGMgKnNjID0g ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogCi0JR1BJT0JVU19QSU5fU0VURkxBR1Moc2MtPnNjX2J1 c2Rldiwgc2MtPnNjX2Rldiwgc2MtPnNkYV9waW4sCi0JICAgIEdQSU9fUElOX0lOUFVUKTsKLQlH UElPQlVTX1BJTl9TRVRGTEFHUyhzYy0+c2NfYnVzZGV2LCBzYy0+c2NfZGV2LCBzYy0+c2NsX3Bp biwKLQkgICAgR1BJT19QSU5fSU5QVVQpOworCWdwaW9fcGluX3NldGZsYWdzKHNjLT5zY2xwaW4s IEdQSU9fUElOX09VVFBVVCB8IEdQSU9fUElOX09QRU5EUkFJTik7CisJZ3Bpb19waW5fc2V0X2Fj dGl2ZShzYy0+c2NscGluLCB2YWwpOwogfQogCi1zdGF0aWMgdm9pZAotZ3Bpb2lpY19zZXRwaW4o c3RydWN0IGdwaW9paWNfc29mdGMgKnNjLCBpbnQgcGluLCBpbnQgdmFsKQorc3RhdGljIGludAor Z3Bpb2lpY19nZXRzY2woZGV2aWNlX3QgZGV2KQogewotCWludAkJCQllcnI7CisJc3RydWN0IGdw aW9paWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWJvb2wgdmFsOwogCi0J aWYgKHZhbCA9PSAwKSB7Ci0JCWVyciA9IEdQSU9CVVNfUElOX1NFVChzYy0+c2NfYnVzZGV2LCBz Yy0+c2NfZGV2LCBwaW4sIDApOwotCQlHUElPQlVTX1BJTl9TRVRGTEFHUyhzYy0+c2NfYnVzZGV2 LCBzYy0+c2NfZGV2LCBwaW4sCi0JCSAgICBHUElPX1BJTl9PVVRQVVQpOwotCi0JCS8qCi0JCSAq IFNvbWUgY29udHJvbGxlcnMgY2Fubm90IHNldCBvdXRwdXQgdmFsdWUgd2hpbGUgYSBwaW4gaXMg aW4KLQkJICogaW5wdXQgbW9kZS4KLQkJICovCi0JCWlmIChlcnIgIT0gMCkKLQkJCUdQSU9CVVNf UElOX1NFVChzYy0+c2NfYnVzZGV2LCBzYy0+c2NfZGV2LCBwaW4sIDApOwotCX0gZWxzZSB7Ci0J CUdQSU9CVVNfUElOX1NFVEZMQUdTKHNjLT5zY19idXNkZXYsIHNjLT5zY19kZXYsIHBpbiwKLQkJ ICAgIEdQSU9fUElOX0lOUFVUKTsKLQl9CisJZ3Bpb19waW5fc2V0ZmxhZ3Moc2MtPnNjbHBpbiwg R1BJT19QSU5fSU5QVVQpOworCWdwaW9fcGluX2lzX2FjdGl2ZShzYy0+c2NscGluLCAmdmFsKTsK KwlyZXR1cm4gKHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1ncGlvaWljX3NldHNkYShkZXZpY2Vf dCBkZXYsIGludCB2YWwpCitzdGF0aWMgaW50CitncGlvaWljX2dldHNkYShkZXZpY2VfdCBkZXYp CiB7Ci0Jc3RydWN0IGdwaW9paWNfc29mdGMJCSpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK KwlzdHJ1Y3QgZ3Bpb2lpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJYm9v bCB2YWw7CiAKLQlncGlvaWljX3NldHBpbihzYywgc2MtPnNkYV9waW4sIHZhbCk7CisJZ3Bpb19w aW5fc2V0ZmxhZ3Moc2MtPnNkYXBpbiwgR1BJT19QSU5fSU5QVVQpOworCWdwaW9fcGluX2lzX2Fj dGl2ZShzYy0+c2RhcGluLCAmdmFsKTsKKwlyZXR1cm4gKHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lk Ci1ncGlvaWljX3NldHNjbChkZXZpY2VfdCBkZXYsIGludCB2YWwpCitzdGF0aWMgaW50CitncGlv aWljX3Jlc2V0KGRldmljZV90IGRldiwgdV9jaGFyIHNwZWVkLCB1X2NoYXIgYWRkciwgdV9jaGFy ICpvbGRhZGRyKQogewotCXN0cnVjdCBncGlvaWljX3NvZnRjCQkqc2MgPSBkZXZpY2VfZ2V0X3Nv ZnRjKGRldik7CisJc3RydWN0IGdwaW9paWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0Yyhk ZXYpOwogCi0JZ3Bpb2lpY19zZXRwaW4oc2MsIHNjLT5zY2xfcGluLCB2YWwpOworCS8qIFN0b3Ag ZHJpdmluZyB0aGUgYnVzIHBpbnMuICovCisJZ3Bpb19waW5fc2V0ZmxhZ3Moc2MtPnNkYXBpbiwg R1BJT19QSU5fSU5QVVQpOworCWdwaW9fcGluX3NldGZsYWdzKHNjLT5zY2xwaW4sIEdQSU9fUElO X0lOUFVUKTsKKworCS8qIEluZGljYXRlIHRoYXQgd2UgaGF2ZSBubyBzbGF2ZSBhZGRyZXNzICht YXN0ZXIgbW9kZSkuICovCisJcmV0dXJuIChJSUNfRU5PQUREUik7CiB9CiAKLXN0YXRpYyBpbnQK LWdwaW9paWNfZ2V0cGluKHN0cnVjdCBncGlvaWljX3NvZnRjICpzYywgaW50IHBpbikKK3N0YXRp YyB2b2lkCitncGlvaWljX2NsZWFudXAoc3RydWN0IGdwaW9paWNfc29mdGMgKnNjKQogewotCXVu c2lnbmVkIGludAkJCXZhbDsKIAotCUdQSU9CVVNfUElOX1NFVEZMQUdTKHNjLT5zY19idXNkZXYs IHNjLT5zY19kZXYsIHBpbiwgR1BJT19QSU5fSU5QVVQpOwotCUdQSU9CVVNfUElOX0dFVChzYy0+ c2NfYnVzZGV2LCBzYy0+c2NfZGV2LCBwaW4sICZ2YWwpOwotCXJldHVybiAoKGludCl2YWwpOwor CWRldmljZV9kZWxldGVfY2hpbGRyZW4oc2MtPmRldik7CisKKwlpZiAoc2MtPnNjbHBpbiAhPSBO VUxMKQorCQlncGlvX3Bpbl9yZWxlYXNlKHNjLT5zY2xwaW4pOworCisJaWYgKHNjLT5zZGFwaW4g IT0gTlVMTCkKKwkJZ3Bpb19waW5fcmVsZWFzZShzYy0+c2RhcGluKTsKIH0KIAogc3RhdGljIGlu dAotZ3Bpb2lpY19nZXRzY2woZGV2aWNlX3QgZGV2KQorZ3Bpb2lpY19wcm9iZShkZXZpY2VfdCBk ZXYpCiB7Ci0Jc3RydWN0IGdwaW9paWNfc29mdGMJCSpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2 KTsKKwlpbnQgcnY7CiAKLQlyZXR1cm4gKGdwaW9paWNfZ2V0cGluKHNjLCBzYy0+c2NsX3Bpbikp OworCS8qCisJICogQnkgZGVmYXVsdCB3ZSBvbmx5IGJpZCB0byBhdHRhY2ggaWYgc3BlY2lmaWNh bGx5IGFkZGVkIGJ5IG91ciBwYXJlbnQKKwkgKiAodXN1YWxseSB2aWEgaGludC5ncGlvaWljLiMu YXQ9YnVzbmFtZSkuICBPbiBGRFQgc3lzdGVtcyB3ZSBiaWQgYXMKKwkgKiB0aGUgZGVmYXVsdCBk cml2ZXIgYmFzZWQgb24gYmVpbmcgY29uZmlndXJlZCBpbiB0aGUgRkRUIGRhdGEuCisJICovCisJ cnYgPSBCVVNfUFJPQkVfTk9XSUxEQ0FSRDsKKworI2lmZGVmIEZEVAorCWlmIChvZndfYnVzX3N0 YXR1c19va2F5KGRldikgJiYKKwkgICAgb2Z3X2J1c19zZWFyY2hfY29tcGF0aWJsZShkZXYsIGNv bXBhdF9kYXRhKS0+b2NkX2RhdGEpCisgICAgICAgICAgICAgICAgcnYgPSBCVVNfUFJPQkVfREVG QVVMVDsKKyNlbmRpZgorCisJZGV2aWNlX3NldF9kZXNjKGRldiwgIkdQSU8gSTJDIik7CisKKwly ZXR1cm4gKHJ2KTsKIH0KIAogc3RhdGljIGludAotZ3Bpb2lpY19nZXRzZGEoZGV2aWNlX3QgZGV2 KQorZ3Bpb2lpY19hdHRhY2goZGV2aWNlX3QgZGV2KQogewotCXN0cnVjdCBncGlvaWljX3NvZnRj CQkqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IGdwaW9paWNfc29mdGMgKnNj ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWludCBlcnI7CiAKLQlyZXR1cm4gKGdwaW9paWNf Z2V0cGluKHNjLCBzYy0+c2RhX3BpbikpOworCXNjLT5kZXYgPSBkZXY7CisKKwkvKiBBY3F1aXJl IG91ciBncGlvIHBpbnMuICovCisJZXJyID0gZ3Bpb2lpY19zZXR1cF9oaW50ZWRfcGlucyhzYyk7 CisjaWZkZWYgRkRUCisJaWYgKGVyciAhPSAwKQorCQllcnIgPSBncGlvaWljX3NldHVwX2ZkdF9w aW5zKHNjKTsKKyNlbmRpZgorCWlmIChlcnIgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5k ZXYsICJubyBwaW5zIGNvbmZpZ3VyZWRcbiIpOworCQlncGlvaWljX2NsZWFudXAoc2MpOworCQly ZXR1cm4gKEVOWElPKTsKKwl9CisKKwkvKiBTYXkgd2hhdCB3ZSBjYW1lIHVwIHdpdGggZm9yIHBp biBjb25maWcuICovCisJZGV2aWNlX3ByaW50ZihkZXYsICJTQ0wgcGluOiAlczolZCwgU0RBIHBp bjogJXM6JWRcbiIsCisJICAgIGRldmljZV9nZXRfbmFtZXVuaXQoR1BJT19HRVRfQlVTKHNjLT5z Y2xwaW4tPmRldikpLCBzYy0+c2NscGluLT5waW4sCisJICAgIGRldmljZV9nZXRfbmFtZXVuaXQo R1BJT19HRVRfQlVTKHNjLT5zZGFwaW4tPmRldikpLCBzYy0+c2RhcGluLT5waW4pOworCisJLyog QWRkIHRoZSBiaXRiYW5nIGRyaXZlciBhcyBvdXIgb25seSBjaGlsZDsgaXQgd2lsbCBhZGQgaWlj YnVzLiAqLworCWRldmljZV9hZGRfY2hpbGQoc2MtPmRldiwgImlpY2JiIiwgLTEpOworCXJldHVy biAoYnVzX2dlbmVyaWNfYXR0YWNoKGRldikpOwogfQogCiBzdGF0aWMgaW50Ci1ncGlvaWljX3Jl c2V0KGRldmljZV90IGRldiwgdV9jaGFyIHNwZWVkLCB1X2NoYXIgYWRkciwgdV9jaGFyICpvbGRh ZGRyKQorZ3Bpb2lpY19kZXRhY2goZGV2aWNlX3QgZGV2KQogewotCXN0cnVjdCBncGlvaWljX3Nv ZnRjCQkqc2M7CisJc3RydWN0IGdwaW9paWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0Yyhk ZXYpOworCWludCBlcnI7CiAKLQlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLQlncGlvaWlj X3Jlc2V0X2J1cyhzYy0+c2NfZGV2KTsKKwlpZiAoKGVyciA9IGJ1c19nZW5lcmljX2RldGFjaChk ZXYpKSAhPSAwKQorCQlyZXR1cm4gKGVycik7CiAKLQlyZXR1cm4gKElJQ19FTk9BRERSKTsKLX0K KwlncGlvaWljX2NsZWFudXAoc2MpOwogCi0jaWZkZWYgRkRUCi1zdGF0aWMgcGhhbmRsZV90Ci1n cGlvaWljX2dldF9ub2RlKGRldmljZV90IGJ1cywgZGV2aWNlX3QgZGV2KQotewotCi0JLyogV2Ug b25seSBoYXZlIG9uZSBjaGlsZCwgdGhlIGlpY2JiLCB3aGljaCBuZWVkcyBvdXIgb3duIG5vZGUu ICovCi0JcmV0dXJuIChvZndfYnVzX2dldF9ub2RlKGJ1cykpOworCXJldHVybiAoMCk7CiB9Ci0j ZW5kaWYKIAogc3RhdGljIGRldmNsYXNzX3QgZ3Bpb2lpY19kZXZjbGFzczsKIApAQCAtMjgyLDYg KzM1Nyw3IEBAIHN0YXRpYyBkcml2ZXJfdCBncGlvaWljX2RyaXZlciA9IHsKIH07CiAKIERSSVZF Ul9NT0RVTEUoZ3Bpb2lpYywgZ3Bpb2J1cywgZ3Bpb2lpY19kcml2ZXIsIGdwaW9paWNfZGV2Y2xh c3MsIDAsIDApOworRFJJVkVSX01PRFVMRShncGlvaWljLCBzaW1wbGVidXMsIGdwaW9paWNfZHJp dmVyLCBncGlvaWljX2RldmNsYXNzLCAwLCAwKTsKIERSSVZFUl9NT0RVTEUoaWljYmIsIGdwaW9p aWMsIGlpY2JiX2RyaXZlciwgaWljYmJfZGV2Y2xhc3MsIDAsIDApOwogTU9EVUxFX0RFUEVORChn cGlvaWljLCBpaWNiYiwgSUlDQkJfTUlOVkVSLCBJSUNCQl9QUkVGVkVSLCBJSUNCQl9NQVhWRVIp OwogTU9EVUxFX0RFUEVORChncGlvaWljLCBncGlvYnVzLCAxLCAxLCAxKTsKSW5kZXg6IHN5cy9k ZXYvZ3Bpby9vZndfZ3Bpb2J1cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvZ3Bpby9vZndfZ3Bp b2J1cy5jCShyZXZpc2lvbiAzNTUzMTUpCisrKyBzeXMvZGV2L2dwaW8vb2Z3X2dwaW9idXMuYwko d29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsNiBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAK ICNpbmNsdWRlICJncGlvYnVzX2lmLmgiCiAKLSNkZWZpbmUJR1BJT19BQ1RJVkVfTE9XCQkxCi0K IHN0YXRpYyBzdHJ1Y3Qgb2Z3X2dwaW9idXNfZGV2aW5mbyAqb2Z3X2dwaW9idXNfc2V0dXBfZGV2 aW5mbyhkZXZpY2VfdCwKIAlkZXZpY2VfdCwgcGhhbmRsZV90KTsKIHN0YXRpYyB2b2lkIG9md19n cGlvYnVzX2Rlc3Ryb3lfZGV2aW5mbyhkZXZpY2VfdCwgc3RydWN0IG9md19ncGlvYnVzX2Rldmlu Zm8gKik7CkBAIC0xNDAsODIgKzEzOCw2IEBAIGdwaW9fcGluX2dldF9ieV9vZndfbmFtZShkZXZp Y2VfdCBjb25zdW1lciwgcGhhbmRsCiAJcmV0dXJuIChncGlvX3Bpbl9nZXRfYnlfb2Z3X2lkeChj b25zdW1lciwgbm9kZSwgaWR4LCBwaW4pKTsKIH0KIAotdm9pZAotZ3Bpb19waW5fcmVsZWFzZShn cGlvX3Bpbl90IGdwaW8pCi17Ci0JZGV2aWNlX3QgYnVzZGV2OwotCi0JaWYgKGdwaW8gPT0gTlVM TCkKLQkJcmV0dXJuOwotCi0JS0FTU0VSVChncGlvLT5kZXYgIT0gTlVMTCwgKCJpbnZhbGlkIHBp biBzdGF0ZSIpKTsKLQotCWJ1c2RldiA9IEdQSU9fR0VUX0JVUyhncGlvLT5kZXYpOwotCWlmIChi dXNkZXYgIT0gTlVMTCkKLQkJZ3Bpb2J1c19yZWxlYXNlX3BpbihidXNkZXYsIGdwaW8tPnBpbik7 Ci0KLQkvKiBYWFhYIFVucmVzZXJ2ZSBwaW4uICovCi0JZnJlZShncGlvLCBNX0RFVkJVRik7Ci19 Ci0KLWludAotZ3Bpb19waW5fZ2V0Y2FwcyhncGlvX3Bpbl90IHBpbiwgdWludDMyX3QgKmNhcHMp Ci17Ci0KLQlLQVNTRVJUKHBpbiAhPSBOVUxMLCAoIkdQSU8gcGluIGlzIE5VTEwuIikpOwotCUtB U1NFUlQocGluLT5kZXYgIT0gTlVMTCwgKCJHUElPIHBpbiBkZXZpY2UgaXMgTlVMTC4iKSk7Ci0J cmV0dXJuIChHUElPX1BJTl9HRVRDQVBTKHBpbi0+ZGV2LCBwaW4tPnBpbiwgY2FwcykpOwotfQot Ci1pbnQKLWdwaW9fcGluX2lzX2FjdGl2ZShncGlvX3Bpbl90IHBpbiwgYm9vbCAqYWN0aXZlKQot ewotCWludCBydjsKLQl1aW50MzJfdCB0bXA7Ci0KLQlLQVNTRVJUKHBpbiAhPSBOVUxMLCAoIkdQ SU8gcGluIGlzIE5VTEwuIikpOwotCUtBU1NFUlQocGluLT5kZXYgIT0gTlVMTCwgKCJHUElPIHBp biBkZXZpY2UgaXMgTlVMTC4iKSk7Ci0JcnYgPSBHUElPX1BJTl9HRVQocGluLT5kZXYsIHBpbi0+ cGluLCAmdG1wKTsKLQlpZiAocnYgICE9IDApIHsKLQkJcmV0dXJuIChydik7Ci0JfQotCi0JaWYg KHBpbi0+ZmxhZ3MgJiBHUElPX0FDVElWRV9MT1cpCi0JCSphY3RpdmUgPSB0bXAgPT0gMDsKLQll bHNlCi0JCSphY3RpdmUgPSB0bXAgIT0gMDsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLWdwaW9f cGluX3NldF9hY3RpdmUoZ3Bpb19waW5fdCBwaW4sIGJvb2wgYWN0aXZlKQotewotCWludCBydjsK LQl1aW50MzJfdCB0bXA7Ci0KLQlpZiAocGluLT5mbGFncyAmIEdQSU9fQUNUSVZFX0xPVykKLQkJ dG1wID0gYWN0aXZlID8gMCA6IDE7Ci0JZWxzZQotCQl0bXAgPSBhY3RpdmUgPyAxIDogMDsKLQot CUtBU1NFUlQocGluICE9IE5VTEwsICgiR1BJTyBwaW4gaXMgTlVMTC4iKSk7Ci0JS0FTU0VSVChw aW4tPmRldiAhPSBOVUxMLCAoIkdQSU8gcGluIGRldmljZSBpcyBOVUxMLiIpKTsKLQlydiA9IEdQ SU9fUElOX1NFVChwaW4tPmRldiwgcGluLT5waW4sIHRtcCk7Ci0JcmV0dXJuIChydik7Ci19Ci0K LWludAotZ3Bpb19waW5fc2V0ZmxhZ3MoZ3Bpb19waW5fdCBwaW4sIHVpbnQzMl90IGZsYWdzKQot ewotCWludCBydjsKLQotCUtBU1NFUlQocGluICE9IE5VTEwsICgiR1BJTyBwaW4gaXMgTlVMTC4i KSk7Ci0JS0FTU0VSVChwaW4tPmRldiAhPSBOVUxMLCAoIkdQSU8gcGluIGRldmljZSBpcyBOVUxM LiIpKTsKLQotCXJ2ID0gR1BJT19QSU5fU0VURkxBR1MocGluLT5kZXYsIHBpbi0+cGluLCBmbGFn cyk7Ci0JcmV0dXJuIChydik7Ci19Ci0KIC8qCiAgKiBPRldfR1BJT0JVUyBkcml2ZXIuCiAgKi8K QEAgLTQ5Miw3ICs0MTQsNyBAQCBvZndfZ3Bpb2J1c19wcm9iZShkZXZpY2VfdCBkZXYpCiAJCXJl dHVybiAoRU5YSU8pOwogCWRldmljZV9zZXRfZGVzYyhkZXYsICJPRlcgR1BJTyBidXMiKTsKIAot CXJldHVybiAoMCk7CisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7CiB9CiAKIHN0YXRpYyBp bnQKQEAgLTUxMSw2ICs0MzMsOCBAQCBvZndfZ3Bpb2J1c19hdHRhY2goZGV2aWNlX3QgZGV2KQog CSAqLwogCWZvciAoY2hpbGQgPSBPRl9jaGlsZChvZndfYnVzX2dldF9ub2RlKGRldikpOyBjaGls ZCAhPSAwOwogCSAgICBjaGlsZCA9IE9GX3BlZXIoY2hpbGQpKSB7CisJCWlmIChPRl9oYXNwcm9w KGNoaWxkLCAiZ3Bpby1ob2ciKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoIU9GX2hhc3Byb3AoY2hp bGQsICJncGlvcyIpKQogCQkJY29udGludWU7CiAJCWlmIChvZndfZ3Bpb2J1c19hZGRfZmR0X2No aWxkKGRldiwgTlVMTCwgY2hpbGQpID09IE5VTEwpCkluZGV4OiBzeXMvZGV2L29mdy9vZndfYnVz X3N1YnIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L29mdy9vZndfYnVzX3N1YnIuaAkocmV2aXNp b24gMzU1MzE1KQorKysgc3lzL2Rldi9vZncvb2Z3X2J1c19zdWJyLmgJKHdvcmtpbmcgY29weSkK QEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IGludHJfbWFwX2RhdGFfZmR0IHsKICNkZWZpbmUgRkRU Q09NUEFUX1BOUF9JTkZPKHQsIGJ1c25hbWUpIFwKIAlNT0RVTEVfUE5QX0lORk8oRkRUQ09NUEFU X1BOUF9ERVNDUiwgYnVzbmFtZSwgdCwgdCwgc2l6ZW9mKHQpIC8gc2l6ZW9mKHRbMF0pKTsKIAot I2RlZmluZSBTSU1QTEVCVVNfUE5QX0lORk8odCkgRkRUQ09NUEFUX1BOUF9JTkZPKHQsIHNpbXBs ZWJ1cykKKyNkZWZpbmUJT0ZXQlVTX1BOUF9JTkZPKHQpCUZEVENPTVBBVF9QTlBfSU5GTyh0LCBv ZndidXMpCisjZGVmaW5lCVNJTVBMRUJVU19QTlBfSU5GTyh0KQlGRFRDT01QQVRfUE5QX0lORk8o dCwgc2ltcGxlYnVzKQogCiAvKiBHZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIG9md19idXNfaWYu bSBtZXRob2RzIGFuZCBoZWxwZXIgcm91dGluZXMgKi8KIGludAlvZndfYnVzX2dlbl9zZXR1cF9k ZXZpbmZvKHN0cnVjdCBvZndfYnVzX2RldmluZm8gKiwgcGhhbmRsZV90KTsKSW5kZXg6IC4KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gLgkocmV2aXNpb24gMzU1MzE1KQorKysgLgkod29ya2luZyBjb3B5KQoKUHJv cGVydHkgY2hhbmdlcyBvbjogLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1vZGlmaWVkOiBzdm46bWVyZ2VpbmZvCiMj IC0wLDAgKzAsMSAjIwogICBNZXJnZWQgL2hlYWQ6cjM1NTIxNCwzNTUyMzksMzU1Mjc0LDM1NTI3 Ni0zNTUyNzcsMzU1Mjk1LDM1NTI5OAo= --=-MzQpjdwgpxxGsx/on2aO--