From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 1/3] drm/i915: Use GPLL ref clock to calculate GPU freqs on VLV/CHV Date: Wed, 16 Mar 2016 19:47:06 +0200 Message-ID: <20160316174706.GS4329@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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 462BB6E9CF for ; Wed, 16 Mar 2016 17:47:09 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1458148671.4473.39.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Imre Deak Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBNYXIgMTYsIDIwMTYgYXQgMDc6MTc6NTFQTSArMDIwMCwgSW1yZSBEZWFrIHdyb3Rl Ogo+IE9uIEZyaSwgMjAxNi0wMy0wNCBhdCAyMTo0MyArMDIwMCwgdmlsbGUuc3lyamFsYUBsaW51 eC5pbnRlbC5jb20gd3JvdGU6Cj4gPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tPgo+ID4gCj4gPiBFeHRyYWN0IHRoZSBHUExMIHJlZmVyZW5jZSBm cmVxdWVuY3kgZnJvbSBDQ0sgYW5kIHVzZSBpdCBpbiB0aGUKPiA+IEdQVSBmcmVxPC0+b3Bjb2Rl IGNvbnZlcnNpb25zIG9uIFZMVi9DSFYuIFRoaXMgZWxpbWluYXRlcyBhbGwgdGhlCj4gPiBhc3N1 bXB0aW9ucyB3ZSBoYXZlIGFib3V0IHdoaWNoIGRpdmlkZXIgaXMgdXNlZCBmb3Igd2hpY2ggY3pj bGsKPiA+IGZyZXF1ZW5jeS4KPiA+IAo+ID4gTm90ZSB0aGF0IHVubGlrZSBtb3N0IGNsb2NrcyBm cm9tIENDSywgdGhlIEdQTEwgcmVmIGNsb2NrIGlzIGEgZGl2aWRlZAo+ID4gZG93biB2ZXJzaW9u IG9mIHRoZSBDWiBjbG9jayByYXRoZXIgdGhhbiB0aGUgSFBMTCBjbG9jay4gQ1ogY2xvY2sgaXRz ZWxmCj4gPiBpcyBhIGRpdmlkZWQgZG93biB2ZXJzaW9uIG9mIHRoZSBIUExMIGNsb2NrIHRob3Vn aCwgc28gaW4gZWZmZWN0IGl0IGp1c3QKPiA+IGdldHMgZGl2aWRlZCBkb3duIHR3aWNlLgo+ID4g Cj4gPiBXaGlsZSBhdCBpdCwgdGhyb3cgaW4gYSBmZXcgY29tbWVudHMgZXhwbGFpbmluZyB0aGUg cmVtYWluaW5nIGNvbnN0YW50cwo+ID4gZm9yIGFueW9uZSB3aG8gbGF0ZXIgd2FudHMgdG8gY29t cGFyZSB0aGlzIHRvIHRoZSBzcHJlYWRzaGVldHMuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IFZp bGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gCj4gTG9va3Mg b2suIFRoZSByZWxldmFudCBpbmZvIGlzIHNwcmVhZCBhY3Jvc3MgbXVsdGlwbGUgZG9jdW1lbnRz IGJ1dAo+IGJhc2VkIG9uIHdoYXQgSSBnYXRoZXJlZCB0aGlzIGlzIG9rIGFuZCB0aGUgb2xkIGFu ZCBuZXcgd2F5IG9mCj4gY2FsY3VsYXRpb24gbWF0Y2hlcywgc286Cj4gUmV2aWV3ZWQtYnk6IElt cmUgRGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KPiAKPiBTb21lIG5vdGVzOgo+IEZvciBjbGFy aXR5LCBJJ2QgcmVuYW1lICpfZ3B1X2ZyZXEgdG8gKl9ncHVfb3Bjb2RlX3RvX2ZyZXEgYW5kCj4g Kl9mcmVxX29wY29kZSB0byAqX2dwdV9mcmVxX3RvX29wY29kZSBhbmQgbWVudGlvbiB0aGF0IHRo ZSBDSFYgQ1UvQ1UyWAo+IGNsb2NrcyBhcmUgYWxzbyBrbm93biBhcyBzbG93L2Zhc3QgY2xvY2ss IHNvIGl0IGJldHRlciBtYXRjaGVzIHRoZSBWTFYKPiBjb2RlLgoKV2VsbCBJIHRoaW5rIHRoZSBz bG93L2Zhc3QgbmFtZXMgbWlnaHQgYmUgbW9yZSBvZiBhIGxlZnRvdmVyIGZyb20gVkxWLAppZS4g c29tZW9uZSBqdXN0IGZvcmdvdCB0byB1cGRhdGUgdGhlIG5hbWVzIGluIGJ1bmNoIG9mIHRoZSBk b2NzIGZvcgpDSFYuIEJ1dCBhZGRpbmcgYSBub3RlIG1pZ2h0IGJlIHBydWRlbnQgdG8gYXZvaWQg cGVvcGxlIGhhdmluZyB0bwp3b25kZXIgYWJvdXQgaXQuCgo+IAo+IFRoZSBlbnRyaWVzIGZvciBW TFYgMzIwLzQwME1IeiBDWiBjbG9jayBhcmUgbWlzc2luZyBmcm9tIHRoZSB0YWJsZXMKPiB0aGF0 IEkgc2F3LCB3aGljaCBpcyBvbmUganVzdGlmaWNhdGlvbiBmb3IgdGhpcyBjaGFuZ2UsIHNpbmNl IHdlIGRvbid0Cj4ga25vdyBpZsKgdmx2X2dwdV9mcmVxX2RpdigpIHdhcyBjb3JyZWN0LgoKSSBk b24ndCB0aGluayBWTFYgaGFkIDMyMCBvciA0MDAgU0tVcy4KCj4gCj4gLS1JbXJlCj4gCj4gCj4g Cj4gPiAtLS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqDCoMKgwqDC oHzCoMKgMSArCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmjCoMKgwqDCoMKg wqB8wqDCoDEgKwo+ID4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAx OSArKysrKystLS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmjCoMKgwqDC oMKgfMKgwqAyICsKPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uY8KgwqDCoMKg wqDCoHwgNzQgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiDCoDUgZmls ZXMgY2hhbmdlZCwgNDQgaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gaW5kZXggZjM3YWMxMjBhMjlkLi45NWY3N2NkMGNlMTcg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiBAQCAtMTE2Niw2ICsxMTY2LDcg QEAgc3RydWN0IGludGVsX2dlbjZfcG93ZXJfbWdtdCB7Cj4gPiDCoAl1OCBlZmZpY2llbnRfZnJl cTsJLyogQUtBIFJQZS4gUHJlLWRldGVybWluZWQgYmFsYW5jZWQgZnJlcXVlbmN5ICovCj4gPiDC oAl1OCBycDFfZnJlcTsJCS8qICJsZXNzIHRoYW4iIFJQMCBwb3dlci9mcmVxZW5jeSAqLwo+ID4g wqAJdTggcnAwX2ZyZXE7CQkvKiBOb24tb3ZlcmNsb2NrZWQgbWF4IGZyZXF1ZW5jeS4gKi8KPiA+ ICsJdTE2IGdwbGxfcmVmX2ZyZXE7CS8qIHZsdi9jaHYgR1BMTCByZWZlcmVuY2UgZnJlcXVlbmN5 ICovCj4gPiDCoAo+ID4gwqAJdTggdXBfdGhyZXNob2xkOyAvKiBDdXJyZW50ICVidXN5IHJlcXVp cmVkIHRvIHVwbG9jayAqLwo+ID4gwqAJdTggZG93bl90aHJlc2hvbGQ7IC8qIEN1cnJlbnQgJWJ1 c3kgcmVxdWlyZWQgdG8gZG93bmNsb2NrICovCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+ IGluZGV4IDdkZmM0MDA3ZjNmYS4uYWEyMWJmYzA2YTI0IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZWcuaAo+ID4gQEAgLTc4NSw2ICs3ODUsNyBAQCBlbnVtIHNrbF9kaXNwX3Bvd2VyX3dl bGxzIHsKPiA+IMKgI2RlZmluZcKgwqBEU0lfUExMX00xX0RJVl9TSElGVAkJCTAKPiA+IMKgI2Rl ZmluZcKgwqBEU0lfUExMX00xX0RJVl9NQVNLCQkJKDB4MWZmIDw8IDApCj4gPiDCoCNkZWZpbmUg Q0NLX0NaX0NMT0NLX0NPTlRST0wJCQkweDYyCj4gPiArI2RlZmluZSBDQ0tfR1BMTF9DTE9DS19D T05UUk9MCQkJMHg2Nwo+ID4gwqAjZGVmaW5lIENDS19ESVNQTEFZX0NMT0NLX0NPTlRST0wJCTB4 NmIKPiA+IMKgI2RlZmluZSBDQ0tfRElTUExBWV9SRUZfQ0xPQ0tfQ09OVFJPTAkJMHg2Ywo+ID4g wqAjZGVmaW5lwqDCoENDS19UUlVOS19GT1JDRV9PTgkJCSgxIDw8IDE3KQo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gaW5kZXggNjJkMzZhN2IzMzk4Li5iYTUwZGU1MzRm OWEgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMK PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTE0 NywxNSArMTQ3LDEyIEBAIHN0YXRpYyBpbnQgdmFsbGV5dmlld19nZXRfdmNvKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+IMKgCXJldHVybiB2Y29fZnJlcVtocGxsX2ZyZXFd ICogMTAwMDsKPiA+IMKgfQo+ID4gwqAKPiA+IC1zdGF0aWMgaW50IHZsdl9nZXRfY2NrX2Nsb2Nr X2hwbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gLQkJCQnCoMKgY29u c3QgY2hhciAqbmFtZSwgdTMyIHJlZykKPiA+ICtpbnQgdmx2X2dldF9jY2tfY2xvY2soc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJwqDCoMKgwqDCoMKgY29uc3QgY2hh ciAqbmFtZSwgdTMyIHJlZywgaW50IHJlZl9mcmVxKQo+ID4gwqB7Cj4gPiDCoAl1MzIgdmFsOwo+ ID4gwqAJaW50IGRpdmlkZXI7Cj4gPiDCoAo+ID4gLQlpZiAoZGV2X3ByaXYtPmhwbGxfZnJlcSA9 PSAwKQo+ID4gLQkJZGV2X3ByaXYtPmhwbGxfZnJlcSA9IHZhbGxleXZpZXdfZ2V0X3ZjbyhkZXZf cHJpdik7Cj4gPiAtCj4gPiDCoAltdXRleF9sb2NrKCZkZXZfcHJpdi0+c2JfbG9jayk7Cj4gPiDC oAl2YWwgPSB2bHZfY2NrX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gPiDCoAltdXRleF91bmxvY2so JmRldl9wcml2LT5zYl9sb2NrKTsKPiA+IEBAIC0xNjYsNyArMTYzLDE3IEBAIHN0YXRpYyBpbnQg dmx2X2dldF9jY2tfY2xvY2tfaHBsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gPiDCoAnCoMKgwqDCoMKgKGRpdmlkZXIgPDwgQ0NLX0ZSRVFVRU5DWV9TVEFUVVNfU0hJRlQp LAo+ID4gwqAJwqDCoMKgwqDCoCIlcyBjaGFuZ2UgaW4gcHJvZ3Jlc3NcbiIsIG5hbWUpOwo+ID4g wqAKPiA+IC0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKGRldl9wcml2LT5ocGxsX2ZyZXEgPDwg MSwgZGl2aWRlciArIDEpOwo+ID4gKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocmVmX2ZyZXEg PDwgMSwgZGl2aWRlciArIDEpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHZsdl9nZXRf Y2NrX2Nsb2NrX2hwbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJ CQnCoMKgY29uc3QgY2hhciAqbmFtZSwgdTMyIHJlZykKPiA+ICt7Cj4gPiArCWlmIChkZXZfcHJp di0+aHBsbF9mcmVxID09IDApCj4gPiArCQlkZXZfcHJpdi0+aHBsbF9mcmVxID0gdmFsbGV5dmll d19nZXRfdmNvKGRldl9wcml2KTsKPiA+ICsKPiA+ICsJcmV0dXJuIHZsdl9nZXRfY2NrX2Nsb2Nr KGRldl9wcml2LCBuYW1lLCByZWcsCj4gPiArCQkJCcKgZGV2X3ByaXYtPmhwbGxfZnJlcSk7Cj4g PiDCoH0KPiA+IMKgCj4gPiDCoHN0YXRpYyBpbnQKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o Cj4gPiBpbmRleCBjZDBiNGVhY2JkZGYuLmM0MTZmMGFkYWU0OCAxMDA2NDQKPiA+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaAo+ID4gQEAgLTExMTYsNiArMTExNiw4IEBAIHZvaWQgaTkxNV9hdWRp b19jb21wb25lbnRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ID4g wqB2b2lkIGk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKPiA+IMKgCj4gPiDCoC8qIGludGVsX2Rpc3BsYXkuYyAqLwo+ID4gK2lu dCB2bHZfZ2V0X2Nja19jbG9jayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g PiArCQnCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpuYW1lLCB1MzIgcmVnLCBpbnQgcmVmX2ZyZXEp Owo+ID4gwqBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRlbF9wbGFuZV9m dW5jczsKPiA+IMKgdW5zaWduZWQgaW50IGludGVsX3JvdGF0aW9uX2luZm9fc2l6ZShjb25zdCBz dHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAqcm90X2luZm8pOwo+ID4gwqBib29sIGludGVsX2hh c19wZW5kaW5nX2ZiX3VucGluKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jCj4gPiBpbmRleCBmNjVlODQxMzcwNjAuLmM1M2I4YzRkMzgxYyAxMDA2NDQK PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiA+IEBAIC01MzY0LDYgKzUzNjQsMTcgQEAgc3Rh dGljIHZvaWQgdmFsbGV5dmlld19jbGVhbnVwX3BjdHgoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiA+IMKgCWRldl9wcml2LT52bHZfcGN0eCA9IE5VTEw7Cj4gPiDCoH0KPiA+IMKgCj4gPiArc3Rh dGljIHZvaWQgdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gPiArewo+ID4gKwlkZXZfcHJpdi0+cnBzLmdwbGxfcmVmX2ZyZXEgPQo+ID4g KwkJdmx2X2dldF9jY2tfY2xvY2soZGV2X3ByaXYsICJHUExMIHJlZiIsCj4gPiArCQkJCcKgwqBD Q0tfR1BMTF9DTE9DS19DT05UUk9MLAo+ID4gKwkJCQnCoMKgZGV2X3ByaXYtPmN6Y2xrX2ZyZXEp Owo+ID4gKwo+ID4gKwlEUk1fREVCVUdfRFJJVkVSKCJHUExMIHJlZmVyZW5jZSBmcmVxOiAlZCBr SHpcbiIsCj4gPiArCQkJwqBkZXZfcHJpdi0+cnBzLmdwbGxfcmVmX2ZyZXEpOwo+ID4gK30KPiA+ ICsKPiA+IMKgc3RhdGljIHZvaWQgdmFsbGV5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQo+ID4gwqB7Cj4gPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ID4gQEAgLTUzNzEsNiArNTM4Miw4IEBAIHN0 YXRpYyB2b2lkIHZhbGxleXZpZXdfaW5pdF9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiA+IMKgCj4gPiDCoAl2YWxsZXl2aWV3X3NldHVwX3BjdHgoZGV2KTsKPiA+IMKgCj4g PiArCXZsdl9pbml0X2dwbGxfcmVmX2ZyZXEoZGV2X3ByaXYpOwo+ID4gKwo+ID4gwqAJbXV0ZXhf bG9jaygmZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPiA+IMKgCj4gPiDCoAl2YWwgPSB2bHZfcHVu aXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7Cj4gPiBAQCAtNTQyOCw2 ICs1NDQxLDggQEAgc3RhdGljIHZvaWQgY2hlcnJ5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gwqAKPiA+IMKgCWNoZXJyeXZpZXdfc2V0dXBfcGN0eChk ZXYpOwo+ID4gwqAKPiA+ICsJdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShkZXZfcHJpdik7Cj4gPiAr Cj4gPiDCoAltdXRleF9sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+ID4gwqAKPiA+IMKg CW11dGV4X2xvY2soJmRldl9wcml2LT5zYl9sb2NrKTsKPiA+IEBAIC03MjYxLDY4ICs3Mjc2LDMz IEBAIGludCBzYW5keWJyaWRnZV9wY29kZV93cml0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIHUzMiBtYm94LCB1MzIgdmFsCj4gPiDCoAlyZXR1cm4gMDsKPiA+IMKgfQo+ID4g wqAKPiA+IC1zdGF0aWMgaW50IHZsdl9ncHVfZnJlcV9kaXYodW5zaWduZWQgaW50IGN6Y2xrX2Zy ZXEpCj4gPiAtewo+ID4gLQlzd2l0Y2ggKGN6Y2xrX2ZyZXEpIHsKPiA+IC0JY2FzZSAyMDA6Cj4g PiAtCQlyZXR1cm4gMTA7Cj4gPiAtCWNhc2UgMjY3Ogo+ID4gLQkJcmV0dXJuIDEyOwo+ID4gLQlj YXNlIDMyMDoKPiA+IC0JY2FzZSAzMzM6Cj4gPiAtCQlyZXR1cm4gMTY7Cj4gPiAtCWNhc2UgNDAw Ogo+ID4gLQkJcmV0dXJuIDIwOwo+ID4gLQlkZWZhdWx0Ogo+ID4gLQkJcmV0dXJuIC0xOwo+ID4g LQl9Cj4gPiAtfQo+ID4gLQo+ID4gwqBzdGF0aWMgaW50IGJ5dF9ncHVfZnJlcShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCj4gPiDCoHsKPiA+IC0JaW50IGRpdiwg Y3pjbGtfZnJlcSA9IERJVl9ST1VORF9DTE9TRVNUKGRldl9wcml2LT5jemNsa19mcmVxLCAxMDAw KTsKPiA+IC0KPiA+IC0JZGl2ID0gdmx2X2dwdV9mcmVxX2RpdihjemNsa19mcmVxKTsKPiA+IC0J aWYgKGRpdiA8IDApCj4gPiAtCQlyZXR1cm4gZGl2Owo+ID4gLQo+ID4gLQlyZXR1cm4gRElWX1JP VU5EX0NMT1NFU1QoY3pjbGtfZnJlcSAqICh2YWwgKyA2IC0gMHhiZCksIGRpdik7Cj4gPiArCS8q Cj4gPiArCcKgKiBOID0gdmFsIC0gMHhiNwo+ID4gKwnCoCogU2xvdyA9IEZhc3QgPSBHUExMIHJl ZiAqIE4KPiA+ICsJwqAqLwo+ID4gKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoZGV2X3ByaXYt PnJwcy5ncGxsX3JlZl9mcmVxICogKHZhbCAtIDB4YjcpLCAxMDAwKTsKPiA+IMKgfQo+ID4gwqAK PiA+IMKgc3RhdGljIGludCBieXRfZnJlcV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCBpbnQgdmFsKQo+ID4gwqB7Cj4gPiAtCWludCBtdWwsIGN6Y2xrX2ZyZXEgPSBE SVZfUk9VTkRfQ0xPU0VTVChkZXZfcHJpdi0+Y3pjbGtfZnJlcSwgMTAwMCk7Cj4gPiAtCj4gPiAt CW11bCA9IHZsdl9ncHVfZnJlcV9kaXYoY3pjbGtfZnJlcSk7Cj4gPiAtCWlmIChtdWwgPCAwKQo+ ID4gLQkJcmV0dXJuIG11bDsKPiA+IC0KPiA+IC0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKG11 bCAqIHZhbCwgY3pjbGtfZnJlcSkgKyAweGJkIC0gNjsKPiA+ICsJcmV0dXJuIERJVl9ST1VORF9D TE9TRVNUKDEwMDAgKiB2YWwsIGRldl9wcml2LT5ycHMuZ3BsbF9yZWZfZnJlcSkgKyAweGI3Owo+ ID4gwqB9Cj4gPiDCoAo+ID4gwqBzdGF0aWMgaW50IGNodl9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCj4gPiDCoHsKPiA+IC0JaW50IGRpdiwgY3pj bGtfZnJlcSA9IERJVl9ST1VORF9DTE9TRVNUKGRldl9wcml2LT5jemNsa19mcmVxLCAxMDAwKTsK PiA+IC0KPiA+IC0JZGl2ID0gdmx2X2dwdV9mcmVxX2RpdihjemNsa19mcmVxKTsKPiA+IC0JaWYg KGRpdiA8IDApCj4gPiAtCQlyZXR1cm4gZGl2Owo+ID4gLQlkaXYgLz0gMjsKPiA+IC0KPiA+IC0J cmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKGN6Y2xrX2ZyZXEgKiB2YWwsIDIgKiBkaXYpIC8gMjsK PiA+ICsJLyoKPiA+ICsJwqAqIE4gPSB2YWwgLyAyCj4gPiArCcKgKiBDVSA9IENVMnggLyAyID0g R1BMTCByZWYgKiBOIC8gMgo+ID4gKwnCoCovCj4gPiArCXJldHVybiBESVZfUk9VTkRfQ0xPU0VT VChkZXZfcHJpdi0+cnBzLmdwbGxfcmVmX2ZyZXEgKiB2YWwsIDIgKiAyICogMTAwMCk7Cj4gPiDC oH0KPiA+IMKgCj4gPiDCoHN0YXRpYyBpbnQgY2h2X2ZyZXFfb3Bjb2RlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCkKPiA+IMKgewo+ID4gLQlpbnQgbXVsLCBjemNs a19mcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoZGV2X3ByaXYtPmN6Y2xrX2ZyZXEsIDEwMDApOwo+ ID4gLQo+ID4gLQltdWwgPSB2bHZfZ3B1X2ZyZXFfZGl2KGN6Y2xrX2ZyZXEpOwo+ID4gLQlpZiAo bXVsIDwgMCkKPiA+IC0JCXJldHVybiBtdWw7Cj4gPiAtCW11bCAvPSAyOwo+ID4gLQo+ID4gwqAJ LyogQ0hWIG5lZWRzIGV2ZW4gdmFsdWVzICovCj4gPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VT VCh2YWwgKiAyICogbXVsLCBjemNsa19mcmVxKSAqIDI7Cj4gPiArCXJldHVybiBESVZfUk9VTkRf Q0xPU0VTVCgyICogMTAwMCAqIHZhbCwgZGV2X3ByaXYtPnJwcy5ncGxsX3JlZl9mcmVxKSAqIDI7 Cj4gPiDCoH0KPiA+IMKgCj4gPiDCoGludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9U QwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK