From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Osipenko Subject: Re: [RFC PATCH v1 0/6] Resolve unwanted DMA backing with IOMMU Date: Thu, 20 Sep 2018 20:09:28 +0300 Message-ID: References: <20180726231624.21084-1-digetx@gmail.com> <2887450.sPhIOOMKZK@dimapc> <2e7fab6e-0640-8f48-07b8-2d475538b8ae@arm.com> <12474499.22jeAM5LNA@dimapc> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Robin Murphy , Joerg Roedel Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Mikko Perttunen , Rob Herring , Frank Rowand , "Rafael J. Wysocki" , Nicolas Chauvet , nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Will Deacon , Russell King , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Jonathan Hunter , iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Thierry Reding , Ben Skeggs , Greg Kroah-Hartman , linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Catalin Marinas , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: devicetree@vger.kernel.org T24gOC8xNi8xOCA4OjIzIFBNLCBSb2JpbiBNdXJwaHkgd3JvdGU6Cj4gT24gMTUvMDgvMTggMjA6 NTYsIERtaXRyeSBPc2lwZW5rbyB3cm90ZToKPj4gT24gRnJpZGF5LCAzIEF1Z3VzdCAyMDE4IDE4 OjQzOjQxIE1TSyBSb2JpbiBNdXJwaHkgd3JvdGU6Cj4+PiBPbiAwMi8wOC8xOCAxOToyNCwgRG1p dHJ5IE9zaXBlbmtvIHdyb3RlOgo+Pj4+IE9uIEZyaWRheSwgMjcgSnVseSAyMDE4IDIwOjE2OjUz IE1TSyBEbWl0cnkgT3NpcGVua28gd3JvdGU6Cj4+Pj4+IE9uIEZyaWRheSwgMjcgSnVseSAyMDE4 IDIwOjAzOjI2IE1TSyBKb3JkYW4gQ3JvdXNlIHdyb3RlOgo+Pj4+Pj4gT24gRnJpLCBKdWwgMjcs IDIwMTggYXQgMDU6MDI6MzdQTSArMDEwMCwgUm9iaW4gTXVycGh5IHdyb3RlOgo+Pj4+Pj4+IE9u IDI3LzA3LzE4IDE1OjEwLCBEbWl0cnkgT3NpcGVua28gd3JvdGU6Cj4+Pj4+Pj4+IE9uIEZyaWRh eSwgMjcgSnVseSAyMDE4IDEyOjAzOjI4IE1TSyBXaWxsIERlYWNvbiB3cm90ZToKPj4+Pj4+Pj4+ IE9uIEZyaSwgSnVsIDI3LCAyMDE4IGF0IDEwOjI1OjEzQU0gKzAyMDAsIEpvZXJnIFJvZWRlbCB3 cm90ZToKPj4+Pj4+Pj4+PiBPbiBGcmksIEp1bCAyNywgMjAxOCBhdCAwMjoxNjoxOEFNICswMzAw LCBEbWl0cnkgT3NpcGVua28gd3JvdGU6Cj4+Pj4+Pj4+Pj4+IFRoZSBwcm9wb3NlZCBzb2x1dGlv biBhZGRzIGEgbmV3IG9wdGlvbiB0byB0aGUgYmFzZSBkZXZpY2UgZHJpdmVyCj4+Pj4+Pj4+Pj4+ IHN0cnVjdHVyZSB0aGF0IGFsbG93cyBkZXZpY2UgZHJpdmVycyB0byBleHBsaWNpdGx5IGNvbnZl eSB0byB0aGUKPj4+Pj4+Pj4+Pj4gZHJpdmVycwo+Pj4+Pj4+Pj4+PiBjb3JlIHRoYXQgdGhlIGlt cGxpY2l0IElPTU1VIGJhY2tpbmcgZm9yIGRldmljZXMgbXVzdCBub3QgaGFwcGVuLgo+Pj4+Pj4+ Pj4+Cj4+Pj4+Pj4+Pj4gV2h5IGlzIElPTU1VIG1hcHBpbmcgYSBwcm9ibGVtIGZvciB0aGUgVGVn cmEgR1BVIGRyaXZlcj8KPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IElmIHdlIGFkZCBzb21ldGhpbmcg bGlrZSB0aGlzIHRoZW4gaXQgc2hvdWxkIG5vdCBiZSB0aGUgY2hvaWNlIG9mCj4+Pj4+Pj4+Pj4g dGhlCj4+Pj4+Pj4+Pj4gZGV2aWNlIGRyaXZlciwgYnV0IG9mIHRoZSB1c2VyIGFuZC9vciB0aGUg ZmlybXdhcmUuCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gQWdyZWVkLCBhbmQgaXQgd291bGQgc3RpbGwg bmVlZCBzb21lYm9keSB0byBjb25maWd1cmUgYW4gaWRlbnRpdHkKPj4+Pj4+Pj4+IGRvbWFpbgo+ Pj4+Pj4+Pj4gc28KPj4+Pj4+Pj4+IHRoYXQgdHJhbnNhY3Rpb25zIGFyZW4ndCBhYm9ydGVkIGlt bWVkaWF0ZWx5LiBXZSBjdXJyZW50bHkgYWxsb3cgdGhlCj4+Pj4+Pj4+PiBpZGVudGl0eSBkb21h aW4gdG8gYmUgdXNlZCBieSBkZWZhdWx0IHZpYSBhIGNvbW1hbmQtbGluZSBvcHRpb24sIHNvIEkK Pj4+Pj4+Pj4+IGd1ZXNzCj4+Pj4+Pj4+PiB3ZSdkIG5lZWQgYSB3YXkgZm9yIGZpcm13YXJlIHRv IHJlcXVlc3QgdGhhdCBvbiBhIHBlci1kZXZpY2UgYmFzaXMuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFRo ZSBJT01NVSBtYXBwaW5nIGl0c2VsZiBpcyBub3QgYSBwcm9ibGVtLCB0aGUgcHJvYmxlbSBpcyB0 aGUKPj4+Pj4+Pj4gbWFuYWdlbWVudAo+Pj4+Pj4+PiBvZgo+Pj4+Pj4+PiB0aGUgSU9NTVUuIEZv ciBUZWdyYSB3ZSBkb24ndCB3YW50IGFueXRoaW5nIHRvIGludHJ1ZGUgaW50byB0aGUgSU9NTVUK Pj4+Pj4+Pj4gYWN0aXZpdGllcyBiZWNhdXNlOgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAxKSBHUFUgSFcg cmVxdWlyZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBJT01NVSB1c2FnZSBhbmQK Pj4+Pj4+Pj4gZHVtYgo+Pj4+Pj4+PiBtYXBwaW5nIG9mIHRoZSBhbGxvY2F0aW9ucyBzaW1wbHkg ZG9lc24ndCB3b3JrLgo+Pj4+Pj4+Cj4+Pj4+Pj4gR2VuZXJhbGx5LCB0aGF0J3MgYWxyZWFkeSBo YW5kbGVkIGJ5IHRoZSBEUk0gZHJpdmVycyBhbGxvY2F0aW5nCj4+Pj4+Pj4gdGhlaXIgb3duIHVu bWFuYWdlZCBkb21haW5zLiBUaGUgb25seSBwcm9ibGVtIHdlIHJlYWxseSBuZWVkIHRvCj4+Pj4+ Pj4gc29sdmUgaW4gdGhhdCByZWdhcmQgaXMgdGhhdCBjdXJyZW50bHkgdGhlIGRldmljZSBETUEg b3BzIGRvbid0IGdldAo+Pj4+Pj4+IHVwZGF0ZWQgd2hlbiBtb3ZpbmcgYXdheSBmcm9tIHRoZSBt YW5hZ2VkIGRvbWFpbi4gVGhhdCdzIGJlZW4gT0sgZm9yCj4+Pj4+Pj4gdGhlIFZGSU8gY2FzZSB3 aGVyZSB0aGUgZGV2aWNlIGlzIGJvdW5kIHRvIGEgZGlmZmVyZW50IGRyaXZlciB3aGljaAo+Pj4+ Pj4+IHdlIGtub3cgd29uJ3QgbWFrZSBhbnkgZXhwbGljaXQgRE1BIEFQSSBjYWxscywgYnV0IGZv ciB0aGUgbW9yZQo+Pj4+Pj4+IGdlbmVyYWwgY2FzZSBvZiBJT01NVS1hd2FyZSBkcml2ZXJzIHdl IGNvdWxkIGNlcnRhaW5seSBkbyB3aXRoIGEgYml0Cj4+Pj4+Pj4gb2YgY29vcGVyYXRpb24gYmV0 d2VlbiB0aGUgSU9NTVUgQVBJLCBETUEgQVBJLCBhbmQgYXJjaCBjb2RlIHRvCj4+Pj4+Pj4gdXBk YXRlIHRoZSBETUEgb3BzIGR5bmFtaWNhbGx5IHRvIGNvcGUgd2l0aCBpbnRlcm1lZGlhdGUgc3Vi c3lzdGVtcwo+Pj4+Pj4+IG1ha2luZyBETUEgQVBJIGNhbGxzIG9uIGJlaGFsZiBvZiBkZXZpY2Vz IHRoZXkgZG9uJ3Qga25vdyB0aGUKPj4+Pj4+PiBpbnRpbWF0ZSBkZXRhaWxzIG9mLgo+Pj4+Pj4+ Cj4+Pj4+Pj4+IDIpIE9sZGVyIFRlZ3JhIGdlbmVyYXRpb25zIGhhdmUgYSBsaW1pdGVkIHJlc291 cmNlIGFuZCBjYXBhYmlsaXRpZXMgaW4KPj4+Pj4+Pj4gcmVnYXJkcyB0byBJT01NVSB1c2FnZSwg YWxsb2NhdGluZyBJT01NVSBkb21haW4gcGVyLWRldmljZSBpcyBqdXN0Cj4+Pj4+Pj4+IGltcG9z c2libGUgZm9yIGV4YW1wbGUuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IDMpIEhXIHBlcmZvcm1zIGNvbnRl eHQgc3dpdGNoZXMgYW5kIHNvIHBhcnRpY3VsYXIgYWxsb2NhdGlvbnMgaGF2ZSB0bwo+Pj4+Pj4+ PiBiZQo+Pj4+Pj4+PiBhc3NpZ25lZCB0byBhIHBhcnRpY3VsYXIgY29udGV4dHMgSU9NTVUgZG9t YWluLgo+Pj4+Pj4+Cj4+Pj4+Pj4gSSB1bmRlcnN0YW5kIFF1YWxjb21tIFNvQ3MgaGF2ZSBhIHNp bWlsYXIgdGhpbmcgdG9vLCBhbmQgQUZBSUNTIHRoYXQKPj4+Pj4+PiBjYXNlIGp1c3QgZG9lc24n dCBmaXQgaW50byB0aGUgY3VycmVudCBBUEkgbW9kZWwgYXQgYWxsLiBXZSBuZWVkIHRoZQo+Pj4+ Pj4+IElPTU1VIGRyaXZlciB0byBzb21laG93IGtub3cgYWJvdXQgdGhlIHNwZWNpZmljIGRldGFp bHMgb2Ygd2hpY2gKPj4+Pj4+PiBkZXZpY2VzIGhhdmUgbWFnaWMgYXNzb2NpYXRpb25zIHdpdGgg c3BlY2lmaWMgY29udGV4dHMsIGFuZCB3ZQo+Pj4+Pj4+IGFsbW9zdCBjZXJ0YWlubHkgbmVlZCBh IG1vcmUgZXhwcmVzc2l2ZSBpbnRlcmZhY2UgdGhhbgo+Pj4+Pj4+IGlvbW11X2RvbWFpbl9hbGxv YygpIHRvIGhhdmUgYW55IGhvcGUgb2YgcmVsaWFibGUgcmVzdWx0cy4KPj4+Pj4+Cj4+Pj4+PiBU aGlzIGlzIGNvcnJlY3QgZm9yIFF1YWxjb21tIEdQVXMgLSBUaGUgR1BVIGhhcmR3YXJlIGNvbnRl eHQgc3dpdGNoaW5nCj4+Pj4+PiByZXF1aXJlcyBhIHNwZWNpZmljIGNvbnRleHQgYW5kIHRoZXJl IGFyZSBzb21lIHJlc3RyaWN0aW9ucyBhcm91bmQKPj4+Pj4+IHNlY3VyZSBjb250ZXh0cyBhcyB3 ZWxsLgo+Pj4+Pj4KPj4+Pj4+IFdlIGRvbid0IHJlYWxseSBjYXJlIGlmIHRoZSBETUEgYXR0YWNo ZXMgdG8gYSBjb250ZXh0IGp1c3QgYXMgbG9uZyBhcyBpdAo+Pj4+Pj4gZG9lc24ndCBhdHRhY2gg dG8gdGhlIG9uZShzKSB3ZSBjYXJlIGFib3V0LiBQZXJoYXBzIGEgInZhbGlkIGNvbnRleHQiCj4+ Pj4+PiBtYXNrCj4+Pj4+PiB3b3VsZCB3b3JrIGluIGZyb20gdGhlIERUIG9yIHRoZSBkZXZpY2Ug c3RydWN0IHRvIGdpdmUgdGhlIHN1YnN5c3RlbXMgYQo+Pj4+Pj4gY2x1ZSBhcyB0byB3aGljaCBk b21haW5zIHRoZXkgd2VyZSBhbGxvd2VkIHRvIHVzZS4gSSByZWNvZ25pemUgdGhhdAo+Pj4+Pj4g dGhlcmUKPj4+Pj4+IGlzbid0IGEgb25lLXNpemUtZml0cy1hbGwgc29sdXRpb24gdG8gdGhpcyBw cm9ibGVtIHNvIEknbSBvcGVuIHRvCj4+Pj4+PiBkaWZmZXJlbnQKPj4+Pj4+IGlkZWFzLgo+Pj4+ Pgo+Pj4+PiBEZXNpZ25hdGluZyB3aGV0aGVyIGltcGxpY2l0IElPTU1VIGJhY2tpbmcgaXMgYXBw cm9wcmlhdGUgZm9yIGEgZGV2aWNlCj4+Pj4+IHZpYQo+Pj4+PiBkZXZpY2UtdHJlZSBwcm9wZXJ0 eSBzb3VuZHMgYSBiaXQgYXdrd2FyZCBiZWNhdXNlIHRoYXQgd2lsbCBiZSBhIGtpbmRhCj4+Pj4+ IHNvZnR3YXJlIGRlc2NyaXB0aW9uIChvZiBhIGN1c3RvbSBMaW51eCBkcml2ZXIgbW9kZWwpLCB3 aGlsZSBkZXZpY2UtdHJlZQo+Pj4+PiBpcwo+Pj4+PiBzdXBwb3NlZCB0byBkZXNjcmliZSBIVy4K Pj4+Pj4KPj4+Pj4gV2hhdCBhYm91dCB0byBncmFudCBJT01NVSBkcml2ZXJzIHdpdGggYWJpbGl0 eSB0byBkZWNpZGUgd2hldGhlciB0aGUKPj4+Pj4gaW1wbGljaXQgYmFja2luZyBmb3IgYSBkZXZp Y2UgaXMgYXBwcm9wcmlhdGU/IExpa2UgdGhpczoKPj4+Pj4KPj4+Pj4gYm9vbCBpbXBsaWNpdF9p b21tdV9mb3JfZG1hX2lzX2FsbG93ZWQoc3RydWN0IGRldmljZSAqZGV2KQo+Pj4+PiB7Cj4+Pj4+ Cj4+Pj4+IMKgwqDCoMKgY29uc3Qgc3RydWN0IGlvbW11X29wcyAqb3BzID0gZGV2LT5idXMtPmlv bW11X29wczsKPj4+Pj4gwqDCoMKgwqBzdHJ1Y3QgaW9tbXVfZ3JvdXAgKmdyb3VwOwo+Pj4+Pgo+ Pj4+PiDCoMKgwqDCoGdyb3VwID0gaW9tbXVfZ3JvdXBfZ2V0KGRldik7Cj4+Pj4+IMKgwqDCoMKg aWYgKCFncm91cCkKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4+ Cj4+Pj4+IMKgwqDCoMKgaW9tbXVfZ3JvdXBfcHV0KGdyb3VwKTsKPj4+Pj4KPj4+Pj4gwqDCoMKg wqBpZiAoIW9wcy0+aW1wbGljaXRfaW9tbXVfZm9yX2RtYV9pc19hbGxvd2VkKQo+Pj4+Pgo+Pj4+ PiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHJ1ZTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqByZXR1cm4g b3BzLT5pbXBsaWNpdF9pb21tdV9mb3JfZG1hX2lzX2FsbG93ZWQoZGV2KTsKPj4+Pj4KPj4+Pj4g fQo+Pj4+Pgo+Pj4+PiBUaGVuIGFyY2hfc2V0dXBfZG1hX29wcygpIGNvdWxkIGhhdmUgYSBjbHVl IHdoZXRoZXIgaW1wbGljaXQgSU9NTVUKPj4+Pj4gYmFja2luZwo+Pj4+PiBmb3IgYSBkZXZpY2Ug aXMgYXBwcm9wcmlhdGUuCj4+Pj4KPj4+PiBHdXlzLCBkb2VzIGl0IHNvdW5kIGdvb2QgdG8geW91 IG9yIG1heWJlIHlvdSBoYXZlIHNvbWV0aGluZyBlbHNlIG9uIHlvdXIKPj4+PiBtaW5kPyBFdmVu IGlmIGl0J3Mgbm90IGFuIGlkZWFsIHNvbHV0aW9uLCBpdCBmaXhlcyB0aGUgaW1tZWRpYXRlIHBy b2JsZW0KPj4+PiBhbmQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciB0aGUgc3RhcnRlci4KPj4+ Cj4+PiBUbyBtZSB0aGF0IGxvb2tzIGxpa2UgYSBzdGVwIGlvbiB0aGUgd3JvbmcgZGlyZWN0aW9u IHRoYXQgd29uJ3QgaGVscCBhdAo+Pj4gYWxsIGluIGFjdHVhbGx5IGFkZHJlc3NpbmcgdGhlIHVu ZGVybHlpbmcgaXNzdWVzLgo+Pj4KPj4+IElmIHRoZSBHUFUgZHJpdmVyIHdhbnRzIHRvIGV4cGxp Y2l0bHkgY29udHJvbCBJT01NVSBtYXBwaW5ncyBpbnN0ZWFkIG9mCj4+PiByZWx5aW5nIG9uIHRo ZSBJT01NVV9ET01BSU5fRE1BIGFic3RyYWN0aW9uLCB0aGVuIGl0IHNob3VsZCB1c2UgaXRzIG93 bgo+Pj4gdW5tYW5hZ2VkIGRvbWFpbi4gQXQgdGhhdCBwb2ludCBpdCBzaG91bGRuJ3QgbWF0dGVy IGlmIGEgRE1BIG9wcyBkb21haW4KPj4+IHdhcyBhbGxvY2F0ZWQsIHNpbmNlIHRoZSBHUFUgZGV2 aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIGF0dGFjaGVkIHRvIGl0Lgo+Pgo+PiBJdCBpcyBub3Qgb2J2 aW91cyB0byBtZSB3aGF0IHNvbHV0aW9uIHlvdSBhcmUgcHJvcG9zaW5nLi4KPj4KPj4gQXJlIHlv dSBzYXlpbmcgdGhhdCB0aGUgZGV0YWNoaW5nIGZyb20gdGhlIERNQSBJT01NVSBkb21haW4gdGhh dCBpcyBwcm92aWRlZAo+PiBieSBkbWFfb3BzKCkgaW1wbGVtZW50ZXIgKEFSTTMyIGFyY2ggZm9y IGV4YW1wbGUpIHNob3VsZCBiZSBnZW5lcmFsaXplZCBhbmQKPj4gaGVuY2UgdGhlcmUgc2hvdWxk IGJlIHNvbWV0aGluZyBsaWtlOgo+Pgo+PiDCoMKgwqDCoGRtYV9kZXRhY2hfZGV2aWNlX2Zyb21f aW9tbXVfZG1hX2RvbWFpbihkZXYpOwo+Pgo+PiB0aGF0IGRyaXZlcnMgd2lsbCBoYXZlIHRvIGlu dm9rZS4KPiAKPiBObywgSSBtZWFuIHRoYXQgZHJpdmVycyBzaG91bGQgbm90IGhhdmUgdG8gY2Fy ZSBhdCBhbGwuIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gCj4gZ2l2ZW4gYSBzZXQgb2YgRE1BIG9w cyB3aGljaCByZWx5IG9uIGl0IGJlaW5nIGF0dGFjaGVkIHRvIGEgZGVmYXVsdCBETUEgZG9tYWlu LCAKPiB0aGF0J3Mgbm90IHRoZSBkcml2ZXIncyBmYXVsdCBhbmQgaXQncyBub3Qgc29tZXRoaW5n IHRoZSBkcml2ZXIgc2hvdWxkIGhhdmUgZGVhbCAKPiB3aXRoLiBFaXRoZXIgdGhlIERNQSBvcHMg dGhlbXNlbHZlcyBzaG91bGQgYmUgcm9idXN0IGFuZCBwcm92aWRlIGEgbm9uLUlPTU1VIAo+IGZh bGxiYWNrIGlmIHRoZXkgZGV0ZWN0IHRoYXQgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgYXR0YWNo ZWQgdG8gYSBkaWZmZXJlbnQgCj4gZG9tYWluLCBvciB0aGUgYXR0YWNoIG9wZXJhdGlvbiAoaWRl YWxseSBpbiB0aGUgSU9NTVUgY29yZSwgYnV0IGF0IHdvcnN0IGluIHRoZSAKPiBJT01NVSBkcml2 ZXIncyAuYXR0YWNoX2RldiBjYWxsYmFjaykgc2hvdWxkIGF1dG9tYXRpY2FsbHkgdGVsbCB0aGUg YXJjaCBjb2RlIHRvIAo+IHVwZGF0ZSB0aGUgZGV2aWNlJ3MgRE1BIG9wcyBhcHByb3ByaWF0ZWx5 IGZvciB0aGUgdGFyZ2V0IGRvbWFpbi4gVGhlcmUgYXJlIAo+IGFscmVhZHkgZXhhbXBsZXMgb2Yg Ym90aCBhcHByb2FjaGVzIGRvdHRlZCBhcm91bmQgYXJjaC1zcGVjaWZpYyBjb2RlLCBzbyB0aGUg Cj4gcXVlc3Rpb24gaXMgd2hpY2ggcGFydGljdWxhciBzb2x1dGlvbiBpcyBtb3N0IGFwcHJvcHJp YXRlIHRvIHN0YW5kYXJkaXNlIG9uIGluIAo+IHdoYXQgaXMgaW50ZW5kZWQgdG8gYmUgZ2VuZXJp YyBjb2RlLgpPa2F5LCB0aGFuayB5b3UgZm9yIHRoZSBjbGFyaWZpY2F0aW9uLiBJdCB3aWxsIGJl IGJldHRlciB0byBzdGFydCB3aXRoIGEgCndvcmthcm91bmQgd2l0aGluIHRoZSBkcml2ZXIsIG1h eWJlIGxhdGVyIHdlIGNvdWxkIGNvbWUgdXAgd2l0aCBhIHVuaXZlcnNhbCAKc29sdXRpb24uIElz IHRoZXJlIGFueSBjaGFuY2UgdGhhdCB5b3Ugb3IgSm9lcmcgY291bGQgaGVscCB3aXRoIHRoZSAK c3RhbmRhcmRpemF0aW9uIGluIHRoZSBmdXR1cmU/IEkgZG9uJ3QgZmVlbCB0aGF0IEkgaGF2ZSBl bm91Z2ggZXhwZXJ0aXNlIGFuZCAKY2FwYWNpdHkgdG8gZG8gdGhhdC4KCj4+IEFuZCBoZW5jZSB0 aGVyZSB3aWxsIGJlIGRtYV9tYXBfb3BzLmlvbW11X2RldGFjaF9kZXZpY2UoKSB0aGF0IGRtYV9v cHMoKQo+PiBwcm92aWRlciB3aWxsIGhhdmUgdG8gaW1wbGVtZW50LiBUaGVyZWJ5IHByb3ZpZGVy IHdpbGwgZGV0YWNoIGRldmljZSBmcm9tIERNQQo+PiBkb21haW4sIGRlc3Ryb3kgdGhlIGRvbWFp biBhbmQgdXBkYXRlIHRoZSBETUEgb3BzIG9mIHRoZSBkZXZpY2UuCj4+Cj4+PiBZZXMsIHRoZXJl IG1heSBiZSBzb21lIGltcHJvdmVtZW50cyB0byBtYWtlIGxpa2UgaGF2aW5nIHVudXNlZCBkb21h aW5zCj4+PiBub3QgY29uc3VtZSBoYXJkd2FyZSBjb250ZXh0cywgYnV0IHRoYXQncyBpbnRlcm5h bCB0byB0aGUgcmVsZXZhbnQgSU9NTVUKPj4+IGRyaXZlcnMuIElmIG1vdmluZyBpbiBhbmQgb3V0 IG9mIERNQSBvcHMgZG9tYWlucyBsZWF2ZXMgdGhlIGFjdHVhbAo+Pj4gZG1hX29wcyBicm9rZW4s IHRoYXQncyBhbHJlYWR5IGEgcHJvYmxlbSBiZXR3ZWVuIHRoZSBJT01NVSBBUEkgYW5kIHRoZQo+ Pj4gYXJjaCBETUEgY29kZSBhcyBJJ3ZlIG1lbnRpb25lZCBiZWZvcmUuCj4+Pgo+Pj4gRnVydGhl cm1vcmUsIGdpdmVuIHdoYXQgdGhlIGV4YW1wbGUgYWJvdmUgaXMgdHJ5aW5nIHRvIGRvLAo+Pj4g YXJjaF9zZXR1cF9kbWFfb3BzKCkgaXMgd2F5IHRvbyBsYXRlIHRvIGRvIGl0IC0gdGhlIGRlZmF1 bHQgZG9tYWluIHdhcwo+Pj4gYWxyZWFkeSBzZXQgdXAgaW4gaW9tbXVfZ3JvdXBfZ2V0X2Zvcl9k ZXYoKSB3aGVuIHRoZSBJT01NVSBkcml2ZXIgZmlyc3QKPj4+IHNhdyB0aGF0IGRldmljZS4gQW4g Im9wdC1vdXQiIG1lY2hhbmlzbSB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgb3B0IG91dAo+Pj4gYW5k IGp1c3QgYm9kZ2VzIGFyb3VuZCBiZWluZyBvcHRlZC1pbiBhZnRlciB0aGUgZmFjdCBkb2Vzbid0 IHN0cmlrZSBtZQo+Pj4gYXMgc29tZXRoaW5nIHdoaWNoIGNhbiBncm93IHRvIGJlIHJvYnVzdCBh bmQgbWFpbnRhaW5hYmxlLgo+Pj4KPj4+IEZvciB0aGUgY2FzZSB3aGVyZcKgIGEgZGV2aWNlIGhh cyBzb21lIHNwZWNpYWwgaGFyZHdhcmUgcmVsYXRpb25zaGlwIHdpdGgKPj4+IGEgcGFydGljdWxh ciBJT01NVSBjb250ZXh0LCB0aGUgSU9NTVUgZHJpdmVyICpoYXMqIHRvIGJlIGNvbXBsZXRlbHkK Pj4+IGF3YXJlIG9mIHRoYXQsIGkuZS4gaXQgbmVlZHMgdG8gYmUgZGVzY3JpYmVkIGluIERUL0FD UEksIGVpdGhlciB2aWEgc29tZQo+Pj4gZXhwbGljaXQgYmluZGluZyBvciBhdCBsZWFzdCBpbmZl cnJlZCBmcm9tIHNvbWUgU29DL2luc3RhbmNlLXNwZWNpZmljCj4+PiBJT01NVSBjb21wYXRpYmxl LiBUaGVuIHRoZSBJT01NVSBkcml2ZXIgbmVlZHMgdG8ga25vdyB3aGVuIHRoZSBkcml2ZXIKPj4+ IGZvciB0aGF0IGRldmljZSBpcyByZXF1ZXN0aW5nIGl0cyBzcGVjaWFsIGRvbWFpbiBzbyB0aGF0 IGl0IHByb3ZpZGUgdGhlCj4+PiBjb3JyZWN0IGNvbnRleHQgKGFuZCAqbm90KiBhbGxvY2F0ZSB0 aGF0IGNvbnRleHQgZm9yIG90aGVyIHVzZXMpLgo+Pj4gQW55dGhpbmcgd2hpY2gganVzdCByZWxp ZXMgb24gdGhlIG9yZGVyIGluIHdoaWNoIHRoaW5ncyBjdXJyZW50bHkgaGFwcGVuCj4+PiB0byBi ZSBhbGxvY2F0ZWQgaXMgZmFyIHRvbyBmcmFnaWxlIGxvbmctdGVybS4KPj4KPj4gSWYgaGFyZHdh cmUgaGFzIHNvbWUgcmVzdHJpY3Rpb25zLCB0aGVuIHRoYXQgc2hvdWxkIGJlIHJlZmxlY3RlZCBp biB0aGUKPj4gaGFyZHdhcmUgZGVzY3JpcHRpb24uIEJ1dCB0aGF0J3Mgbm90IHdoYXQgd2UgYXJl IHRyeWluZyB0byBzb2x2ZSwgYXQgbGVhc3QKPj4gdGhlcmUgaXMgbm8gc3VjaCBwcm9ibGVtIHJp Z2h0IG5vdyBmb3IgTlZJRElBIFRlZ3JhLgo+IAo+IE9LLCBtYXliZSBJIG1pc3VuZGVyc3Rvb2Qg IkhXIHBlcmZvcm1zIGNvbnRleHQgc3dpdGNoZXMgYW5kIHNvIHBhcnRpY3VsYXIgCj4gYWxsb2Nh dGlvbnMgaGF2ZSB0byBiZSBhc3NpZ25lZCB0byBhIHBhcnRpY3VsYXIgY29udGV4dHMgSU9NTVUg ZG9tYWluLiIgLSBpcyBpdCAKPiB0aGF0IHRoZSBkb21haW4gY2FuIGJlIGJhY2tlZCBieSBhbnkg aGFyZHdhcmUgY29udGV4dCBhbmQgdGhlIFRlZ3JhIEdQVSBkcml2ZXIgCj4gb25seSBuZWVkcyB0 byBrbm93ICp3aGljaCogb25lLCByYXRoZXIgdGhlbiBuZWVkaW5nIGEgc3BlY2lmaWMgaGFyZC13 aXJlZCAKPiBjb250ZXh0IHRvIGJlIGFsbG9jYXRlZCBhcyBpbiB0aGUgUWNvbSBjYXNlPwoKWWVz LCBJIGNhbid0IHJlY2FsbCB0aGF0IFRlZ3JhIGhhcyBhbnkgbGltaXRhdGlvbnMgbGlrZSBRY29t IGhhcy4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaW9t bXUgbWFpbGluZyBsaXN0CmlvbW11QGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8v bGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lvbW11