From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 3/8] drm/i915: Combine bxt_set_cdclk and cnl_set_cdclk Date: Tue, 10 Sep 2019 15:35:28 +0300 Message-ID: <20190910123528.GI7482@intel.com> References: <20190907002143.22591-1-matthew.d.roper@intel.com> <20190907002143.22591-4-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8E94C6E8C6 for ; Tue, 10 Sep 2019 12:35:32 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190907002143.22591-4-matthew.d.roper@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBTZXAgMDYsIDIwMTkgYXQgMDU6MjE6MzhQTSAtMDcwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBXZSdkIHByZXZpb3VzbHkgY29tYmluZWQgSUNML1RHTCBsb2dpYyBpbnRvIHRoZSBjbmxf c2V0X2NkY2xrIGZ1bmN0aW9uLAo+IGJ1dCBCWFQgaXMgcHJldHR5IHNpbWlsYXIgYXMgd2VsbC4g IFJvbGwgdGhlIGNubC9pY2wvdGdsIGxvZ2ljIGJhY2sgaW50bwo+IHRoZSBieHQgZnVuY3Rpb247 IHRoZSBvbmx5IHRoaW5ncyB3ZSByZWFsbHkgbmVlZCB0byBoYW5kbGUgc2VwYXJhdGVseQo+IGFy ZSBwdW5pdCBub3RpZmljYXRpb24gYW5kIGNhbGxpbmcgZGlmZmVyZW50IGZ1bmN0aW9ucyB0byBl bmFibGUvZGlzYWJsZQo+IHRoZSBjZGNsayBQTEwuCj4gCj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTWF0dCBSb3Bl ciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KCk5vdCBzdXJlIGlmIGFsbCB0aGUgaWZzIGFy ZSBnZXR0aW5nIG91dCBvZiBoYW5kIG9yIG5vdC4gQnV0IEkgZ3Vlc3MKaXQncyBzdGlsbCBsZWdp YmxlLgoKUmV2aWV3ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20+Cgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nk Y2xrLmMgfCAyNjcgKysrKysrKysrLS0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAxMTkg aW5zZXJ0aW9ucygrKSwgMTQ4IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NkY2xrLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2NkY2xrLmMKPiBpbmRleCA4YWMzMWY4Nzc1ZjAuLjZiNWIxMzI4YTNm YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NkY2xr LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NkY2xrLmMKPiBA QCAtMTQ0OSw2ICsxNDQ5LDM5IEBAIHN0YXRpYyB2b2lkIGJ4dF9kZV9wbGxfZW5hYmxlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZjbykKPiAgCWRldl9wcml2LT5jZGNs ay5ody52Y28gPSB2Y287Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIGNubF9jZGNsa19wbGxfZGlz YWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXUzMiB2YWw7 Cj4gKwo+ICsJdmFsID0gSTkxNV9SRUFEKEJYVF9ERV9QTExfRU5BQkxFKTsKPiArCXZhbCAmPSB+ QlhUX0RFX1BMTF9QTExfRU5BQkxFOwo+ICsJSTkxNV9XUklURShCWFRfREVfUExMX0VOQUJMRSwg dmFsKTsKPiArCj4gKwkvKiBUaW1lb3V0IDIwMHVzICovCj4gKwlpZiAod2FpdF9mb3IoKEk5MTVf UkVBRChCWFRfREVfUExMX0VOQUJMRSkgJiBCWFRfREVfUExMX0xPQ0spID09IDAsIDEpKQo+ICsJ CURSTV9FUlJPUigidGltZW91dCB3YWl0aW5nIGZvciBDRENMSyBQTEwgdW5sb2NrXG4iKTsKPiAr Cj4gKwlkZXZfcHJpdi0+Y2RjbGsuaHcudmNvID0gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg Y25sX2NkY2xrX3BsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBp bnQgdmNvKQo+ICt7Cj4gKwlpbnQgcmF0aW8gPSBESVZfUk9VTkRfQ0xPU0VTVCh2Y28sIGRldl9w cml2LT5jZGNsay5ody5yZWYpOwo+ICsJdTMyIHZhbDsKPiArCj4gKwl2YWwgPSBDTkxfQ0RDTEtf UExMX1JBVElPKHJhdGlvKTsKPiArCUk5MTVfV1JJVEUoQlhUX0RFX1BMTF9FTkFCTEUsIHZhbCk7 Cj4gKwo+ICsJdmFsIHw9IEJYVF9ERV9QTExfUExMX0VOQUJMRTsKPiArCUk5MTVfV1JJVEUoQlhU X0RFX1BMTF9FTkFCTEUsIHZhbCk7Cj4gKwo+ICsJLyogVGltZW91dCAyMDB1cyAqLwo+ICsJaWYg KHdhaXRfZm9yKChJOTE1X1JFQUQoQlhUX0RFX1BMTF9FTkFCTEUpICYgQlhUX0RFX1BMTF9MT0NL KSAhPSAwLCAxKSkKPiArCQlEUk1fRVJST1IoInRpbWVvdXQgd2FpdGluZyBmb3IgQ0RDTEsgUExM IGxvY2tcbiIpOwo+ICsKPiArCWRldl9wcml2LT5jZGNsay5ody52Y28gPSB2Y287Cj4gK30KPiAr Cj4gIHN0YXRpYyB2b2lkIGJ4dF9zZXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+ICAJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jZGNsa19zdGF0ZSAqY2RjbGtfc3Rh dGUsCj4gIAkJCSAgZW51bSBwaXBlIHBpcGUpCj4gQEAgLTE0NTgsNiArMTQ5MSwyNyBAQCBzdGF0 aWMgdm9pZCBieHRfc2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiAgCXUzMiB2YWwsIGRpdmlkZXI7Cj4gIAlpbnQgcmV0Owo+ICAKPiArCS8qIEluZm9ybSBwb3dl ciBjb250cm9sbGVyIG9mIHVwY29taW5nIGZyZXF1ZW5jeSBjaGFuZ2UuICovCj4gKwlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMCkKPiArCQlyZXQgPSBza2xfcGNvZGVfcmVxdWVzdChkZXZf cHJpdiwgU0tMX1BDT0RFX0NEQ0xLX0NPTlRST0wsCj4gKwkJCQkJU0tMX0NEQ0xLX1BSRVBBUkVf Rk9SX0NIQU5HRSwKPiArCQkJCQlTS0xfQ0RDTEtfUkVBRFlfRk9SX0NIQU5HRSwKPiArCQkJCQlT S0xfQ0RDTEtfUkVBRFlfRk9SX0NIQU5HRSwgMyk7Cj4gKwllbHNlCj4gKwkJLyoKPiArCQkgKiBC U3BlYyByZXF1aXJlcyB1cyB0byB3YWl0IHVwIHRvIDE1MHVzZWMsIGJ1dCB0aGF0IGxlYWRzIHRv Cj4gKwkJICogdGltZW91dHM7IHRoZSAybXMgdXNlZCBoZXJlIGlzIGJhc2VkIG9uIGV4cGVyaW1l bnQuCj4gKwkJICovCj4gKwkJcmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVfd3JpdGVfdGltZW91dChk ZXZfcHJpdiwKPiArCQkJCQkJICAgICAgSFNXX1BDT0RFX0RFX1dSSVRFX0ZSRVFfUkVRLAo+ICsJ CQkJCQkgICAgICAweDgwMDAwMDAwLCAxNTAsIDIpOwo+ICsKPiArCWlmIChyZXQpIHsKPiArCQlE Uk1fRVJST1IoIkZhaWxlZCB0byBpbmZvcm0gUENVIGFib3V0IGNkY2xrIGNoYW5nZSAoZXJyICVk LCBmcmVxICVkKVxuIiwKPiArCQkJICByZXQsIGNkY2xrKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4g Kwo+ICAJLyogY2RjbGsgPSB2Y28gLyAyIC8gZGl2ezEsMS41LDIsNH0gKi8KPiAgCXN3aXRjaCAo RElWX1JPVU5EX0NMT1NFU1QodmNvLCBjZGNsaykpIHsKPiAgCWRlZmF1bHQ6Cj4gQEAgLTE0Njgs NjMgKzE1MjIsODIgQEAgc3RhdGljIHZvaWQgYnh0X3NldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJZGl2aWRlciA9IEJYVF9DRENMS19DRDJYX0RJVl9TRUxf MTsKPiAgCQlicmVhazsKPiAgCWNhc2UgMzoKPiAtCQlXQVJOKElTX0dFTUlOSUxBS0UoZGV2X3By aXYpLCAiVW5zdXBwb3J0ZWQgZGl2aWRlclxuIik7Cj4gKwkJV0FSTihJU19HRU1JTklMQUtFKGRl dl9wcml2KSB8fCBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwLAo+ICsJCSAgICAgIlVuc3VwcG9y dGVkIGRpdmlkZXJcbiIpOwo+ICAJCWRpdmlkZXIgPSBCWFRfQ0RDTEtfQ0QyWF9ESVZfU0VMXzFf NTsKPiAgCQlicmVhazsKPiAgCWNhc2UgNDoKPiAgCQlkaXZpZGVyID0gQlhUX0NEQ0xLX0NEMlhf RElWX1NFTF8yOwo+ICAJCWJyZWFrOwo+ICAJY2FzZSA4Ogo+ICsJCVdBUk4oSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMCwgIlVuc3VwcG9ydGVkIGRpdmlkZXJcbiIpOwo+ICAJCWRpdmlkZXIgPSBC WFRfQ0RDTEtfQ0QyWF9ESVZfU0VMXzQ7Cj4gIAkJYnJlYWs7Cj4gIAl9Cj4gIAo+IC0JLyoKPiAt CSAqIEluZm9ybSBwb3dlciBjb250cm9sbGVyIG9mIHVwY29taW5nIGZyZXF1ZW5jeSBjaGFuZ2Uu IEJTcGVjCj4gLQkgKiByZXF1aXJlcyB1cyB0byB3YWl0IHVwIHRvIDE1MHVzZWMsIGJ1dCB0aGF0 IGxlYWRzIHRvIHRpbWVvdXRzOwo+IC0JICogdGhlIDJtcyB1c2VkIGhlcmUgaXMgYmFzZWQgb24g ZXhwZXJpbWVudC4KPiAtCSAqLwo+IC0JcmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVfd3JpdGVfdGlt ZW91dChkZXZfcHJpdiwKPiAtCQkJCQkgICAgICBIU1dfUENPREVfREVfV1JJVEVfRlJFUV9SRVEs Cj4gLQkJCQkJICAgICAgMHg4MDAwMDAwMCwgMTUwLCAyKTsKPiAtCWlmIChyZXQpIHsKPiAtCQlE Uk1fRVJST1IoIlBDb2RlIENEQ0xLIGZyZXEgY2hhbmdlIG5vdGlmeSBmYWlsZWQgKGVyciAlZCwg ZnJlcSAlZClcbiIsCj4gLQkJCSAgcmV0LCBjZGNsayk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+ICsJ aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApIHsKPiArCQlpZiAoZGV2X3ByaXYtPmNkY2xr Lmh3LnZjbyAhPSAwICYmCj4gKwkJICAgIGRldl9wcml2LT5jZGNsay5ody52Y28gIT0gdmNvKQo+ ICsJCQljbmxfY2RjbGtfcGxsX2Rpc2FibGUoZGV2X3ByaXYpOwo+ICAKPiAtCWlmIChkZXZfcHJp di0+Y2RjbGsuaHcudmNvICE9IDAgJiYKPiAtCSAgICBkZXZfcHJpdi0+Y2RjbGsuaHcudmNvICE9 IHZjbykKPiAtCQlieHRfZGVfcGxsX2Rpc2FibGUoZGV2X3ByaXYpOwo+ICsJCWlmIChkZXZfcHJp di0+Y2RjbGsuaHcudmNvICE9IHZjbykKPiArCQkJY25sX2NkY2xrX3BsbF9lbmFibGUoZGV2X3By aXYsIHZjbyk7Cj4gIAo+IC0JaWYgKGRldl9wcml2LT5jZGNsay5ody52Y28gIT0gdmNvKQo+IC0J CWJ4dF9kZV9wbGxfZW5hYmxlKGRldl9wcml2LCB2Y28pOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAo ZGV2X3ByaXYtPmNkY2xrLmh3LnZjbyAhPSAwICYmCj4gKwkJICAgIGRldl9wcml2LT5jZGNsay5o dy52Y28gIT0gdmNvKQo+ICsJCQlieHRfZGVfcGxsX2Rpc2FibGUoZGV2X3ByaXYpOwo+ICsKPiAr CQlpZiAoZGV2X3ByaXYtPmNkY2xrLmh3LnZjbyAhPSB2Y28pCj4gKwkJCWJ4dF9kZV9wbGxfZW5h YmxlKGRldl9wcml2LCB2Y28pOwo+ICsJfQo+ICAKPiAgCXZhbCA9IGRpdmlkZXIgfCBza2xfY2Rj bGtfZGVjaW1hbChjZGNsayk7Cj4gLQlpZiAocGlwZSA9PSBJTlZBTElEX1BJUEUpCj4gLQkJdmFs IHw9IEJYVF9DRENMS19DRDJYX1BJUEVfTk9ORTsKPiAtCWVsc2UKPiAtCQl2YWwgfD0gQlhUX0NE Q0xLX0NEMlhfUElQRShwaXBlKTsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAx Mikgewo+ICsJCWlmIChwaXBlID09IElOVkFMSURfUElQRSkKPiArCQkJdmFsIHw9IFRHTF9DRENM S19DRDJYX1BJUEVfTk9ORTsKPiArCQllbHNlCj4gKwkJCXZhbCB8PSBUR0xfQ0RDTEtfQ0QyWF9Q SVBFKHBpcGUpOwo+ICsJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKSB7Cj4g KwkJaWYgKHBpcGUgPT0gSU5WQUxJRF9QSVBFKQo+ICsJCQl2YWwgfD0gSUNMX0NEQ0xLX0NEMlhf UElQRV9OT05FOwo+ICsJCWVsc2UKPiArCQkJdmFsIHw9IElDTF9DRENMS19DRDJYX1BJUEUocGlw ZSk7Cj4gKwl9IGVsc2Ugewo+ICsJCWlmIChwaXBlID09IElOVkFMSURfUElQRSkKPiArCQkJdmFs IHw9IEJYVF9DRENMS19DRDJYX1BJUEVfTk9ORTsKPiArCQllbHNlCj4gKwkJCXZhbCB8PSBCWFRf Q0RDTEtfQ0QyWF9QSVBFKHBpcGUpOwo+ICsJfQo+ICsKPiAgCS8qCj4gIAkgKiBEaXNhYmxlIFNT QSBQcmVjaGFyZ2Ugd2hlbiBDRCBjbG9jayBmcmVxdWVuY3kgPCA1MDAgTUh6LAo+ICAJICogZW5h YmxlIG90aGVyd2lzZS4KPiAgCSAqLwo+IC0JaWYgKGNkY2xrID49IDUwMDAwMCkKPiArCWlmIChJ U19HRU45X0xQKGRldl9wcml2KSAmJiBjZGNsayA+PSA1MDAwMDApCj4gIAkJdmFsIHw9IEJYVF9D RENMS19TU0FfUFJFQ0hBUkdFX0VOQUJMRTsKPiAgCUk5MTVfV1JJVEUoQ0RDTEtfQ1RMLCB2YWwp Owo+ICAKPiAgCWlmIChwaXBlICE9IElOVkFMSURfUElQRSkKPiAgCQlpbnRlbF93YWl0X2Zvcl92 YmxhbmsoZGV2X3ByaXYsIHBpcGUpOwo+ICAKPiAtCS8qCj4gLQkgKiBUaGUgdGltZW91dCBpc24n dCBzcGVjaWZpZWQsIHRoZSAybXMgdXNlZCBoZXJlIGlzIGJhc2VkIG9uCj4gLQkgKiBleHBlcmlt ZW50Lgo+IC0JICogRklYTUU6IFdhaXRpbmcgZm9yIHRoZSByZXF1ZXN0IGNvbXBsZXRpb24gY291 bGQgYmUgZGVsYXllZCB1bnRpbAo+IC0JICogdGhlIG5leHQgUENPREUgcmVxdWVzdCBiYXNlZCBv biBCU3BlYy4KPiAtCSAqLwo+IC0JcmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVfd3JpdGVfdGltZW91 dChkZXZfcHJpdiwKPiAtCQkJCQkgICAgICBIU1dfUENPREVfREVfV1JJVEVfRlJFUV9SRVEsCj4g LQkJCQkJICAgICAgY2RjbGtfc3RhdGUtPnZvbHRhZ2VfbGV2ZWwsIDE1MCwgMik7Cj4gKwlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkgewo+ICsJCXJldCA9IHNhbmR5YnJpZGdlX3Bjb2Rl X3dyaXRlKGRldl9wcml2LCBTS0xfUENPREVfQ0RDTEtfQ09OVFJPTCwKPiArCQkJCQkgICAgICBj ZGNsa19zdGF0ZS0+dm9sdGFnZV9sZXZlbCk7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qCj4gKwkJICog VGhlIHRpbWVvdXQgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgMm1zIHVzZWQgaGVyZSBpcyBiYXNlZCBv bgo+ICsJCSAqIGV4cGVyaW1lbnQuCj4gKwkJICogRklYTUU6IFdhaXRpbmcgZm9yIHRoZSByZXF1 ZXN0IGNvbXBsZXRpb24gY291bGQgYmUgZGVsYXllZAo+ICsJCSAqIHVudGlsIHRoZSBuZXh0IFBD T0RFIHJlcXVlc3QgYmFzZWQgb24gQlNwZWMuCj4gKwkJICovCj4gKwkJcmV0ID0gc2FuZHlicmlk Z2VfcGNvZGVfd3JpdGVfdGltZW91dChkZXZfcHJpdiwKPiArCQkJCQkJICAgICAgSFNXX1BDT0RF X0RFX1dSSVRFX0ZSRVFfUkVRLAo+ICsJCQkJCQkgICAgICBjZGNsa19zdGF0ZS0+dm9sdGFnZV9s ZXZlbCwKPiArCQkJCQkJICAgICAgMTUwLCAyKTsKPiArCX0KPiArCj4gIAlpZiAocmV0KSB7Cj4g IAkJRFJNX0VSUk9SKCJQQ29kZSBDRENMSyBmcmVxIHNldCBmYWlsZWQsIChlcnIgJWQsIGZyZXEg JWQpXG4iLAo+ICAJCQkgIHJldCwgY2RjbGspOwo+IEBAIC0xNTMyLDYgKzE2MDUsMTMgQEAgc3Rh dGljIHZvaWQgYnh0X3NldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gIAl9Cj4gIAo+ICAJaW50ZWxfdXBkYXRlX2NkY2xrKGRldl9wcml2KTsKPiArCj4gKwlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKPiArCQkvKgo+ICsJCSAqIENhbid0IHJlYWQgb3V0 IHRoZSB2b2x0YWdlIGxldmVsIDooCj4gKwkJICogTGV0J3MganVzdCBhc3N1bWUgZXZlcnl0aGlu ZyBpcyBhcyBleHBlY3RlZC4KPiArCQkgKi8KPiArCQlkZXZfcHJpdi0+Y2RjbGsuaHcudm9sdGFn ZV9sZXZlbCA9IGNkY2xrX3N0YXRlLT52b2x0YWdlX2xldmVsOwo+ICB9Cj4gIAo+ICBzdGF0aWMg dm9pZCBieHRfc2FuaXRpemVfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+IEBAIC0xNjE3LDExNSArMTY5Nyw2IEBAIHN0YXRpYyB2b2lkIGJ4dF91bmluaXRfY2RjbGso c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJYnh0X3NldF9jZGNsayhkZXZf cHJpdiwgJmNkY2xrX3N0YXRlLCBJTlZBTElEX1BJUEUpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9p ZCBjbmxfY2RjbGtfcGxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+IC17Cj4gLQl1MzIgdmFsOwo+IC0KPiAtCXZhbCA9IEk5MTVfUkVBRChCWFRfREVfUExMX0VO QUJMRSk7Cj4gLQl2YWwgJj0gfkJYVF9ERV9QTExfUExMX0VOQUJMRTsKPiAtCUk5MTVfV1JJVEUo QlhUX0RFX1BMTF9FTkFCTEUsIHZhbCk7Cj4gLQo+IC0JLyogVGltZW91dCAyMDB1cyAqLwo+IC0J aWYgKHdhaXRfZm9yKChJOTE1X1JFQUQoQlhUX0RFX1BMTF9FTkFCTEUpICYgQlhUX0RFX1BMTF9M T0NLKSA9PSAwLCAxKSkKPiAtCQlEUk1fRVJST1IoInRpbWVvdXQgd2FpdGluZyBmb3IgQ0RDTEsg UExMIHVubG9ja1xuIik7Cj4gLQo+IC0JZGV2X3ByaXYtPmNkY2xrLmh3LnZjbyA9IDA7Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIGNubF9jZGNsa19wbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgaW50IHZjbykKPiAtewo+IC0JaW50IHJhdGlvID0gRElWX1JPVU5E X0NMT1NFU1QodmNvLCBkZXZfcHJpdi0+Y2RjbGsuaHcucmVmKTsKPiAtCXUzMiB2YWw7Cj4gLQo+ IC0JdmFsID0gQ05MX0NEQ0xLX1BMTF9SQVRJTyhyYXRpbyk7Cj4gLQlJOTE1X1dSSVRFKEJYVF9E RV9QTExfRU5BQkxFLCB2YWwpOwo+IC0KPiAtCXZhbCB8PSBCWFRfREVfUExMX1BMTF9FTkFCTEU7 Cj4gLQlJOTE1X1dSSVRFKEJYVF9ERV9QTExfRU5BQkxFLCB2YWwpOwo+IC0KPiAtCS8qIFRpbWVv dXQgMjAwdXMgKi8KPiAtCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKEJYVF9ERV9QTExfRU5BQkxF KSAmIEJYVF9ERV9QTExfTE9DSykgIT0gMCwgMSkpCj4gLQkJRFJNX0VSUk9SKCJ0aW1lb3V0IHdh aXRpbmcgZm9yIENEQ0xLIFBMTCBsb2NrXG4iKTsKPiAtCj4gLQlkZXZfcHJpdi0+Y2RjbGsuaHcu dmNvID0gdmNvOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBjbmxfc2V0X2NkY2xrKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY2Rj bGtfc3RhdGUgKmNkY2xrX3N0YXRlLAo+IC0JCQkgIGVudW0gcGlwZSBwaXBlKQo+IC17Cj4gLQlp bnQgY2RjbGsgPSBjZGNsa19zdGF0ZS0+Y2RjbGs7Cj4gLQlpbnQgdmNvID0gY2RjbGtfc3RhdGUt PnZjbzsKPiAtCXUzMiB2YWwsIGRpdmlkZXI7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IHNr bF9wY29kZV9yZXF1ZXN0KGRldl9wcml2LCBTS0xfUENPREVfQ0RDTEtfQ09OVFJPTCwKPiAtCQkJ CVNLTF9DRENMS19QUkVQQVJFX0ZPUl9DSEFOR0UsCj4gLQkJCQlTS0xfQ0RDTEtfUkVBRFlfRk9S X0NIQU5HRSwKPiAtCQkJCVNLTF9DRENMS19SRUFEWV9GT1JfQ0hBTkdFLCAzKTsKPiAtCWlmIChy ZXQpIHsKPiAtCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbmZvcm0gUENVIGFib3V0IGNkY2xrIGNo YW5nZSAoJWQpXG4iLAo+IC0JCQkgIHJldCk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCS8q IGNkY2xrID0gdmNvIC8gMiAvIGRpdnsxLDJ9ICovCj4gLQlzd2l0Y2ggKERJVl9ST1VORF9DTE9T RVNUKHZjbywgY2RjbGspKSB7Cj4gLQlkZWZhdWx0Ogo+IC0JCVdBUk5fT04oY2RjbGsgIT0gZGV2 X3ByaXYtPmNkY2xrLmh3LmJ5cGFzcyk7Cj4gLQkJV0FSTl9PTih2Y28gIT0gMCk7Cj4gLQkJLyog ZmFsbCB0aHJvdWdoICovCj4gLQljYXNlIDI6Cj4gLQkJZGl2aWRlciA9IEJYVF9DRENMS19DRDJY X0RJVl9TRUxfMTsKPiAtCQlicmVhazsKPiAtCWNhc2UgNDoKPiAtCQlkaXZpZGVyID0gQlhUX0NE Q0xLX0NEMlhfRElWX1NFTF8yOwo+IC0JCWJyZWFrOwo+IC0JfQo+IC0KPiAtCWlmIChkZXZfcHJp di0+Y2RjbGsuaHcudmNvICE9IDAgJiYKPiAtCSAgICBkZXZfcHJpdi0+Y2RjbGsuaHcudmNvICE9 IHZjbykKPiAtCQljbmxfY2RjbGtfcGxsX2Rpc2FibGUoZGV2X3ByaXYpOwo+IC0KPiAtCWlmIChk ZXZfcHJpdi0+Y2RjbGsuaHcudmNvICE9IHZjbykKPiAtCQljbmxfY2RjbGtfcGxsX2VuYWJsZShk ZXZfcHJpdiwgdmNvKTsKPiAtCj4gLQl2YWwgPSBkaXZpZGVyIHwgc2tsX2NkY2xrX2RlY2ltYWwo Y2RjbGspOwo+IC0KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKSB7Cj4gLQkJaWYg KHBpcGUgPT0gSU5WQUxJRF9QSVBFKQo+IC0JCQl2YWwgfD0gVEdMX0NEQ0xLX0NEMlhfUElQRV9O T05FOwo+IC0JCWVsc2UKPiAtCQkJdmFsIHw9IFRHTF9DRENMS19DRDJYX1BJUEUocGlwZSk7Cj4g LQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpIHsKPiAtCQlpZiAocGlwZSA9 PSBJTlZBTElEX1BJUEUpCj4gLQkJCXZhbCB8PSBJQ0xfQ0RDTEtfQ0QyWF9QSVBFX05PTkU7Cj4g LQkJZWxzZQo+IC0JCQl2YWwgfD0gSUNMX0NEQ0xLX0NEMlhfUElQRShwaXBlKTsKPiAtCX0gZWxz ZSB7Cj4gLQkJaWYgKHBpcGUgPT0gSU5WQUxJRF9QSVBFKQo+IC0JCQl2YWwgfD0gQlhUX0NEQ0xL X0NEMlhfUElQRV9OT05FOwo+IC0JCWVsc2UKPiAtCQkJdmFsIHw9IEJYVF9DRENMS19DRDJYX1BJ UEUocGlwZSk7Cj4gLQl9Cj4gLQlJOTE1X1dSSVRFKENEQ0xLX0NUTCwgdmFsKTsKPiAtCj4gLQlp ZiAocGlwZSAhPSBJTlZBTElEX1BJUEUpCj4gLQkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldl9w cml2LCBwaXBlKTsKPiAtCj4gLQkvKiBpbmZvcm0gUENVIG9mIHRoZSBjaGFuZ2UgKi8KPiAtCXNh bmR5YnJpZGdlX3Bjb2RlX3dyaXRlKGRldl9wcml2LCBTS0xfUENPREVfQ0RDTEtfQ09OVFJPTCwK PiAtCQkJCWNkY2xrX3N0YXRlLT52b2x0YWdlX2xldmVsKTsKPiAtCj4gLQlpbnRlbF91cGRhdGVf Y2RjbGsoZGV2X3ByaXYpOwo+IC0KPiAtCS8qCj4gLQkgKiBDYW4ndCByZWFkIG91dCB0aGUgdm9s dGFnZSBsZXZlbCA6KAo+IC0JICogTGV0J3MganVzdCBhc3N1bWUgZXZlcnl0aGluZyBpcyBhcyBl eHBlY3RlZC4KPiAtCSAqLwo+IC0JZGV2X3ByaXYtPmNkY2xrLmh3LnZvbHRhZ2VfbGV2ZWwgPSBj ZGNsa19zdGF0ZS0+dm9sdGFnZV9sZXZlbDsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgY25sX3Nh bml0aXplX2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+ICAJ dTMyIGNkY3RsLCBleHBlY3RlZDsKPiBAQCAtMTgwNiw3ICsxNzc3LDcgQEAgc3RhdGljIHZvaWQg aWNsX2luaXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJCXNh bml0aXplZF9zdGF0ZS52b2x0YWdlX2xldmVsID0KPiAgCQkJaWNsX2NhbGNfdm9sdGFnZV9sZXZl bChzYW5pdGl6ZWRfc3RhdGUuY2RjbGspOwo+ICAKPiAtCWNubF9zZXRfY2RjbGsoZGV2X3ByaXYs ICZzYW5pdGl6ZWRfc3RhdGUsIElOVkFMSURfUElQRSk7Cj4gKwlieHRfc2V0X2NkY2xrKGRldl9w cml2LCAmc2FuaXRpemVkX3N0YXRlLCBJTlZBTElEX1BJUEUpOwo+ICB9Cj4gIAo+ICBzdGF0aWMg dm9pZCBpY2xfdW5pbml0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiBAQCAtMTgyMiw3ICsxNzkzLDcgQEAgc3RhdGljIHZvaWQgaWNsX3VuaW5pdF9jZGNsayhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAkJY2RjbGtfc3RhdGUudm9sdGFnZV9s ZXZlbCA9Cj4gIAkJCWljbF9jYWxjX3ZvbHRhZ2VfbGV2ZWwoY2RjbGtfc3RhdGUuY2RjbGspOwo+ ICAKPiAtCWNubF9zZXRfY2RjbGsoZGV2X3ByaXYsICZjZGNsa19zdGF0ZSwgSU5WQUxJRF9QSVBF KTsKPiArCWJ4dF9zZXRfY2RjbGsoZGV2X3ByaXYsICZjZGNsa19zdGF0ZSwgSU5WQUxJRF9QSVBF KTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgY25sX2luaXRfY2RjbGsoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+IEBAIC0xODQxLDcgKzE4MTIsNyBAQCBzdGF0aWMgdm9pZCBj bmxfaW5pdF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAljZGNs a19zdGF0ZS52Y28gPSBjYWxjX2NkY2xrX3BsbF92Y28oZGV2X3ByaXYsIGNkY2xrX3N0YXRlLmNk Y2xrKTsKPiAgCWNkY2xrX3N0YXRlLnZvbHRhZ2VfbGV2ZWwgPSBjbmxfY2FsY192b2x0YWdlX2xl dmVsKGNkY2xrX3N0YXRlLmNkY2xrKTsKPiAgCj4gLQljbmxfc2V0X2NkY2xrKGRldl9wcml2LCAm Y2RjbGtfc3RhdGUsIElOVkFMSURfUElQRSk7Cj4gKwlieHRfc2V0X2NkY2xrKGRldl9wcml2LCAm Y2RjbGtfc3RhdGUsIElOVkFMSURfUElQRSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGNubF91 bmluaXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IEBAIC0xODUy LDcgKzE4MjMsNyBAQCBzdGF0aWMgdm9pZCBjbmxfdW5pbml0X2NkY2xrKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAgCWNkY2xrX3N0YXRlLnZjbyA9IDA7Cj4gIAljZGNsa19z dGF0ZS52b2x0YWdlX2xldmVsID0gY25sX2NhbGNfdm9sdGFnZV9sZXZlbChjZGNsa19zdGF0ZS5j ZGNsayk7Cj4gIAo+IC0JY25sX3NldF9jZGNsayhkZXZfcHJpdiwgJmNkY2xrX3N0YXRlLCBJTlZB TElEX1BJUEUpOwo+ICsJYnh0X3NldF9jZGNsayhkZXZfcHJpdiwgJmNkY2xrX3N0YXRlLCBJTlZB TElEX1BJUEUpOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMjY1NSwxMiArMjYyNiwxMiBAQCB2b2lk IGludGVsX3VwZGF0ZV9yYXdjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ ICB2b2lkIGludGVsX2luaXRfY2RjbGtfaG9va3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ICB7Cj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgewo+IC0JCWRl dl9wcml2LT5kaXNwbGF5LnNldF9jZGNsayA9IGNubF9zZXRfY2RjbGs7Cj4gKwkJZGV2X3ByaXYt PmRpc3BsYXkuc2V0X2NkY2xrID0gYnh0X3NldF9jZGNsazsKPiAgCQlkZXZfcHJpdi0+ZGlzcGxh eS5tb2Rlc2V0X2NhbGNfY2RjbGsgPSBpY2xfbW9kZXNldF9jYWxjX2NkY2xrOwo+ICAJCWRldl9w cml2LT5jZGNsay50YWJsZSA9IGljbF9jZGNsa190YWJsZTsKPiAgCQlkZXZfcHJpdi0+Y2RjbGsu dGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaWNsX2NkY2xrX3RhYmxlKTsKPiAgCX0gZWxzZSBpZiAo SVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpIHsKPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5zZXRfY2Rj bGsgPSBjbmxfc2V0X2NkY2xrOwo+ICsJCWRldl9wcml2LT5kaXNwbGF5LnNldF9jZGNsayA9IGJ4 dF9zZXRfY2RjbGs7Cj4gIAkJZGV2X3ByaXYtPmRpc3BsYXkubW9kZXNldF9jYWxjX2NkY2xrID0g Y25sX21vZGVzZXRfY2FsY19jZGNsazsKPiAgCQlkZXZfcHJpdi0+Y2RjbGsudGFibGUgPSBjbmxf Y2RjbGtfdGFibGU7Cj4gIAkJZGV2X3ByaXYtPmNkY2xrLnRhYmxlX3NpemUgPSBBUlJBWV9TSVpF KGNubF9jZGNsa190YWJsZSk7Cj4gLS0gCj4gMi4yMC4xCgotLSAKVmlsbGUgU3lyasOkbMOkCklu dGVsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==