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: [v5,2/3] dmaengine: mediatek: Add MediaTek High-Speed DMA controller for MT7622 and MT7623 SoC From: Vinod Koul Message-Id: <20180301082329.GD15443@localhost> Date: Thu, 1 Mar 2018 13:53:29 +0530 To: sean.wang@mediatek.com Cc: dan.j.williams@intel.com, robh+dt@kernel.org, mark.rutland@arm.com, dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Randy Dunlap , Fengguang Wu , Julia Lawall List-ID: T24gU3VuLCBGZWIgMTgsIDIwMTggYXQgMDM6MDg6MzBBTSArMDgwMCwgc2Vhbi53YW5nQG1lZGlh dGVrLmNvbSB3cm90ZToKCj4gQEAgLTAsMCArMSwxMDU0IEBACj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCi8vIENvcHlyaWdodCAuLi4KClRoZSBjb3B5cmlnaHQgbGluZSBu ZWVkcyB0byBmb2xsb3cgU1BEWCB0YWcgbGluZQoKPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5o Pgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFw cGluZy5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ppZmZp ZXMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2Rldmlj ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZG1hLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3JlZmNvdW50Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cgp0aGF0J3Mg YSBsb3Qgb2YgaGVhZGVycywgZG8gdSBuZWVkIGFsbCB0aG9zZT8KCj4gKwo+ICsjaW5jbHVkZSAi Li4vdmlydC1kbWEuaCIKPiArCj4gKyNkZWZpbmUgTVRLX0RNQV9ERVYgS0JVSUxEX01PRE5BTUUK CndoeSBkbyB5b3UgbmVlZCB0aGlzPwoKPiArCj4gKyNkZWZpbmUgTVRLX0hTRE1BX1VTRUNfUE9M TAkJMjAKPiArI2RlZmluZSBNVEtfSFNETUFfVElNRU9VVF9QT0xMCQkyMDAwMDAKPiArI2RlZmlu ZSBNVEtfSFNETUFfRE1BX0JVU1dJRFRIUwkJQklUKERNQV9TTEFWRV9CVVNXSURUSF9VTkRFRklO RUQpCgpVbmRlZmluZWQgYnVzd2lkdGg/PwoKPiArLyoqCj4gKyAqIHN0cnVjdCBtdGtfaHNkbWFf cGRlc2MgLSBUaGlzIGlzIHRoZSBzdHJ1Y3QgaG9sZGluZyBpbmZvIGRlc2NyaWJpbmcgcGh5c2lj YWwKPiArICoJCQkgICAgZGVzY3JpcHRvciAoUEQpIGFuZCBpdHMgcGxhY2VtZW50IG11c3QgYmUg a2VwdCBhdAo+ICsgKgkJCSAgICA0LWJ5dGVzIGFsaWdubWVudCBpbiBsaXR0bGUgZW5kaWFuIG9y ZGVyLgo+ICsgKiBAZGVzY1sxLTRdOgkJICAgIFRoZSBjb250cm9sIHBhZCB1c2VkIHRvIGluZGlj YXRlIGhhcmR3YXJlIGhvdyB0bwoKcGxzIGFsaWduIHRvIDgwY2hhciBvciBsZXNzZXIKCj4gKy8q Kgo+ICsgKiBzdHJ1Y3QgbXRrX2hzZG1hX3JpbmcgLSBUaGlzIHN0cnVjdCBob2xkcyBpbmZvIGRl c2NyaWJpbmcgdW5kZXJseWluZyByaW5nCj4gKyAqCQkJICAgc3BhY2UKPiArICogQHR4ZDoJCSAg IFRoZSBkZXNjcmlwdG9yIFRYIHJpbmcgd2hpY2ggZGVzY3JpYmVzIERNQSBzb3VyY2UKPiArICoJ CQkgICBpbmZvcm1hdGlvbgo+ICsgKiBAcnhkOgkJICAgVGhlIGRlc2NyaXB0b3IgUlggcmluZyB3 aGljaCBkZXNjcmliZXMgRE1BCj4gKyAqCQkJICAgZGVzdGluYXRpb24gaW5mb3JtYXRpb24KPiAr ICogQGNiOgkJCSAgIFRoZSBleHRyYSBpbmZvcm1hdGlvbiBwb2ludGVkIGF0IGJ5IFJYIHJpbmcK PiArICogQHRwaHlzOgkJICAgVGhlIHBoeXNpY2FsIGFkZHIgb2YgVFggcmluZwo+ICsgKiBAcnBo eXM6CQkgICBUaGUgcGh5c2ljYWwgYWRkciBvZiBSWCByaW5nCj4gKyAqIEBjdXJfdHB0cjoJCSAg IFBvaW50ZXIgdG8gdGhlIG5leHQgZnJlZSBkZXNjcmlwdG9yIHVzZWQgYnkgdGhlIGhvc3QKPiAr ICogQGN1cl9ycHRyOgkJICAgUG9pbnRlciB0byB0aGUgbGFzdCBkb25lIGRlc2NyaXB0b3IgYnkg dGhlIGRldmljZQoKaGVyZSBhbGlnbm1lbnQgYW5kIDgwIGNoYXIgd3JhcCB3aWxsIGhlbHAgdG9v IGFuZCBmZXcgb3RoZXIgcGxhY2VzLi4uCgoKPiArc3RydWN0IG10a19oc2RtYV92Y2hhbiB7Cj4g KwlzdHJ1Y3QgdmlydF9kbWFfY2hhbiB2YzsKPiArCXN0cnVjdCBjb21wbGV0aW9uIGlzc3VlX2Nv bXBsZXRpb247Cj4gKwlib29sIGlzc3VlX3N5bmNocm9uaXplOwo+ICsJLyogcHJvdGVjdGVkIGJ5 IHZjLmxvY2sgKi8KCnRoaXMgc2hvdWxkIGJlIGF0IGNvbW1lbnRzIGFib3ZlLi4uCgo+ICtzdGF0 aWMgc3RydWN0IG10a19oc2RtYV9kZXZpY2UgKnRvX2hzZG1hX2RldihzdHJ1Y3QgZG1hX2NoYW4g KmNoYW4pCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoY2hhbi0+ZGV2aWNlLCBzdHJ1Y3Qg bXRrX2hzZG1hX2RldmljZSwKPiArCQkJICAgIGRkZXYpOwoKYW5kIHRoaXMgY2FuIGZpdCBpbiBh IGxpbmUKCj4gK3N0YXRpYyBpbnQgbXRrX2hzZG1hX2FsbG9jX3BjaGFuKHN0cnVjdCBtdGtfaHNk bWFfZGV2aWNlICpoc2RtYSwKPiArCQkJCSBzdHJ1Y3QgbXRrX2hzZG1hX3BjaGFuICpwYykKPiAr ewo+ICsJc3RydWN0IG10a19oc2RtYV9yaW5nICpyaW5nID0gJnBjLT5yaW5nOwo+ICsJaW50IGVy cjsKPiArCj4gKwltZW1zZXQocGMsIDAsIHNpemVvZigqcGMpKTsKPiArCj4gKwkvKgo+ICsJICog QWxsb2NhdGUgcmluZyBzcGFjZSB3aGVyZSBbMCAuLi4gTVRLX0RNQV9TSVpFIC0gMV0gaXMgZm9y IFRYIHJpbmcKPiArCSAqIGFuZCBbTVRLX0RNQV9TSVpFIC4uLiAyICogTVRLX0RNQV9TSVpFIC0g MV0gaXMgZm9yIFJYIHJpbmcuCj4gKwkgKi8KPiArCXBjLT5zel9yaW5nID0gMiAqIE1US19ETUFf U0laRSAqIHNpemVvZigqcmluZy0+dHhkKTsKPiArCXJpbmctPnR4ZCA9IGRtYV96YWxsb2NfY29o ZXJlbnQoaHNkbWEyZGV2KGhzZG1hKSwgcGMtPnN6X3JpbmcsCj4gKwkJCQkJJnJpbmctPnRwaHlz LCBHRlBfQVRPTUlDKTsKCkdGUF9OT1dBSVQgcGxlYXNlCgo+ICsJaWYgKCFyaW5nLT50eGQpCj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmluZy0+cnhkID0gJnJpbmctPnR4ZFtNVEtfRE1B X1NJWkVdOwo+ICsJcmluZy0+cnBoeXMgPSByaW5nLT50cGh5cyArIE1US19ETUFfU0laRSAqIHNp emVvZigqcmluZy0+dHhkKTsKPiArCXJpbmctPmN1cl90cHRyID0gMDsKPiArCXJpbmctPmN1cl9y cHRyID0gTVRLX0RNQV9TSVpFIC0gMTsKPiArCj4gKwlyaW5nLT5jYiA9IGtjYWxsb2MoTVRLX0RN QV9TSVpFLCBzaXplb2YoKnJpbmctPmNiKSwgR0ZQX0tFUk5FTCk7Cgp0aGlzIGlzIGluY29uc2lz dGVudCB3aXRoIHlvdXIgb3duIHBhdHRlcm4hIG1ha2UgaXQgR0ZQX05PV0FJVCBwbHMKCj4gK3N0 YXRpYyBpbnQgbXRrX2hzZG1hX2lzc3VlX3BlbmRpbmdfdmRlc2Moc3RydWN0IG10a19oc2RtYV9k ZXZpY2UgKmhzZG1hLAo+ICsJCQkJCSBzdHJ1Y3QgbXRrX2hzZG1hX3BjaGFuICpwYywKPiArCQkJ CQkgc3RydWN0IG10a19oc2RtYV92ZGVzYyAqaHZkKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2hzZG1h X3JpbmcgKnJpbmcgPSAmcGMtPnJpbmc7Cj4gKwlzdHJ1Y3QgbXRrX2hzZG1hX3BkZXNjICp0eGQs ICpyeGQ7Cj4gKwl1MTYgcmVzZXJ2ZWQsIHByZXYsIHRsZW4sIG51bV9zZ3M7Cj4gKwl1bnNpZ25l ZCBsb25nIGZsYWdzOwo+ICsKPiArCS8qIFByb3RlY3QgYWdhaW5zdCBQQyBpcyBhY2Nlc3NlZCBi eSBtdWx0aXBsZSBWQ3Mgc2ltdWx0YW5lb3VzbHkgKi8KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZo c2RtYS0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCS8qCj4gKwkgKiBSZXNlcnZlIHJvb21zLCB3aGVy ZSBwYy0+bnJfZnJlZSBpcyB1c2VkIHRvIHRyYWNrIGhvdyBtYW55IGZyZWUKPiArCSAqIHJvb21z IGluIHRoZSByaW5nIGJlaW5nIHVwZGF0ZWQgaW4gdXNlciBhbmQgSVJRIGNvbnRleHQuCj4gKwkg Ki8KPiArCW51bV9zZ3MgPSBESVZfUk9VTkRfVVAoaHZkLT5sZW4sIE1US19IU0RNQV9NQVhfTEVO KTsKPiArCXJlc2VydmVkID0gbWluX3QodTE2LCBudW1fc2dzLCBhdG9taWNfcmVhZCgmcGMtPm5y X2ZyZWUpKTsKPiArCj4gKwlpZiAoIXJlc2VydmVkKSB7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmaHNkbWEtPmxvY2ssIGZsYWdzKTsKPiArCQlyZXR1cm4gLUVOT1NQQzsKPiArCX0KPiAr Cj4gKwlhdG9taWNfc3ViKHJlc2VydmVkLCAmcGMtPm5yX2ZyZWUpOwo+ICsKPiArCXdoaWxlIChy ZXNlcnZlZC0tKSB7Cj4gKwkJLyogTGltaXQgc2l6ZSBieSBQRCBjYXBhYmlsaXR5IGZvciB2YWxp ZCBkYXRhIG1vdmluZyAqLwo+ICsJCXRsZW4gPSAoaHZkLT5sZW4gPiBNVEtfSFNETUFfTUFYX0xF TikgPwo+ICsJCSAgICAgICBNVEtfSFNETUFfTUFYX0xFTiA6IGh2ZC0+bGVuOwo+ICsKPiArCQkv Kgo+ICsJCSAqIFNldHVwIFBEcyB1c2luZyB0aGUgcmVtYWluaW5nIFZEIGluZm8gbWFwcGVkIG9u IHRob3NlCj4gKwkJICogcmVzZXJ2ZWQgcm9vbXMuIEFuZCBzaW5jZSBSWEQgaXMgc2hhcmVkIG1l bW9yeSBiZXR3ZWVuIHRoZQo+ICsJCSAqIGhvc3QgYW5kIHRoZSBkZXZpY2UgYWxsb2NhdGVkIGJ5 IGRtYV9hbGxvY19jb2hlcmVudCBjYWxsLAo+ICsJCSAqIHRoZSBoZWxwZXIgbWFjcm8gV1JJVEVf T05DRSBjYW4gZW5zdXJlIHRoZSBkYXRhIHdyaXR0ZW4gdG8KPiArCQkgKiBSQU0gd291bGQgcmVh bGx5IGhhcHBlbnMuCj4gKwkJICovCj4gKwkJdHhkID0gJnJpbmctPnR4ZFtyaW5nLT5jdXJfdHB0 cl07Cj4gKwkJV1JJVEVfT05DRSh0eGQtPmRlc2MxLCBodmQtPnNyYyk7Cj4gKwkJV1JJVEVfT05D RSh0eGQtPmRlc2MyLAo+ICsJCQkgICBoc2RtYS0+c29jLT5sczAgfCBNVEtfSFNETUFfREVTQ19Q TEVOKHRsZW4pKTsKPiArCj4gKwkJcnhkID0gJnJpbmctPnJ4ZFtyaW5nLT5jdXJfdHB0cl07Cj4g KwkJV1JJVEVfT05DRShyeGQtPmRlc2MxLCBodmQtPmRlc3QpOwo+ICsJCVdSSVRFX09OQ0Uocnhk LT5kZXNjMiwgTVRLX0hTRE1BX0RFU0NfUExFTih0bGVuKSk7Cj4gKwo+ICsJCS8qIEFzc29jaWF0 ZSBWRCwgdGhlIFBEIGJlbG9uZ2VkIHRvICovCj4gKwkJcmluZy0+Y2JbcmluZy0+Y3VyX3RwdHJd LnZkID0gJmh2ZC0+dmQ7Cj4gKwo+ICsJCS8qIE1vdmUgZm9yd2FyZCB0aGUgcG9pbnRlciBvZiBU WCByaW5nICovCj4gKwkJcmluZy0+Y3VyX3RwdHIgPSBNVEtfSFNETUFfTkVYVF9ERVNQX0lEWChy aW5nLT5jdXJfdHB0ciwKPiArCQkJCQkJCSBNVEtfRE1BX1NJWkUpOwo+ICsKPiArCQkvKiBVcGRh dGUgVkQgd2l0aCByZW1haW5pbmcgZGF0YSAqLwo+ICsJCWh2ZC0+c3JjICArPSB0bGVuOwo+ICsJ CWh2ZC0+ZGVzdCArPSB0bGVuOwo+ICsJCWh2ZC0+bGVuICAtPSB0bGVuOwo+ICsJfQo+ICsKPiAr CS8qCj4gKwkgKiBUYWdnaW5nIGZsYWcgZm9yIHRoZSBsYXN0IFBEIGZvciBWRCB3aWxsIGJlIHJl c3BvbnNpYmxlIGZvcgo+ICsJICogY29tcGxldGluZyBWRC4KPiArCSAqLwo+ICsJaWYgKCFodmQt Pmxlbikgewo+ICsJCXByZXYgPSBNVEtfSFNETUFfTEFTVF9ERVNQX0lEWChyaW5nLT5jdXJfdHB0 ciwgTVRLX0RNQV9TSVpFKTsKPiArCQlyaW5nLT5jYltwcmV2XS5mbGFnID0gTVRLX0hTRE1BX1ZE RVNDX0ZJTklTSEVEOwo+ICsJfQo+ICsKPiArCS8qIEVuc3VyZSBhbGwgY2hhbmdlcyBpbmRlZWQg ZG9uZSBiZWZvcmUgd2UncmUgZ29pbmcgb24gKi8KPiArCXdtYigpOwo+ICsKPiArCS8qCj4gKwkg KiBVcGRhdGluZyBpbnRvIGhhcmR3YXJlIHRoZSBwb2ludGVyIG9mIFRYIHJpbmcgbGV0cyBIU0RN QSB0byB0YWtlCj4gKwkgKiBhY3Rpb24gZm9yIHRob3NlIHBlbmRpbmcgUERzLgo+ICsJICovCj4g KwltdGtfZG1hX3dyaXRlKGhzZG1hLCBNVEtfSFNETUFfVFhfQ1BVLCByaW5nLT5jdXJfdHB0cik7 Cj4gKwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHNkbWEtPmxvY2ssIGZsYWdzKTsKPiAr Cj4gKwlyZXR1cm4gIWh2ZC0+bGVuID8gMCA6IC1FTk9TUEM7Cgp5b3UgYWxyZWFkeSB3cm90ZSBh bmQgc3RhcnRlZCB0eG4sIHNvIHdoeSB0aGlzPwoKPiArc3RhdGljIHZvaWQgbXRrX2hzZG1hX2Zy ZWVfcm9vbXNfaW5fcmluZyhzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSAqaHNkbWEpCj4gK3sKPiAr CXN0cnVjdCBtdGtfaHNkbWFfdmNoYW4gKmh2YzsKPiArCXN0cnVjdCBtdGtfaHNkbWFfcGRlc2Mg KnJ4ZDsKPiArCXN0cnVjdCBtdGtfaHNkbWFfdmRlc2MgKmh2ZDsKPiArCXN0cnVjdCBtdGtfaHNk bWFfcGNoYW4gKnBjOwo+ICsJc3RydWN0IG10a19oc2RtYV9jYiAqY2I7Cj4gKwlfX2xlMzIgZGVz YzI7Cj4gKwl1MzIgc3RhdHVzOwo+ICsJdTE2IG5leHQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlwYyA9 IGhzZG1hLT5wYzsKPiArCj4gKwkvKiBSZWFkIElSUSBzdGF0dXMgKi8KPiArCXN0YXR1cyA9IG10 a19kbWFfcmVhZChoc2RtYSwgTVRLX0hTRE1BX0lOVF9TVEFUVVMpOwo+ICsKPiArCS8qCj4gKwkg KiBBY2sgdGhlIHBlbmRpbmcgSVJRIGFsbCB0byBsZXQgaGFyZHdhcmUga25vdyBzb2Z0d2FyZSBp cyBoYW5kbGluZwo+ICsJICogdGhvc2UgZmluaXNoZWQgcGh5c2ljYWwgZGVzY3JpcHRvcnMuIE90 aGVyd2lzZSwgdGhlIGhhcmR3YXJlIHdvdWxkCj4gKwkgKiBrZWVwIHRoZSB1c2VkIElSUSBsaW5l IGluIGNlcnRhaW4gdHJpZ2dlciBzdGF0ZS4KPiArCSAqLwo+ICsJbXRrX2RtYV93cml0ZShoc2Rt YSwgTVRLX0hTRE1BX0lOVF9TVEFUVVMsIHN0YXR1cyk7Cj4gKwo+ICsJd2hpbGUgKDEpIHsKPiAr CQluZXh0ID0gTVRLX0hTRE1BX05FWFRfREVTUF9JRFgocGMtPnJpbmcuY3VyX3JwdHIsCj4gKwkJ CQkJICAgICAgIE1US19ETUFfU0laRSk7CgpzaG91bGRuJ3Qgd2UgY2hlY2sgaWYgbmV4dCBpcyBp biByYW5nZSwgd2UgY2FuIGNyYXNoIGlmIHdlIGdldCBiYWQgdmFsdWUKZnJvbSBoYXJkd2FyZS4u Cgo+ICsJCXJ4ZCA9ICZwYy0+cmluZy5yeGRbbmV4dF07Cj4gKwo+ICsJCS8qCj4gKwkJICogSWYg TVRLX0hTRE1BX0RFU0NfRERPTkUgaXMgbm8gc3BlY2lmaWVkLCB0aGF0IG1lYW5zIGRhdGEKPiAr CQkgKiBtb3ZpbmcgZm9yIHRoZSBQRCBpcyBzdGlsbCB1bmRlciBnb2luZy4KPiArCQkgKi8KPiAr CQlkZXNjMiA9IFJFQURfT05DRShyeGQtPmRlc2MyKTsKPiArCQlpZiAoIShkZXNjMiAmIGhzZG1h LT5zb2MtPmRkb25lKSkKPiArCQkJYnJlYWs7Cgpva2F5IHRoaXMgaXMgb25lIGJyZWFrCgo+ICsK PiArCQljYiA9ICZwYy0+cmluZy5jYltuZXh0XTsKPiArCQlpZiAodW5saWtlbHkoIWNiLT52ZCkp IHsKPiArCQkJZGV2X2Vycihoc2RtYTJkZXYoaHNkbWEpLCAiY2ItPnZkIGNhbm5vdCBiZSBudWxs XG4iKTsKPiArCQkJYnJlYWs7CgphbmQgb3RoZXIgZm9yIG51bGwsIGkgZmVlbCB3ZSBuZWVkIHRv IGhhdmUgY2hlY2tzIGZvciB3aGlsZSgxKSB0byBicmVhaywKdGhpcyBjYW4gcnVuIGluZmluaXRl bHkgaWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zLCBhIGZhaWwgc2FmZSB3b3VsZCBiZSBnb29kLAp0 aGF0IHRvbyB0aGlzIGJlaW5nIGludm9rZWQgZnJvbSBpc3IuCgo+ICtzdGF0aWMgZW51bSBkbWFf c3RhdHVzIG10a19oc2RtYV90eF9zdGF0dXMoc3RydWN0IGRtYV9jaGFuICpjLAo+ICsJCQkJCSAg IGRtYV9jb29raWVfdCBjb29raWUsCj4gKwkJCQkJICAgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhz dGF0ZSkKPiArewo+ICsJc3RydWN0IG10a19oc2RtYV92Y2hhbiAqaHZjID0gdG9faHNkbWFfdmNo YW4oYyk7Cj4gKwlzdHJ1Y3QgbXRrX2hzZG1hX3ZkZXNjICpodmQ7Cj4gKwlzdHJ1Y3QgdmlydF9k bWFfZGVzYyAqdmQ7Cj4gKwllbnVtIGRtYV9zdGF0dXMgcmV0Owo+ICsJdW5zaWduZWQgbG9uZyBm bGFnczsKPiArCXNpemVfdCBieXRlcyA9IDA7Cj4gKwo+ICsJcmV0ID0gZG1hX2Nvb2tpZV9zdGF0 dXMoYywgY29va2llLCB0eHN0YXRlKTsKPiArCWlmIChyZXQgPT0gRE1BX0NPTVBMRVRFIHx8ICF0 eHN0YXRlKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmh2Yy0+ dmMubG9jaywgZmxhZ3MpOwo+ICsJdmQgPSBtdGtfaHNkbWFfZmluZF9hY3RpdmVfZGVzYyhjLCBj b29raWUpOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHZjLT52Yy5sb2NrLCBmbGFncyk7 Cj4gKwo+ICsJaWYgKHZkKSB7Cj4gKwkJaHZkID0gdG9faHNkbWFfdmRlc2ModmQpOwo+ICsJCWJ5 dGVzID0gaHZkLT5yZXNpZHVlOwoKZm9yIGFjdGl2ZSBkZXNjcmlwdG9yLCBzaG91bGRuJ3QgeW91 IHJlYWQgY291bnRlcnMgZnJvbSBoYXJkd2FyZT8KCj4gK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5j X3R4X2Rlc2NyaXB0b3IgKgo+ICttdGtfaHNkbWFfcHJlcF9kbWFfbWVtY3B5KHN0cnVjdCBkbWFf Y2hhbiAqYywgZG1hX2FkZHJfdCBkZXN0LAo+ICsJCQkgIGRtYV9hZGRyX3Qgc3JjLCBzaXplX3Qg bGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2hzZG1hX3ZkZXNj ICpodmQ7Cj4gKwo+ICsJaHZkID0ga3phbGxvYyhzaXplb2YoKmh2ZCksIEdGUF9OT1dBSVQpOwoK R0ZQX05PV0FJVCBoZXJlIHRvbwoKPiArc3RhdGljIGludCBtdGtfaHNkbWFfdGVybWluYXRlX2Fs bChzdHJ1Y3QgZG1hX2NoYW4gKmMpCj4gK3sKPiArCW10a19oc2RtYV9mcmVlX2luYWN0aXZlX2Rl c2MoYywgZmFsc2UpOwoKb25seSBpbmFjdGl2ZSwgYWN0aXZlIG9uZXMgbmVlZCB0byBiZSBmcmVl ZCBhbmQgY2hhbm5lbCBjbGVhbmVkCg==