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:17:51 +0200 Message-ID: <1458148671.4473.39.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> 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 mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 2F4B56E0F2 for ; Wed, 16 Mar 2016 17:18:07 +0000 (UTC) In-Reply-To: <1457120584-26080-2-git-send-email-ville.syrjala@linux.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.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCAyMDE2LTAzLTA0IGF0IDIxOjQzICswMjAwLCB2aWxsZS5zeXJqYWxhQGxpbnV4Lmlu dGVsLmNvbSB3cm90ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGlu dXguaW50ZWwuY29tPgo+IAo+IEV4dHJhY3QgdGhlIEdQTEwgcmVmZXJlbmNlIGZyZXF1ZW5jeSBm cm9tIENDSyBhbmQgdXNlIGl0IGluIHRoZQo+IEdQVSBmcmVxPC0+b3Bjb2RlIGNvbnZlcnNpb25z IG9uIFZMVi9DSFYuIFRoaXMgZWxpbWluYXRlcyBhbGwgdGhlCj4gYXNzdW1wdGlvbnMgd2UgaGF2 ZSBhYm91dCB3aGljaCBkaXZpZGVyIGlzIHVzZWQgZm9yIHdoaWNoIGN6Y2xrCj4gZnJlcXVlbmN5 Lgo+IAo+IE5vdGUgdGhhdCB1bmxpa2UgbW9zdCBjbG9ja3MgZnJvbSBDQ0ssIHRoZSBHUExMIHJl ZiBjbG9jayBpcyBhIGRpdmlkZWQKPiBkb3duIHZlcnNpb24gb2YgdGhlIENaIGNsb2NrIHJhdGhl ciB0aGFuIHRoZSBIUExMIGNsb2NrLiBDWiBjbG9jayBpdHNlbGYKPiBpcyBhIGRpdmlkZWQgZG93 biB2ZXJzaW9uIG9mIHRoZSBIUExMIGNsb2NrIHRob3VnaCwgc28gaW4gZWZmZWN0IGl0IGp1c3QK PiBnZXRzIGRpdmlkZWQgZG93biB0d2ljZS4KPiAKPiBXaGlsZSBhdCBpdCwgdGhyb3cgaW4gYSBm ZXcgY29tbWVudHMgZXhwbGFpbmluZyB0aGUgcmVtYWluaW5nIGNvbnN0YW50cwo+IGZvciBhbnlv bmUgd2hvIGxhdGVyIHdhbnRzIHRvIGNvbXBhcmUgdGhpcyB0byB0aGUgc3ByZWFkc2hlZXRzLgo+ IAo+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20+CgpMb29rcyBvay4gVGhlIHJlbGV2YW50IGluZm8gaXMgc3ByZWFkIGFjcm9zcyBt dWx0aXBsZSBkb2N1bWVudHMgYnV0CmJhc2VkIG9uIHdoYXQgSSBnYXRoZXJlZCB0aGlzIGlzIG9r IGFuZCB0aGUgb2xkIGFuZCBuZXcgd2F5IG9mCmNhbGN1bGF0aW9uIG1hdGNoZXMsIHNvOgpSZXZp ZXdlZC1ieTogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgoKU29tZSBub3RlczoKRm9y IGNsYXJpdHksIEknZCByZW5hbWUgKl9ncHVfZnJlcSB0byAqX2dwdV9vcGNvZGVfdG9fZnJlcSBh bmQKKl9mcmVxX29wY29kZSB0byAqX2dwdV9mcmVxX3RvX29wY29kZSBhbmQgbWVudGlvbiB0aGF0 IHRoZSBDSFYgQ1UvQ1UyWApjbG9ja3MgYXJlIGFsc28ga25vd24gYXMgc2xvdy9mYXN0IGNsb2Nr LCBzbyBpdCBiZXR0ZXIgbWF0Y2hlcyB0aGUgVkxWCmNvZGUuCgpUaGUgZW50cmllcyBmb3IgVkxW IDMyMC80MDBNSHogQ1ogY2xvY2sgYXJlIG1pc3NpbmcgZnJvbSB0aGUgdGFibGVzCnRoYXQgSSBz YXcsIHdoaWNoIGlzIG9uZSBqdXN0aWZpY2F0aW9uIGZvciB0aGlzIGNoYW5nZSwgc2luY2Ugd2Ug ZG9uJ3QKa25vdyBpZsKgdmx2X2dwdV9mcmVxX2RpdigpIHdhcyBjb3JyZWN0LgoKLS1JbXJlCgoK Cj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5owqDCoMKgwqDCoMKgfMKg wqAxICsKPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmjCoMKgwqDCoMKgwqB8wqDC oDEgKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgMTkgKysrKysr LS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaMKgwqDCoMKgwqB8wqDCoDIg Kwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uY8KgwqDCoMKgwqDCoHwgNzQgKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gwqA1IGZpbGVzIGNoYW5nZWQsIDQ0 IGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+IGluZGV4IGYzN2FjMTIwYTI5ZC4uOTVmNzdjZDBjZTE3IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCj4gQEAgLTExNjYsNiArMTE2Niw3IEBAIHN0cnVjdCBpbnRlbF9nZW42X3Bvd2Vy X21nbXQgewo+IMKgCXU4IGVmZmljaWVudF9mcmVxOwkvKiBBS0EgUlBlLiBQcmUtZGV0ZXJtaW5l ZCBiYWxhbmNlZCBmcmVxdWVuY3kgKi8KPiDCoAl1OCBycDFfZnJlcTsJCS8qICJsZXNzIHRoYW4i IFJQMCBwb3dlci9mcmVxZW5jeSAqLwo+IMKgCXU4IHJwMF9mcmVxOwkJLyogTm9uLW92ZXJjbG9j a2VkIG1heCBmcmVxdWVuY3kuICovCj4gKwl1MTYgZ3BsbF9yZWZfZnJlcTsJLyogdmx2L2NodiBH UExMIHJlZmVyZW5jZSBmcmVxdWVuY3kgKi8KPiDCoAo+IMKgCXU4IHVwX3RocmVzaG9sZDsgLyog Q3VycmVudCAlYnVzeSByZXF1aXJlZCB0byB1cGxvY2sgKi8KPiDCoAl1OCBkb3duX3RocmVzaG9s ZDsgLyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byBkb3duY2xvY2sgKi8KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmgKPiBpbmRleCA3ZGZjNDAwN2YzZmEuLmFhMjFiZmMwNmEyNCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaAo+IEBAIC03ODUsNiArNzg1LDcgQEAgZW51bSBza2xfZGlzcF9w b3dlcl93ZWxscyB7Cj4gwqAjZGVmaW5lwqDCoERTSV9QTExfTTFfRElWX1NISUZUCQkJMAo+IMKg I2RlZmluZcKgwqBEU0lfUExMX00xX0RJVl9NQVNLCQkJKDB4MWZmIDw8IDApCj4gwqAjZGVmaW5l IENDS19DWl9DTE9DS19DT05UUk9MCQkJMHg2Mgo+ICsjZGVmaW5lIENDS19HUExMX0NMT0NLX0NP TlRST0wJCQkweDY3Cj4gwqAjZGVmaW5lIENDS19ESVNQTEFZX0NMT0NLX0NPTlRST0wJCTB4NmIK PiDCoCNkZWZpbmUgQ0NLX0RJU1BMQVlfUkVGX0NMT0NLX0NPTlRST0wJCTB4NmMKPiDCoCNkZWZp bmXCoMKgQ0NLX1RSVU5LX0ZPUkNFX09OCQkJKDEgPDwgMTcpCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwo+IGluZGV4IDYyZDM2YTdiMzM5OC4uYmE1MGRlNTM0ZjlhIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBAIC0xNDcsMTUgKzE0NywxMiBAQCBz dGF0aWMgaW50IHZhbGxleXZpZXdfZ2V0X3ZjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gwqAJcmV0dXJuIHZjb19mcmVxW2hwbGxfZnJlcV0gKiAxMDAwOwo+IMKgfQo+IMKg Cj4gLXN0YXRpYyBpbnQgdmx2X2dldF9jY2tfY2xvY2tfaHBsbChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQnCoMKgY29uc3QgY2hhciAqbmFtZSwgdTMyIHJlZykKPiAr aW50IHZsdl9nZXRfY2NrX2Nsb2NrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiArCQnCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpuYW1lLCB1MzIgcmVnLCBpbnQgcmVmX2ZyZXEp Cj4gwqB7Cj4gwqAJdTMyIHZhbDsKPiDCoAlpbnQgZGl2aWRlcjsKPiDCoAo+IC0JaWYgKGRldl9w cml2LT5ocGxsX2ZyZXEgPT0gMCkKPiAtCQlkZXZfcHJpdi0+aHBsbF9mcmVxID0gdmFsbGV5dmll d19nZXRfdmNvKGRldl9wcml2KTsKPiAtCj4gwqAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnNiX2xv Y2spOwo+IMKgCXZhbCA9IHZsdl9jY2tfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiDCoAltdXRleF91 bmxvY2soJmRldl9wcml2LT5zYl9sb2NrKTsKPiBAQCAtMTY2LDcgKzE2MywxNyBAQCBzdGF0aWMg aW50IHZsdl9nZXRfY2NrX2Nsb2NrX2hwbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+IMKgCcKgwqDCoMKgwqAoZGl2aWRlciA8PCBDQ0tfRlJFUVVFTkNZX1NUQVRVU19TSElG VCksCj4gwqAJwqDCoMKgwqDCoCIlcyBjaGFuZ2UgaW4gcHJvZ3Jlc3NcbiIsIG5hbWUpOwo+IMKg Cj4gLQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoZGV2X3ByaXYtPmhwbGxfZnJlcSA8PCAxLCBk aXZpZGVyICsgMSk7Cj4gKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocmVmX2ZyZXEgPDwgMSwg ZGl2aWRlciArIDEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZsdl9nZXRfY2NrX2Nsb2NrX2hw bGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJwqDCoGNvbnN0IGNo YXIgKm5hbWUsIHUzMiByZWcpCj4gK3sKPiArCWlmIChkZXZfcHJpdi0+aHBsbF9mcmVxID09IDAp Cj4gKwkJZGV2X3ByaXYtPmhwbGxfZnJlcSA9IHZhbGxleXZpZXdfZ2V0X3ZjbyhkZXZfcHJpdik7 Cj4gKwo+ICsJcmV0dXJuIHZsdl9nZXRfY2NrX2Nsb2NrKGRldl9wcml2LCBuYW1lLCByZWcsCj4g KwkJCQnCoGRldl9wcml2LT5ocGxsX2ZyZXEpOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgaW50Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBpbmRleCBjZDBiNGVhY2JkZGYuLmM0MTZmMGFkYWU0 OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTExMTYsNiArMTExNiw4IEBA IHZvaWQgaTkxNV9hdWRpb19jb21wb25lbnRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwo+IMKgdm9pZCBpOTE1X2F1ZGlvX2NvbXBvbmVudF9jbGVhbnVwKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gwqAKPiDCoC8qIGludGVsX2Rpc3BsYXkuYyAq Lwo+ICtpbnQgdmx2X2dldF9jY2tfY2xvY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ICsJCcKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKm5hbWUsIHUzMiByZWcsIGludCByZWZf ZnJlcSk7Cj4gwqBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRlbF9wbGFu ZV9mdW5jczsKPiDCoHVuc2lnbmVkIGludCBpbnRlbF9yb3RhdGlvbl9pbmZvX3NpemUoY29uc3Qg c3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvKTsKPiDCoGJvb2wgaW50ZWxfaGFz X3BlbmRpbmdfZmJfdW5waW4oc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9wbS5jCj4gaW5kZXggZjY1ZTg0MTM3MDYwLi5jNTNiOGM0ZDM4MWMgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKPiBAQCAtNTM2NCw2ICs1MzY0LDE3IEBAIHN0YXRpYyB2b2lkIHZh bGxleXZpZXdfY2xlYW51cF9wY3R4KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gwqAJZGV2X3By aXYtPnZsdl9wY3R4ID0gTlVMTDsKPiDCoH0KPiDCoAo+ICtzdGF0aWMgdm9pZCB2bHZfaW5pdF9n cGxsX3JlZl9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJ ZGV2X3ByaXYtPnJwcy5ncGxsX3JlZl9mcmVxID0KPiArCQl2bHZfZ2V0X2Nja19jbG9jayhkZXZf cHJpdiwgIkdQTEwgcmVmIiwKPiArCQkJCcKgwqBDQ0tfR1BMTF9DTE9DS19DT05UUk9MLAo+ICsJ CQkJwqDCoGRldl9wcml2LT5jemNsa19mcmVxKTsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJH UExMIHJlZmVyZW5jZSBmcmVxOiAlZCBrSHpcbiIsCj4gKwkJCcKgZGV2X3ByaXYtPnJwcy5ncGxs X3JlZl9mcmVxKTsKPiArfQo+ICsKPiDCoHN0YXRpYyB2b2lkIHZhbGxleXZpZXdfaW5pdF9ndF9w b3dlcnNhdmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiDCoHsKPiDCoAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IEBAIC01MzcxLDYgKzUz ODIsOCBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gwqAKPiDCoAl2YWxsZXl2aWV3X3NldHVwX3BjdHgoZGV2KTsKPiDC oAo+ICsJdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShkZXZfcHJpdik7Cj4gKwo+IMKgCW11dGV4X2xv Y2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gwqAKPiDCoAl2YWwgPSB2bHZfcHVuaXRfcmVh ZChkZXZfcHJpdiwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7Cj4gQEAgLTU0MjgsNiArNTQ0MSw4 IEBAIHN0YXRpYyB2b2lkIGNoZXJyeXZpZXdfaW5pdF9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiDCoAo+IMKgCWNoZXJyeXZpZXdfc2V0dXBfcGN0eChkZXYpOwo+IMKgCj4g Kwl2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKGRldl9wcml2KTsKPiArCj4gwqAJbXV0ZXhfbG9jaygm ZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPiDCoAo+IMKgCW11dGV4X2xvY2soJmRldl9wcml2LT5z Yl9sb2NrKTsKPiBAQCAtNzI2MSw2OCArNzI3NiwzMyBAQCBpbnQgc2FuZHlicmlkZ2VfcGNvZGVf d3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgbWJveCwgdTMyIHZh bAo+IMKgCXJldHVybiAwOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyBpbnQgdmx2X2dwdV9mcmVxX2Rp dih1bnNpZ25lZCBpbnQgY3pjbGtfZnJlcSkKPiAtewo+IC0Jc3dpdGNoIChjemNsa19mcmVxKSB7 Cj4gLQljYXNlIDIwMDoKPiAtCQlyZXR1cm4gMTA7Cj4gLQljYXNlIDI2NzoKPiAtCQlyZXR1cm4g MTI7Cj4gLQljYXNlIDMyMDoKPiAtCWNhc2UgMzMzOgo+IC0JCXJldHVybiAxNjsKPiAtCWNhc2Ug NDAwOgo+IC0JCXJldHVybiAyMDsKPiAtCWRlZmF1bHQ6Cj4gLQkJcmV0dXJuIC0xOwo+IC0JfQo+ IC19Cj4gLQo+IMKgc3RhdGljIGludCBieXRfZ3B1X2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCBpbnQgdmFsKQo+IMKgewo+IC0JaW50IGRpdiwgY3pjbGtfZnJlcSA9IERJ Vl9ST1VORF9DTE9TRVNUKGRldl9wcml2LT5jemNsa19mcmVxLCAxMDAwKTsKPiAtCj4gLQlkaXYg PSB2bHZfZ3B1X2ZyZXFfZGl2KGN6Y2xrX2ZyZXEpOwo+IC0JaWYgKGRpdiA8IDApCj4gLQkJcmV0 dXJuIGRpdjsKPiAtCj4gLQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoY3pjbGtfZnJlcSAqICh2 YWwgKyA2IC0gMHhiZCksIGRpdik7Cj4gKwkvKgo+ICsJwqAqIE4gPSB2YWwgLSAweGI3Cj4gKwnC oCogU2xvdyA9IEZhc3QgPSBHUExMIHJlZiAqIE4KPiArCcKgKi8KPiArCXJldHVybiBESVZfUk9V TkRfQ0xPU0VTVChkZXZfcHJpdi0+cnBzLmdwbGxfcmVmX2ZyZXEgKiAodmFsIC0gMHhiNyksIDEw MDApOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgaW50IGJ5dF9mcmVxX29wY29kZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCj4gwqB7Cj4gLQlpbnQgbXVsLCBjemNs a19mcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoZGV2X3ByaXYtPmN6Y2xrX2ZyZXEsIDEwMDApOwo+ IC0KPiAtCW11bCA9IHZsdl9ncHVfZnJlcV9kaXYoY3pjbGtfZnJlcSk7Cj4gLQlpZiAobXVsIDwg MCkKPiAtCQlyZXR1cm4gbXVsOwo+IC0KPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChtdWwg KiB2YWwsIGN6Y2xrX2ZyZXEpICsgMHhiZCAtIDY7Cj4gKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NF U1QoMTAwMCAqIHZhbCwgZGV2X3ByaXYtPnJwcy5ncGxsX3JlZl9mcmVxKSArIDB4Yjc7Cj4gwqB9 Cj4gwqAKPiDCoHN0YXRpYyBpbnQgY2h2X2dwdV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgaW50IHZhbCkKPiDCoHsKPiAtCWludCBkaXYsIGN6Y2xrX2ZyZXEgPSBESVZf Uk9VTkRfQ0xPU0VTVChkZXZfcHJpdi0+Y3pjbGtfZnJlcSwgMTAwMCk7Cj4gLQo+IC0JZGl2ID0g dmx2X2dwdV9mcmVxX2RpdihjemNsa19mcmVxKTsKPiAtCWlmIChkaXYgPCAwKQo+IC0JCXJldHVy biBkaXY7Cj4gLQlkaXYgLz0gMjsKPiAtCj4gLQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoY3pj bGtfZnJlcSAqIHZhbCwgMiAqIGRpdikgLyAyOwo+ICsJLyoKPiArCcKgKiBOID0gdmFsIC8gMgo+ ICsJwqAqIENVID0gQ1UyeCAvIDIgPSBHUExMIHJlZiAqIE4gLyAyCj4gKwnCoCovCj4gKwlyZXR1 cm4gRElWX1JPVU5EX0NMT1NFU1QoZGV2X3ByaXYtPnJwcy5ncGxsX3JlZl9mcmVxICogdmFsLCAy ICogMiAqIDEwMDApOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgaW50IGNodl9mcmVxX29wY29kZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCj4gwqB7Cj4gLQlpbnQg bXVsLCBjemNsa19mcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoZGV2X3ByaXYtPmN6Y2xrX2ZyZXEs IDEwMDApOwo+IC0KPiAtCW11bCA9IHZsdl9ncHVfZnJlcV9kaXYoY3pjbGtfZnJlcSk7Cj4gLQlp ZiAobXVsIDwgMCkKPiAtCQlyZXR1cm4gbXVsOwo+IC0JbXVsIC89IDI7Cj4gLQo+IMKgCS8qIENI ViBuZWVkcyBldmVuIHZhbHVlcyAqLwo+IC0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAq IDIgKiBtdWwsIGN6Y2xrX2ZyZXEpICogMjsKPiArCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgy ICogMTAwMCAqIHZhbCwgZGV2X3ByaXYtPnJwcy5ncGxsX3JlZl9mcmVxKSAqIDI7Cj4gwqB9Cj4g wqAKPiDCoGludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIGludCB2YWwpCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=