From mboxrd@z Thu Jan 1 00:00:00 1970 From: Damien Lespiau Subject: [PATCH 66/89 v9] drm/i915/skl: Implementation of SKL DPLL programming Date: Tue, 4 Nov 2014 16:26:18 +0000 Message-ID: <1415118378-25355-1-git-send-email-damien.lespiau@intel.com> References: 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 466EC6E5A1 for ; Tue, 4 Nov 2014 08:26:21 -0800 (PST) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogU2F0aGVlc2hha3Jpc2huYSBNIDxzYXRoZWVzaGFrcmlzaG5hLm1AaW50ZWwuY29tPgoK VGhpcyBwYXRjaCBpbXBsZW1lbnRzIFNLTCBEUExMIHByb2dyYW1taW5nIHRoYXQgaW5jbHVkZXM6 CiAgICAgICAgLSBEUExMIGFsbG9jYXRpb24KICAgICAgICAtIHdpZGUgcmFuZ2UgUExMIGNhbGN1 bGF0aW9uIGFuZCBwcm9ncmFtbWluZwogICAgICAgIC0gRFAgbGluayByYXRlIHByb2dyYW1taW5n CiAgICAgICAgLSBEREkgdG8gRFBMTCBtYXBwaW5nCgp2MjogSW5jb3Jwb3JhdGVkIGZvbGxvd2lu ZyBjaGFuZ2VzCiAgICAgICAgLSBBZGRlZCB2ZnVuYyBmb3IgZnVuY3Rpb24gcmVxdWlyZWQgb3V0 c2lkZQogICAgICAgIC0gRml4ZWQgbXVsdGlwbGUgY29tbWVudHMgaW4gV1JQTEwgY2FsY3VsYXRp b24KCnYzOiAtIEZpeCB0aGUgRENPIGNvbXB1dGF0aW9uCiAgICAtIE1vdmUgdGhlIGluaXRpYWxp emF0aW9uIHVwIHRvIG5vdCBjbG9iYmVyIHRoZSBjb21wdXRlZCB2YWx1ZXMKICAgIC0gVXNlIHRo ZSBjb3JyZWN0IG1hY3JvIGZvciBEUCBsaW5rIHJhdGUgcHJvZ3JhbW1pbmcuCiAgICAtIFVzZSB3 YWl0X2ZvcigpIHRvIHdhaXQgZm9yIHRoZSBQTEwgbG9ja2VkIGJpdAoKdjQ6IFJlYmFzZSBvbiB0 b3Agb2YgbmlndGhseSAoRGFtaWVuKQoKdjU6IEEgZmV3IGNvZGUgY2xlYW51cHMgaW4gdGhlIFdS UExMIGNvbXB1dGF0aW9uIChEYW1pZW4pCiAgICAtIFVzZSB1aW50MzJfdCB3aGVuIHBvc3NpYmxl CiAgICAtIFVzZSBhYnNfZGlmZigpIGluIHRoZSBXUlBMTCBjb21wdXRhdGlvbgogICAgLSBNYWtl IHRoZSA2NGJpdHMgZGl2aXNpb25zIHVzZSBkaXY2NF91NjQoKQogICAgLSBGaXggdHlwbyBpbiBk Y29fY2VudHJhbF9mZXFfZGV2aWF0aW9uIChmcmVxKQogICAgLSBSZXBsYWNlIHRoZSBjaGFpbiBv ZiBicmVha3Mgd2l0aCBhIGdvdG8KCnY2OiBQb3J0IG9mIHRoZSBwYXRjaCB0byB3b3JrIG9uIHRv cCBvZiB0aGUgc2hhcmVkIERQTExzIChEYW1pZW4pCnY3OiBEb24ndCB0cnkgdG8gaGFuZGxlIGVE UCBpbiBkZGlfcGxsX3NlbGVjdCgpIChEYW1pZW4pCnY4OiBNb2RpZmllZCBhcyBwZXIgcmV2aWV3 IGNvbW1lbnRzIGZyb20gUGF1bG8gKFNhdGhlZXNoKQp2OTogUmViYXNlIG9uIHRvcCBvZiBBbmRl cidzIGNsb2NrIGNvbXB1dGF0aW9uIHN0YWdpbmcgd29yayBmb3IgYXRvbWljIChEYW1pZW4pCgpT aWduZWQtb2ZmLWJ5OiBTYXRoZWVzaGFrcmlzaG5hIE0gPHNhdGhlZXNoYWtyaXNobmEubUBpbnRl bC5jb20+ICh2MykKU2lnbmVkLW9mZi1ieTogRGFtaWVuIExlc3BpYXUgPGRhbWllbi5sZXNwaWF1 QGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyB8IDIyNiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAy MjUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RkaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMK aW5kZXggZThjZGMxYS4uOWUxZjRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGRpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKQEAgLTk1 NCw2ICs5NTQsMjI2IEBAIGhzd19kZGlfcGxsX3NlbGVjdChzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0YywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RydWN0IHNrbF93cnBsbF9wYXJhbXMgewor CXVpbnQzMl90ICAgICAgICBkY29fZnJhY3Rpb247CisJdWludDMyX3QgICAgICAgIGRjb19pbnRl Z2VyOworCXVpbnQzMl90ICAgICAgICBxZGl2X3JhdGlvOworCXVpbnQzMl90ICAgICAgICBxZGl2 X21vZGU7CisJdWludDMyX3QgICAgICAgIGtkaXY7CisJdWludDMyX3QgICAgICAgIHBkaXY7CisJ dWludDMyX3QgICAgICAgIGNlbnRyYWxfZnJlcTsKK307CisKK3N0YXRpYyB2b2lkCitza2xfZGRp X2NhbGN1bGF0ZV93cnBsbChpbnQgY2xvY2sgLyogaW4gSHogKi8sCisJCQlzdHJ1Y3Qgc2tsX3dy cGxsX3BhcmFtcyAqd3JwbGxfcGFyYW1zKQoreworCXVpbnQ2NF90IGFmZV9jbG9jayA9IGNsb2Nr ICogNTsgLyogQUZFIENsb2NrIGlzIDV4IFBpeGVsIGNsb2NrICovCisJdWludDY0X3QgZGNvX2Nl bnRyYWxfZnJlcVszXSA9IHs4NDAwMDAwMDAwLCA5MDAwMDAwMDAwLCA5NjAwMDAwMDAwfTsKKwl1 aW50MzJfdCBtaW5fZGNvX2RldmlhdGlvbiA9IDQwMDsKKwl1aW50MzJfdCBtaW5fZGNvX2luZGV4 ID0gMzsKKwl1aW50MzJfdCBQMFs0XSA9IHsxLCAyLCAzLCA3fTsKKwl1aW50MzJfdCBQMls0XSA9 IHsxLCAyLCAzLCA1fTsKKwlib29sIGZvdW5kID0gZmFsc2U7CisJdWludDMyX3QgY2FuZGlkYXRl X3AgPSAwOworCXVpbnQzMl90IGNhbmRpZGF0ZV9wMFszXSA9IHswfSwgY2FuZGlkYXRlX3AxWzNd ID0gezB9OworCXVpbnQzMl90IGNhbmRpZGF0ZV9wMlszXSA9IHswfTsKKwl1aW50MzJfdCBkY29f Y2VudHJhbF9mcmVxX2RldmlhdGlvblszXTsKKwl1aW50MzJfdCBpLCBQMSwgaywgZGNvX2NvdW50 OworCWJvb2wgcmV0cnlfd2l0aF9vZGQgPSBmYWxzZTsKKwl1aW50NjRfdCBkY29fZnJlcTsKKwor CS8qIERldGVybWluZSBQMCwgUDEgb3IgUDIgKi8KKwlmb3IgKGRjb19jb3VudCA9IDA7IGRjb19j b3VudCA8IDM7IGRjb19jb3VudCsrKSB7CisJCWZvdW5kID0gZmFsc2U7CisJCWNhbmRpZGF0ZV9w ID0KKwkJCWRpdjY0X3U2NChkY29fY2VudHJhbF9mcmVxW2Rjb19jb3VudF0sIGFmZV9jbG9jayk7 CisJCWlmIChyZXRyeV93aXRoX29kZCA9PSBmYWxzZSkKKwkJCWNhbmRpZGF0ZV9wID0gKGNhbmRp ZGF0ZV9wICUgMiA9PSAwID8KKwkJCQljYW5kaWRhdGVfcCA6IGNhbmRpZGF0ZV9wICsgMSk7CisK KwkJZm9yIChQMSA9IDE7IFAxIDwgY2FuZGlkYXRlX3A7IFAxKyspIHsKKwkJCWZvciAoaSA9IDA7 IGkgPCA0OyBpKyspIHsKKwkJCQlpZiAoIShQMFtpXSAhPSAxIHx8IFAxID09IDEpKQorCQkJCQlj b250aW51ZTsKKworCQkJCWZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKKwkJCQkJaWYgKFAxICE9 IDEgJiYgUDJba10gIT0gMikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCWlmIChjYW5kaWRhdGVf cCA9PSBQMFtpXSAqIFAxICogUDJba10pIHsKKwkJCQkJCS8qIEZvdW5kIHBvc3NpYmxlIFAwLCBQ MSwgUDIgKi8KKwkJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJCWNhbmRpZGF0ZV9wMFtkY29fY291 bnRdID0gUDBbaV07CisJCQkJCQljYW5kaWRhdGVfcDFbZGNvX2NvdW50XSA9IFAxOworCQkJCQkJ Y2FuZGlkYXRlX3AyW2Rjb19jb3VudF0gPSBQMltrXTsKKwkJCQkJCWdvdG8gZm91bmQ7CisJCQkJ CX0KKworCQkJCX0KKwkJCX0KKwkJfQorCitmb3VuZDoKKwkJaWYgKGZvdW5kKSB7CisJCQlkY29f Y2VudHJhbF9mcmVxX2RldmlhdGlvbltkY29fY291bnRdID0KKwkJCQlkaXY2NF91NjQoMTAwMDAg KgorCQkJCQkgIGFic19kaWZmKChjYW5kaWRhdGVfcCAqIGFmZV9jbG9jayksCisJCQkJCQkgICBk Y29fY2VudHJhbF9mcmVxW2Rjb19jb3VudF0pLAorCQkJCQkgIGRjb19jZW50cmFsX2ZyZXFbZGNv X2NvdW50XSk7CisKKwkJCWlmIChkY29fY2VudHJhbF9mcmVxX2RldmlhdGlvbltkY29fY291bnRd IDwKKwkJCQltaW5fZGNvX2RldmlhdGlvbikgeworCQkJCW1pbl9kY29fZGV2aWF0aW9uID0KKwkJ CQkJZGNvX2NlbnRyYWxfZnJlcV9kZXZpYXRpb25bZGNvX2NvdW50XTsKKwkJCQltaW5fZGNvX2lu ZGV4ID0gZGNvX2NvdW50OworCQkJfQorCQl9CisKKwkJaWYgKG1pbl9kY29faW5kZXggPiAyICYm IGRjb19jb3VudCA9PSAyKSB7CisJCQlyZXRyeV93aXRoX29kZCA9IHRydWU7CisJCQlkY29fY291 bnQgPSAwOworCQl9CisJfQorCisJaWYgKG1pbl9kY29faW5kZXggPiAyKSB7CisJCVdBUk4oMSwg Ik5vIHZhbGlkIHZhbHVlcyBmb3VuZCBmb3IgdGhlIGdpdmVuIHBpeGVsIGNsb2NrXG4iKTsKKwl9 IGVsc2UgeworCQkgd3JwbGxfcGFyYW1zLT5jZW50cmFsX2ZyZXEgPSBkY29fY2VudHJhbF9mcmVx W21pbl9kY29faW5kZXhdOworCisJCSBzd2l0Y2ggKGRjb19jZW50cmFsX2ZyZXFbbWluX2Rjb19p bmRleF0pIHsKKwkJIGNhc2UgOTYwMDAwMDAwMDoKKwkJCXdycGxsX3BhcmFtcy0+Y2VudHJhbF9m cmVxID0gMDsKKwkJCWJyZWFrOworCQkgY2FzZSA5MDAwMDAwMDAwOgorCQkJd3JwbGxfcGFyYW1z LT5jZW50cmFsX2ZyZXEgPSAxOworCQkJYnJlYWs7CisJCSBjYXNlIDg0MDAwMDAwMDA6CisJCQl3 cnBsbF9wYXJhbXMtPmNlbnRyYWxfZnJlcSA9IDM7CisJCSB9CisKKwkJIHN3aXRjaCAoY2FuZGlk YXRlX3AwW21pbl9kY29faW5kZXhdKSB7CisJCSBjYXNlIDE6CisJCQl3cnBsbF9wYXJhbXMtPnBk aXYgPSAwOworCQkJYnJlYWs7CisJCSBjYXNlIDI6CisJCQl3cnBsbF9wYXJhbXMtPnBkaXYgPSAx OworCQkJYnJlYWs7CisJCSBjYXNlIDM6CisJCQl3cnBsbF9wYXJhbXMtPnBkaXYgPSAyOworCQkJ YnJlYWs7CisJCSBjYXNlIDc6CisJCQl3cnBsbF9wYXJhbXMtPnBkaXYgPSA0OworCQkJYnJlYWs7 CisJCSBkZWZhdWx0OgorCQkJV0FSTigxLCAiSW5jb3JyZWN0IFBEaXZcbiIpOworCQkgfQorCisJ CSBzd2l0Y2ggKGNhbmRpZGF0ZV9wMlttaW5fZGNvX2luZGV4XSkgeworCQkgY2FzZSA1OgorCQkJ d3JwbGxfcGFyYW1zLT5rZGl2ID0gMDsKKwkJCWJyZWFrOworCQkgY2FzZSAyOgorCQkJd3JwbGxf cGFyYW1zLT5rZGl2ID0gMTsKKwkJCWJyZWFrOworCQkgY2FzZSAzOgorCQkJd3JwbGxfcGFyYW1z LT5rZGl2ID0gMjsKKwkJCWJyZWFrOworCQkgY2FzZSAxOgorCQkJd3JwbGxfcGFyYW1zLT5rZGl2 ID0gMzsKKwkJCWJyZWFrOworCQkgZGVmYXVsdDoKKwkJCVdBUk4oMSwgIkluY29ycmVjdCBLRGl2 XG4iKTsKKwkJIH0KKworCQkgd3JwbGxfcGFyYW1zLT5xZGl2X3JhdGlvID0gY2FuZGlkYXRlX3Ax W21pbl9kY29faW5kZXhdOworCQkgd3JwbGxfcGFyYW1zLT5xZGl2X21vZGUgPQorCQkJKHdycGxs X3BhcmFtcy0+cWRpdl9yYXRpbyA9PSAxKSA/IDAgOiAxOworCisJCSBkY29fZnJlcSA9IGNhbmRp ZGF0ZV9wMFttaW5fZGNvX2luZGV4XSAqCisJCQkgY2FuZGlkYXRlX3AxW21pbl9kY29faW5kZXhd ICoKKwkJCSBjYW5kaWRhdGVfcDJbbWluX2Rjb19pbmRleF0gKiBhZmVfY2xvY2s7CisKKwkJLyoK KwkJKiBJbnRlcm1lZGlhdGUgdmFsdWVzIGFyZSBpbiBIei4KKwkJKiBEaXZpZGUgYnkgTUh6IHRv IG1hdGNoIGJzZXBjCisJCSovCisJCSB3cnBsbF9wYXJhbXMtPmRjb19pbnRlZ2VyID0gZGl2X3U2 NChkY29fZnJlcSwgKDI0ICogTUh6KDEpKSk7CisJCSB3cnBsbF9wYXJhbXMtPmRjb19mcmFjdGlv biA9CisJCQkgZGl2X3U2NCgoKGRpdl91NjQoZGNvX2ZyZXEsIDI0KSAtCisJCQkJICAgd3JwbGxf cGFyYW1zLT5kY29faW50ZWdlciAqIE1IeigxKSkgKiAweDgwMDApLCBNSHooMSkpOworCisJfQor fQorCisKK3N0YXRpYyBib29sCitza2xfZGRpX3BsbF9zZWxlY3Qoc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGMsCisJCSAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyLAor CQkgICBpbnQgY2xvY2spCit7CisJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGw7CisJdWlu dDMyX3QgY3RybDEsIGNmZ2NyMSwgY2ZnY3IyOworCisJLyoKKwkgKiBTZWUgY29tbWVudCBpbiBp bnRlbF9kcGxsX2h3X3N0YXRlIHRvIHVuZGVyc3RhbmQgd2h5IHdlIGFsd2F5cyB1c2UgMAorCSAq IGFzIHRoZSBEUExMIGlkIGluIHRoaXMgZnVuY3Rpb24uCisJICovCisKKwljdHJsMSA9IERQTExf Q1RSTDFfT1ZFUlJJREUoMCk7CisKKwlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9P VVRQVVRfSERNSSkgeworCQlzdHJ1Y3Qgc2tsX3dycGxsX3BhcmFtcyB3cnBsbF9wYXJhbXMgPSB7 IDAsIH07CisKKwkJY3RybDEgfD0gRFBMTF9DVFJMMV9IRE1JX01PREUoMCk7CisKKwkJc2tsX2Rk aV9jYWxjdWxhdGVfd3JwbGwoY2xvY2sgKiAxMDAwLCAmd3JwbGxfcGFyYW1zKTsKKworCQljZmdj cjEgPSBEUExMX0NGR0NSMV9GUkVRX0VOQUJMRSB8CisJCQkgRFBMTF9DRkdDUjFfRENPX0ZSQUNU SU9OKHdycGxsX3BhcmFtcy5kY29fZnJhY3Rpb24pIHwKKwkJCSB3cnBsbF9wYXJhbXMuZGNvX2lu dGVnZXI7CisKKwkJY2ZnY3IyID0gRFBMTF9DRkdDUjJfUURJVl9SQVRJTyh3cnBsbF9wYXJhbXMu cWRpdl9yYXRpbykgfAorCQkJIERQTExfQ0ZHQ1IyX1FESVZfTU9ERSh3cnBsbF9wYXJhbXMucWRp dl9tb2RlKSB8CisJCQkgRFBMTF9DRkdDUjJfS0RJVih3cnBsbF9wYXJhbXMua2RpdikgfAorCQkJ IERQTExfQ0ZHQ1IyX1BESVYod3JwbGxfcGFyYW1zLnBkaXYpIHwKKwkJCSB3cnBsbF9wYXJhbXMu Y2VudHJhbF9mcmVxOworCX0gZWxzZSBpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9P VVRQVVRfRElTUExBWVBPUlQpIHsKKwkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmlu dGVsX2VuY29kZXItPmJhc2U7CisJCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9f aW50ZWxfZHAoZW5jb2Rlcik7CisKKwkJc3dpdGNoIChpbnRlbF9kcC0+bGlua19idykgeworCQlj YXNlIERQX0xJTktfQldfMV82MjoKKwkJCWN0cmwxIHw9IERQTExfQ1JUTDFfTElOS19SQVRFKERQ TExfQ1JUTDFfTElOS19SQVRFXzgxMCwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBEUF9MSU5LX0JX XzJfNzoKKwkJCWN0cmwxIHw9IERQTExfQ1JUTDFfTElOS19SQVRFKERQTExfQ1JUTDFfTElOS19S QVRFXzEzNTAsIDApOworCQkJYnJlYWs7CisJCWNhc2UgRFBfTElOS19CV181XzQ6CisJCQljdHJs MSB8PSBEUExMX0NSVEwxX0xJTktfUkFURShEUExMX0NSVEwxX0xJTktfUkFURV8yNzAwLCAwKTsK KwkJCWJyZWFrOworCQl9CisKKwkJY2ZnY3IxID0gY2ZnY3IyID0gMDsKKwl9IGVsc2UgLyogZURQ ICovCisJCXJldHVybiB0cnVlOworCisJaW50ZWxfY3J0Yy0+bmV3X2NvbmZpZy0+ZHBsbF9od19z dGF0ZS5jdHJsMSA9IGN0cmwxOworCWludGVsX2NydGMtPm5ld19jb25maWctPmRwbGxfaHdfc3Rh dGUuY2ZnY3IxID0gY2ZnY3IxOworCWludGVsX2NydGMtPm5ld19jb25maWctPmRwbGxfaHdfc3Rh dGUuY2ZnY3IyID0gY2ZnY3IyOworCisJcGxsID0gaW50ZWxfZ2V0X3NoYXJlZF9kcGxsKGludGVs X2NydGMpOworCWlmIChwbGwgPT0gTlVMTCkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJmYWlsZWQg dG8gZmluZCBQTEwgZm9yIHBpcGUgJWNcbiIsCisJCQkJIHBpcGVfbmFtZShpbnRlbF9jcnRjLT5w aXBlKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBzaGFyZWQgRFBMTCBpZCAwIGlzIERQ TEwgMSAqLworCWludGVsX2NydGMtPm5ld19jb25maWctPmRkaV9wbGxfc2VsID0gcGxsLT5pZCAr IDE7CisKKwlyZXR1cm4gdHJ1ZTsKK30KIAogLyoKICAqIFRyaWVzIHRvIGZpbmQgYSAqc2hhcmVk KiBQTEwgZm9yIHRoZSBDUlRDIGFuZCBzdG9yZSBpdCBpbgpAQCAtOTY0LDExICsxMTg0LDE1IEBA IGhzd19kZGlfcGxsX3NlbGVjdChzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKICAqLwog Ym9vbCBpbnRlbF9kZGlfcGxsX3NlbGVjdChzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YykK IHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7CiAJc3Ry dWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPQogCQlpbnRlbF9kZGlfZ2V0X2NydGNf bmV3X2VuY29kZXIoaW50ZWxfY3J0Yyk7CiAJaW50IGNsb2NrID0gaW50ZWxfY3J0Yy0+bmV3X2Nv bmZpZy0+cG9ydF9jbG9jazsKIAotCXJldHVybiBoc3dfZGRpX3BsbF9zZWxlY3QoaW50ZWxfY3J0 YywgaW50ZWxfZW5jb2RlciwgY2xvY2spOworCWlmIChJU19TS1lMQUtFKGRldikpCisJCXJldHVy biBza2xfZGRpX3BsbF9zZWxlY3QoaW50ZWxfY3J0YywgaW50ZWxfZW5jb2RlciwgY2xvY2spOwor CWVsc2UKKwkJcmV0dXJuIGhzd19kZGlfcGxsX3NlbGVjdChpbnRlbF9jcnRjLCBpbnRlbF9lbmNv ZGVyLCBjbG9jayk7CiB9CiAKIHZvaWQgaW50ZWxfZGRpX3NldF9waXBlX3NldHRpbmdzKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKLS0gCjEuOC4zLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==