From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: Re: [PATCH 1/3] drm/i915: Use GPLL ref clock to calculate GPU freqs on VLV/CHV Date: Wed, 16 Mar 2016 19:51:13 +0200 Message-ID: <1458150673.4473.44.camel@intel.com> References: <1457120584-26080-1-git-send-email-ville.syrjala@linux.intel.com> <1457120584-26080-2-git-send-email-ville.syrjala@linux.intel.com> <1458148671.4473.39.camel@intel.com> <20160316174706.GS4329@intel.com> Reply-To: imre.deak@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 10CD16E9CC for ; Wed, 16 Mar 2016 17:51:31 +0000 (UTC) In-Reply-To: <20160316174706.GS4329@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE2LTAzLTE2IGF0IDE5OjQ3ICswMjAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6 Cj4gT24gV2VkLCBNYXIgMTYsIDIwMTYgYXQgMDc6MTc6NTFQTSArMDIwMCwgSW1yZSBEZWFrIHdy b3RlOgo+ID4gT24gRnJpLCAyMDE2LTAzLTA0IGF0IDIxOjQzICswMjAwLCB2aWxsZS5zeXJqYWxh QGxpbnV4LmludGVsLmNvbQo+ID4gd3JvdGU6Cj4gPiA+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiA+IAo+ID4gPiBFeHRyYWN0IHRoZSBH UExMIHJlZmVyZW5jZSBmcmVxdWVuY3kgZnJvbSBDQ0sgYW5kIHVzZSBpdCBpbiB0aGUKPiA+ID4g R1BVIGZyZXE8LT5vcGNvZGUgY29udmVyc2lvbnMgb24gVkxWL0NIVi4gVGhpcyBlbGltaW5hdGVz IGFsbCB0aGUKPiA+ID4gYXNzdW1wdGlvbnMgd2UgaGF2ZSBhYm91dCB3aGljaCBkaXZpZGVyIGlz IHVzZWQgZm9yIHdoaWNoIGN6Y2xrCj4gPiA+IGZyZXF1ZW5jeS4KPiA+ID4gCj4gPiA+IE5vdGUg dGhhdCB1bmxpa2UgbW9zdCBjbG9ja3MgZnJvbSBDQ0ssIHRoZSBHUExMIHJlZiBjbG9jayBpcyBh Cj4gPiA+IGRpdmlkZWQKPiA+ID4gZG93biB2ZXJzaW9uIG9mIHRoZSBDWiBjbG9jayByYXRoZXIg dGhhbiB0aGUgSFBMTCBjbG9jay4gQ1ogY2xvY2sKPiA+ID4gaXRzZWxmCj4gPiA+IGlzIGEgZGl2 aWRlZCBkb3duIHZlcnNpb24gb2YgdGhlIEhQTEwgY2xvY2sgdGhvdWdoLCBzbyBpbiBlZmZlY3QK PiA+ID4gaXQganVzdAo+ID4gPiBnZXRzIGRpdmlkZWQgZG93biB0d2ljZS4KPiA+ID4gCj4gPiA+ IFdoaWxlIGF0IGl0LCB0aHJvdyBpbiBhIGZldyBjb21tZW50cyBleHBsYWluaW5nIHRoZSByZW1h aW5pbmcKPiA+ID4gY29uc3RhbnRzCj4gPiA+IGZvciBhbnlvbmUgd2hvIGxhdGVyIHdhbnRzIHRv IGNvbXBhcmUgdGhpcyB0byB0aGUgc3ByZWFkc2hlZXRzLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9m Zi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ IAo+ID4gTG9va3Mgb2suIFRoZSByZWxldmFudCBpbmZvIGlzIHNwcmVhZCBhY3Jvc3MgbXVsdGlw bGUgZG9jdW1lbnRzIGJ1dAo+ID4gYmFzZWQgb24gd2hhdCBJIGdhdGhlcmVkIHRoaXMgaXMgb2sg YW5kIHRoZSBvbGQgYW5kIG5ldyB3YXkgb2YKPiA+IGNhbGN1bGF0aW9uIG1hdGNoZXMsIHNvOgo+ ID4gUmV2aWV3ZWQtYnk6IEltcmUgRGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KPiA+IAo+ID4g U29tZSBub3RlczoKPiA+IEZvciBjbGFyaXR5LCBJJ2QgcmVuYW1lICpfZ3B1X2ZyZXEgdG8gKl9n cHVfb3Bjb2RlX3RvX2ZyZXEgYW5kCj4gPiAqX2ZyZXFfb3Bjb2RlIHRvICpfZ3B1X2ZyZXFfdG9f b3Bjb2RlIGFuZCBtZW50aW9uIHRoYXQgdGhlIENIVgo+ID4gQ1UvQ1UyWAo+ID4gY2xvY2tzIGFy ZSBhbHNvIGtub3duIGFzIHNsb3cvZmFzdCBjbG9jaywgc28gaXQgYmV0dGVyIG1hdGNoZXMgdGhl Cj4gPiBWTFYKPiA+IGNvZGUuCj4gCj4gV2VsbCBJIHRoaW5rIHRoZSBzbG93L2Zhc3QgbmFtZXMg bWlnaHQgYmUgbW9yZSBvZiBhIGxlZnRvdmVyIGZyb20KPiBWTFYsCj4gaWUuIHNvbWVvbmUganVz dCBmb3Jnb3QgdG8gdXBkYXRlIHRoZSBuYW1lcyBpbiBidW5jaCBvZiB0aGUgZG9jcyBmb3IKPiBD SFYuIEJ1dCBhZGRpbmcgYSBub3RlIG1pZ2h0IGJlIHBydWRlbnQgdG8gYXZvaWQgcGVvcGxlIGhh dmluZyB0bwo+IHdvbmRlciBhYm91dCBpdC4KPiAKPiA+IAo+ID4gVGhlIGVudHJpZXMgZm9yIFZM ViAzMjAvNDAwTUh6IENaIGNsb2NrIGFyZSBtaXNzaW5nIGZyb20gdGhlIHRhYmxlcwo+ID4gdGhh dCBJIHNhdywgd2hpY2ggaXMgb25lIGp1c3RpZmljYXRpb24gZm9yIHRoaXMgY2hhbmdlLCBzaW5j ZSB3ZQo+ID4gZG9uJ3QKPiA+IGtub3cgaWbCoHZsdl9ncHVfZnJlcV9kaXYoKSB3YXMgY29ycmVj dC4KPiAKPiBJIGRvbid0IHRoaW5rIFZMViBoYWQgMzIwIG9yIDQwMCBTS1VzLgoKQWgsIG9rIHNv IHRob3NlIGV4aXN0IG9ubHkgb24gQ0hWLCBJIG1pc3NlZCB0aGF0LgoKLS1JbXJlCgo+IAo+ID4g Cj4gPiAtLUltcmUKPiA+IAo+ID4gCj4gPiAKPiA+ID4gLS0tCj4gPiA+IMKgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gPiA+IMKgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gPiA+IMKgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgMTkgKysrKysrLS0tCj4gPiA+IMKgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmjCoMKgwqDCoMKgfMKgwqAyICsKPiA+ID4gwqBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jwqDCoMKgwqDCoMKgfCA3NCArKysrKysrKysr KysrLS0tLS0tLS0tCj4gPiA+IC0tLS0tLS0tLS0tLS0tCj4gPiA+IMKgNSBmaWxlcyBjaGFuZ2Vk LCA0NCBpbnNlcnRpb25zKCspLCA1MyBkZWxldGlvbnMoLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gPiBpbmRleCBmMzdhYzEyMGEyOWQuLjk1Zjc3Y2QwY2Ux NyAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+IEBAIC0xMTY2LDYg KzExNjYsNyBAQCBzdHJ1Y3QgaW50ZWxfZ2VuNl9wb3dlcl9tZ210IHsKPiA+ID4gwqAJdTggZWZm aWNpZW50X2ZyZXE7CS8qIEFLQSBSUGUuIFByZS1kZXRlcm1pbmVkCj4gPiA+IGJhbGFuY2VkIGZy ZXF1ZW5jeSAqLwo+ID4gPiDCoAl1OCBycDFfZnJlcTsJCS8qICJsZXNzIHRoYW4iIFJQMAo+ID4g PiBwb3dlci9mcmVxZW5jeSAqLwo+ID4gPiDCoAl1OCBycDBfZnJlcTsJCS8qIE5vbi1vdmVyY2xv Y2tlZCBtYXgKPiA+ID4gZnJlcXVlbmN5LiAqLwo+ID4gPiArCXUxNiBncGxsX3JlZl9mcmVxOwkv KiB2bHYvY2h2IEdQTEwgcmVmZXJlbmNlCj4gPiA+IGZyZXF1ZW5jeSAqLwo+ID4gPiDCoAo+ID4g PiDCoAl1OCB1cF90aHJlc2hvbGQ7IC8qIEN1cnJlbnQgJWJ1c3kgcmVxdWlyZWQgdG8gdXBsb2Nr ICovCj4gPiA+IMKgCXU4IGRvd25fdGhyZXNob2xkOyAvKiBDdXJyZW50ICVidXN5IHJlcXVpcmVk IHRvCj4gPiA+IGRvd25jbG9jayAqLwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaAo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgK PiA+ID4gaW5kZXggN2RmYzQwMDdmM2ZhLi5hYTIxYmZjMDZhMjQgMTAwNjQ0Cj4gPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiBAQCAtNzg1LDYgKzc4NSw3IEBAIGVudW0gc2tsX2Rp c3BfcG93ZXJfd2VsbHMgewo+ID4gPiDCoCNkZWZpbmXCoMKgRFNJX1BMTF9NMV9ESVZfU0hJRlQJ CQkwCj4gPiA+IMKgI2RlZmluZcKgwqBEU0lfUExMX00xX0RJVl9NQVNLCQkJKDB4MWZmIDw8IDAp Cj4gPiA+IMKgI2RlZmluZSBDQ0tfQ1pfQ0xPQ0tfQ09OVFJPTAkJCTB4NjIKPiA+ID4gKyNkZWZp bmUgQ0NLX0dQTExfQ0xPQ0tfQ09OVFJPTAkJCTB4NjcKPiA+ID4gwqAjZGVmaW5lIENDS19ESVNQ TEFZX0NMT0NLX0NPTlRST0wJCTB4NmIKPiA+ID4gwqAjZGVmaW5lIENDS19ESVNQTEFZX1JFRl9D TE9DS19DT05UUk9MCQkweDZjCj4gPiA+IMKgI2RlZmluZcKgwqBDQ0tfVFJVTktfRk9SQ0VfT04J CQkoMSA8PCAxNykKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ ID4gPiBpbmRleCA2MmQzNmE3YjMzOTguLmJhNTBkZTUzNGY5YSAxMDA2NDQKPiA+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiBAQCAtMTQ3LDE1ICsxNDcsMTIgQEAg c3RhdGljIGludCB2YWxsZXl2aWV3X2dldF92Y28oc3RydWN0Cj4gPiA+IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ID4gPiDCoAlyZXR1cm4gdmNvX2ZyZXFbaHBsbF9mcmVxXSAqIDEwMDA7 Cj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiAtc3RhdGljIGludCB2bHZfZ2V0X2Nja19jbG9ja19o cGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiA+ICpkZXZfcHJpdiwKPiA+ID4gLQkJCQnC oMKgY29uc3QgY2hhciAqbmFtZSwgdTMyIHJlZykKPiA+ID4gK2ludCB2bHZfZ2V0X2Nja19jbG9j ayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICsJCcKgwqDCoMKgwqDC oGNvbnN0IGNoYXIgKm5hbWUsIHUzMiByZWcsIGludCByZWZfZnJlcSkKPiA+ID4gwqB7Cj4gPiA+ IMKgCXUzMiB2YWw7Cj4gPiA+IMKgCWludCBkaXZpZGVyOwo+ID4gPiDCoAo+ID4gPiAtCWlmIChk ZXZfcHJpdi0+aHBsbF9mcmVxID09IDApCj4gPiA+IC0JCWRldl9wcml2LT5ocGxsX2ZyZXEgPQo+ ID4gPiB2YWxsZXl2aWV3X2dldF92Y28oZGV2X3ByaXYpOwo+ID4gPiAtCj4gPiA+IMKgCW11dGV4 X2xvY2soJmRldl9wcml2LT5zYl9sb2NrKTsKPiA+ID4gwqAJdmFsID0gdmx2X2Nja19yZWFkKGRl dl9wcml2LCByZWcpOwo+ID4gPiDCoAltdXRleF91bmxvY2soJmRldl9wcml2LT5zYl9sb2NrKTsK PiA+ID4gQEAgLTE2Niw3ICsxNjMsMTcgQEAgc3RhdGljIGludCB2bHZfZ2V0X2Nja19jbG9ja19o cGxsKHN0cnVjdAo+ID4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ID4gwqAJwqDC oMKgwqDCoChkaXZpZGVyIDw8IENDS19GUkVRVUVOQ1lfU1RBVFVTX1NISUZUKSwKPiA+ID4gwqAJ wqDCoMKgwqDCoCIlcyBjaGFuZ2UgaW4gcHJvZ3Jlc3NcbiIsIG5hbWUpOwo+ID4gPiDCoAo+ID4g PiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChkZXZfcHJpdi0+aHBsbF9mcmVxIDw8IDEsCj4g PiA+IGRpdmlkZXIgKyAxKTsKPiA+ID4gKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocmVmX2Zy ZXEgPDwgMSwgZGl2aWRlciArIDEpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50 IHZsdl9nZXRfY2NrX2Nsb2NrX2hwbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gKmRl dl9wcml2LAo+ID4gPiArCQkJCcKgwqBjb25zdCBjaGFyICpuYW1lLCB1MzIgcmVnKQo+ID4gPiAr ewo+ID4gPiArCWlmIChkZXZfcHJpdi0+aHBsbF9mcmVxID09IDApCj4gPiA+ICsJCWRldl9wcml2 LT5ocGxsX2ZyZXEgPQo+ID4gPiB2YWxsZXl2aWV3X2dldF92Y28oZGV2X3ByaXYpOwo+ID4gPiAr Cj4gPiA+ICsJcmV0dXJuIHZsdl9nZXRfY2NrX2Nsb2NrKGRldl9wcml2LCBuYW1lLCByZWcsCj4g PiA+ICsJCQkJwqBkZXZfcHJpdi0+aHBsbF9mcmVxKTsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+ IMKgc3RhdGljIGludAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHJ2LmgKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPiBp bmRleCBjZDBiNGVhY2JkZGYuLmM0MTZmMGFkYWU0OCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmgKPiA+ID4gQEAgLTExMTYsNiArMTExNiw4IEBAIHZvaWQgaTkxNV9hdWRp b19jb21wb25lbnRfaW5pdChzdHJ1Y3QKPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Owo+ID4gPiDCoHZvaWQgaTkxNV9hdWRpb19jb21wb25lbnRfY2xlYW51cChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZQo+ID4gPiAqZGV2X3ByaXYpOwo+ID4gPiDCoAo+ID4gPiDCoC8qIGludGVsX2Rp c3BsYXkuYyAqLwo+ID4gPiAraW50IHZsdl9nZXRfY2NrX2Nsb2NrKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiA+ID4gKwkJwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqbmFtZSwg dTMyIHJlZywgaW50IHJlZl9mcmVxKTsKPiA+ID4gwqBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9w bGFuZV9mdW5jcyBpbnRlbF9wbGFuZV9mdW5jczsKPiA+ID4gwqB1bnNpZ25lZCBpbnQgaW50ZWxf cm90YXRpb25faW5mb19zaXplKGNvbnN0IHN0cnVjdAo+ID4gPiBpbnRlbF9yb3RhdGlvbl9pbmZv ICpyb3RfaW5mbyk7Cj4gPiA+IMKgYm9vbCBpbnRlbF9oYXNfcGVuZGluZ19mYl91bnBpbihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmMKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4g PiA+IGluZGV4IGY2NWU4NDEzNzA2MC4uYzUzYjhjNGQzODFjIDEwMDY0NAo+ID4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKPiA+ID4gQEAgLTUzNjQsNiArNTM2NCwxNyBAQCBzdGF0aWMgdm9p ZCB2YWxsZXl2aWV3X2NsZWFudXBfcGN0eChzdHJ1Y3QKPiA+ID4gZHJtX2RldmljZSAqZGV2KQo+ ID4gPiDCoAlkZXZfcHJpdi0+dmx2X3BjdHggPSBOVUxMOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ ID4gK3N0YXRpYyB2b2lkIHZsdl9pbml0X2dwbGxfcmVmX2ZyZXEoc3RydWN0IGRybV9pOTE1X3By aXZhdGUKPiA+ID4gKmRldl9wcml2KQo+ID4gPiArewo+ID4gPiArCWRldl9wcml2LT5ycHMuZ3Bs bF9yZWZfZnJlcSA9Cj4gPiA+ICsJCXZsdl9nZXRfY2NrX2Nsb2NrKGRldl9wcml2LCAiR1BMTCBy ZWYiLAo+ID4gPiArCQkJCcKgwqBDQ0tfR1BMTF9DTE9DS19DT05UUk9MLAo+ID4gPiArCQkJCcKg wqBkZXZfcHJpdi0+Y3pjbGtfZnJlcSk7Cj4gPiA+ICsKPiA+ID4gKwlEUk1fREVCVUdfRFJJVkVS KCJHUExMIHJlZmVyZW5jZSBmcmVxOiAlZCBrSHpcbiIsCj4gPiA+ICsJCQnCoGRldl9wcml2LT5y cHMuZ3BsbF9yZWZfZnJlcSk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gwqBzdGF0aWMgdm9pZCB2 YWxsZXl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiA+ IMKgewo+ID4gPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+ID4gPiBAQCAtNTM3MSw2ICs1MzgyLDggQEAgc3RhdGljIHZvaWQKPiA+ID4g dmFsbGV5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4g PiDCoAo+ID4gPiDCoAl2YWxsZXl2aWV3X3NldHVwX3BjdHgoZGV2KTsKPiA+ID4gwqAKPiA+ID4g Kwl2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKGRldl9wcml2KTsKPiA+ID4gKwo+ID4gPiDCoAltdXRl eF9sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+ID4gPiDCoAo+ID4gPiDCoAl2YWwgPSB2 bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7Cj4gPiA+IEBA IC01NDI4LDYgKzU0NDEsOCBAQCBzdGF0aWMgdm9pZAo+ID4gPiBjaGVycnl2aWV3X2luaXRfZ3Rf cG93ZXJzYXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiA+IMKgCj4gPiA+IMKgCWNoZXJy eXZpZXdfc2V0dXBfcGN0eChkZXYpOwo+ID4gPiDCoAo+ID4gPiArCXZsdl9pbml0X2dwbGxfcmVm X2ZyZXEoZGV2X3ByaXYpOwo+ID4gPiArCj4gPiA+IMKgCW11dGV4X2xvY2soJmRldl9wcml2LT5y cHMuaHdfbG9jayk7Cj4gPiA+IMKgCj4gPiA+IMKgCW11dGV4X2xvY2soJmRldl9wcml2LT5zYl9s b2NrKTsKPiA+ID4gQEAgLTcyNjEsNjggKzcyNzYsMzMgQEAgaW50IHNhbmR5YnJpZGdlX3Bjb2Rl X3dyaXRlKHN0cnVjdAo+ID4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIG1ib3gs IHUzMiB2YWwKPiA+ID4gwqAJcmV0dXJuIDA7Cj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiAtc3Rh dGljIGludCB2bHZfZ3B1X2ZyZXFfZGl2KHVuc2lnbmVkIGludCBjemNsa19mcmVxKQo+ID4gPiAt ewo+ID4gPiAtCXN3aXRjaCAoY3pjbGtfZnJlcSkgewo+ID4gPiAtCWNhc2UgMjAwOgo+ID4gPiAt CQlyZXR1cm4gMTA7Cj4gPiA+IC0JY2FzZSAyNjc6Cj4gPiA+IC0JCXJldHVybiAxMjsKPiA+ID4g LQljYXNlIDMyMDoKPiA+ID4gLQljYXNlIDMzMzoKPiA+ID4gLQkJcmV0dXJuIDE2Owo+ID4gPiAt CWNhc2UgNDAwOgo+ID4gPiAtCQlyZXR1cm4gMjA7Cj4gPiA+IC0JZGVmYXVsdDoKPiA+ID4gLQkJ cmV0dXJuIC0xOwo+ID4gPiAtCX0KPiA+ID4gLX0KPiA+ID4gLQo+ID4gPiDCoHN0YXRpYyBpbnQg Ynl0X2dwdV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50Cj4gPiA+ IHZhbCkKPiA+ID4gwqB7Cj4gPiA+IC0JaW50IGRpdiwgY3pjbGtfZnJlcSA9IERJVl9ST1VORF9D TE9TRVNUKGRldl9wcml2LQo+ID4gPiA+Y3pjbGtfZnJlcSwgMTAwMCk7Cj4gPiA+IC0KPiA+ID4g LQlkaXYgPSB2bHZfZ3B1X2ZyZXFfZGl2KGN6Y2xrX2ZyZXEpOwo+ID4gPiAtCWlmIChkaXYgPCAw KQo+ID4gPiAtCQlyZXR1cm4gZGl2Owo+ID4gPiAtCj4gPiA+IC0JcmV0dXJuIERJVl9ST1VORF9D TE9TRVNUKGN6Y2xrX2ZyZXEgKiAodmFsICsgNiAtIDB4YmQpLAo+ID4gPiBkaXYpOwo+ID4gPiAr CS8qCj4gPiA+ICsJwqAqIE4gPSB2YWwgLSAweGI3Cj4gPiA+ICsJwqAqIFNsb3cgPSBGYXN0ID0g R1BMTCByZWYgKiBOCj4gPiA+ICsJwqAqLwo+ID4gPiArCXJldHVybiBESVZfUk9VTkRfQ0xPU0VT VChkZXZfcHJpdi0+cnBzLmdwbGxfcmVmX2ZyZXEgKgo+ID4gPiAodmFsIC0gMHhiNyksIDEwMDAp Owo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gwqBzdGF0aWMgaW50IGJ5dF9mcmVxX29wY29kZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+IGludCB2YWwpCj4gPiA+IMKg ewo+ID4gPiAtCWludCBtdWwsIGN6Y2xrX2ZyZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChkZXZfcHJp di0KPiA+ID4gPmN6Y2xrX2ZyZXEsIDEwMDApOwo+ID4gPiAtCj4gPiA+IC0JbXVsID0gdmx2X2dw dV9mcmVxX2RpdihjemNsa19mcmVxKTsKPiA+ID4gLQlpZiAobXVsIDwgMCkKPiA+ID4gLQkJcmV0 dXJuIG11bDsKPiA+ID4gLQo+ID4gPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChtdWwgKiB2 YWwsIGN6Y2xrX2ZyZXEpICsgMHhiZCAtCj4gPiA+IDY7Cj4gPiA+ICsJcmV0dXJuIERJVl9ST1VO RF9DTE9TRVNUKDEwMDAgKiB2YWwsIGRldl9wcml2LQo+ID4gPiA+cnBzLmdwbGxfcmVmX2ZyZXEp ICsgMHhiNzsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IMKgc3RhdGljIGludCBjaHZfZ3B1X2Zy ZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQKPiA+ID4gdmFsKQo+ID4g PiDCoHsKPiA+ID4gLQlpbnQgZGl2LCBjemNsa19mcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoZGV2 X3ByaXYtCj4gPiA+ID5jemNsa19mcmVxLCAxMDAwKTsKPiA+ID4gLQo+ID4gPiAtCWRpdiA9IHZs dl9ncHVfZnJlcV9kaXYoY3pjbGtfZnJlcSk7Cj4gPiA+IC0JaWYgKGRpdiA8IDApCj4gPiA+IC0J CXJldHVybiBkaXY7Cj4gPiA+IC0JZGl2IC89IDI7Cj4gPiA+IC0KPiA+ID4gLQlyZXR1cm4gRElW X1JPVU5EX0NMT1NFU1QoY3pjbGtfZnJlcSAqIHZhbCwgMiAqIGRpdikgLyAyOwo+ID4gPiArCS8q Cj4gPiA+ICsJwqAqIE4gPSB2YWwgLyAyCj4gPiA+ICsJwqAqIENVID0gQ1UyeCAvIDIgPSBHUExM IHJlZiAqIE4gLyAyCj4gPiA+ICsJwqAqLwo+ID4gPiArCXJldHVybiBESVZfUk9VTkRfQ0xPU0VT VChkZXZfcHJpdi0+cnBzLmdwbGxfcmVmX2ZyZXEgKgo+ID4gPiB2YWwsIDIgKiAyICogMTAwMCk7 Cj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiDCoHN0YXRpYyBpbnQgY2h2X2ZyZXFfb3Bjb2RlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ID4gaW50IHZhbCkKPiA+ID4gwqB7 Cj4gPiA+IC0JaW50IG11bCwgY3pjbGtfZnJlcSA9IERJVl9ST1VORF9DTE9TRVNUKGRldl9wcml2 LQo+ID4gPiA+Y3pjbGtfZnJlcSwgMTAwMCk7Cj4gPiA+IC0KPiA+ID4gLQltdWwgPSB2bHZfZ3B1 X2ZyZXFfZGl2KGN6Y2xrX2ZyZXEpOwo+ID4gPiAtCWlmIChtdWwgPCAwKQo+ID4gPiAtCQlyZXR1 cm4gbXVsOwo+ID4gPiAtCW11bCAvPSAyOwo+ID4gPiAtCj4gPiA+IMKgCS8qIENIViBuZWVkcyBl dmVuIHZhbHVlcyAqLwo+ID4gPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiAyICog bXVsLCBjemNsa19mcmVxKSAqIDI7Cj4gPiA+ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDIg KiAxMDAwICogdmFsLCBkZXZfcHJpdi0KPiA+ID4gPnJwcy5ncGxsX3JlZl9mcmVxKSAqIDI7Cj4g PiA+IMKgfQo+ID4gPiDCoAo+ID4gPiDCoGludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCj4gCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=