From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: [PATCH 34/67] drm/i915/cnl: Initialize PLLs Date: Thu, 6 Apr 2017 12:15:30 -0700 Message-ID: <1491506163-14587-34-git-send-email-rodrigo.vivi@intel.com> References: <1491506163-14587-1-git-send-email-rodrigo.vivi@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 ESMTPS id 0789B6E9F5 for ; Thu, 6 Apr 2017 19:16:05 +0000 (UTC) In-Reply-To: <1491506163-14587-1-git-send-email-rodrigo.vivi@intel.com> 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 Cc: Paulo Zanoni , Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org QWx0aG91Z2ggQ05MIGZvbGxvd3MgUExMIGluaXRpYWxpemF0aW9uIG1vcmUgbGlrZSBTa3lsYWtl CnRoYW4gQnJveHRvbiB3ZSBoYXZlIGEgY29tcGxldGVseSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRp b24Kc2VxdWVuY2UgYW5kIHJlZ2lzdGVycyB1c2VkLgoKT25lIGJpZyBkaWZmZXJlbmNlIGZyb20g U0tMIGlzIHRoYXQgQ0RDTEsgUExMIGlzIG5vdwpleGNsdXNpdmUgKEFEUExMKSBhbmQgZm9yIERE SXMgYW5kIE1JUEkgd2UgbmVlZCB0byB1c2UKREZHUExMcyAwLCAxIG9yIDIuCgp2MjogQWNjZXB0 IGFsbCBBbmRlcidzIHN1Z2dlc3Rpb25zIGFuZCBmaXhlczoKICAgIC0gUmVnaXN0ZXJzIGFuZCBi aXRzIG5hbWVzIHByZWZpeAogICAgLSBHcm91cCBwbGwgZnVuY3Rpb25zCiAgICAtIGJpdHMgbWFz a3MgZml4ZXMKICAgIC0gcmVtb3ZlIHJlYWQgYW5kIG1vZGlmeSBvbiBjZmdjcjEKICAgIC0gZml4 IGNmZ2NyMCBzZXR1cAp2MzogU2V0IFNTQ19FTkFCTEUgZm9yIERQLgogICAgRml4IEhETUlfTU9E RSBjZmdjcjAuCiAgICBBdm9pZCB0b3VjaCBjZmdjcjAgb24gRFAuCiAgICBBZGQgbWlzc2VkIGVs c2Ugb24gZHBsbF9tZ3IgZGVmaW5pdGlvbiBzbyB3ZSB1c2UgY25sIG9uZSwgbm90IGhzdy4KdjM6 IENlbnRyYSBmcmVxIHNob3VsZCBiZSBhbHdheXMgc2V0IHRvIGRlZmF1bHQgYW5kIGNoYW5nZSBi aXRzCiAgICBkZWZpbml0aW9ucyB0byAoMSA8PCAxKSBpbnN0ZWFkIG9mICgxPDwxKS4gKGJ5IFBh dWxvKQoKQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgpDYzogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IEthaG9sYSwg TWlrYSA8bWlrYS5rYWhvbGFAaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogQW5kZXIgQ29uc2VsdmFu IERlIE9saXZlaXJhIDxhbmRlci5jb25zZWx2YW4uZGUub2xpdmVpcmFAaW50ZWwuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Ci0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICB8ICA0OCArKysrKysKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RwbGxfbWdyLmMgfCAzMDAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBsbF9tZ3IuaCB8ICAg NCArCiAzIGZpbGVzIGNoYW5nZWQsIDM1MCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IGRjYjhlMjEuLmMzOGMxZmQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZWcuaApAQCAtNTgsNiArNTgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9t bWlvX3JlZ192YWxpZChpOTE1X3JlZ190IHJlZykKICNkZWZpbmUgX01NSU9fVFJBTlModHJhbiwg YSwgYikgX01NSU8oX1RSQU5TKHRyYW4sIGEsIGIpKQogI2RlZmluZSBfUE9SVChwb3J0LCBhLCBi KSAoKGEpICsgKHBvcnQpKigoYiktKGEpKSkKICNkZWZpbmUgX01NSU9fUE9SVChwb3J0LCBhLCBi KSBfTU1JTyhfUE9SVChwb3J0LCBhLCBiKSkKKyNkZWZpbmUgX1BMTChwbGwsIGEsIGIpICgoYSkg KyAocGxsKSooKGIpLShhKSkpCisjZGVmaW5lIF9NTUlPX1BMTChwbGwsIGEsIGIpIF9NTUlPKF9Q TEwocGxsLCBhLCBiKSkKICNkZWZpbmUgX1BJUEUzKHBpcGUsIC4uLikgX1BJQ0socGlwZSwgX19W QV9BUkdTX18pCiAjZGVmaW5lIF9NTUlPX1BJUEUzKHBpcGUsIGEsIGIsIGMpIF9NTUlPKF9QSVBF MyhwaXBlLCBhLCBiLCBjKSkKICNkZWZpbmUgX1BPUlQzKHBvcnQsIC4uLikgX1BJQ0socG9ydCwg X19WQV9BUkdTX18pCkBAIC04MTU5LDYgKzgxNjEsNTIgQEAgZW51bSB7CiAjZGVmaW5lICBEUENM S0FfQ0ZHQ1IwX0RESV9DTEtfU0VMX1NISUZUKHBvcnQpCSgocG9ydCkqMikKICNkZWZpbmUgIERQ Q0xLQV9DRkdDUjBfRERJX0NMS19TRUwocGxsLCBwb3J0KQkoKHBsbCkgPDwgKChwb3J0KSoyKSkK IAorLyogQ05MIFBMTCAqLworI2RlZmluZSBEUExMMF9FTkFCTEUJCTB4NDYwMTAKKyNkZWZpbmUg RFBMTDFfRU5BQkxFCQkweDQ2MDE0CisjZGVmaW5lICBQTExfRU5BQkxFCQkoMSA8PCAzMSkKKyNk ZWZpbmUgIFBMTF9MT0NLCQkoMSA8PCAzMCkKKyNkZWZpbmUgIFBMTF9QT1dFUl9FTkFCTEUJKDEg PDwgMjcpCisjZGVmaW5lICBQTExfUE9XRVJfU1RBVEUJKDEgPDwgMjYpCisjZGVmaW5lIENOTF9E UExMX0VOQUJMRShwbGwpCV9NTUlPX1BMTChwbGwsIERQTEwwX0VOQUJMRSwgRFBMTDFfRU5BQkxF KQorCisjZGVmaW5lIF9DTkxfRFBMTDBfQ0ZHQ1IwCQkweDZDMDAwCisjZGVmaW5lIF9DTkxfRFBM TDFfQ0ZHQ1IwCQkweDZDMDgwCisjZGVmaW5lICBEUExMX0NGR0NSMF9IRE1JX01PREUJCSgxIDw8 IDMwKQorI2RlZmluZSAgRFBMTF9DRkdDUjBfU1NDX0VOQUJMRQkJKDEgPDwgMjkpCisjZGVmaW5l ICBEUExMX0NGR0NSMF9MSU5LX1JBVEVfTUFTSwkoMHhmIDw8IDI1KQorI2RlZmluZSAgRFBMTF9D RkdDUjBfTElOS19SQVRFXzI3MDAJKDAgPDwgMjUpCisjZGVmaW5lICBEUExMX0NGR0NSMF9MSU5L X1JBVEVfMTM1MAkoMSA8PCAyNSkKKyNkZWZpbmUgIERQTExfQ0ZHQ1IwX0xJTktfUkFURV84MTAJ KDIgPDwgMjUpCisjZGVmaW5lICBEUExMX0NGR0NSMF9MSU5LX1JBVEVfMTYyMAkoMyA8PCAyNSkK KyNkZWZpbmUgIERQTExfQ0ZHQ1IwX0xJTktfUkFURV8xMDgwCSg0IDw8IDI1KQorI2RlZmluZSAg RFBMTF9DRkdDUjBfTElOS19SQVRFXzIxNjAJKDUgPDwgMjUpCisjZGVmaW5lICBEUExMX0NGR0NS MF9MSU5LX1JBVEVfMzI0MAkoNiA8PCAyNSkKKyNkZWZpbmUgIERQTExfQ0ZHQ1IwX0xJTktfUkFU RV80MDUwCSg3IDw8IDI1KQorI2RlZmluZSAgRFBMTF9DRkdDUjBfRENPX0ZSQUNUSU9OX01BU0sJ KDB4N2ZmZiA8PCAxMCkKKyNkZWZpbmUgIERQTExfQ0ZHQ1IwX0RDT19GUkFDVElPTih4KQkoKHgp IDw8IDEwKQorI2RlZmluZSAgRFBMTF9DRkdDUjBfRENPX0lOVEVHRVJfTUFTSwkoMHgzZmYpCisj ZGVmaW5lIENOTF9EUExMX0NGR0NSMChwbGwpCQlfTU1JT19QTEwocGxsLCBfQ05MX0RQTEwwX0NG R0NSMCwgX0NOTF9EUExMMV9DRkdDUjApCisKKyNkZWZpbmUgX0NOTF9EUExMMF9DRkdDUjEJCTB4 NkMwMDQKKyNkZWZpbmUgX0NOTF9EUExMMV9DRkdDUjEJCTB4NkMwODQKKyNkZWZpbmUgIERQTExf Q0ZHQ1IxX1FESVZfUkFUSU9fTUFTSwkoMHhmZiA8PCAxMCkKKyNkZWZpbmUgIERQTExfQ0ZHQ1Ix X1FESVZfUkFUSU8oeCkJKCh4KSA8PCAxMCkKKyNkZWZpbmUgIERQTExfQ0ZHQ1IxX1FESVZfTU9E RSh4KQkoKHgpIDw8IDkpCisjZGVmaW5lICBEUExMX0NGR0NSMV9LRElWX01BU0sJCSg3IDw8IDYp CisjZGVmaW5lICBEUExMX0NGR0NSMV9LRElWKHgpCQkoKHgpIDw8IDYpCisjZGVmaW5lICBEUExM X0NGR0NSMV9LRElWXzEJCSgxIDw8IDYpCisjZGVmaW5lICBEUExMX0NGR0NSMV9LRElWXzIJCSgy IDw8IDYpCisjZGVmaW5lICBEUExMX0NGR0NSMV9LRElWXzQJCSg0IDw8IDYpCisjZGVmaW5lICBE UExMX0NGR0NSMV9QRElWX01BU0sJCSgweGYgPDwgMikKKyNkZWZpbmUgIERQTExfQ0ZHQ1IxX1BE SVYoeCkJCSgoeCkgPDwgMikKKyNkZWZpbmUgIERQTExfQ0ZHQ1IxX1BESVZfMgkJKDEgPDwgMikK KyNkZWZpbmUgIERQTExfQ0ZHQ1IxX1BESVZfMwkJKDIgPDwgMikKKyNkZWZpbmUgIERQTExfQ0ZH Q1IxX1BESVZfNQkJKDQgPDwgMikKKyNkZWZpbmUgIERQTExfQ0ZHQ1IxX1BESVZfNwkJKDggPDwg MikKKyNkZWZpbmUgIERQTExfQ0ZHQ1IxX0NFTlRSQUxfRlJFUQkoMyA8PCAwKQorI2RlZmluZSBD TkxfRFBMTF9DRkdDUjEocGxsKQkJX01NSU9fUExMKHBsbCwgX0NOTF9EUExMMF9DRkdDUjEsIF9D TkxfRFBMTDFfQ0ZHQ1IxKQorCiAvKiBCWFQgZGlzcGxheSBlbmdpbmUgUExMICovCiAjZGVmaW5l IEJYVF9ERV9QTExfQ1RMCQkJX01NSU8oMHg2ZDAwMCkKICNkZWZpbmUgICBCWFRfREVfUExMX1JB VElPKHgpCQkoeCkJLyogezYwLDY1LDEwMH0gKiAxOS4yTUh6ICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcGxsX21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHBsbF9tZ3IuYwppbmRleCBiNGRlNjMyLi45MDNjMzhkIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcGxsX21nci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RwbGxfbWdyLmMKQEAgLTEzMjEsNyArMTMyMSw2IEBAIHN0YXRpYyBib29sIHNr bF9kZGlfaGRtaV9wbGxfZGl2aWRlcnMoc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJcmV0dXJu IHRydWU7CiB9CiAKLQogc3RhdGljIGJvb2wKIHNrbF9kZGlfZHBfc2V0X2RwbGxfaHdfc3RhdGUo aW50IGNsb2NrLAogCQkJICAgICBzdHJ1Y3QgaW50ZWxfZHBsbF9od19zdGF0ZSAqZHBsbF9od19z dGF0ZSkKQEAgLTE5NjcsNiArMTk2NiwzMDEgQEAgc3RydWN0IGludGVsX2RwbGxfbWdyIHsKIAku ZHVtcF9od19zdGF0ZSA9IGJ4dF9kdW1wX2h3X3N0YXRlLAogfTsKIAorc3RhdGljIHZvaWQgY25s X2RkaV9wbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAg ICAgICBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCkKK3sKKwl1aW50MzJfdCB2YWw7CisK KwkvKiAxLiBFbmFibGUgRFBMTCBwb3dlciBpbiBEUExMX0VOQUJMRS4gKi8KKwl2YWwgPSBJOTE1 X1JFQUQoQ05MX0RQTExfRU5BQkxFKHBsbC0+aWQpKTsKKwl2YWwgfD0gUExMX1BPV0VSX0VOQUJM RTsKKwlJOTE1X1dSSVRFKENOTF9EUExMX0VOQUJMRShwbGwtPmlkKSwgdmFsKTsKKworCS8qIDIu IFdhaXQgZm9yIERQTEwgcG93ZXIgc3RhdGUgZW5hYmxlZCBpbiBEUExMX0VOQUJMRS4gKi8KKwlp ZiAoaW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsCisJCQkJICAgIENOTF9EUExMX0VO QUJMRShwbGwtPmlkKSwKKwkJCQkgICAgUExMX1BPV0VSX1NUQVRFLAorCQkJCSAgICBQTExfUE9X RVJfU1RBVEUsCisJCQkJICAgIDUpKQorCQlEUk1fRVJST1IoIlBMTCAlZCBQb3dlciBub3QgZW5h YmxlZFxuIiwgcGxsLT5pZCk7CisKKwkvKgorCSAqIDMuIENvbmZpZ3VyZSBEUExMX0NGR0NSMCB0 byBzZXQgU1NDIGVuYWJsZS9kaXNhYmxlLAorCSAqIHNlbGVjdCBEUCBtb2RlLCBhbmQgc2V0IERQ IGxpbmsgcmF0ZS4KKwkgKi8KKwl2YWwgPSBwbGwtPnN0YXRlLmh3X3N0YXRlLmNmZ2NyMDsKKwlJ OTE1X1dSSVRFKENOTF9EUExMX0NGR0NSMChwbGwtPmlkKSwgdmFsKTsKKworCS8qIDQuIFJlYWIg YmFjayB0byBlbnN1cmUgd3JpdGVzIGNvbXBsZXRlZCAqLworCVBPU1RJTkdfUkVBRChDTkxfRFBM TF9DRkdDUjAocGxsLT5pZCkpOworCisJLyogMy4gQ29uZmlndXJlIERQTExfQ0ZHQ1IwICovCisJ LyogQXZvaWQgdG91Y2ggQ0ZHQ1IxIGlmIEhETUkgbW9kZSBpcyBub3QgZW5hYmxlZCAqLworCWlm IChwbGwtPnN0YXRlLmh3X3N0YXRlLmNmZ2NyMCAmIERQTExfQ1RSTDFfSERNSV9NT0RFKHBsbC0+ aWQpKSB7CisJCXZhbCA9IHBsbC0+c3RhdGUuaHdfc3RhdGUuY2ZnY3IxOworCQlJOTE1X1dSSVRF KENOTF9EUExMX0NGR0NSMShwbGwtPmlkKSwgdmFsKTsKKwkJLyogNC4gUmVhYiBiYWNrIHRvIGVu c3VyZSB3cml0ZXMgY29tcGxldGVkICovCisJCVBPU1RJTkdfUkVBRChDTkxfRFBMTF9DRkdDUjEo cGxsLT5pZCkpOworCX0KKworCS8qCisJICogNS4gSWYgdGhlIGZyZXF1ZW5jeSB3aWxsIHJlc3Vs dCBpbiBhIGNoYW5nZSB0byB0aGUgdm9sdGFnZQorCSAqIHJlcXVpcmVtZW50LCBmb2xsb3cgdGhl IERpc3BsYXkgVm9sdGFnZSBGcmVxdWVuY3kgU3dpdGNoaW5nCisJICogU2VxdWVuY2UgQmVmb3Jl IEZyZXF1ZW5jeSBDaGFuZ2UKKwkgKgorCSAqIEZJWE1FOiAoRFZGUykgaXMgdXNlZCB0byBhZGp1 c3QgdGhlIGRpc3BsYXkgdm9sdGFnZSB0byBtYXRjaCB0aGUKKwkgKiBkaXNwbGF5IGNsb2NrIGZy ZXF1ZW5jaWVzCisJICovCisKKwkvKiA2LiBFbmFibGUgRFBMTCBpbiBEUExMX0VOQUJMRS4gKi8K Kwl2YWwgPSBJOTE1X1JFQUQoQ05MX0RQTExfRU5BQkxFKHBsbC0+aWQpKTsKKwl2YWwgfD0gUExM X0VOQUJMRTsKKwlJOTE1X1dSSVRFKENOTF9EUExMX0VOQUJMRShwbGwtPmlkKSwgdmFsKTsKKwor CS8qIDcuIFdhaXQgZm9yIFBMTCBsb2NrIHN0YXR1cyBpbiBEUExMX0VOQUJMRS4gKi8KKwlpZiAo aW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsCisJCQkJICAgIENOTF9EUExMX0VOQUJM RShwbGwtPmlkKSwKKwkJCQkgICAgUExMX0xPQ0ssCisJCQkJICAgIFBMTF9MT0NLLAorCQkJCSAg ICA1KSkKKwkJRFJNX0VSUk9SKCJQTEwgJWQgbm90IGxvY2tlZFxuIiwgcGxsLT5pZCk7CisKKwkv KgorCSAqIDguIElmIHRoZSBmcmVxdWVuY3kgd2lsbCByZXN1bHQgaW4gYSBjaGFuZ2UgdG8gdGhl IHZvbHRhZ2UKKwkgKiByZXF1aXJlbWVudCwgZm9sbG93IHRoZSBEaXNwbGF5IFZvbHRhZ2UgRnJl cXVlbmN5IFN3aXRjaGluZworCSAqIFNlcXVlbmNlIEFmdGVyIEZyZXF1ZW5jeSBDaGFuZ2UKKwkg KgorCSAqIEZJWE1FOiAoRFZGUykgaXMgdXNlZCB0byBhZGp1c3QgdGhlIGRpc3BsYXkgdm9sdGFn ZSB0byBtYXRjaCB0aGUKKwkgKiBkaXNwbGF5IGNsb2NrIGZyZXF1ZW5jaWVzCisJICovCisKKwkv KgorCSAqIDkuIHR1cm4gb24gdGhlIGNsb2NrIGZvciB0aGUgRERJIGFuZCBtYXAgdGhlIERQTEwg dG8gdGhlIERESQorCSAqIERvbmUgYXQgaW50ZWxfZGRpX2Nsa19zZWxlY3QKKwkgKi8KK30KKwor c3RhdGljIHZvaWQgY25sX2RkaV9wbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCisJCQkJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwpCit7CisJdWludDMy X3QgdmFsOworCisJLyoKKwkgKiAxLiBDb25maWd1cmUgRFBDTEtBX0NGR0NSMCB0byB0dXJuIG9m ZiB0aGUgY2xvY2sgZm9yIHRoZSBEREkuCisJICogRG9uZSBhdCBpbnRlbF9kZGlfcG9zdF9kaXNh YmxlCisJICovCisKKwkvKgorCSAqIDIuIElmIHRoZSBmcmVxdWVuY3kgd2lsbCByZXN1bHQgaW4g YSBjaGFuZ2UgdG8gdGhlIHZvbHRhZ2UKKwkgKiByZXF1aXJlbWVudCwgZm9sbG93IHRoZSBEaXNw bGF5IFZvbHRhZ2UgRnJlcXVlbmN5IFN3aXRjaGluZworCSAqIFNlcXVlbmNlIEJlZm9yZSBGcmVx dWVuY3kgQ2hhbmdlCisJICoKKwkgKiBGSVhNRTogKERWRlMpIGlzIHVzZWQgdG8gYWRqdXN0IHRo ZSBkaXNwbGF5IHZvbHRhZ2UgdG8gbWF0Y2ggdGhlCisJICogZGlzcGxheSBjbG9jayBmcmVxdWVu Y2llcworCSAqLworCisJLyogMy4gRGlzYWJsZSBEUExMIHRocm91Z2ggRFBMTF9FTkFCTEUuICov CisJdmFsID0gSTkxNV9SRUFEKENOTF9EUExMX0VOQUJMRShwbGwtPmlkKSk7CisJdmFsICY9IH5Q TExfRU5BQkxFOworCUk5MTVfV1JJVEUoQ05MX0RQTExfRU5BQkxFKHBsbC0+aWQpLCB2YWwpOwor CisJLyogNC4gV2FpdCBmb3IgUExMIG5vdCBsb2NrZWQgc3RhdHVzIGluIERQTExfRU5BQkxFLiAq LworCWlmIChpbnRlbF93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwKKwkJCQkgICAgQ05MX0RQ TExfRU5BQkxFKHBsbC0+aWQpLAorCQkJCSAgICBQTExfTE9DSywKKwkJCQkgICAgMCwKKwkJCQkg ICAgNSkpCisJCURSTV9FUlJPUigiUExMICVkIGxvY2tlZFxuIiwgcGxsLT5pZCk7CisKKwkvKgor CSAqIDUuIElmIHRoZSBmcmVxdWVuY3kgd2lsbCByZXN1bHQgaW4gYSBjaGFuZ2UgdG8gdGhlIHZv bHRhZ2UKKwkgKiByZXF1aXJlbWVudCwgZm9sbG93IHRoZSBEaXNwbGF5IFZvbHRhZ2UgRnJlcXVl bmN5IFN3aXRjaGluZworCSAqIFNlcXVlbmNlIEFmdGVyIEZyZXF1ZW5jeSBDaGFuZ2UKKwkgKgor CSAqIEZJWE1FOiAoRFZGUykgaXMgdXNlZCB0byBhZGp1c3QgdGhlIGRpc3BsYXkgdm9sdGFnZSB0 byBtYXRjaCB0aGUKKwkgKiBkaXNwbGF5IGNsb2NrIGZyZXF1ZW5jaWVzCisJICovCisKKwkvKiA2 LiBEaXNhYmxlIERQTEwgcG93ZXIgaW4gRFBMTF9FTkFCTEUuICovCisJdmFsID0gSTkxNV9SRUFE KENOTF9EUExMX0VOQUJMRShwbGwtPmlkKSk7CisJdmFsICY9IH5QTExfUE9XRVJfRU5BQkxFOwor CUk5MTVfV1JJVEUoQ05MX0RQTExfRU5BQkxFKHBsbC0+aWQpLCB2YWwpOworCisJLyogNy4gV2Fp dCBmb3IgRFBMTCBwb3dlciBzdGF0ZSBkaXNhYmxlZCBpbiBEUExMX0VOQUJMRS4gKi8KKwlpZiAo aW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsCisJCQkJICAgIENOTF9EUExMX0VOQUJM RShwbGwtPmlkKSwKKwkJCQkgICAgUExMX1BPV0VSX1NUQVRFLAorCQkJCSAgICAwLAorCQkJCSAg ICA1KSkKKwkJRFJNX0VSUk9SKCJQTEwgJWQgUG93ZXIgbm90IGRpc2FibGVkXG4iLCBwbGwtPmlk KTsKK30KKworc3RhdGljIGJvb2wgY25sX2RkaV9wbGxfZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpbnRlbF9zaGFyZWRfZHBs bCAqcGxsLAorCQkJCSAgICAgc3RydWN0IGludGVsX2RwbGxfaHdfc3RhdGUgKmh3X3N0YXRlKQor eworCXVpbnQzMl90IHZhbDsKKwlib29sIHJldDsKKworCWlmICghaW50ZWxfZGlzcGxheV9wb3dl cl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX1BMTFMpKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlyZXQgPSBmYWxzZTsKKworCXZhbCA9IEk5MTVfUkVBRChDTkxfRFBMTF9FTkFC TEUocGxsLT5pZCkpOworCWlmICghKHZhbCAmIFBMTF9FTkFCTEUpKQorCQlnb3RvIG91dDsKKwor CXZhbCA9IEk5MTVfUkVBRChDTkxfRFBMTF9DRkdDUjAocGxsLT5pZCkpOworCWh3X3N0YXRlLT5j ZmdjcjAgPSB2YWw7CisKKwkvKiBhdm9pZCByZWFkaW5nIGJhY2sgc3RhbGUgdmFsdWVzIGlmIEhE TUkgbW9kZSBpcyBub3QgZW5hYmxlZCAqLworCWlmICh2YWwgJiBEUExMX0NGR0NSMF9IRE1JX01P REUpIHsKKwkJaHdfc3RhdGUtPmNmZ2NyMSA9IEk5MTVfUkVBRChDTkxfRFBMTF9DRkdDUjEocGxs LT5pZCkpOworCX0KKwlyZXQgPSB0cnVlOworCitvdXQ6CisJaW50ZWxfZGlzcGxheV9wb3dlcl9w dXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9QTExTKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBib29sIGNubF9kZGlfaGRtaV9wbGxfZGl2aWRlcnMoc3RydWN0IGludGVsX2NydGMgKmNy dGMsCisJCQkJICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJ ICAgICAgaW50IGNsb2NrKQoreworCXVpbnQzMl90IGNmZ2NyMCwgY2ZnY3IxOworCXN0cnVjdCBz a2xfd3JwbGxfcGFyYW1zIHdycGxsX3BhcmFtcyA9IHsgMCwgfTsKKworCWNmZ2NyMCA9IERQTExf Q0ZHQ1IwX0hETUlfTU9ERTsKKworCS8qIEZJWE1FOiBQcm9wZXIgd3JwbGwgY2FsY3VsYXRpb24g ZG9uZSBpbiBhIGZvbGxvd2luZyBwYXRjaCAqLworCXJldHVybiBmYWxzZTsKKworCWNmZ2NyMCB8 PSBEUExMX0NGR0NSMF9EQ09fRlJBQ1RJT04od3JwbGxfcGFyYW1zLmRjb19mcmFjdGlvbikgfAor CQl3cnBsbF9wYXJhbXMuZGNvX2ludGVnZXI7CisKKwljZmdjcjEgPSBEUExMX0NGR0NSMV9RRElW X1JBVElPKHdycGxsX3BhcmFtcy5xZGl2X3JhdGlvKSB8CisJCURQTExfQ0ZHQ1IxX1FESVZfTU9E RSh3cnBsbF9wYXJhbXMucWRpdl9tb2RlKSB8CisJCURQTExfQ0ZHQ1IxX0tESVYod3JwbGxfcGFy YW1zLmtkaXYpIHwKKwkJRFBMTF9DRkdDUjFfUERJVih3cnBsbF9wYXJhbXMucGRpdikgfAorCQl3 cnBsbF9wYXJhbXMuY2VudHJhbF9mcmVxIHwKKwkJRFBMTF9DRkdDUjFfQ0VOVFJBTF9GUkVROwor CisJbWVtc2V0KCZjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLCAwLAorCSAgICAgICBzaXplb2Yo Y3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZSkpOworCisJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0 ZS5jZmdjcjAgPSBjZmdjcjA7CisJY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5jZmdjcjEgPSBj ZmdjcjE7CisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY25sX2RkaV9kcF9zZXRfZHBsbF9od19z dGF0ZShpbnQgY2xvY2ssCisJCQkJICBzdHJ1Y3QgaW50ZWxfZHBsbF9od19zdGF0ZSAqZHBsbF9o d19zdGF0ZSkKK3sKKwl1aW50MzJfdCBjZmdjcjA7CisKKwljZmdjcjAgPSBEUExMX0NGR0NSMF9T U0NfRU5BQkxFOworCisJc3dpdGNoIChjbG9jayAvIDIpIHsKKwljYXNlIDgxMDAwOgorCQljZmdj cjAgfD0gRFBMTF9DRkdDUjBfTElOS19SQVRFXzgxMDsKKwkJYnJlYWs7CisJY2FzZSAxMzUwMDA6 CisJCWNmZ2NyMCB8PSBEUExMX0NGR0NSMF9MSU5LX1JBVEVfMTM1MDsKKwkJYnJlYWs7CisJY2Fz ZSAyNzAwMDA6CisJCWNmZ2NyMCB8PSBEUExMX0NGR0NSMF9MSU5LX1JBVEVfMjcwMDsKKwkJYnJl YWs7CisJCS8qIGVEUCAxLjQgcmF0ZXMgKi8KKwljYXNlIDE2MjAwMDoKKwkJY2ZnY3IwIHw9IERQ TExfQ0ZHQ1IwX0xJTktfUkFURV8xNjIwOworCQlicmVhazsKKwljYXNlIDEwODAwMDoKKwkJY2Zn Y3IwIHw9IERQTExfQ0ZHQ1IwX0xJTktfUkFURV8xMDgwOworCQlicmVhazsKKwljYXNlIDIxNjAw MDoKKwkJY2ZnY3IwIHw9IERQTExfQ0ZHQ1IwX0xJTktfUkFURV8yMTYwOworCQlicmVhazsKKwlj YXNlIDMyNDAwMDoKKwkJLyogU29tZSBTS1VzIG1heSByZXF1aXJlIGVsZXZhdGVkIEkvTyB2b2x0 YWdlIHRvIHN1cHBvcnQgdGhpcyAqLworCQljZmdjcjAgfD0gRFBMTF9DRkdDUjBfTElOS19SQVRF XzMyNDA7CisJCWJyZWFrOworCWNhc2UgNDA1MDAwOgorCQkvKiBTb21lIFNLVXMgbWF5IHJlcXVp cmUgZWxldmF0ZWQgSS9PIHZvbHRhZ2UgdG8gc3VwcG9ydCB0aGlzICovCisJCWNmZ2NyMCB8PSBE UExMX0NGR0NSMF9MSU5LX1JBVEVfNDA1MDsKKwkJYnJlYWs7CisJfQorCisJZHBsbF9od19zdGF0 ZS0+Y2ZnY3IwID0gY2ZnY3IwOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IGlu dGVsX3NoYXJlZF9kcGxsICoKK2NubF9nZXRfZHBsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yywg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJICAgICBzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbDsKKwlp bnQgY2xvY2sgPSBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrOworCWJvb2wgYnJldDsKKwlzdHJ1Y3Qg aW50ZWxfZHBsbF9od19zdGF0ZSBkcGxsX2h3X3N0YXRlOworCisJbWVtc2V0KCZkcGxsX2h3X3N0 YXRlLCAwLCBzaXplb2YoZHBsbF9od19zdGF0ZSkpOworCisJaWYgKGVuY29kZXItPnR5cGUgPT0g SU5URUxfT1VUUFVUX0hETUkpIHsKKwkJYnJldCA9IGNubF9kZGlfaGRtaV9wbGxfZGl2aWRlcnMo Y3J0YywgY3J0Y19zdGF0ZSwgY2xvY2spOworCQlpZiAoIWJyZXQpIHsKKwkJCURSTV9ERUJVR19L TVMoIkNvdWxkIG5vdCBnZXQgSERNSSBwbGwgZGl2aWRlcnMuXG4iKTsKKwkJCXJldHVybiBOVUxM OworCQl9CisJfSBlbHNlIGlmIChlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9EUCB8fAor CQkgICBlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9EUF9NU1QgfHwKKwkJICAgZW5jb2Rl ci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7CisJCWJyZXQgPSBjbmxfZGRpX2RwX3NldF9k cGxsX2h3X3N0YXRlKGNsb2NrLCAmZHBsbF9od19zdGF0ZSk7CisJCWlmICghYnJldCkgeworCQkJ RFJNX0RFQlVHX0tNUygiQ291bGQgbm90IHNldCBEUCBkcGxsIEhXIHN0YXRlLlxuIik7CisJCQly ZXR1cm4gTlVMTDsKKwkJfQorCQljcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlID0gZHBsbF9od19z dGF0ZTsKKwl9IGVsc2UgeworCQlEUk1fREVCVUdfS01TKCJTa2lwIERQTEwgc2V0dXAgZm9yIGVu Y29kZXIgJWRcbiIsCisJCQkgICAgICBlbmNvZGVyLT50eXBlKTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJcGxsID0gaW50ZWxfZmluZF9zaGFyZWRfZHBsbChjcnRjLCBjcnRjX3N0YXRlLAorCQkJ CSAgICAgRFBMTF9JRF9TS0xfRFBMTDAsCisJCQkJICAgICBEUExMX0lEX1NLTF9EUExMMik7CisJ aWYgKCFwbGwpIHsKKwkJRFJNX0RFQlVHX0tNUygiTm8gUExMIHNlbGVjdGVkXG4iKTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJaW50ZWxfcmVmZXJlbmNlX3NoYXJlZF9kcGxsKHBsbCwgY3J0Y19z dGF0ZSk7CisKKwlyZXR1cm4gcGxsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX3No YXJlZF9kcGxsX2Z1bmNzIGNubF9kZGlfcGxsX2Z1bmNzID0geworCS5lbmFibGUgPSBjbmxfZGRp X3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBjbmxfZGRpX3BsbF9kaXNhYmxlLAorCS5nZXRfaHdf c3RhdGUgPSBjbmxfZGRpX3BsbF9nZXRfaHdfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRwbGxfaW5mbyBjbmxfcGxsc1tdID0geworCXsgIkRQTEwgMCIsIERQTExfSURfU0tMX0RQ TEwwLCAmY25sX2RkaV9wbGxfZnVuY3MsIDAgfSwKKwl7ICJEUExMIDEiLCBEUExMX0lEX1NLTF9E UExMMSwgJmNubF9kZGlfcGxsX2Z1bmNzLCAwIH0sCisJeyAiRFBMTCAyIiwgRFBMTF9JRF9TS0xf RFBMTDIsICZjbmxfZGRpX3BsbF9mdW5jcywgMCB9LAorCXsgTlVMTCwgLTEsIE5VTEwsIH0sCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RwbGxfbWdyIGNubF9wbGxfbWdyID0gewor CS5kcGxsX2luZm8gPSBjbmxfcGxscywKKwkuZ2V0X2RwbGwgPSBjbmxfZ2V0X2RwbGwsCisJLmR1 bXBfaHdfc3RhdGUgPSBza2xfZHVtcF9od19zdGF0ZSwKK307CisKIC8qKgogICogaW50ZWxfc2hh cmVkX2RwbGxfaW5pdCAtIEluaXRpYWxpemUgc2hhcmVkIERQTExzCiAgKiBAZGV2OiBkcm0gZGV2 aWNlCkBAIC0xOTgwLDcgKzIyNzQsOSBAQCB2b2lkIGludGVsX3NoYXJlZF9kcGxsX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKIAljb25zdCBzdHJ1Y3QgZHBsbF9pbmZvICpkcGxsX2luZm87 CiAJaW50IGk7CiAKLQlpZiAoSVNfR0VOOV9CQyhkZXZfcHJpdikpCisJaWYgKElTX0NBTk5PTkxB S0UoZGV2X3ByaXYpKQorCQlkcGxsX21nciA9ICZjbmxfcGxsX21ncjsKKwllbHNlIGlmIChJU19H RU45X0JDKGRldl9wcml2KSkKIAkJZHBsbF9tZ3IgPSAmc2tsX3BsbF9tZ3I7CiAJZWxzZSBpZiAo SVNfR0VOOV9MUChkZXZfcHJpdikpCiAJCWRwbGxfbWdyID0gJmJ4dF9wbGxfbWdyOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBsbF9tZ3IuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RwbGxfbWdyLmgKaW5kZXggZjhkMTNhOS4uZjI0Y2NmNCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBsbF9tZ3IuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcGxsX21nci5oCkBAIC0xMjgsNiArMTI4LDEwIEBAIHN0cnVj dCBpbnRlbF9kcGxsX2h3X3N0YXRlIHsKIAkvKiBIRE1JIG9ubHksIDAgd2hlbiB1c2VkIGZvciBE UCAqLwogCXVpbnQzMl90IGNmZ2NyMSwgY2ZnY3IyOwogCisJLyogY25sICovCisJdWludDMyX3Qg Y2ZnY3IwOworCS8qIENOTCBhbHNvIHVzZXMgY2ZnY3IxICovCisKIAkvKiBieHQgKi8KIAl1aW50 MzJfdCBlYmIwLCBlYmI0LCBwbGwwLCBwbGwxLCBwbGwyLCBwbGwzLCBwbGw2LCBwbGw4LCBwbGw5 LCBwbGwxMCwKIAkJIHBjc2R3MTI7Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==