From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH 08/17] drm/i915/icl: Implement voltage swing programming sequence for Combo PHY DDI Date: Wed, 25 Apr 2018 16:33:13 -0700 Message-ID: <1524699193.9366.7.camel@intel.com> References: <20180222035519.13486-1-paulo.r.zanoni@intel.com> <20180222035519.13486-9-paulo.r.zanoni@intel.com> <20180406002034.GP4181@intel.com> <1524616454.2813.10.camel@intel.com> <20180425180150.GW1994@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8FC4A6E284 for ; Wed, 25 Apr 2018 23:33:14 +0000 (UTC) In-Reply-To: <20180425180150.GW1994@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rodrigo Vivi Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RW0gUXVhLCAyMDE4LTA0LTI1IMOgcyAxMTowMSAtMDcwMCwgUm9kcmlnbyBWaXZpIGVzY3JldmV1 Ogo+IE9uIFR1ZSwgQXByIDI0LCAyMDE4IGF0IDA1OjM0OjE0UE0gLTA3MDAsIFBhdWxvIFphbm9u aSB3cm90ZToKPiA+IEVtIFF1aSwgMjAxOC0wNC0wNSDDoHMgMTc6MjAgLTA3MDAsIFJvZHJpZ28g Vml2aSBlc2NyZXZldToKPiA+ID4gT24gVGh1LCBGZWIgMjIsIDIwMTggYXQgMTI6NTU6MTBBTSAt MDMwMCwgUGF1bG8gWmFub25pIHdyb3RlOgo+ID4gPiA+IEZyb206IE1hbmFzaSBOYXZhcmUgPG1h bmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiA+ID4gCj4gPiA+ID4gVGhpcyBpcyBhbiBpbXBv cnRhbnQgcGFydCBvZiB0aGUgRERJIGluaXRhbGl6YXRpb24gYXMgd2VsbCBhcwo+ID4gPiA+IGZv ciBjaGFuZ2luZyB0aGUgdm9sdGFnZSBkdXJpbmcgRGlzcGxheVBvcnQgbGluayB0cmFpbmluZy4K PiA+ID4gPiAKPiA+ID4gPiBUaGUgVm9sdGFnZSBzd2luZyBzZXFldWVuY2UgaXMgc2ltaWxhciB0 byBDYW5ub25sYWtlLgo+ID4gPiA+IEhvd2V2ZXIgaXQgaGFzIGRpZmZlcmVudCByZWdpc3RlciBk ZWZpbml0aW9ucyBhbmQgaGVuY2UKPiA+ID4gPiBpdCBtYWtlcyBzZW5zZSB0byBjcmVhdGUgYSBz ZXBhcmF0ZSB2c3dpbmcgc2VxdWVuY2UgYW5kCj4gPiA+ID4gcHJvZ3JhbSBmdW5jdGlvbnMgZm9y IElDTCB0byBsZWF2ZSByb29tIGZvciBtb3JlIGNoYW5nZXMKPiA+ID4gPiBpbiBjYXNlIHRoZSBC c3BlYyBjaGFuZ2VzIGxhdGVyIGFuZCBkZXZpYXRlcyBmcm9tIENOTCBzZXF1ZW5jZS4KPiA+ID4g PiAKPiA+ID4gPiB2MjoKPiA+ID4gPiBVc2UgflRBUDNfRElTQUJMRSBmb3IgZW5iYWxpbmcgdGhh dCBiaXQgKEphbmkgTmlrdWxhKQo+ID4gPiA+IAo+ID4gPiA+IHYzOgo+ID4gPiA+ICogVXNlIGR3 NF9zY2FsaW5nIGNvbHVtbiBmb3IgUE9SVF9UWF9EVzQgdmFsdWVzIChSb2RyaWdvKQo+ID4gPiA+ IAo+ID4gPiA+IHY0Ogo+ID4gPiA+ICogQ2FsbCBpdCBjb21ib192c3dpbmcsIHVzZSBzd2l0Y2gg c3RhdGVtZW50IChQYXVsbykKPiA+ID4gPiAKPiA+ID4gPiB2NSAoZnJvbSBQYXVsbyk6Cj4gPiA+ ID4gKiBGaXggYSB0eXBvLgo+ID4gPiA+ICogcy9yYXRlIDwgNjAwMDAwL3JhdGUgPD0gNjAwMDAw Ly4KPiA+ID4gPiAqIERvbid0IHJlbW92ZSBibGFuayBsaW5lcyB0aGF0IHNob3VsZCBiZSB0aGVy ZS4KPiA+ID4gPiAKPiA+ID4gPiB2NjoKPiA+ID4gPiAqIFJlYmFzZWQgYnkgUm9kcmlnbyBvbiB0 b3Agb2YgQ2Fubm9ubGFrZSBjaGFuZ2VzCj4gPiA+ID4gICB3aGVyZSBub24gdnN3aW5nIHNlcXVl bmNlcyBhcmUgbm90IGFsaWduZWQgd2l0aCBpYm9vc3QKPiA+ID4gPiAgIGFueW1vcmUuCj4gPiA+ ID4gCj4gPiA+ID4gdjc6IEFub3RoZXIgcmViYXNlIGFmdGVyIGFuIHVwc3RyZWFtIHJld29yay4K PiA+ID4gPiAKPiA+ID4gPiB2OCAoZnJvbSBQYXVsbyk6Cj4gPiA+ID4gKiBBZGp1c3QgdGhlIGNv ZGUgdG8gdGhlIHVwc3RyZWFtIG91dHB1dCB0eXBlIGNoYW5nZXMuCj4gPiA+ID4gKiBTcXVhc2gg dGhlIHBhdGNoIHRoYXQgbW92ZWQgc29tZSBmdW5jdGlvbnMgdXAuCj4gPiA+ID4gKiBNZXJnZSBi b3RoIGdldF9jb21ib19idWZfdHJhbnMgZnVuY3Rpb25zIGluIG9yZGVyIHRvIHNpbXBsaWZ5Cj4g PiA+ID4gdGhlCj4gPiA+ID4gICBjb2RlLgo+ID4gPiA+ICogQ2hhbmdlIHRoZSBjaGFuZ2Vsb2cg Zm9ybWF0Lgo+ID4gPiA+IAo+ID4gPiA+IENjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAbGlu dXguaW50ZWwuY29tPgo+ID4gPiA+IFJldmlld2VkLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIu emFub25pQGludGVsLmNvbT4gKHY1KQo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IE1hbmFzaSBOYXZh cmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogUm9k cmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6 IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+ID4gPiA+IC0tLQo+ID4g PiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyB8IDE4OQo+ID4gPiA+ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ID4gPiA+ICAxIGZpbGUgY2hhbmdl ZCwgMTg2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4gPiA+ID4gCj4gPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gPiA+ID4gYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gPiA+IGluZGV4IDBhNDY4Mzk5MWVjMi4u YzM4ODczY2I5OGNhIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RkaS5jCj4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMK PiA+ID4gPiBAQCAtODQ5LDYgKzg0OSw0NSBAQCBjbmxfZ2V0X2J1Zl90cmFuc19lZHAoc3RydWN0 Cj4gPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZQo+ID4gPiA+ICpkZXZfcHJpdiwgaW50ICpuX2VudHJp ZXMpCj4gPiA+ID4gIAl9Cj4gPiA+ID4gIH0KPiA+ID4gPiAgCj4gPiA+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgaWNsX2NvbWJvX3BoeV9kZGlfYnVmX3RyYW5zICoKPiA+ID4gPiAraWNsX2dldF9j b21ib19idWZfdHJhbnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPiA+ IGVudW0KPiA+ID4gPiBwb3J0IHBvcnQsCj4gPiA+ID4gKwkJCWludCB0eXBlLCBpbnQgKm5fZW50 cmllcykKPiA+ID4gPiArewo+ID4gPiA+ICsJdTMyIHZvbHRhZ2UgPSBJOTE1X1JFQUQoSUNMX1BP UlRfQ09NUF9EVzMocG9ydCkpICYKPiA+ID4gPiBWT0xUQUdFX0lORk9fTUFTSzsKPiA+ID4gPiAr Cj4gPiA+ID4gKwlpZiAodHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQICYmIGRldl9wcml2LQo+ID4g PiA+ID4gdmJ0LmVkcC5sb3dfdnN3aW5nKSB7Cj4gPiA+ID4gCj4gPiA+ID4gKwkJc3dpdGNoICh2 b2x0YWdlKSB7Cj4gPiA+ID4gKwkJY2FzZSBWT0xUQUdFX0lORk9fMF84NVY6Cj4gPiA+ID4gKwkJ CSpuX2VudHJpZXMgPQo+ID4gPiA+IEFSUkFZX1NJWkUoaWNsX2NvbWJvX3BoeV9kZGlfdHJhbnNs YXRpb25zX2VkcF8wXzg1Vik7Cj4gPiA+ID4gKwkJCXJldHVybgo+ID4gPiA+IGljbF9jb21ib19w aHlfZGRpX3RyYW5zbGF0aW9uc19lZHBfMF84NVY7Cj4gPiA+ID4gKwkJY2FzZSBWT0xUQUdFX0lO Rk9fMF85NVY6Cj4gPiA+ID4gKwkJCSpuX2VudHJpZXMgPQo+ID4gPiA+IEFSUkFZX1NJWkUoaWNs X2NvbWJvX3BoeV9kZGlfdHJhbnNsYXRpb25zX2VkcF8wXzk1Vik7Cj4gPiA+ID4gKwkJCXJldHVy bgo+ID4gPiA+IGljbF9jb21ib19waHlfZGRpX3RyYW5zbGF0aW9uc19lZHBfMF85NVY7Cj4gPiA+ ID4gKwkJY2FzZSBWT0xUQUdFX0lORk9fMV8wNVY6Cj4gPiA+ID4gKwkJCSpuX2VudHJpZXMgPQo+ ID4gPiA+IEFSUkFZX1NJWkUoaWNsX2NvbWJvX3BoeV9kZGlfdHJhbnNsYXRpb25zX2VkcF8xXzA1 Vik7Cj4gPiA+ID4gKwkJCXJldHVybgo+ID4gPiA+IGljbF9jb21ib19waHlfZGRpX3RyYW5zbGF0 aW9uc19lZHBfMV8wNVY7Cj4gPiA+ID4gKwkJZGVmYXVsdDoKPiA+ID4gPiArCQkJTUlTU0lOR19D QVNFKHZvbHRhZ2UpOwo+ID4gPiA+ICsJCQlyZXR1cm4gTlVMTDsKPiA+ID4gPiArCQl9Cj4gPiA+ ID4gKwl9IGVsc2Ugewo+ID4gPiAKPiA+ID4gRFAgZW5kcyB1cCBoZXJlIG9uIEhETUk/Cj4gPiA+ IFRoaXMgaXMgc3RyYW5nZS4uLgo+ID4gCj4gPiBEUCBlbmRzIG9uIHRoZSAiZHBfaGRtaSIgcGFy dCwgd2hpbGUgZWRwIGVuZHMgb24gdGhlICJlZHAiIHBhcnQuCj4gPiBXaGF0Cj4gPiBpcyBzdHJh bmdlIGFib3V0IHRoYXQ/Cj4gCj4gT2guLi4gYWN0dWFsbHkgc3BlYyBpcyBzdHJhbmdlLi4uCj4g VGhleSBoYXZlIDIgdGFibGVzLCAxIGZvciBEUCBhbmQgMSBmb3IgSERNSS4KPiBJIGp1c3QgcmVh ZCB0aGVtIGFnYWluIGFuZCB0aGV5IGFyZSB0aGUgc2FtZSBpbmRlZWQuCj4gU28sIG5vdGhpbmcg d3JvbmcgaGVyZS4KPiAKPiA+IAo+ID4gPiAKPiA+ID4gQWxzbywgZm9yIGNsYXJpdHksIHdoeSBu b3QgdG8gc3BsaXQgdGhpcyBpbnRvIHNlcGFyYXRlZCBmdW5jdGlvbnMKPiA+ID4gbGlrZSBhbGwg b3RoZXIgcGxhdGZvcm1zPwo+ID4gCj4gPiBTbyB3ZSBkb24ndCBlbmQgdXAgcmVhZGluZyBQT1JU X0NPTVBfRFczIG11bHRpcGxlIHRpbWVzIChsaWtlIHdlIGRvCj4gPiBmb3IKPiA+IENOTCksIGFu ZCBhcyBhIGJvbnVzIHRoZSBjb2RlIGxvb2tzIGJldHRlciBJTUhPLgo+IAo+IEFncmVlLgo+IAo+ IFJldmlld2VkLWJ5OiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+CgpZb3Un cmUgcmV2aWV3aW5nIHY4IG9mIHRoZSBwYXRjaC4gVGhpcyB0aHJlYWQgYWxyZWFkeSBoYXMgdjkg KGFzIGEKcmVwbHkgdG8gdjgpLiBEb2VzIHRoZSByLWIgYWxzbyBhcHBseSB0byBpdD8KCnY5IHdh cyBhbHNvIHJlc2VudCBhcyBodHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvcGF0Y2gv MjEzNTE1LwoKPiAKPiA+IAo+ID4gCj4gPiAKPiA+ID4gCj4gPiA+ID4gKwkJc3dpdGNoICh2b2x0 YWdlKSB7Cj4gPiA+ID4gKwkJY2FzZSBWT0xUQUdFX0lORk9fMF84NVY6Cj4gPiA+ID4gKwkJCSpu X2VudHJpZXMgPQo+ID4gPiA+IEFSUkFZX1NJWkUoaWNsX2NvbWJvX3BoeV9kZGlfdHJhbnNsYXRp b25zX2RwX2hkbWlfMF84NVYpOwo+ID4gPiA+ICsJCQlyZXR1cm4KPiA+ID4gPiBpY2xfY29tYm9f cGh5X2RkaV90cmFuc2xhdGlvbnNfZHBfaGRtaV8wXzg1VjsKPiA+ID4gPiArCQljYXNlIFZPTFRB R0VfSU5GT18wXzk1VjoKPiA+ID4gPiArCQkJKm5fZW50cmllcyA9Cj4gPiA+ID4gQVJSQVlfU0la RShpY2xfY29tYm9fcGh5X2RkaV90cmFuc2xhdGlvbnNfZHBfaGRtaV8wXzk1Vik7Cj4gPiA+ID4g KwkJCXJldHVybgo+ID4gPiA+IGljbF9jb21ib19waHlfZGRpX3RyYW5zbGF0aW9uc19kcF9oZG1p XzBfOTVWOwo+ID4gPiA+ICsJCWNhc2UgVk9MVEFHRV9JTkZPXzFfMDVWOgo+ID4gPiA+ICsJCQkq bl9lbnRyaWVzID0KPiA+ID4gPiBBUlJBWV9TSVpFKGljbF9jb21ib19waHlfZGRpX3RyYW5zbGF0 aW9uc19kcF9oZG1pXzFfMDVWKTsKPiA+ID4gPiArCQkJcmV0dXJuCj4gPiA+ID4gaWNsX2NvbWJv X3BoeV9kZGlfdHJhbnNsYXRpb25zX2RwX2hkbWlfMV8wNVY7Cj4gPiA+ID4gKwkJZGVmYXVsdDoK PiA+ID4gPiArCQkJTUlTU0lOR19DQVNFKHZvbHRhZ2UpOwo+ID4gPiA+ICsJCQlyZXR1cm4gTlVM TDsKPiA+ID4gPiArCQl9Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4g IHN0YXRpYyBpbnQgaW50ZWxfZGRpX2hkbWlfbGV2ZWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUK PiA+ID4gPiAqZGV2X3ByaXYsCj4gPiA+ID4gZW51bSBwb3J0IHBvcnQpCj4gPiA+ID4gIHsKPiA+ ID4gPiAgCWludCBuX2VudHJpZXMsIGxldmVsLCBkZWZhdWx0X2VudHJ5Owo+ID4gPiA+IEBAIC0y MTc4LDYgKzIyMTcsMTQ0IEBAIHN0YXRpYyB2b2lkCj4gPiA+ID4gY25sX2RkaV92c3dpbmdfc2Vx dWVuY2Uoc3RydWN0Cj4gPiA+ID4gaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gPiAgCUk5 MTVfV1JJVEUoQ05MX1BPUlRfVFhfRFc1X0dSUChwb3J0KSwgdmFsKTsKPiA+ID4gPiAgfQo+ID4g PiA+ICAKPiA+ID4gPiArc3RhdGljIHZvaWQgaWNsX2RkaV9jb21ib192c3dpbmdfcHJvZ3JhbShz dHJ1Y3QKPiA+ID4gPiBkcm1faTkxNV9wcml2YXRlCj4gPiA+ID4gKmRldl9wcml2LAo+ID4gPiA+ ICsJCQkJCSB1MzIgbGV2ZWwsIGVudW0gcG9ydAo+ID4gPiA+IHBvcnQsIGludCB0eXBlKQo+ID4g PiA+ICt7Cj4gPiA+ID4gKwljb25zdCBzdHJ1Y3QgaWNsX2NvbWJvX3BoeV9kZGlfYnVmX3RyYW5z Cj4gPiA+ID4gKmRkaV90cmFuc2xhdGlvbnMKPiA+ID4gPiA9IE5VTEw7Cj4gPiA+ID4gKwl1MzIg bl9lbnRyaWVzLCB2YWw7Cj4gPiA+ID4gKwlpbnQgbG47Cj4gPiA+ID4gKwo+ID4gPiA+ICsJZGRp X3RyYW5zbGF0aW9ucyA9IGljbF9nZXRfY29tYm9fYnVmX3RyYW5zKGRldl9wcml2LAo+ID4gPiA+ IHBvcnQsCj4gPiA+ID4gdHlwZSwKPiA+ID4gPiArCQkJCQkJICAgJm5fZW50cmllcykKPiA+ID4g PiA7Cj4gPiA+ID4gKwlpZiAoIWRkaV90cmFuc2xhdGlvbnMpCj4gPiA+ID4gKwkJcmV0dXJuOwo+ ID4gPiA+ICsKPiA+ID4gPiArCWlmIChsZXZlbCA+PSBuX2VudHJpZXMpIHsKPiA+ID4gPiArCQlE Uk1fREVCVUdfS01TKCJEREkgdHJhbnNsYXRpb24gbm90IGZvdW5kIGZvcgo+ID4gPiA+IGxldmVs Cj4gPiA+ID4gJWQuIFVzaW5nICVkIGluc3RlYWQuIiwgbGV2ZWwsIG5fZW50cmllcyAtIDEpOwo+ ID4gPiA+ICsJCWxldmVsID0gbl9lbnRyaWVzIC0gMTsKPiA+ID4gPiArCX0KPiA+ID4gPiArCj4g PiA+ID4gKwkvKiBTZXQgUE9SVF9UWF9EVzUgU2NhbGluZyBNb2RlIFNlbCB0byAxMTBiLiAqLwo+ ID4gPiA+ICsJdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX1RYX0RXNV9MTjAocG9ydCkpOwo+ID4g PiA+ICsJdmFsICY9IH5TQ0FMSU5HX01PREVfU0VMX01BU0s7Cj4gPiA+ID4gKwl2YWwgfD0gU0NB TElOR19NT0RFX1NFTCgweDYpOwo+ID4gPiA+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzVf R1JQKHBvcnQpLCB2YWwpOwo+ID4gPiA+ICsKPiA+ID4gPiArCS8qIFByb2dyYW0gUE9SVF9UWF9E VzUgKi8KPiA+ID4gPiArCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9UWF9EVzVfTE4wKHBvcnQp KTsKPiA+ID4gPiArCS8qIFNldCBEaXNhYmxlVGFwMiBhbmQgRGlzYWJsZVRhcDMgaWYgTUlQSSBE U0kKPiA+ID4gPiArCSAqIENsZWFyIERpc2FibGVUYXAyIGFuZCBEaXNhYmxlVGFwMyBmb3IgYWxs IG90aGVyCj4gPiA+ID4gUG9ydHMKPiA+ID4gPiArCSAqLwo+ID4gPiA+ICsJaWYgKHR5cGUgPT0g SU5URUxfT1VUUFVUX0RTSSkgewo+ID4gPiA+ICsJCXZhbCB8PSBUQVAyX0RJU0FCTEU7Cj4gPiA+ ID4gKwkJdmFsIHw9IFRBUDNfRElTQUJMRTsKPiA+ID4gPiArCX0gZWxzZSB7Cj4gPiA+ID4gKwkJ dmFsICY9IH5UQVAyX0RJU0FCTEU7Cj4gPiA+ID4gKwkJdmFsICY9IH5UQVAzX0RJU0FCTEU7Cj4g PiA+ID4gKwl9Cj4gPiA+ID4gKwlJOTE1X1dSSVRFKElDTF9QT1JUX1RYX0RXNV9HUlAocG9ydCks IHZhbCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJLyogUHJvZ3JhbSBQT1JUX1RYX0RXMiAqLwo+ID4g PiA+ICsJdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX1RYX0RXMl9MTjAocG9ydCkpOwo+ID4gPiA+ ICsJdmFsICY9IH4oU1dJTkdfU0VMX0xPV0VSX01BU0sgfCBTV0lOR19TRUxfVVBQRVJfTUFTSyB8 Cj4gPiA+ID4gKwkJIFJDT01QX1NDQUxBUl9NQVNLKTsKPiA+ID4gPiArCXZhbCB8PQo+ID4gPiA+ IFNXSU5HX1NFTF9VUFBFUihkZGlfdHJhbnNsYXRpb25zW2xldmVsXS5kdzJfc3dpbmdfc2VsZWN0 KTsKPiA+ID4gPiArCXZhbCB8PQo+ID4gPiA+IFNXSU5HX1NFTF9MT1dFUihkZGlfdHJhbnNsYXRp b25zW2xldmVsXS5kdzJfc3dpbmdfc2VsZWN0KTsKPiA+ID4gPiArCS8qIFByb2dyYW0gUmNvbXAg c2NhbGFyIGZvciBldmVyeSB0YWJsZSBlbnRyeSAqLwo+ID4gPiA+ICsJdmFsIHw9Cj4gPiA+ID4g UkNPTVBfU0NBTEFSKGRkaV90cmFuc2xhdGlvbnNbbGV2ZWxdLmR3Ml9zd2luZ19zY2FsYXIpOwo+ ID4gPiA+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzJfR1JQKHBvcnQpLCB2YWwpOwo+ID4g PiA+ICsKPiA+ID4gPiArCS8qIFByb2dyYW0gUE9SVF9UWF9EVzQgKi8KPiA+ID4gPiArCS8qIFdl IGNhbm5vdCB3cml0ZSB0byBHUlAuIEl0IHdvdWxkIG92ZXJ3cml0ZQo+ID4gPiA+IGluZGl2aWR1 YWwKPiA+ID4gPiBsb2FkZ2VuLiAqLwo+ID4gPiA+ICsJZm9yIChsbiA9IDA7IGxuIDw9IDM7IGxu KyspIHsKPiA+ID4gPiArCQl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFc0X0xOKHBvcnQs IGxuKSk7Cj4gPiA+ID4gKwkJdmFsICY9IH4oUE9TVF9DVVJTT1JfMV9NQVNLIHwKPiA+ID4gPiBQ T1NUX0NVUlNPUl8yX01BU0sgfAo+ID4gPiA+ICsJCQkgQ1VSU09SX0NPRUZGX01BU0spOwo+ID4g PiA+ICsJCXZhbCB8PSBkZGlfdHJhbnNsYXRpb25zW2xldmVsXS5kdzRfc2NhbGluZzsKPiA+ID4g PiArCQlJOTE1X1dSSVRFKElDTF9QT1JUX1RYX0RXNF9MTihwb3J0LCBsbiksIHZhbCk7Cj4gPiA+ ID4gKwl9Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyB2b2lkIGljbF9jb21i b19waHlfZGRpX3Zzd2luZ19zZXF1ZW5jZShzdHJ1Y3QKPiA+ID4gPiBpbnRlbF9lbmNvZGVyCj4g PiA+ID4gKmVuY29kZXIsIHUzMiBsZXZlbCkKPiA+ID4gPiArewo+ID4gPiA+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLQo+ID4gPiA+ID4gYmFz ZS5kZXYpOwo+ID4gPiA+IAo+ID4gPiA+ICsJZW51bSBwb3J0IHBvcnQgPSBlbmNvZGVyLT5wb3J0 Owo+ID4gPiA+ICsJaW50IHR5cGUgPSBlbmNvZGVyLT50eXBlOwo+ID4gPiA+ICsJaW50IHdpZHRo ID0gMDsKPiA+ID4gPiArCWludCByYXRlID0gMDsKPiA+ID4gPiArCXUzMiB2YWw7Cj4gPiA+ID4g KwlpbnQgbG4gPSAwOwo+ID4gPiA+ICsKPiA+ID4gPiArCWlmICh0eXBlID09IElOVEVMX09VVFBV VF9IRE1JKSB7Cj4gPiA+ID4gKwkJd2lkdGggPSA0Owo+ID4gPiA+ICsJCS8qIFJhdGUgaXMgYWx3 YXlzIDwgdGhhbiA2R0h6IGZvciBIRE1JICovCj4gPiA+ID4gKwl9IGVsc2Ugewo+ID4gPiA+ICsJ CXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPQo+ID4gPiA+IGVuY190b19pbnRlbF9kcCgmZW5j b2Rlci0+YmFzZSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCXdpZHRoID0gaW50ZWxfZHAtPmxhbmVf Y291bnQ7Cj4gPiA+ID4gKwkJcmF0ZSA9IGludGVsX2RwLT5saW5rX3JhdGU7Cj4gPiA+ID4gKwl9 Cj4gPiA+ID4gKwo+ID4gPiA+ICsJLyoKPiA+ID4gPiArCSAqIDEuIElmIHBvcnQgdHlwZSBpcyBl RFAgb3IgRFAsCj4gPiA+ID4gKwkgKiBzZXQgUE9SVF9QQ1NfRFcxIGNtbmtlZXBlcl9lbmFibGUg dG8gMWIsCj4gPiA+ID4gKwkgKiBlbHNlIGNsZWFyIHRvIDBiLgo+ID4gPiA+ICsJICovCj4gPiA+ ID4gKwl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfUENTX0RXMV9MTjAocG9ydCkpOwo+ID4gPiA+ ICsJaWYgKHR5cGUgPT0gSU5URUxfT1VUUFVUX0hETUkpCj4gPiA+ID4gKwkJdmFsICY9IH5DT01N T05fS0VFUEVSX0VOOwo+ID4gPiA+ICsJZWxzZQo+ID4gPiA+ICsJCXZhbCB8PSBDT01NT05fS0VF UEVSX0VOOwo+ID4gPiA+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9QQ1NfRFcxX0dSUChwb3J0KSwg dmFsKTsKPiA+ID4gPiArCj4gPiA+ID4gKwkvKiAyLiBQcm9ncmFtIGxvYWRnZW4gc2VsZWN0ICov Cj4gPiA+ID4gKwkvKgo+ID4gPiA+ICsJICogUHJvZ3JhbSBQT1JUX1RYX0RXNF9MTiBkZXBlbmRp bmcgb24gQml0IHJhdGUgYW5kCj4gPiA+ID4gdXNlZAo+ID4gPiA+IGxhbmVzCj4gPiA+ID4gKwkg KiA8PSA2IEdIeiBhbmQgNCBsYW5lcyAoTE4wPTAsIExOMT0xLCBMTjI9MSwgTE4zPTEpCj4gPiA+ ID4gKwkgKiA8PSA2IEdIeiBhbmQgMSwyIGxhbmVzIChMTjA9MCwgTE4xPTEsIExOMj0xLCBMTjM9 MCkKPiA+ID4gPiArCSAqID4gNiBHSHogKExOMD0wLCBMTjE9MCwgTE4yPTAsIExOMz0wKQo+ID4g PiA+ICsJICovCj4gPiA+ID4gKwlmb3IgKGxuID0gMDsgbG4gPD0gMzsgbG4rKykgewo+ID4gPiA+ ICsJCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9UWF9EVzRfTE4ocG9ydCwgbG4pKTsKPiA+ID4g PiArCQl2YWwgJj0gfkxPQURHRU5fU0VMRUNUOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlpZiAoKHJh dGUgPD0gNjAwMDAwICYmIHdpZHRoID09IDQgJiYgbG4gPj0gMSkKPiA+ID4gPiB8fAo+ID4gPiA+ ICsJCSAgICAocmF0ZSA8PSA2MDAwMDAgJiYgd2lkdGggPCA0ICYmIChsbiA9PSAxCj4gPiA+ID4g fHwgbG4KPiA+ID4gPiA9PSAyKSkpIHsKPiA+ID4gPiArCQkJdmFsIHw9IExPQURHRU5fU0VMRUNU Owo+ID4gPiA+ICsJCX0KPiA+ID4gPiArCQlJOTE1X1dSSVRFKElDTF9QT1JUX1RYX0RXNF9MTihw b3J0LCBsbiksIHZhbCk7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJLyogMy4gU2V0 IFBPUlRfQ0xfRFc1IFNVUyBDbG9jayBDb25maWcgdG8gMTFiICovCj4gPiA+ID4gKwl2YWwgPSBJ OTE1X1JFQUQoSUNMX1BPUlRfQ0xfRFc1KHBvcnQpKTsKPiA+ID4gPiArCXZhbCB8PSBTVVNfQ0xP Q0tfQ09ORklHOwo+ID4gPiA+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9DTF9EVzUocG9ydCksIHZh bCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJLyogNC4gQ2xlYXIgdHJhaW5pbmcgZW5hYmxlIHRvIGNo YW5nZSBzd2luZyB2YWx1ZXMgKi8KPiA+ID4gPiArCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9U WF9EVzVfTE4wKHBvcnQpKTsKPiA+ID4gPiArCXZhbCAmPSB+VFhfVFJBSU5JTkdfRU47Cj4gPiA+ ID4gKwlJOTE1X1dSSVRFKElDTF9QT1JUX1RYX0RXNV9HUlAocG9ydCksIHZhbCk7Cj4gPiA+ID4g Kwo+ID4gPiA+ICsJLyogNS4gUHJvZ3JhbSBzd2luZyBhbmQgZGUtZW1waGFzaXMgKi8KPiA+ID4g PiArCWljbF9kZGlfY29tYm9fdnN3aW5nX3Byb2dyYW0oZGV2X3ByaXYsIGxldmVsLCBwb3J0LAo+ ID4gPiA+IHR5cGUpOwo+ID4gPiA+ICsKPiA+ID4gPiArCS8qIDYuIFNldCB0cmFpbmluZyBlbmFi bGUgdG8gdHJpZ2dlciB1cGRhdGUgKi8KPiA+ID4gPiArCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9S VF9UWF9EVzVfTE4wKHBvcnQpKTsKPiA+ID4gPiArCXZhbCB8PSBUWF9UUkFJTklOR19FTjsKPiA+ ID4gPiArCUk5MTVfV1JJVEUoSUNMX1BPUlRfVFhfRFc1X0dSUChwb3J0KSwgdmFsKTsKPiA+ID4g PiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHZvaWQgaWNsX2RkaV92c3dpbmdfc2VxdWVu Y2Uoc3RydWN0IGludGVsX2VuY29kZXIKPiA+ID4gPiAqZW5jb2RlciwKPiA+ID4gPiB1MzIgbGV2 ZWwpCj4gPiA+ID4gK3sKPiA+ID4gPiArCWVudW0gcG9ydCBwb3J0ID0gZW5jb2Rlci0+cG9ydDsK PiA+ID4gPiArCj4gPiA+ID4gKwlpZiAocG9ydCA9PSBQT1JUX0EgfHwgcG9ydCA9PSBQT1JUX0Ip Cj4gPiA+ID4gKwkJaWNsX2NvbWJvX3BoeV9kZGlfdnN3aW5nX3NlcXVlbmNlKGVuY29kZXIsCj4g PiA+ID4gbGV2ZWwpOwo+ID4gPiA+ICsJZWxzZQo+ID4gPiA+ICsJCS8qIE5vdCBJbXBsZW1lbnRl ZCBZZXQgKi8KPiA+ID4gPiArCQlXQVJOX09OKDEpOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4g PiA+ICBzdGF0aWMgdWludDMyX3QgdHJhbnNsYXRlX3NpZ25hbF9sZXZlbChpbnQgc2lnbmFsX2xl dmVscykKPiA+ID4gPiAgewo+ID4gPiA+ICAJaW50IGk7Cj4gPiA+ID4gQEAgLTIyMDksNyArMjM4 Niw5IEBAIHUzMiBieHRfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAKPiA+ID4gPiAqaW50 ZWxfZHApCj4gPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciA9ICZkcG9ydC0+ YmFzZTsKPiA+ID4gPiAgCWludCBsZXZlbCA9IGludGVsX2RkaV9kcF9sZXZlbChpbnRlbF9kcCk7 Cj4gPiA+ID4gIAo+ID4gPiA+IC0JaWYgKElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpKQo+ID4gPiA+ ICsJaWYgKElTX0lDRUxBS0UoZGV2X3ByaXYpKQo+ID4gPiA+ICsJCWljbF9kZGlfdnN3aW5nX3Nl cXVlbmNlKGVuY29kZXIsIGxldmVsKTsKPiA+ID4gPiArCWVsc2UgaWYgKElTX0NBTk5PTkxBS0Uo ZGV2X3ByaXYpKQo+ID4gPiA+ICAJCWNubF9kZGlfdnN3aW5nX3NlcXVlbmNlKGVuY29kZXIsIGxl dmVsLAo+ID4gPiA+IGVuY29kZXItCj4gPiA+ID4gPiB0eXBlKTsKPiA+ID4gPiAKPiA+ID4gPiAg CWVsc2UKPiA+ID4gPiAgCQlieHRfZGRpX3Zzd2luZ19zZXF1ZW5jZShlbmNvZGVyLCBsZXZlbCwK PiA+ID4gPiBlbmNvZGVyLQo+ID4gPiA+ID4gdHlwZSk7Cj4gPiA+ID4gCj4gPiA+ID4gQEAgLTIz ODksNyArMjU2OCw5IEBAIHN0YXRpYyB2b2lkCj4gPiA+ID4gaW50ZWxfZGRpX3ByZV9lbmFibGVf ZHAoc3RydWN0Cj4gPiA+ID4gaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gPiAgCj4gPiA+ ID4gIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgZGlnX3BvcnQtCj4gPiA+ID4g PiBkZGlfaW9fcG93ZXJfZG9tYWluKTsKPiA+ID4gPiAKPiA+ID4gPiAgCj4gPiA+ID4gLQlpZiAo SVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpCj4gPiA+ID4gKwlpZiAoSVNfSUNFTEFLRShkZXZfcHJp dikpCj4gPiA+ID4gKwkJaWNsX2RkaV92c3dpbmdfc2VxdWVuY2UoZW5jb2RlciwgbGV2ZWwpOwo+ ID4gPiA+ICsJZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpCj4gPiA+ID4gIAkJY25s X2RkaV92c3dpbmdfc2VxdWVuY2UoZW5jb2RlciwgbGV2ZWwsCj4gPiA+ID4gZW5jb2Rlci0KPiA+ ID4gPiA+IHR5cGUpOwo+ID4gPiA+IAo+ID4gPiA+ICAJZWxzZSBpZiAoSVNfR0VOOV9MUChkZXZf cHJpdikpCj4gPiA+ID4gIAkJYnh0X2RkaV92c3dpbmdfc2VxdWVuY2UoZW5jb2RlciwgbGV2ZWws Cj4gPiA+ID4gZW5jb2Rlci0KPiA+ID4gPiA+IHR5cGUpOwo+ID4gPiA+IAo+ID4gPiA+IEBAIC0y NDIwLDcgKzI2MDEsOSBAQCBzdGF0aWMgdm9pZAo+ID4gPiA+IGludGVsX2RkaV9wcmVfZW5hYmxl X2hkbWkoc3RydWN0Cj4gPiA+ID4gaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gPiAgCj4g PiA+ID4gIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgZGlnX3BvcnQtCj4gPiA+ ID4gPiBkZGlfaW9fcG93ZXJfZG9tYWluKTsKPiA+ID4gPiAKPiA+ID4gPiAgCj4gPiA+ID4gLQlp ZiAoSVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpCj4gPiA+ID4gKwlpZiAoSVNfSUNFTEFLRShkZXZf cHJpdikpCj4gPiA+ID4gKwkJaWNsX2RkaV92c3dpbmdfc2VxdWVuY2UoZW5jb2RlciwgbGV2ZWwp Owo+ID4gPiA+ICsJZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpCj4gPiA+ID4gIAkJ Y25sX2RkaV92c3dpbmdfc2VxdWVuY2UoZW5jb2RlciwgbGV2ZWwsCj4gPiA+ID4gSU5URUxfT1VU UFVUX0hETUkpOwo+ID4gPiA+ICAJZWxzZSBpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpCj4gPiA+ ID4gIAkJYnh0X2RkaV92c3dpbmdfc2VxdWVuY2UoZW5jb2RlciwgbGV2ZWwsCj4gPiA+ID4gSU5U RUxfT1VUUFVUX0hETUkpOwo+ID4gPiA+IC0tIAo+ID4gPiA+IDIuMTQuMwo+ID4gPiA+IAo+ID4g PiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiA+ ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4gPiA+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPiA+ID4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4gSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==