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=-8.6 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 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 116B7C433E5 for ; Tue, 14 Jul 2020 02:45:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BCAC320C56 for ; Tue, 14 Jul 2020 02:45:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="ev5Ec00s" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726600AbgGNCpy (ORCPT ); Mon, 13 Jul 2020 22:45:54 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:17053 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726150AbgGNCpy (ORCPT ); Mon, 13 Jul 2020 22:45:54 -0400 X-UUID: 67c7cb1e5b374b20960f7ce50c3cee3a-20200714 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=975ruLJWK2UEEjJheSFU1U1TujxpE3lT6xRaTLKYNBk=; b=ev5Ec00sMFA/aMiLlx8mSAcyRY/+5W7z1CZbB2mq4Ti/MY8IaUGIdUeWiBten5pb237+YtzsDLBz4C/LEkPe8Xb/4lx0M/M1Z85tJMn8CAdGT/AfmAk1kLI0zgu+7FFlxlJwa8/SlL+gCD3C20/0EF5OqwRaT8DsTtV4+de/KHM=; X-UUID: 67c7cb1e5b374b20960f7ce50c3cee3a-20200714 Received: from mtkcas11.mediatek.inc [(172.21.101.40)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1405219988; Tue, 14 Jul 2020 10:45:47 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs01n1.mediatek.inc (172.21.101.68) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 14 Jul 2020 10:45:46 +0800 Received: from [172.21.77.33] (172.21.77.33) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 14 Jul 2020 10:45:43 +0800 Message-ID: <1594694747.26207.8.camel@mtkswgap22> Subject: Re: [PATCH v2 2/2] soc: mediatek: add mtk-devapc driver From: Neal Liu To: Matthias Brugger CC: Neal Liu , Rob Herring , , , , lkml , Date: Tue, 14 Jul 2020 10:45:47 +0800 In-Reply-To: <22002c0e-ec4e-187a-69ce-d2dac9b554bb@gmail.com> References: <1594285927-1840-1-git-send-email-neal.liu@mediatek.com> <1594285927-1840-3-git-send-email-neal.liu@mediatek.com> <1594626336.22730.36.camel@mtkswgap22> <22002c0e-ec4e-187a-69ce-d2dac9b554bb@gmail.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gTW9uLCAyMDIwLTA3LTEzIGF0IDEzOjE2ICswMjAwLCBNYXR0aGlhcyBCcnVnZ2VyIHdyb3Rl Og0KPiANCj4gT24gMTMvMDcvMjAyMCAwOTo0NSwgTmVhbCBMaXUgd3JvdGU6DQo+ID4gT24gRnJp LCAyMDIwLTA3LTEwIGF0IDE0OjE0ICswMjAwLCBNYXR0aGlhcyBCcnVnZ2VyIHdyb3RlOg0KPiA+ Pg0KPiA+IFtzbmlwXQ0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyBpbnQgZ2V0X3Zpb19zbGF2ZV9u dW0oaW50IHNsYXZlX3R5cGUpDQo+ID4+DQo+ID4+IEkgaGF2ZSBhIGhhcmQgdGltZSB0byB1bmRl cnN0YW5kIHRoZSB1c2VmdWxsbmVzcyBvZiB0aGlzLCBjYW4geW91IHBsZWFzZSBleHBsYWluLg0K PiA+Pg0KPiA+IA0KPiA+IFRoZSBiYXNpYyBpZGVhIGlzIHRvIGdldCB0b3RhbCBudW1iZXJzIG9m IHNsYXZlcy4gQW5kIHdlIGNhbiB1c2UgaXQgdG8NCj4gPiBzY2FuIGFsbCBzbGF2ZXMgd2hpY2gg aGFzIGJlZW4gdHJpZ2dlcmVkIHZpb2xhdGlvbi4NCj4gPiBJIHRoaW5rIEkgY2FuIHBhc3MgaXQg dGhyb3VnaCBEVCBkYXRhIGluc3RlYWQgb2YgdXNpbmcgbXRrX2RldmljZV9pbmZvDQo+ID4gYXJy YXkuIEknbGwgc2VuZCBhbm90aGVyIHBhdGNoZXMgdG8gY2hhbmdlIGl0Lg0KPiA+IA0KPiA+Pj4g K3sNCj4gPj4+ICsJaWYgKHNsYXZlX3R5cGUgPT0gMCkNCj4gPj4+ICsJCXJldHVybiBBUlJBWV9T SVpFKG10a19kZXZpY2VzX2luZnJhKTsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIDA7DQo+ID4+ PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyB1MzIgZ2V0X3NoaWZ0X2dyb3VwKHN0cnVjdCBt dGtfZGV2YXBjX2NvbnRleHQgKmRldmFwY19jdHgsDQo+ID4+PiArCQkJICAgaW50IHNsYXZlX3R5 cGUsIGludCB2aW9faWR4KQ0KPiA+Pj4gK3sNCj4gPj4+ICsJdTMyIHZpb19zaGlmdF9zdGE7DQo+ ID4+PiArCXZvaWQgX19pb21lbSAqcmVnOw0KPiA+Pj4gKwlpbnQgYml0Ow0KPiA+Pj4gKw0KPiA+ Pj4gKwlyZWcgPSBtdGtfZGV2YXBjX3BkX2dldChkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCBWSU9f U0hJRlRfU1RBLCAwKTsNCj4gPj4+ICsJdmlvX3NoaWZ0X3N0YSA9IHJlYWRsKHJlZyk7DQo+ID4+ PiArDQo+ID4+PiArCWZvciAoYml0ID0gMDsgYml0IDwgMzI7IGJpdCsrKSB7DQo+ID4+PiArCQlp ZiAoKHZpb19zaGlmdF9zdGEgPj4gYml0KSAmIDB4MSkgPiArCQkJYnJlYWs7DQo+ID4+PiArCX0N Cj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIGJpdDsNCj4gPj4NCj4gPj4gV2UgcmV0dXJuIHRoZSBm aXJzdCBwb3NpdGlvbiAoZnJvbSB0aGUgcmlnaHQpIG9mIHRoZSByaWdzdGVyIHdpdGggdGhlIGJp dCBzZXQgdG8NCj4gPj4gb25lLiBDb3JyZWN0Pw0KPiA+PiBDYW4ndCB3ZSB1c2UgX19mZnMoKSBm b3IgdGhpcz8NCj4gPiANCj4gPiBZZXMsIHRoYW5rcyBmb3IgeW91ciByZW1pbmRzIHRvIHVzZSBf X2ZmcygpLg0KPiA+IEknbGwgcmV2aXNlIGl0IGluIG5leHQgcGF0Y2hlcy4NCj4gPiANCj4gPj4N Cj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIGludCBjaGVja192aW9fbWFza19zdGEo c3RydWN0IG10a19kZXZhcGNfY29udGV4dCAqZGV2YXBjX2N0eCwNCj4gPj4+ICsJCQkgICAgICBp bnQgc2xhdmVfdHlwZSwgdTMyIG1vZHVsZSwgaW50IHBkX3JlZ190eXBlKQ0KPiA+Pj4gK3sNCj4g Pj4+ICsJdTMyIHJlZ19pbmRleCwgcmVnX29mZnNldDsNCj4gPj4+ICsJdm9pZCBfX2lvbWVtICpy ZWc7DQo+ID4+PiArCXUzMiB2YWx1ZTsNCj4gPj4+ICsNCj4gPj4+ICsJVklPX01BU0tfU1RBX1JF R19HRVQobW9kdWxlKTsNCj4gPj4+ICsNCj4gPj4+ICsJcmVnID0gbXRrX2RldmFwY19wZF9nZXQo ZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwgcGRfcmVnX3R5cGUsIHJlZ19pbmRleCk7DQo+ID4+DQo+ ID4+IHJlZyA9IG10a19kZXZhcGNfcGRfZ2V0KGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIHBkX3Jl Z190eXBlLA0KPiA+PiBWSU9fTU9EX1RPX1JFR19JTkQobW9kdWxlKSk7DQo+ID4gDQo+ID4gT2th eSwgSSdsbCByZXZpc2UgaXQgaW4gbmV4dCBwYXRjaGVzLg0KPiA+IA0KPiA+Pg0KPiA+Pj4gKwl2 YWx1ZSA9IHJlYWRsKHJlZyk7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiAoKHZhbHVlID4+IHJl Z19vZmZzZXQpICYgMHgxKTsNCj4gPj4NCj4gPj4gcmV0dXJuICgodmFsdWUgPj4gVklPX01PRF9U T19SRUdfT0ZGKG1vZHVsZSkpICYgMHgxKTsNCj4gPiANCj4gPiBPa2F5LCBJJ2xsIHJldmlzZSBp dCBpbiBuZXh0IHBhdGNoZXMuDQo+ID4gDQo+ID4+DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4g K3N0YXRpYyBpbnQgY2hlY2tfdmlvX21hc2soc3RydWN0IG10a19kZXZhcGNfY29udGV4dCAqZGV2 YXBjX2N0eCwgaW50IHNsYXZlX3R5cGUsDQo+ID4+PiArCQkJICB1MzIgbW9kdWxlKQ0KPiA+Pj4g K3sNCj4gPj4+ICsJcmV0dXJuIGNoZWNrX3Zpb19tYXNrX3N0YShkZXZhcGNfY3R4LCBzbGF2ZV90 eXBlLCBtb2R1bGUsIFZJT19NQVNLKTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGlj IGludCBjaGVja192aW9fc3RhdHVzKHN0cnVjdCBtdGtfZGV2YXBjX2NvbnRleHQgKmRldmFwY19j dHgsDQo+ID4+PiArCQkJICAgIGludCBzbGF2ZV90eXBlLCB1MzIgbW9kdWxlKQ0KPiA+Pj4gK3sN Cj4gPj4+ICsJcmV0dXJuIGNoZWNrX3Zpb19tYXNrX3N0YShkZXZhcGNfY3R4LCBzbGF2ZV90eXBl LCBtb2R1bGUsIFZJT19TVEEpOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICtzdGF0aWMgdm9p ZCBjbGVhcl92aW9fc3RhdHVzKHN0cnVjdCBtdGtfZGV2YXBjX2NvbnRleHQgKmRldmFwY19jdHgs DQo+ID4+PiArCQkJICAgICBpbnQgc2xhdmVfdHlwZSwgdTMyIG1vZHVsZSkNCj4gPj4+ICt7DQo+ ID4+PiArCXUzMiByZWdfaW5kZXgsIHJlZ19vZmZzZXQ7DQo+ID4+PiArCXZvaWQgX19pb21lbSAq cmVnOw0KPiA+Pj4gKw0KPiA+Pj4gKwlWSU9fTUFTS19TVEFfUkVHX0dFVChtb2R1bGUpOw0KPiA+ Pj4gKw0KPiA+Pj4gKwlyZWcgPSBtdGtfZGV2YXBjX3BkX2dldChkZXZhcGNfY3R4LCBzbGF2ZV90 eXBlLCBWSU9fU1RBLCByZWdfaW5kZXgpOw0KPiA+Pj4gKwl3cml0ZWwoMHgxIDw8IHJlZ19vZmZz ZXQsIHJlZyk7DQo+ID4+PiArDQo+ID4+PiArCWlmIChjaGVja192aW9fc3RhdHVzKGRldmFwY19j dHgsIHNsYXZlX3R5cGUsIG1vZHVsZSkpDQo+ID4+PiArCQlwcl9lcnIoUEZYICIlczogQ2xlYXIg ZmFpbGVkLCBzbGF2ZV90eXBlOjB4JXgsIG1vZHVsZV9pbmRleDoweCV4XG4iLA0KPiA+Pj4gKwkJ ICAgICAgIF9fZnVuY19fLCBzbGF2ZV90eXBlLCBtb2R1bGUpOw0KPiA+Pj4gK30NCj4gPj4+ICsN Cj4gPj4+ICtzdGF0aWMgdm9pZCBtYXNrX21vZHVsZV9pcnEoc3RydWN0IG10a19kZXZhcGNfY29u dGV4dCAqZGV2YXBjX2N0eCwNCj4gPj4+ICsJCQkgICAgaW50IHNsYXZlX3R5cGUsIHUzMiBtb2R1 bGUsIGJvb2wgbWFzaykNCj4gPj4+ICt7DQo+ID4+PiArCXUzMiByZWdfaW5kZXgsIHJlZ19vZmZz ZXQ7DQo+ID4+PiArCXZvaWQgX19pb21lbSAqcmVnOw0KPiA+Pj4gKwl1MzIgdmFsdWU7DQo+ID4+ PiArDQo+ID4+PiArCVZJT19NQVNLX1NUQV9SRUdfR0VUKG1vZHVsZSk7DQo+ID4+PiArDQo+ID4+ PiArCXJlZyA9IG10a19kZXZhcGNfcGRfZ2V0KGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIFZJT19N QVNLLCByZWdfaW5kZXgpOw0KPiA+Pj4gKw0KPiA+Pj4gKwl2YWx1ZSA9IHJlYWRsKHJlZyk7DQo+ ID4+PiArCWlmIChtYXNrKQ0KPiA+Pj4gKwkJdmFsdWUgfD0gKDB4MSA8PCByZWdfb2Zmc2V0KTsN Cj4gPj4+ICsJZWxzZQ0KPiA+Pj4gKwkJdmFsdWUgJj0gfigweDEgPDwgcmVnX29mZnNldCk7DQo+ ID4+PiArDQo+ID4+PiArCXdyaXRlbCh2YWx1ZSwgcmVnKTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ ID4+PiArI2RlZmluZSBUSU1FT1VUX01TCQkxMDAwMA0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyBp bnQgcmVhZF9wb2xsX3RpbWVvdXQodm9pZCBfX2lvbWVtICphZGRyLCB1MzIgbWFzaykNCj4gPj4N Cj4gPj4gVGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvaW9wb2xsLmgN Cj4gPj4NCj4gPj4+ICt7DQo+ID4+PiArCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMg KyBtc2Vjc190b19qaWZmaWVzKFRJTUVPVVRfTVMpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlkbyB7DQo+ ID4+PiArCQlpZiAocmVhZGxfcmVsYXhlZChhZGRyKSAmIG1hc2spDQo+ID4+DQo+ID4+IFBsZWFz ZSB1c2UgYSB2YXJpYWJsZSB3aGVyZSB5b3Ugd3JpdGUgeW91ciB2YWx1ZSB0byBhbmQgdGhlbiBj aGVjayBmb3IgdGhlIG1hc2suDQo+ID4+IFRoYXQgbWFrcyB0aGUgY29kZSBlYXNpZXIgdG8gcmVh ZCBhbmQgSSB0aGluayBpcyBwYXJ0IG9mIHRoZSBjb2Rpbmcgc3R5bGUuDQo+ID4+DQo+ID4gDQo+ ID4gT2theSwgSSdsbCB1c2UgdGhlIGZ1bmN0aW9uIGluIGlvcG9sbC5oIGluc3RlYWQuDQo+ID4g VGhhbmtzIGZvciB5b3VyIHJlbWluZHMuDQo+ID4gDQo+ID4+PiArCQkJcmV0dXJuIDA7DQo+ID4+ PiArDQo+ID4+PiArCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsNCj4g Pj4+ICsNCj4gPj4+ICsJcmV0dXJuIChyZWFkbF9yZWxheGVkKGFkZHIpICYgbWFzaykgPyAwIDog LUVUSU1FRE9VVDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoNCj4gPj4+ICsgKiBzeW5j X3Zpb19kYmcgLSBzdGFydCB0byBnZXQgdmlvbGF0aW9uIGluZm9ybWF0aW9uIGJ5IHNlbGVjdGlu ZyB2aW9sYXRpb24NCj4gPj4+ICsgKgkJICBncm91cCBhbmQgZW5hYmxlIHZpb2xhdGlvbiBzaGlm dC4NCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIFJldHVybnMgc3luYyBkb25lIG9yIG5vdA0KPiA+Pj4g KyAqLw0KPiA+Pj4gK3N0YXRpYyB1MzIgc3luY192aW9fZGJnKHN0cnVjdCBtdGtfZGV2YXBjX2Nv bnRleHQgKmRldmFwY19jdHgsIGludCBzbGF2ZV90eXBlLA0KPiA+Pj4gKwkJCXUzMiBzaGlmdF9i aXQpDQo+ID4+PiArew0KPiA+Pj4gKwl2b2lkIF9faW9tZW0gKnBkX3Zpb19zaGlmdF9zdGFfcmVn Ow0KPiA+Pj4gKwl2b2lkIF9faW9tZW0gKnBkX3Zpb19zaGlmdF9zZWxfcmVnOw0KPiA+Pj4gKwl2 b2lkIF9faW9tZW0gKnBkX3Zpb19zaGlmdF9jb25fcmVnOw0KPiA+Pj4gKwl1MzIgc3luY19kb25l ID0gMDsNCj4gPj4+ICsNCj4gPj4+ICsJcGRfdmlvX3NoaWZ0X3N0YV9yZWcgPSBtdGtfZGV2YXBj X3BkX2dldChkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLA0KPiA+Pj4gKwkJCQkJCSBWSU9fU0hJRlRf U1RBLCAwKTsNCj4gPj4+ICsJcGRfdmlvX3NoaWZ0X3NlbF9yZWcgPSBtdGtfZGV2YXBjX3BkX2dl dChkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLA0KPiA+Pj4gKwkJCQkJCSBWSU9fU0hJRlRfU0VMLCAw KTsNCj4gPj4+ICsJcGRfdmlvX3NoaWZ0X2Nvbl9yZWcgPSBtdGtfZGV2YXBjX3BkX2dldChkZXZh cGNfY3R4LCBzbGF2ZV90eXBlLA0KPiA+Pj4gKwkJCQkJCSBWSU9fU0hJRlRfQ09OLCAwKTsNCj4g Pj4+ICsNCj4gPj4+ICsJd3JpdGVsKDB4MSA8PCBzaGlmdF9iaXQsIHBkX3Zpb19zaGlmdF9zZWxf cmVnKTsNCj4gPj4+ICsJd3JpdGVsKDB4MSwgcGRfdmlvX3NoaWZ0X2Nvbl9yZWcpOw0KPiA+Pj4g Kw0KPiA+Pj4gKwlpZiAoIXJlYWRfcG9sbF90aW1lb3V0KHBkX3Zpb19zaGlmdF9jb25fcmVnLCAw eDIpKQ0KPiA+Pj4gKwkJc3luY19kb25lID0gMTsNCj4gPj4+ICsJZWxzZQ0KPiA+Pj4gKwkJcHJf ZXJyKFBGWCAiJXM6IFNoaWZ0IHZpb2xhdGlvbiBpbmZvIGZhaWxlZFxuIiwgX19mdW5jX18pOw0K PiA+Pj4gKw0KPiA+Pj4gKwkvKiBEaXNhYmxlIHNoaWZ0IG1lY2hhbmlzbSAqLw0KPiA+Pg0KPiA+ PiBQbGVhc2UgYWRkIGEgY29tbWVudCBleHBsYWluaW5nIHdoYXQgdGhlIHNoaWZ0IG1lY2hhbmlz bSBpcyBhYm91dC4NCj4gPiANCj4gPiBPa2F5LCBJJ2xsIGFkZCBhIGNvbW1lbnQgdG8gZXhwbGFp biBpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMNCj4gPiBmdW5jdGlvbi4NCj4gPiANCj4gPj4N Cj4gPj4+ICsJd3JpdGVsKDB4MCwgcGRfdmlvX3NoaWZ0X2Nvbl9yZWcpOw0KPiA+Pj4gKwl3cml0 ZWwoMHgwLCBwZF92aW9fc2hpZnRfc2VsX3JlZyk7DQo+ID4+PiArCXdyaXRlbCgweDEgPDwgc2hp ZnRfYml0LCBwZF92aW9fc2hpZnRfc3RhX3JlZyk7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiBz eW5jX2RvbmU7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyB2b2lkIGRldmFwY192 aW9faW5mb19wcmludChzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0ICpkZXZhcGNfY3R4KQ0KPiA+ Pj4gK3sNCj4gPj4+ICsJc3RydWN0IG10a19kZXZhcGNfdmlvX2luZm8gKnZpb19pbmZvID0gZGV2 YXBjX2N0eC0+dmlvX2luZm87DQo+ID4+PiArDQo+ID4+PiArCS8qIFByaW50IHZpb2xhdGlvbiBp bmZvcm1hdGlvbiAqLw0KPiA+Pj4gKwlpZiAodmlvX2luZm8tPndyaXRlKQ0KPiA+Pj4gKwkJcHJf aW5mbyhQRlggIldyaXRlIFZpb2xhdGlvblxuIik7DQo+ID4+PiArCWVsc2UgaWYgKHZpb19pbmZv LT5yZWFkKQ0KPiA+Pj4gKwkJcHJfaW5mbyhQRlggIlJlYWQgVmlvbGF0aW9uXG4iKTsNCj4gPj4+ ICsNCj4gPj4+ICsJcHJfaW5mbyhQRlggIiVzJXgsICVzJXgsICVzJXgsICVzJXhcbiIsDQo+ID4+ PiArCQkiVmlvIEFkZHI6MHgiLCB2aW9faW5mby0+dmlvX2FkZHIsDQo+ID4+PiArCQkiSGlnaDow eCIsIHZpb19pbmZvLT52aW9fYWRkcl9oaWdoLA0KPiA+Pj4gKwkJIkJ1cyBJRDoweCIsIHZpb19p bmZvLT5tYXN0ZXJfaWQsDQo+ID4+PiArCQkiRG9tIElEOjB4IiwgdmlvX2luZm8tPmRvbWFpbl9p ZCk7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyB2b2lkIGRldmFwY19leHRyYWN0 X3Zpb19kYmcoc3RydWN0IG10a19kZXZhcGNfY29udGV4dCAqZGV2YXBjX2N0eCwNCj4gPj4+ICsJ CQkJICAgaW50IHNsYXZlX3R5cGUpDQo+ID4+PiArew0KPiA+Pj4gKwl2b2lkIF9faW9tZW0gKnZp b19kYmcwX3JlZywgKnZpb19kYmcxX3JlZzsNCj4gPj4+ICsJc3RydWN0IG10a19kZXZhcGNfdmlv X2RiZ3NfZGVzYyAqdmlvX2RiZ3M7DQo+ID4+PiArCXN0cnVjdCBtdGtfZGV2YXBjX3Zpb19pbmZv ICp2aW9faW5mbzsNCj4gPj4+ICsJdTMyIGRiZzA7DQo+ID4+PiArDQo+ID4+PiArCXZpb19kYmcw X3JlZyA9IG10a19kZXZhcGNfcGRfZ2V0KGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIFZJT19EQkcw LCAwKTsNCj4gPj4+ICsJdmlvX2RiZzFfcmVnID0gbXRrX2RldmFwY19wZF9nZXQoZGV2YXBjX2N0 eCwgc2xhdmVfdHlwZSwgVklPX0RCRzEsIDApOw0KPiA+Pj4gKw0KPiA+Pj4gKwl2aW9fZGJncyA9 IGRldmFwY19jdHgtPnZpb19kYmdzX2Rlc2M7DQo+ID4+PiArCXZpb19pbmZvID0gZGV2YXBjX2N0 eC0+dmlvX2luZm87DQo+ID4+PiArDQo+ID4+PiArCS8qIEV4dHJhY3QgdmlvbGF0aW9uIGluZm9y bWF0aW9uICovDQo+ID4+PiArCWRiZzAgPSByZWFkbCh2aW9fZGJnMF9yZWcpOw0KPiA+Pj4gKwl2 aW9faW5mby0+dmlvX2FkZHIgPSByZWFkbCh2aW9fZGJnMV9yZWcpOw0KPiA+Pj4gKw0KPiA+Pj4g Kwl2aW9faW5mby0+bWFzdGVyX2lkID0gKGRiZzAgJiB2aW9fZGJnc1tNU1RJRF0ubWFzaykgPj4N Cj4gPj4+ICsJCQkgICAgICB2aW9fZGJnc1tNU1RJRF0uc3RhcnRfYml0Ow0KPiA+Pj4gKwl2aW9f aW5mby0+ZG9tYWluX2lkID0gKGRiZzAgJiB2aW9fZGJnc1tETU5JRF0ubWFzaykgPj4NCj4gPj4+ ICsJCQkgICAgICB2aW9fZGJnc1tETU5JRF0uc3RhcnRfYml0Ow0KPiA+Pj4gKwl2aW9faW5mby0+ d3JpdGUgPSAoKGRiZzAgJiB2aW9fZGJnc1tWSU9fV10ubWFzaykgPj4NCj4gPj4+ICsJCQkgICB2 aW9fZGJnc1tWSU9fV10uc3RhcnRfYml0KSA9PSAxOw0KPiA+Pj4gKwl2aW9faW5mby0+cmVhZCA9 ICgoZGJnMCAmIHZpb19kYmdzW1ZJT19SXS5tYXNrKSA+Pg0KPiA+Pj4gKwkJCSAgdmlvX2RiZ3Nb VklPX1JdLnN0YXJ0X2JpdCkgPT0gMTsNCj4gPj4+ICsJdmlvX2luZm8tPnZpb19hZGRyX2hpZ2gg PSAoZGJnMCAmIHZpb19kYmdzW0FERFJfSF0ubWFzaykgPj4NCj4gPj4+ICsJCQkJICB2aW9fZGJn c1tBRERSX0hdLnN0YXJ0X2JpdDsNCj4gPj4+ICsNCj4gPj4+ICsJZGV2YXBjX3Zpb19pbmZvX3By aW50KGRldmFwY19jdHgpOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKg0KPiA+Pj4gKyAq IG10a19kZXZhcGNfZHVtcF92aW9fZGJnIC0gc2hpZnQgJiBkdW1wIHRoZSB2aW9sYXRpb24gZGVi dWcgaW5mb3JtYXRpb24uDQo+ID4+PiArICovDQo+ID4+PiArc3RhdGljIGJvb2wgbXRrX2RldmFw Y19kdW1wX3Zpb19kYmcoc3RydWN0IG10a19kZXZhcGNfY29udGV4dCAqZGV2YXBjX2N0eCwNCj4g Pj4+ICsJCQkJICAgIGludCBzbGF2ZV90eXBlLCBpbnQgKnZpb19pZHgpDQo+ID4+PiArew0KPiA+ Pj4gKwljb25zdCBzdHJ1Y3QgbXRrX2RldmljZV9pbmZvICoqZGV2aWNlX2luZm87DQo+ID4+PiAr CXUzMiBzaGlmdF9iaXQ7DQo+ID4+PiArCWludCBpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlkZXZpY2Vf aW5mbyA9IGRldmFwY19jdHgtPmRldmljZV9pbmZvOw0KPiA+Pj4gKw0KPiA+Pj4gKwlmb3IgKGkg PSAwOyBpIDwgZ2V0X3Zpb19zbGF2ZV9udW0oc2xhdmVfdHlwZSk7IGkrKykgew0KPiA+Pj4gKwkJ KnZpb19pZHggPSBkZXZpY2VfaW5mb1tzbGF2ZV90eXBlXVtpXS52aW9faW5kZXg7DQo+ID4+PiAr DQo+ID4+PiArCQlpZiAoY2hlY2tfdmlvX21hc2soZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwgKnZp b19pZHgpKQ0KPiA+Pj4gKwkJCWNvbnRpbnVlOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJaWYgKCFjaGVj a192aW9fc3RhdHVzKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsICp2aW9faWR4KSkNCj4gPj4+ICsJ CQljb250aW51ZTsNCj4gPj4+ICsNCj4gPj4+ICsJCXNoaWZ0X2JpdCA9IGdldF9zaGlmdF9ncm91 cChkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCAqdmlvX2lkeCk7DQo+ID4+PiArDQo+ID4+PiArCQlp ZiAoIXN5bmNfdmlvX2RiZyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCBzaGlmdF9iaXQpKQ0KPiA+ Pj4gKwkJCWNvbnRpbnVlOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJZGV2YXBjX2V4dHJhY3RfdmlvX2Ri ZyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlKTsNCj4gPj4+ICsNCj4gPj4+ICsJCXJldHVybiB0cnVl Ow0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiBmYWxzZTsNCj4gPj4+ICt9DQo+ ID4+PiArDQo+ID4+PiArLyoNCj4gPj4+ICsgKiBkZXZhcGNfdmlvbGF0aW9uX2lycSAtIHRoZSBk ZXZhcGMgSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZSAoSVNSKSB3aWxsIGR1bXANCj4gPj4+ICsg KgkJCSAgdmlvbGF0aW9uIGluZm9ybWF0aW9uIGluY2x1ZGluZyB3aGljaCBtYXN0ZXIgdmlvbGF0 ZXMNCj4gPj4+ICsgKgkJCSAgYWNjZXNzIHNsYXZlLg0KPiA+Pj4gKyAqLw0KPiA+Pj4gK3N0YXRp YyBpcnFyZXR1cm5fdCBkZXZhcGNfdmlvbGF0aW9uX2lycShpbnQgaXJxX251bWJlciwNCj4gPj4+ ICsJCQkJCXN0cnVjdCBtdGtfZGV2YXBjX2NvbnRleHQgKmRldmFwY19jdHgpDQo+ID4+PiArew0K PiA+Pj4gKwljb25zdCBzdHJ1Y3QgbXRrX2RldmljZV9pbmZvICoqZGV2aWNlX2luZm87DQo+ID4+ PiArCWludCBzbGF2ZV90eXBlX251bTsNCj4gPj4+ICsJaW50IHZpb19pZHggPSAtMTsNCj4gPj4+ ICsJaW50IHNsYXZlX3R5cGU7DQo+ID4+PiArDQo+ID4+PiArCXNsYXZlX3R5cGVfbnVtID0gZGV2 YXBjX2N0eC0+c2xhdmVfdHlwZV9udW07DQo+ID4+PiArCWRldmljZV9pbmZvID0gZGV2YXBjX2N0 eC0+ZGV2aWNlX2luZm87DQo+ID4+PiArDQo+ID4+PiArCWZvciAoc2xhdmVfdHlwZSA9IDA7IHNs YXZlX3R5cGUgPCBzbGF2ZV90eXBlX251bTsgc2xhdmVfdHlwZSsrKSB7DQo+ID4+PiArCQlpZiAo IW10a19kZXZhcGNfZHVtcF92aW9fZGJnKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsICZ2aW9faWR4 KSkNCj4gPj4+ICsJCQljb250aW51ZTsNCj4gPj4+ICsNCj4gPj4+ICsJCS8qIEVuc3VyZSB0aGF0 IHZpb2xhdGlvbiBpbmZvIGFyZSB3cml0dGVuIGJlZm9yZQ0KPiA+Pj4gKwkJICogZnVydGhlciBv cGVyYXRpb25zDQo+ID4+PiArCQkgKi8NCj4gPj4+ICsJCXNtcF9tYigpOw0KPiA+Pj4gKw0KPiA+ Pj4gKwkJbWFza19tb2R1bGVfaXJxKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIHZpb19pZHgsIHRy dWUpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJY2xlYXJfdmlvX3N0YXR1cyhkZXZhcGNfY3R4LCBzbGF2 ZV90eXBlLCB2aW9faWR4KTsNCj4gPj4+ICsNCj4gPj4+ICsJCW1hc2tfbW9kdWxlX2lycShkZXZh cGNfY3R4LCBzbGF2ZV90eXBlLCB2aW9faWR4LCBmYWxzZSk7DQo+ID4+PiArCX0NCj4gPj4+ICsN Cj4gPj4+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsv Kg0KPiA+Pj4gKyAqIHN0YXJ0X2RldmFwYyAtIGluaXRpYWxpemUgZGV2YXBjIHN0YXR1cyBhbmQg c3RhcnQgcmVjZWl2aW5nIGludGVycnVwdA0KPiA+Pj4gKyAqCQkgIHdoaWxlIGRldmFwYyB2aW9s YXRpb24gaXMgdHJpZ2dlcmVkLg0KPiA+Pj4gKyAqLw0KPiA+Pj4gK3N0YXRpYyB2b2lkIHN0YXJ0 X2RldmFwYyhzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0ICpkZXZhcGNfY3R4KQ0KPiA+Pj4gK3sN Cj4gPj4+ICsJY29uc3Qgc3RydWN0IG10a19kZXZpY2VfaW5mbyAqKmRldmljZV9pbmZvOw0KPiA+ Pj4gKwl2b2lkIF9faW9tZW0gKnBkX3Zpb19zaGlmdF9zdGFfcmVnOw0KPiA+Pj4gKwl2b2lkIF9f aW9tZW0gKnBkX2FwY19jb25fcmVnOw0KPiA+Pj4gKwl1MzIgdmlvX3NoaWZ0X3N0YTsNCj4gPj4+ ICsJaW50IHNsYXZlX3R5cGUsIHNsYXZlX3R5cGVfbnVtOw0KPiA+Pj4gKwlpbnQgaSwgdmlvX2lk eDsNCj4gPj4+ICsNCj4gPj4+ICsJZGV2aWNlX2luZm8gPSBkZXZhcGNfY3R4LT5kZXZpY2VfaW5m bzsNCj4gPj4+ICsJc2xhdmVfdHlwZV9udW0gPSBkZXZhcGNfY3R4LT5zbGF2ZV90eXBlX251bTsN Cj4gPj4+ICsNCj4gPj4+ICsJZm9yIChzbGF2ZV90eXBlID0gMDsgc2xhdmVfdHlwZSA8IHNsYXZl X3R5cGVfbnVtOyBzbGF2ZV90eXBlKyspIHsNCj4gPj4+ICsJCXBkX2FwY19jb25fcmVnID0gbXRr X2RldmFwY19wZF9nZXQoZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwNCj4gPj4+ICsJCQkJCQkgICBB UENfQ09OLCAwKTsNCj4gPj4+ICsJCXBkX3Zpb19zaGlmdF9zdGFfcmVnID0gbXRrX2RldmFwY19w ZF9nZXQoZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwNCj4gPj4+ICsJCQkJCQkJIFZJT19TSElGVF9T VEEsIDApOw0KPiA+Pj4gKwkJaWYgKCFwZF9hcGNfY29uX3JlZyB8fCAhcGRfdmlvX3NoaWZ0X3N0 YV9yZWcpDQo+ID4+PiArCQkJcmV0dXJuOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJLyogQ2xlYXIgZGV2 YXBjIHZpb2xhdGlvbiBzdGF0dXMgKi8NCj4gPj4+ICsJCXdyaXRlbChCSVQoMzEpLCBwZF9hcGNf Y29uX3JlZyk7DQo+ID4+PiArDQo+ID4+PiArCQkvKiBDbGVhciB2aW9sYXRpb24gc2hpZnQgc3Rh dHVzICovDQo+ID4+PiArCQl2aW9fc2hpZnRfc3RhID0gcmVhZGwocGRfdmlvX3NoaWZ0X3N0YV9y ZWcpOw0KPiA+Pj4gKwkJaWYgKHZpb19zaGlmdF9zdGEpDQo+ID4+PiArCQkJd3JpdGVsKHZpb19z aGlmdF9zdGEsIHBkX3Zpb19zaGlmdF9zdGFfcmVnKTsNCj4gPj4+ICsNCj4gPj4+ICsJCS8qIENs ZWFyIHNsYXZlIHZpb2xhdGlvbiBzdGF0dXMgKi8NCj4gPj4+ICsJCWZvciAoaSA9IDA7IGkgPCBn ZXRfdmlvX3NsYXZlX251bShzbGF2ZV90eXBlKTsgaSsrKSB7DQo+ID4+PiArCQkJdmlvX2lkeCA9 IGRldmljZV9pbmZvW3NsYXZlX3R5cGVdW2ldLnZpb19pbmRleDsNCj4gPj4+ICsNCj4gPj4+ICsJ CQljbGVhcl92aW9fc3RhdHVzKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIHZpb19pZHgpOw0KPiA+ Pj4gKw0KPiA+Pj4gKwkJCW1hc2tfbW9kdWxlX2lycShkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCB2 aW9faWR4LCBmYWxzZSk7DQo+ID4+PiArCQl9DQo+ID4+PiArCX0NCj4gPj4+ICt9DQo+ID4+PiAr DQo+ID4+PiArc3RhdGljIGludCBtdGtfZGV2YXBjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpDQo+ID4+PiArew0KPiA+Pj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBw ZGV2LT5kZXYub2Zfbm9kZTsNCj4gPj4+ICsJc3RydWN0IG10a19kZXZhcGNfY29udGV4dCAqZGV2 YXBjX2N0eDsNCj4gPj4+ICsJc3RydWN0IGNsayAqZGV2YXBjX2luZnJhX2NsazsNCj4gPj4+ICsJ dTMyIHZpb19kYmdzX251bSwgcGRzX251bTsNCj4gPj4+ICsJdTggc2xhdmVfdHlwZV9udW07DQo+ ID4+PiArCXUzMiBkZXZhcGNfaXJxOw0KPiA+Pj4gKwlzaXplX3Qgc2l6ZTsNCj4gPj4+ICsJaW50 IGksIHJldDsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKElTX0VSUihub2RlKSkNCj4gPj4+ICsJCXJl dHVybiAtRU5PREVWOw0KPiA+Pj4gKw0KPiA+Pj4gKwlkZXZhcGNfY3R4ID0gZGV2bV9remFsbG9j KCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0KSwNCj4gPj4+ICsJ CQkJICBHRlBfS0VSTkVMKTsNCj4gPj4+ICsJaWYgKCFkZXZhcGNfY3R4KQ0KPiA+Pj4gKwkJcmV0 dXJuIC1FTk9NRU07DQo+ID4+PiArDQo+ID4+PiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3U4KG5v ZGUsICJtZWRpYXRlay1zbHZfdHlwZV9udW0iLCAmc2xhdmVfdHlwZV9udW0pKQ0KPiA+Pj4gKwkJ cmV0dXJuIC1FTlhJTzsNCj4gPj4+ICsNCj4gPj4+ICsJZGV2YXBjX2N0eC0+c2xhdmVfdHlwZV9u dW0gPSBzbGF2ZV90eXBlX251bTsNCj4gPj4+ICsNCj4gPj4+ICsJc2l6ZSA9IHNsYXZlX3R5cGVf bnVtICogc2l6ZW9mKHZvaWQgKik7DQo+ID4+PiArCWRldmFwY19jdHgtPmRldmFwY19wZF9iYXNl ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemUsIEdGUF9LRVJORUwpOw0KPiA+Pj4gKwlp ZiAoIWRldmFwY19jdHgtPmRldmFwY19wZF9iYXNlKQ0KPiA+Pj4gKwkJcmV0dXJuIC1FTk9NRU07 DQo+ID4+PiArDQo+ID4+PiArCXNpemUgPSBzbGF2ZV90eXBlX251bSAqIHNpemVvZihzdHJ1Y3Qg bXRrX2RldmljZV9pbmZvICopOw0KPiA+Pj4gKwlkZXZhcGNfY3R4LT5kZXZpY2VfaW5mbyA9IGRl dm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMKTsNCj4gPj4+ICsJaWYgKCFk ZXZhcGNfY3R4LT5kZXZpY2VfaW5mbykNCj4gPj4+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+Pj4g Kw0KPiA+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgc2xhdmVfdHlwZV9udW07IGkrKykgew0KPiA+Pj4g KwkJZGV2YXBjX2N0eC0+ZGV2YXBjX3BkX2Jhc2VbaV0gPSBvZl9pb21hcChub2RlLCBpKTsNCj4g Pj4+ICsJCWlmICghZGV2YXBjX2N0eC0+ZGV2YXBjX3BkX2Jhc2VbaV0pDQo+ID4+PiArCQkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4+PiArDQo+ID4+PiArCQlpZiAoaSA9PSAwKQ0KPiA+Pj4gKwkJCWRl dmFwY19jdHgtPmRldmljZV9pbmZvW2ldID0gbXRrX2RldmljZXNfaW5mcmE7DQo+ID4+PiArCX0N Cj4gPj4+ICsNCj4gPj4+ICsJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXRrX2RldmFwY192aW9faW5m byk7DQo+ID4+PiArCWRldmFwY19jdHgtPnZpb19pbmZvID0gZGV2bV9remFsbG9jKCZwZGV2LT5k ZXYsIHNpemUsIEdGUF9LRVJORUwpOw0KPiA+Pj4gKwlpZiAoIWRldmFwY19jdHgtPnZpb19pbmZv KQ0KPiA+Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4+PiArDQo+ID4+PiArCXZpb19kYmdzX251 bSA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhub2RlLCAibWVkaWF0ZWstdmlvX2RiZ3Mi KTsNCj4gPj4+ICsJaWYgKHZpb19kYmdzX251bSA8PSAwKQ0KPiA+Pj4gKwkJcmV0dXJuIC1FTlhJ TzsNCj4gPj4+ICsNCj4gPj4+ICsJc2l6ZSA9ICh2aW9fZGJnc19udW0gLyAyKSAqIHNpemVvZihz dHJ1Y3QgbXRrX2RldmFwY192aW9fZGJnc19kZXNjKTsNCj4gPj4+ICsJZGV2YXBjX2N0eC0+dmlv X2RiZ3NfZGVzYyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMKTsN Cj4gPj4+ICsJaWYgKCFkZXZhcGNfY3R4LT52aW9fZGJnc19kZXNjKQ0KPiA+Pj4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ID4+PiArDQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCB2aW9fZGJnc19udW0g LyAyOyBpKyspIHsNCj4gPj4+ICsJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChub2Rl LCAibWVkaWF0ZWstdmlvX2RiZ3MiLA0KPiA+Pj4gKwkJCQkJICAgICAgIGkgKiAyLA0KPiA+Pj4g KwkJCQkJICAgICAgICZkZXZhcGNfY3R4LT52aW9fZGJnc19kZXNjW2ldLm1hc2spKQ0KPiA+Pj4g KwkJCXJldHVybiAtRU5YSU87DQo+ID4+PiArDQo+ID4+PiArCQlpZiAob2ZfcHJvcGVydHlfcmVh ZF91MzJfaW5kZXgobm9kZSwgIm1lZGlhdGVrLXZpb19kYmdzIiwNCj4gPj4+ICsJCQkJCSAgICAg ICAoaSAqIDIpICsgMSwNCj4gPj4+ICsJCQkJCSAgICAgICAmZGV2YXBjX2N0eC0+dmlvX2RiZ3Nf ZGVzY1tpXS5zdGFydF9iaXQpKQ0KPiA+Pj4gKwkJCXJldHVybiAtRU5YSU87DQo+ID4+PiArCX0N Cj4gPj4+ICsNCj4gPj4+ICsJcGRzX251bSA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhu b2RlLCAibWVkaWF0ZWstcGRzX29mZnNldCIpOw0KPiA+Pj4gKwlpZiAocGRzX251bSA8PSAwKQ0K PiA+Pj4gKwkJcmV0dXJuIC1FTlhJTzsNCj4gPj4+ICsNCj4gPj4+ICsJc2l6ZSA9IHBkc19udW0g KiBzaXplb2YodTMyKTsNCj4gPj4+ICsJZGV2YXBjX2N0eC0+cGRzX29mZnNldCA9IGRldm1fa3ph bGxvYygmcGRldi0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMKTsNCj4gPj4+ICsJaWYgKCFkZXZhcGNf Y3R4LT5wZHNfb2Zmc2V0KQ0KPiA+Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4+PiArDQo+ID4+ PiArCWZvciAoaSA9IDA7IGkgPCBwZHNfbnVtOyBpKyspIHsNCj4gPj4+ICsJCWlmIChvZl9wcm9w ZXJ0eV9yZWFkX3UzMl9pbmRleChub2RlLCAibWVkaWF0ZWstcGRzX29mZnNldCIsIGksDQo+ID4+ PiArCQkJCQkgICAgICAgJmRldmFwY19jdHgtPnBkc19vZmZzZXRbaV0pKQ0KPiA+Pj4gKwkJCXJl dHVybiAtRU5YSU87DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJZGV2YXBjX2lycSA9IGly cV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOw0KPiA+Pj4gKwlpZiAoIWRldmFwY19pcnEpDQo+ ID4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsNCj4gPj4+ICsJZGV2YXBjX2luZnJhX2Ns ayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiZGV2YXBjLWluZnJhLWNsb2NrIik7DQo+ID4+ PiArCWlmIChJU19FUlIoZGV2YXBjX2luZnJhX2NsaykpDQo+ID4+PiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKGNsa19wcmVwYXJlX2VuYWJsZShkZXZhcGNfaW5mcmFf Y2xrKSkNCj4gPj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+Pj4gKw0KPiA+Pj4gKwlzdGFydF9k ZXZhcGMoZGV2YXBjX2N0eCk7DQo+ID4+PiArDQo+ID4+PiArCXJldCA9IGRldm1fcmVxdWVzdF9p cnEoJnBkZXYtPmRldiwgZGV2YXBjX2lycSwNCj4gPj4+ICsJCQkgICAgICAgKGlycV9oYW5kbGVy X3QpZGV2YXBjX3Zpb2xhdGlvbl9pcnEsDQo+ID4+PiArCQkJICAgICAgIElSUUZfVFJJR0dFUl9O T05FLCAiZGV2YXBjIiwgZGV2YXBjX2N0eCk7DQo+ID4+PiArCWlmIChyZXQpDQo+ID4+PiArCQly ZXR1cm4gcmV0Ow0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gMDsNCj4gPj4+ICt9DQo+ID4+PiAr DQo+ID4+PiArc3RhdGljIGludCBtdGtfZGV2YXBjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpkZXYpDQo+ID4+PiArew0KPiA+Pj4gKwlyZXR1cm4gMDsNCj4gPj4+ICt9DQo+ID4+PiAr DQo+ID4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2RldmFwY19kdF9t YXRjaFtdID0gew0KPiA+Pj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Njc3OS1kZXZh cGMiIH0sDQo+ID4+PiArCXt9LA0KPiA+Pj4gK307DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RldmFwY19kcml2ZXIgPSB7DQo+ID4+PiArCS5wcm9i ZSA9IG10a19kZXZhcGNfcHJvYmUsDQo+ID4+PiArCS5yZW1vdmUgPSBtdGtfZGV2YXBjX3JlbW92 ZSwNCj4gPj4+ICsJLmRyaXZlciA9IHsNCj4gPj4+ICsJCS5uYW1lID0gS0JVSUxEX01PRE5BTUUs DQo+ID4+PiArCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZGV2YXBjX2R0X21hdGNoLA0KPiA+Pj4g Kwl9LA0KPiA+Pj4gK307DQo+ID4+PiArDQo+ID4+PiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlciht dGtfZGV2YXBjX2RyaXZlcik7DQo+ID4+PiArDQo+ID4+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJN ZWRpYXRlayBEZXZpY2UgQVBDIERyaXZlciIpOw0KPiA+Pj4gK01PRFVMRV9BVVRIT1IoIk5lYWwg TGl1IDxuZWFsLmxpdUBtZWRpYXRlay5jb20+Iik7DQo+ID4+PiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOw0KPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL21lZGlhdGVrL210ay1kZXZhcGMu aCBiL2RyaXZlcnMvc29jL21lZGlhdGVrL210ay1kZXZhcGMuaA0KPiA+Pj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPj4+IGluZGV4IDAwMDAwMDAuLmFiMmNiMTQNCj4gPj4+IC0tLSAvZGV2L251 bGwNCj4gPj4+ICsrKyBiL2RyaXZlcnMvc29jL21lZGlhdGVrL210ay1kZXZhcGMuaA0KPiA+Pj4g QEAgLTAsMCArMSw2NzAgQEANCj4gPj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLw0KPiA+Pj4gKy8qDQo+ID4+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVr IEluYy4NCj4gPj4+ICsgKi8NCj4gPj4+ICsNCj4gPj4+ICsjaWZuZGVmIF9fTVRLX0RFVkFQQ19I X18NCj4gPj4+ICsjZGVmaW5lIF9fTVRLX0RFVkFQQ19IX18NCj4gPj4+ICsNCj4gPj4+ICsjZGVm aW5lIFBGWAkJCSJbREVWQVBDXTogIg0KPiA+Pg0KPiA+PiB1c2UgZGV2X2VycigpIGFuZCBmcmll bmRzIGluc3RlYWQuDQo+ID4gDQo+ID4gT2theSwgSSdsbCByZW1vdmUgaXQuDQo+ID4gDQo+ID4+ DQo+ID4+PiArDQo+ID4+PiArI2RlZmluZSBWSU9fTUFTS19TVEFfUkVHX0dFVChtKSBcDQo+ID4+ PiArKHsgXA0KPiA+Pj4gKwl0eXBlb2YobSkgKF9tKSA9IChtKTsgXA0KPiA+Pj4gKwlyZWdfaW5k ZXggPSBfbSAvIDMyOyBcDQo+ID4+PiArCXJlZ19vZmZzZXQgPSBfbSAlIDMyOyBcDQo+ID4+PiAr fSkNCj4gPj4NCj4gPj4gZG9uJ3QgZG8gdGhhdC4gbm8gZXhwbGljaXQgdmFyaWFibGUgYXNzaW5n bWVudCBpbiBhIG1hY3JvLCB0aGUgbWFjcm8gc2hvdWxkDQo+ID4+IHJldHVybiB0aGUgdmFsdWUu DQo+ID4gDQo+ID4gT2theSwgSSdsbCByZXZpc2UgaXQgaW4gbmV4dCBwYXRjaGVzLg0KPiA+IA0K PiA+Pg0KPiA+Pj4gKw0KPiA+Pj4gK2VudW0gREVWQVBDX1BEX1JFR19UWVBFIHsNCj4gPj4+ICsJ VklPX01BU0sgPSAwLA0KPiA+Pj4gKwlWSU9fU1RBLA0KPiA+Pj4gKwlWSU9fREJHMCwNCj4gPj4+ ICsJVklPX0RCRzEsDQo+ID4+PiArCUFQQ19DT04sDQo+ID4+PiArCVZJT19TSElGVF9TVEEsDQo+ ID4+PiArCVZJT19TSElGVF9TRUwsDQo+ID4+PiArCVZJT19TSElGVF9DT04sDQo+ID4+PiArCVBE X1JFR19UWVBFX05VTSwNCj4gPj4+ICt9Ow0KPiA+Pj4gKw0KPiA+Pj4gK2VudW0gREVWQVBDX1ZJ T19EQkdTX1RZUEUgew0KPiA+Pj4gKwlNU1RJRCA9IDAsDQo+ID4+PiArCURNTklELA0KPiA+Pj4g KwlWSU9fVywNCj4gPj4+ICsJVklPX1IsDQo+ID4+PiArCUFERFJfSCwNCj4gPj4+ICt9Ow0KPiA+ Pj4gKw0KPiA+Pj4gK3N0cnVjdCBtdGtfZGV2aWNlX2luZm8gew0KPiA+Pj4gKwlpbnQgc3lzX2lu ZGV4Ow0KPiA+Pj4gKwlpbnQgY3RybF9pbmRleDsNCj4gPj4+ICsJaW50IHZpb19pbmRleDsNCj4g Pj4+ICt9Ow0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyBzdHJ1Y3QgbXRrX2RldmljZV9pbmZvIG10 a19kZXZpY2VzX2luZnJhW10gPSB7DQo+ID4+DQo+ID4+IFRoYXQncyBmb3IgbXQ2Nzc5LCBjb3Jy ZWN0PyBTaG91bGQgYmUgc3RhdGVkIGluIHRoZSBuYW1lLg0KPiA+IA0KPiA+IE9rYXkuIEkgaGF2 ZSBhbm90aGVyIHdheSB0byByZWFjaCB0aGUgZ29hbCB3aXRob3V0IHVzaW5nIHRoaXMgc3RydWN0 DQo+ID4gYXJyYXkuIEknbGwgc2VuZCBhbm90aGVyIHBhdGNoZXMuDQo+ID4gDQo+IA0KPiBbLi4u XQ0KPiANCj4gPj4+ICsNCj4gPj4+ICtzdHJ1Y3QgbXRrX2RldmFwY192aW9faW5mbyB7DQo+ID4+ PiArCWJvb2wgcmVhZDsNCj4gPj4+ICsJYm9vbCB3cml0ZTsNCj4gPj4+ICsJdTMyIHZpb19hZGRy Ow0KPiA+Pj4gKwl1MzIgdmlvX2FkZHJfaGlnaDsNCj4gPj4+ICsJdTMyIG1hc3Rlcl9pZDsNCj4g Pj4+ICsJdTMyIGRvbWFpbl9pZDsNCj4gPj4+ICt9Ow0KPiA+Pj4gKw0KPiA+Pj4gK3N0cnVjdCBt dGtfZGV2YXBjX3Zpb19kYmdzX2Rlc2Mgew0KPiA+Pj4gKwl1MzIgbWFzazsNCj4gPj4+ICsJdTMy IHN0YXJ0X2JpdDsNCj4gPj4+ICt9Ow0KPiA+Pj4gKw0KPiA+Pj4gK3N0cnVjdCBtdGtfZGV2YXBj X2NvbnRleHQgew0KPiA+Pj4gKwl1OCBzbGF2ZV90eXBlX251bTsNCj4gPj4+ICsJdm9pZCBfX2lv bWVtICoqZGV2YXBjX3BkX2Jhc2U7DQo+ID4+PiArCWNvbnN0IHN0cnVjdCBtdGtfZGV2aWNlX2lu Zm8gKipkZXZpY2VfaW5mbzsNCj4gPj4+ICsJc3RydWN0IG10a19kZXZhcGNfdmlvX2luZm8gKnZp b19pbmZvOw0KPiA+Pj4gKwlzdHJ1Y3QgbXRrX2RldmFwY192aW9fZGJnc19kZXNjICp2aW9fZGJn c19kZXNjOw0KPiA+Pj4gKwl1MzIgKnBkc19vZmZzZXQ7DQo+ID4+PiArfTsNCj4gPj4+ICsNCj4g Pj4NCj4gPj4gTm90IHN1cmUgaWYgSSBnZXQgdGhpcyByaWdodDoNCj4gPj4NCj4gPj4gc3RydWN0 IG10a19kZXZhcGNfb2Zmc2V0IHsNCj4gPj4gCXUzMiB2aW9fbWFzazsNCj4gPj4gCXUzMiB2aW9f c3RhOw0KPiA+PiAJdTMyIHZpb19kYmcwOw0KPiA+PiAJdTMyIHZpb19kYmcxOw0KPiA+PiAJLi4u DQo+ID4+IH0NCj4gPj4NCj4gPj4gc3RydWN0IG10a19kZXZhcGNfY29udGV4dCB7DQo+ID4+IAl1 OCBwZF9iYXNlX251bTsNCj4gPj4gCXZvaWQgX19pb21lbSAqKmRldmFwY19wZF9iYXNlOw0KPiA+ PiAJc3RydWN0IG10a19kZXZhcGNfb2Zmc2V0ICpvZmZzZXQ7DQo+ID4+IAljb25zdCBzdHJ1Y3Qg bXRrX2RldmljZV9pbmZvICoqZGV2aWNlX2luZm87DQo+ID4+IAlzdHJ1Y3QgbXRrX2RldmFwY192 aW9faW5mbyAqdmlvX2luZm87DQo+ID4+IAlzdHJ1Y3QgbXRrX2RldmFwY192aW9fZGJnc19kZXNj ICp2aW9fZGJnc19kZXNjOw0KPiA+PiB9Ow0KPiA+Pg0KPiA+PiBXaXRoIHRoaXMgSSB0aGluayB3 ZSBjYW4gZ2V0IHJpZCBvZiBtdGtfZGV2YXBjX3BkX2dldCgpLg0KPiA+Pg0KPiA+IA0KPiA+IG10 a19kZXZhcGNfcGRfZ2V0KCkgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHZhZGRyIG9mIGRldmFw YyBwZA0KPiA+IHJlZ2lzdGVyLiBJdCdzIGJhc2VkIG9uIGRpZmZlcmVudCBzbGF2ZV90eXBlLCBw ZF9yZWdfdHlwZSBhbmQgcmVnX2lkeC4NCj4gPiBJIGRvbid0IHRoaW5rIGl0IGNhbiBiZSByZXBs YWNlZCB3aXRoIHN1Y2ggc2ltcGxlIGRhdGEgc3RydWN0dXJlcy4NCj4gPiANCj4gDQo+IEhvdyBJ IHVuZGVyc3RhbmQgdGhlIGNvZGU6DQo+IEV2ZXJ5IHNsYXZlX3R5cGUgaGFzIGEgYmFzZSBtZW1v cnkgcmVwcmVzZW50ZWQgYnkgdGhlICoqZGV2YXBjX3BkX2Jhc2UgYXJyYXkuDQo+IEluc2lkZSBl YWNoIGJhc2UgbWVtb3J5IGNodW5rIHlvdSBoYXZlIGFuIG9mZnNldCBkZXBlbmRpbmcgb24gdGhl IHBkX3JlZ190eXBlLCANCj4gYnV0IHRoZSBvZmZzZXQgaXMgdGhlIHNhbWUgZm9yIGFsbCBiYXNl IG1lbW9yeSBjaHVua3MuIFRoaXMgb2Zmc2V0IGlzIA0KPiByZXByZXNlbnRlZCBieSBzdHJ1Y3Qg bXRrX2RldmFwY19vZmZzZXQuDQo+IElmIHBkX3JlZ190eXBlIGlzIFZJT19NQVNLIG9yIFZJT19T VEEgd2UgaGF2ZSB0byBmdXJ0aGVyIHJlYWQgdGhlIHZhbHVlIGJhc2VkIG9uIA0KPiBhbiBpbmRl eCByZXByZXNlbnRlZCBieSByZWdfaWR4LiBTbyBpZiB3ZSAgYWRkIDB4NCBmb3IgZWFjaCByZWdf aWR4LiBTbyB3ZSBoYXZlIA0KPiBmb3IgZXhhbXBsZSBmb3I6DQo+IGludCBjaGVja192aW9fbWFz ayhzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0ICpjdHgsIGluc3Qgc2xhdmVfdHlwZSwgdTMyIG1v ZHVsZSkNCj4gew0KPiAJcmVnID0gY3R4LT5kZXZhcGNfcGRfYmFzZVtzbGF2ZV90eXBlXSArIGN0 eC0+b2Zmc2V0LnZpb19tYXNrOw0KPiAJcmVnICs9IDB4NCAqIFZJT19NT0RfVE9fUkVHX0lORCht b2R1bGUpOw0KPiANCj4gCXZhbHVlID0gcmVhZGwocmVnKTsNCj4gCXJldHVybiAoKHZhbHVlID4+ IFZJT19UT19SRUdfT0ZGKG1vZHVsZSkpICYgMHgxKTsNCj4gfQ0KPiANCj4gc2ltaWxhcmx5Og0K PiB1MzIgZ2V0X3NoaWZ0X2dyb3VwKHN0cnVjdCBtdGtfZGV2YXBjX2NvbnRleHQgKmN0eCwgaW50 IHNsYXZlX3R5cGUsIGludCB2aW9faWR4KQ0KPiB7DQo+IAlyZWcgPSBjdHgtPmRldmFwY19wZF9i YXNlW3NsYXZlX3R5cGVdICsgY3R4LT5vZmZzZXQudmlvX3NoaWZ0X3N0YTsNCj4gDQo+IAl2YWx1 ZSA9IHJlYWRsKHJlZyk7DQo+IAliaXQgPSBfX2ZmcyguLi4pOw0KPiB9DQo+IA0KPiBXaGF0IGRv ZXMgdXMgYnV5IHRoYXQ/IFdoZW4gbG9va2luZyBvbiB0aGUgZnVuY3Rpb24gd2UgdW5kZXJzdGFu ZCBob3cgdGhlIA0KPiByZWdpc3RlciBsYXlvdXQgaW4gSFcgbG9va3MgbGlrZS4gV2UgaGF2ZSBh IGJhc2UgdmFsdWUgd2l0aCBhbiBvZmZzZXQgYW5kIGluIA0KPiBjYXNlIG9mIFZJT19NQVNLIGFu ZCBWSU9fU1RBIHdlIGhhdmUgdG8gc2hpZnQgdGhlIHZhbHVlLg0KPiANCg0KWWVzLCB5b3UncmUg cmlnaHQuIFdlIGNhbiBkbyBjYWxjdWxhdGlvbiBpbiBlYWNoIHBsYWNlIGluc3RlYWQgb2YNCmNh bGxpbmcgbXRrX2RldmFwY19wZF9nZXQoKS4gSXMgaXMgYmV0dGVyIHRvIGRvIHRoaXMgaW5zdGVh ZCBvZiBmdW5jdGlvbg0KY2FsbD8NClNvcnJ5IGZvciBteSBtaXN1bmRlcnN0YW5kaW5nIGFib3V0 IHByZXZpb3VzIGNvbW1lbnRzLg0KDQo+IEJ5IHRoZSB3YXksIHJpZ2h0IG5vdyBpbiBtdGtfZGV2 YXBjX3BkX2dldCB5b3UgYXJlIGRvaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIA0KPiBhIHZv aWQgcG9pbnRlci4gVGhhdCdzIG5vdCBhIGdvb2QgYXBwcm9hY2gsIHBsZWFzZSBkZWZpbmUgdGhl IHBvaW50ZXIgdG8gcG9pbnQgDQo+IHRvIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byByZWFkLiBJIHVu ZGVyc3RhbmQgdGhhdCdzIGEgMzIgYml0IHJlZ2lzdGVyLg0KPiANCj4gUmVnYXJkcw0KPiBNYXR0 aGlhcw0KPiANCg0KSSdtIG5vdCBxdWl0ZSB1bmRlcnN0YW5kIHRoaXMgY29tbWVudC4gRG9lcyBi ZWxvdyBhcml0aG1ldGljIG5vdCBtZWV0DQp5b3VyIHN0YXRlbWVudD8gQ291bGQgeW91IGV4cGxh aW4gbW9yZSBkZXRhaWxzPw0KDQpyZWcgPSBkZXZhcGNfY3R4LT5kZXZhcGNfcGRfYmFzZVtzbGF2 ZV90eXBlXSArDQoJZGV2YXBjX2N0eC0+cGRzX29mZnNldFtwZF9yZWdfdHlwZV07DQoNCj4gPiAN Cj4gPj4gU29ycnkgSSdtIG5vdCBhYmxlIHRvIHJldmlldyB0aGUgd2hvbGUgZHJpdmVyIHJpZ2h0 IG5vdy4gUGxlYXNlIGFsc28gaGF2ZSBhIGxvb2sNCj4gPj4gb24gbXkgY29tbWVudHMgZnJvbSB2 MS4NCj4gPj4NCj4gPj4gV2Ugd2lsbCBoYXZlIHRvIGdvIGxpdHRsZSBieSBsaXR0bGUgdG8gZ2V0 IHRoaXMgaW50byBhIGdvb2Qgc3RhdGUuIEluIGNhc2UgaXQNCj4gPj4gbWFrZXMgc2Vuc2UgdG8g aGF2ZSB0aGlzIGluIHRoZSBrZXJuZWwgYXQgYWxsLg0KPiA+Pg0KPiA+PiBSZWdhcmRzLA0KPiA+ PiBNYXR0aGlhcw0KPiA+IA0KPiA+IEknbSBhcHByZWNpYXRlZCBmb3IgeW91ciByZXZpZXcuIEl0 IGhlbHBzIG1lIHRvIHdyaXRlIGJldHRlciBjb2RlIGFuZA0KPiA+IGdldCBjbG9zZXIgdG8gdGhl IGtlcm5lbC4NCj4gPiANCj4gPiANCg0K