From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC,4/6] dma: Add Synopsys eDMA IP PCIe glue-logic From: Andy Shevchenko Message-Id: <20181212132528.GT10650@smile.fi.intel.com> Date: Wed, 12 Dec 2018 15:25:28 +0200 To: Gustavo Pimentel Cc: linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, Vinod Koul , Eugeniy Paltsev , Lorenzo Pieralisi , Joao Pinto List-ID: T24gV2VkLCBEZWMgMTIsIDIwMTggYXQgMTI6MTM6MjRQTSArMDEwMCwgR3VzdGF2byBQaW1lbnRl bCB3cm90ZToKPiBTeW5vcHN5cyBlRE1BIElQIGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIGFsb25n IHdpdGggU3lub3BzeXMgUENJZQo+IEVuZFBvaW50IElQIChkZXBlbmRzIG9mIHRoZSB1c2UgYW5k IGxpY2Vuc2luZyBhZ3JlZW1lbnQpLgo+IAo+IFRoaXMgSVAgcmVxdWlyZXMgc29tZSBiYXNpYyBj b25maWd1cmF0aW9ucywgc3VjaCBhczoKPiAgLSBlRE1BIHJlZ2lzdGVycyBCQVIKPiAgLSBlRE1B IHJlZ2lzdGVycyBvZmZzZXQKPiAgLSBlRE1BIGxpbmtlZCBsaXN0IEJBUgo+ICAtIGVETUEgbGlu a2VkIGxpc3Qgb2Zmc2V0Cj4gIC0gZURNQSBsaW5rZWQgbGlzdCBzaXplCj4gIC0gZURNQSB2ZXJz aW9uCj4gIC0gZURNQSBtb2RlCj4gCj4gQXMgYSB3b3JraW5nIGV4YW1wbGUsIFBDSWUgZ2x1ZS1s b2dpYyB3aWxsIGF0dGFjaCB0byBhIFN5bm9wc3lzIFBDSWUKPiBFbmRQb2ludCBJUCBwcm90b3R5 cGUga2l0IChWZW5kb3IgSUQgPSAweDE2YzMsIERldmljZSBJRCA9IDB4ZWRkYSksCj4gd2hpY2gg aGFzIGJ1aWx0LWluIGFuIGVETUEgSVAgd2l0aCB0aGlzIGRlZmF1bHQgY29uZmlndXJhdGlvbjoK PiAgLSBlRE1BIHJlZ2lzdGVycyBCQVIgPSAwCj4gIC0gZURNQSByZWdpc3RlcnMgb2Zmc2V0ID0g MHgxMDAwICg0IEtieXRlcykKPiAgLSBlRE1BIGxpbmtlZCBsaXN0IEJBUiA9IDIKPiAgLSBlRE1B IGxpbmtlZCBsaXN0IG9mZnNldCA9IDB4MCAoMCBLYnl0ZXMpCj4gIC0gZURNQSBsaW5rZWQgbGlz dCBzaXplID0gMHgyMDAwMCAoMTI4IEtieXRlcykKPiAgLSBlRE1BIHZlcnNpb24gPSAwCj4gIC0g ZURNQSBtb2RlID0gRURNQV9NT0RFX1VOUk9MTAo+IAo+IFRoaXMgZHJpdmVyIGNhbiBiZSBjb21w aWxlIGFzIGJ1aWx0LWluIG9yIGV4dGVybmFsIG1vZHVsZSBpbiBrZXJuZWwuCj4gCj4gVG8gZW5h YmxlIHRoaXMgZHJpdmVyIGp1c3Qgc2VsZWN0IERXX0VETUFfUENJRSBvcHRpb24gaW4ga2VybmVs Cj4gY29uZmlndXJhdGlvbiwgaG93ZXZlciBpdCByZXF1aXJlcyBhbmQgc2VsZWN0cyBhdXRvbWF0 aWNhbGx5IERXX0VETUEKPiBvcHRpb24gdG9vLgoKSXQgc2VlbXMgdGhpcyBkcml2ZXIgc29tZWhv dyB3cml0dGVuIGFzIGEgY29weS1wYXN0ZSBvZiBleGlzdGluZyBwaWVjZXMgdy9vIGdvb2QgcmVh c29ucyB0byBkbyBzdWNoLgoKPiArZW51bSBkd19lZG1hX3BjaWVfYmFyIHsKPiArCUJBUl8wLAo+ ICsJQkFSXzEsCj4gKwlCQVJfMiwKPiArCUJBUl8zLAo+ICsJQkFSXzQsCj4gKwlCQVJfNQo+ICt9 OwoKV2h5IGRvIHlvdSBuZWVkIHRoaXMgYXQgYWxsPwoKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk d19lZG1hX3BjaWVfZGF0YSBzbnBzX2VkZGFfZGF0YSA9IHsKPiArCS8vIGVETUEgcmVnaXN0ZXJz IGxvY2F0aW9uCj4gKwkucmVnc19iYXIJCQk9IEJBUl8wLAo+ICsJLnJlZ3Nfb2ZmCQkJPSAweDEw MDAsCS8vICAgNCBLQnl0ZXMKPiArCS8vIGVETUEgbWVtb3J5IGxpbmtlZCBsaXN0IGxvY2F0aW9u Cj4gKwkubGxfYmFyCQkJCT0gQkFSXzIsCj4gKwkubGxfb2ZmCQkJCT0gMCwJCS8vICAgMCBLQnl0 ZXMKPiArCS5sbF9zegkJCQk9IDB4MjAwMDAsCS8vIDEyOCBLQnl0ZXMKPiArCS8vIE90aGVyCj4g KwkudmVyc2lvbgkJCT0gMCwKPiArCS5tb2RlCQkJCT0gRURNQV9NT0RFX1VOUk9MTCwKPiArfTsK Ckh1aD8gSXNuJ3QgdGhpcyAKCj4gKwo+ICtzdGF0aWMgaW50IGR3X2VkbWFfcGNpZV9wcm9iZShz dHJ1Y3QgcGNpX2RldiAqcGRldiwKPiArCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2Vf aWQgKnBpZCkKPiArewo+ICsJY29uc3Qgc3RydWN0IGR3X2VkbWFfcGNpZV9kYXRhICpwZGF0YSA9 ICh2b2lkICopcGlkLT5kcml2ZXJfZGF0YTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7Cj4gKwlzdHJ1Y3QgZHdfZWRtYV9jaGlwICpjaGlwOwo+ICsJc3RydWN0IGR3X2VkbWEg KmR3Owo+ICsJdm9pZCBfX2lvbWVtICpyZWc7Cj4gKwlpbnQgZXJyLCBpcnEgPSAtMTsKPiArCXUz MiBhZGRyX2hpLCBhZGRyX2xvOwo+ICsJdTE2IGZsYWdzOwo+ICsJdTggY2FwX29mZjsKPiArCj4g KwlpZiAoIXBkYXRhKSB7Cj4gKwkJZGV2X2VycihkZXYsICIlcyBtaXNzaW5nIGRhdGEgc3RydXR1 cmVcbiIsCj4gKwkJCXBjaV9uYW1lKHBkZXYpKTsKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCX0K PiArCj4gKwllcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7Cj4gKwlpZiAoZXJyKSB7Cj4g KwkJZGV2X2VycihkZXYsICIlcyBlbmFibGluZyBkZXZpY2UgZmFpbGVkXG4iLAo+ICsJCQlwY2lf bmFtZShwZGV2KSk7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCgo+ICsJZXJyID0gcGNpbV9p b21hcF9yZWdpb25zKHBkZXYsIDEgPDwgcGRhdGEtPnJlZ3NfYmFyLCBwY2lfbmFtZShwZGV2KSk7 Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJZGV2X2VycihkZXYsICIlcyBlRE1BIHJlZ2lzdGVyIEJBUiBJ L08gbWVtb3J5IHJlbWFwcGluZyBmYWlsZWRcbiIsCj4gKwkJCXBjaV9uYW1lKHBkZXYpKTsKPiAr CQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWVyciA9IHBjaW1faW9tYXBfcmVnaW9ucyhwZGV2 LCAxIDw8IHBkYXRhLT5sbF9iYXIsIHBjaV9uYW1lKHBkZXYpKTsKPiArCWlmIChlcnIpIHsKPiAr CQlkZXZfZXJyKGRldiwgIiVzIGVETUEgbGlua2VkIGxpc3QgQkFSIEkvTyByZW1hcHBpbmcgZmFp bGVkXG4iLAo+ICsJCQlwY2lfbmFtZShwZGV2KSk7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KClRo aXMgY291bGQgYmUgZG9uZSBpbiBvbmUgY2FsbC4KCj4gKwo+ICsJcGNpX3NldF9tYXN0ZXIocGRl dik7Cj4gKwoKPiArCWVyciA9IHBjaV90cnlfc2V0X213aShwZGV2KTsKPiArCWlmIChlcnIpIHsK PiArCQlkZXZfZXJyKGRldiwgIiVzIERNQSBtZW1vcnkgd3JpdGUgaW52YWxpZGF0ZVxuIiwKPiAr CQkJcGNpX25hbWUocGRldikpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9CgpBcmUgeW91IHN1cmUg eW91IG5lZWQgdGhpcz8KCj4gKwo+ICsJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFf QklUX01BU0soMzIpKTsKPiArCWlmIChlcnIpIHsKPiArCQlkZXZfZXJyKGRldiwgIiVzIERNQSBt YXNrIHNldCBmYWlsZWRcbiIsCj4gKwkJCXBjaV9uYW1lKHBkZXYpKTsKPiArCQlyZXR1cm4gZXJy Owo+ICsJfQo+ICsKPiArCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBE TUFfQklUX01BU0soMzIpKTsKPiArCWlmIChlcnIpIHsKPiArCQlkZXZfZXJyKGRldiwgIiVzIGNv bnNpc3RlbnQgRE1BIG1hc2sgc2V0IGZhaWxlZFxuIiwKPiArCQkJcGNpX25hbWUocGRldikpOwo+ ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJY2hpcCA9IGRldm1fa3phbGxvYygmcGRldi0+ ZGV2LCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKPiArCWlmICghY2hpcCkKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gKwlkdyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yo KmR3KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWR3KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsK PiArCWlycSA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCAxLCAxLCBQQ0lfSVJRX01TSSB8 IFBDSV9JUlFfTVNJWCk7Cj4gKwlpZiAoaXJxIDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiJXMg ZmFpbGVkIHRvIGFsbG9jIElSUSB2ZWN0b3JcbiIsCj4gKwkJCXBjaV9uYW1lKHBkZXYpKTsKPiAr CQlyZXR1cm4gLUVQRVJNOwo+ICsJfQo+ICsKPiArCWNoaXAtPmR3ID0gZHc7Cj4gKwljaGlwLT5k ZXYgPSBkZXY7Cj4gKwljaGlwLT5pZCA9IHBkZXYtPmRldmZuOwo+ICsJY2hpcC0+aXJxID0gcGRl di0+aXJxOwo+ICsKPiArCWR3LT5yZWdzID0gcGNpbV9pb21hcF90YWJsZShwZGV2KVtwZGF0YS0+ cmVnc19iYXJdOwo+ICsJZHctPnJlZ3MgKz0gcGRhdGEtPnJlZ3Nfb2ZmOwo+ICsKPiArCWR3LT52 YV9sbCA9IHBjaW1faW9tYXBfdGFibGUocGRldilbcGRhdGEtPmxsX2Jhcl07Cj4gKwlkdy0+dmFf bGwgKz0gcGRhdGEtPmxsX29mZjsKPiArCWR3LT5wYV9sbCA9IHBkZXYtPnJlc291cmNlW3BkYXRh LT5sbF9iYXJdLnN0YXJ0Owo+ICsJZHctPnBhX2xsICs9IHBkYXRhLT5sbF9vZmY7Cj4gKwlkdy0+ bGxfc3ogPSBwZGF0YS0+bGxfc3o7Cj4gKwo+ICsJZHctPm1zaV9hZGRyID0gMDsKPiArCWR3LT5t c2lfZGF0YSA9IDA7Cj4gKwo+ICsJZHctPnZlcnNpb24gPSBwZGF0YS0+dmVyc2lvbjsKPiArCWR3 LT5tb2RlID0gcGRhdGEtPm1vZGU7Cj4gKwo+ICsJZGV2X2luZm8oZGV2LCAiVmVyc2lvbjpcdCV1 XG4iLCBkdy0+dmVyc2lvbik7Cj4gKwo+ICsJZGV2X2luZm8oZGV2LCAiTW9kZTpcdCVzXG4iLAo+ ICsJCSBkdy0+bW9kZSA9PSBFRE1BX01PREVfTEVHQUNZID8gIkxlZ2FjeSIgOiAiVW5yb2xsIik7 Cj4gKwoKCj4gKwlkZXZfaW5mbyhkZXYsICJSZWdpc3RlcnM6XHRCQVI9JXUsIG9mZj0weCUuMTZs bHggQiwgYWRkcj0weCUuOGx4XG4iLAo+ICsJCSBwZGF0YS0+cmVnc19iYXIsIHBkYXRhLT5yZWdz X29mZiwKPiArCQkgKHVuc2lnbmVkIGxvbmcpIGR3LT5yZWdzKTsKCk9oLCBubywgZG9uJ3QgZG8g Y2FzdGluZyB3aGVuIHByaW50aW5nIHNvbWV0aGluZy4gSW4gb25seSByYXJlIGNhc2VzIGl0J3Mg bmVlZGVkLCBub3QgaGVyZS4KCj4gKwo+ICsJZGV2X2luZm8oZGV2LAo+ICsJCSJMLiBMaXN0Olx0 QkFSPSV1LCBvZmY9MHglLjE2bGx4IEIsIHN6PTB4JS44eCBCLCB2YWRkcj0weCUuOGx4LCBwYWRk cj0weCUuOGx4IiwKPiArCQkgcGRhdGEtPmxsX2JhciwgcGRhdGEtPmxsX29mZiwgcGRhdGEtPmxs X3N6LAo+ICsJCSAodW5zaWduZWQgbG9uZykgZHctPnZhX2xsLAo+ICsJCSAodW5zaWduZWQgbG9u ZykgZHctPnBhX2xsKTsKClRoaXMgaXMgbm9pc2UsIGVpdGhlciByZW1vdmUgb3IgbW92ZSB0byBk YmcgbGV2ZWwuCgo+ICsJaWYgKHBkZXYtPm1zaV9jYXAgJiYgcGRldi0+bXNpX2VuYWJsZWQpIHsK PiArCQljYXBfb2ZmID0gcGRldi0+bXNpX2NhcCArIFBDSV9NU0lfRkxBR1M7Cj4gKwkJcGNpX3Jl YWRfY29uZmlnX3dvcmQocGRldiwgY2FwX29mZiwgJmZsYWdzKTsKPiArCQlpZiAoZmxhZ3MgJiBQ Q0lfTVNJX0ZMQUdTX0VOQUJMRSkgewo+ICsJCQljYXBfb2ZmID0gcGRldi0+bXNpX2NhcCArIFBD SV9NU0lfQUREUkVTU19MTzsKPiArCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGNhcF9v ZmYsICZhZGRyX2xvKTsKPiArCj4gKwkJCWlmIChmbGFncyAmIFBDSV9NU0lfRkxBR1NfNjRCSVQp IHsKPiArCQkJCWNhcF9vZmYgPSBwZGV2LT5tc2lfY2FwICsgUENJX01TSV9BRERSRVNTX0hJOwo+ ICsJCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGNhcF9vZmYsICZhZGRyX2hpKTsKPiAr CQkJCWNhcF9vZmYgPSBwZGV2LT5tc2lfY2FwICsgUENJX01TSV9EQVRBXzY0Owo+ICsJCQl9IGVs c2Ugewo+ICsJCQkJYWRkcl9oaSA9IDA7Cj4gKwkJCQljYXBfb2ZmID0gcGRldi0+bXNpX2NhcCAr IFBDSV9NU0lfREFUQV8zMjsKPiArCQkJfQo+ICsKPiArCQkJZHctPm1zaV9hZGRyID0gYWRkcl9o aTsKPiArCQkJZHctPm1zaV9hZGRyIDw8PSAzMjsKPiArCQkJZHctPm1zaV9hZGRyIHw9IGFkZHJf bG87Cj4gKwo+ICsJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgY2FwX29mZiwgJihkdy0+ bXNpX2RhdGEpKTsKPiArCQkJZHctPm1zaV9kYXRhICY9IDB4ZmZmZjsKPiArCj4gKwkJCWRldl9p bmZvKGRldiwKPiArCQkJCSAiTVNJOlx0XHRhZGRyPTB4JS4xNmxseCwgZGF0YT0weCUuOHgsIG5y PSVkXG4iLAo+ICsJCQkJIGR3LT5tc2lfYWRkciwgZHctPm1zaV9kYXRhLCBwZGV2LT5pcnEpOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlpZiAocGRldi0+bXNpeF9jYXAgJiYgcGRldi0+bXNpeF9lbmFi bGVkKSB7Cj4gKwkJdTMyIG9mZnNldDsKPiArCQl1OCBiaXI7Cj4gKwo+ICsJCWNhcF9vZmYgPSBw ZGV2LT5tc2l4X2NhcCArIFBDSV9NU0lYX0ZMQUdTOwo+ICsJCXBjaV9yZWFkX2NvbmZpZ193b3Jk KHBkZXYsIGNhcF9vZmYsICZmbGFncyk7Cj4gKwo+ICsJCWlmIChmbGFncyAmIFBDSV9NU0lYX0ZM QUdTX0VOQUJMRSkgewo+ICsJCQljYXBfb2ZmID0gcGRldi0+bXNpeF9jYXAgKyBQQ0lfTVNJWF9U QUJMRTsKPiArCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGNhcF9vZmYsICZvZmZzZXQp Owo+ICsKPiArCQkJYmlyID0gb2Zmc2V0ICYgUENJX01TSVhfVEFCTEVfQklSOwo+ICsJCQlvZmZz ZXQgJj0gUENJX01TSVhfVEFCTEVfT0ZGU0VUOwo+ICsKPiArCQkJcmVnID0gcGNpbV9pb21hcF90 YWJsZShwZGV2KVtiaXJdOwo+ICsJCQlyZWcgKz0gb2Zmc2V0Owo+ICsKPiArCQkJYWRkcl9sbyA9 IHJlYWRsKHJlZyArIFBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFIpOwo+ICsJCQlhZGRyX2hpID0g cmVhZGwocmVnICsgUENJX01TSVhfRU5UUllfVVBQRVJfQUREUik7Cj4gKwkJCWR3LT5tc2lfYWRk ciA9IGFkZHJfaGk7Cj4gKwkJCWR3LT5tc2lfYWRkciA8PD0gMzI7Cj4gKwkJCWR3LT5tc2lfYWRk ciB8PSBhZGRyX2xvOwo+ICsKPiArCQkJZHctPm1zaV9kYXRhID0gcmVhZGwocmVnICsgUENJX01T SVhfRU5UUllfREFUQSk7Cj4gKwo+ICsJCQlkZXZfaW5mbyhkZXYsCj4gKwkJCQkgIk1TSS1YOlx0 YWRkcj0weCUuMTZsbHgsIGRhdGE9MHglLjh4LCBucj0lZFxuIiwKPiArCQkJCSBkdy0+bXNpX2Fk ZHIsIGR3LT5tc2lfZGF0YSwgcGRldi0+aXJxKTsKPiArCQl9Cj4gKwl9CgpXaGF0IGlzIHRoaXM/ IFdoeT8KCj4gKwo+ICsJaWYgKCFwZGV2LT5tc2lfZW5hYmxlZCAmJiAhcGRldi0+bXNpeF9lbmFi bGVkKSB7CgpUaGVyZSBpcyBhIGhlbHBlciBmcm9tIFBDSSBjb3JlIGZvciB0aGlzLgoKPiArCQlk ZXZfZXJyKGRldiwgIiVzIGVuYWJsZSBpbnRlcnJ1cHQgZmFpbGVkXG4iLAo+ICsJCQlwY2lfbmFt ZShwZGV2KSk7Cj4gKwkJcmV0dXJuIC1FUEVSTTsKPiArCX0KPiArCj4gKwllcnIgPSBkd19lZG1h X3Byb2JlKGNoaXApOwo+ICsJaWYgKGVycikgewo+ICsJCWRldl9lcnIoZGV2LCAiJXMgZURNQSBw cm9iZSBmYWlsZWRcbiIsCj4gKwkJCXBjaV9uYW1lKHBkZXYpKTsKPiArCQlyZXR1cm4gZXJyOwo+ ICsJfQo+ICsKPiArCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGlwKTsKPiArCj4gKwlkZXZfaW5m byhkZXYsICJEZXNpZ25XYXJlIGVETUEgUENJZSBkcml2ZXIgbG9hZGVkIGNvbXBsZXRlbHlcbiIp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkd19lZG1hX3BjaWVf cmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfZWRtYV9jaGlw ICpjaGlwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKPiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gZHdfZWRtYV9yZW1vdmUoY2hp cCk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJZGV2X3dhcm4oZGV2LCAiJXMgY2FuJ3QgcmVtb3ZlIGRl dmljZSBwcm9wZXJseTogJWRcbiIsCj4gKwkJCXBjaV9uYW1lKHBkZXYpLCBlcnIpOwoKZGV2X3dh cm4gKyBkZXZfbmFtZSA/ISBIYXZlIHlvdSB0cmllZCB0byBzZWUgd2hhdCB3b3VsZCBiZSB0aGUg b3V0cHV0PwoKPiArCX0KPiArCj4gKwlwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTsKPiArCj4g KwlkZXZfaW5mbyhkZXYsICJEZXNpZ25XYXJlIGVETUEgUENJZSBkcml2ZXIgdW5sb2FkZWQgY29t cGxldGVseVxuIik7Cj4gK30KPiArCgo+ICsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCgpZb3UgY2Fu IHVzZSBfX21heWJlX3VudXNlZCBpbnN0ZWFkIG9mIHRoaXMuCgo+ICsjZW5kaWYgLyogQ09ORklH X1BNX1NMRUVQICovCg==