From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH 3/4] drm/msm/dsi: Populate PLL 10nm clock ops Date: Wed, 17 Jan 2018 11:35:26 +0530 Message-ID: <20180117060527.7935-4-architt@codeaurora.org> References: <20180117060527.7935-1-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180117060527.7935-1-architt@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: robdclark@gmail.com Cc: linux-arm-msm@vger.kernel.org, latkinso@codeaurora.org, sibis@codeaurora.org, dri-devel@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org UG9wdWxhdGUgUExMIGNsb2NrIG9wcyBmcm9tIGRvd25zdHJlYW0uIFRoaXMgY29udGFpbnMgdGhl IFZDTyBQTEwKb3BzIGFuZCB0aGUgcmVnaXN0cmF0aW9uIG9mIHN0YW5kYXJkIGNsa19kaXZpZGVy IGFuZCBjbGtfbXV4IGNsb2Nrcy4KVW5saWtlIDE0bm0gUExMLCB0aGUgcG9zdGRpdmlkZXJzL211 eCBvZiB0aGUgc2xhdmUgUExMIGRvZXNuJ3QgbmVlZAp0byBiZSBzZXQgdG8gdGhlIHNhbWUgdmFs dWVzIG9mIHRoZSBwb3N0ZGl2cy9tdXggb2YgdGhlIG1hc3RlciBQTEwuCkhlbmNlLCB3ZSBkb24n dCBuZWVkIHNwZWNpYWwgcG9zdGRpdmlkZXIgY2xvY2sgb3BzIGxpa2Ugd2UgZGlkIHdpdGgKdGhl IDE0bm0gUExMIGRyaXZlci4KCkxpa2UgdGhlIHByZXZpb3VzIFBMTCBkcml2ZXJzLCB0aGUgaW1w bGVtZW50YXRpb24gaXMgc2xpZ2h0bHkgZGlmZmVyZW50CmZyb20gZG93bnN0cmVhbS4gV2UgZG9u J3QgdXNlIHNoYWRvdyBjbG9ja3MsIGJ1dCBoYXZlIHRoZSBhYmlsaXR5IHRvCnJlcGFyZW50IHRo ZSBSQ0dzIHRvIGEgZGlmZmVyZW50IHNvdXJjZS4KClNpZ25lZC1vZmYtYnk6IEFyY2hpdCBUYW5l amEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2kv cGxsL2RzaV9wbGxfMTBubS5jIHwgNjYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAx IGZpbGUgY2hhbmdlZCwgNjU0IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGxsL2RzaV9wbGxfMTBubS5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2kvcGxsL2RzaV9wbGxfMTBubS5jCmluZGV4IDM0YzI0NDQyZDM0Yi4u YzRjMzdhN2RmNjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9wbGwvZHNp X3BsbF8xMG5tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGxsL2RzaV9wbGxfMTBu bS5jCkBAIC0xMCw2ICsxMCw3OCBAQAogI2luY2x1ZGUgImRzaV9wbGwuaCIKICNpbmNsdWRlICJk c2kueG1sLmgiCiAKKy8qCisgKiBEU0kgUExMIDEwbm0gLSBjbG9jayBkaWFncmFtIChlZzogRFNJ MCk6CisgKgorICogICAgICAgICAgIGRzaTBfcGxsX291dF9kaXZfY2xrICBkc2kwX3BsbF9iaXRf Y2xrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAor ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKKyAqICAg ICAgICAgICAgICAgICArLS0tLS0tLS0tKyAgfCAgKy0tLS0tLS0tLS0rICB8ICArLS0tLSsKKyAq ICBkc2kwdmNvX2NsayAtLS18IG91dF9kaXYgfC0tby0tfCBkaXZsXzNfMCB8LS1vLS18IC84IHwt LSBkc2kwcGxsYnl0ZQorICogICAgICAgICAgICAgICAgICstLS0tLS0tLS0rICB8ICArLS0tLS0t LS0tLSsgIHwgICstLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICB8ICAgICAgICAgZHNpMF9wbGxfYnlfMl9iaXRfY2xrCisgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICB8CisgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgKy0tLS0rICB8ICB8XCAgZHNp MF9wY2xrX211eAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg ICAgIHwtLXwgLzIgfC0tby0tfCBcICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgIHwgICstLS0tKyAgICAgfCAgXCAgfCAgKy0tLS0tLS0tLSsKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAtLS0tLS0tLS0t LS0tLXwgIHwtLW8tLXwgZGl2XzdfNCB8LS0gZHNpMHBsbAorICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgLyAgICAgKy0tLS0t LS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICArLS0tLS0r ICAgICAgICAgICAgIHwgLworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0t LS0tLXwgLzQ/IHwtLW8tLS0tLS0tLS0tfC8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArLS0tLS0rICB8ICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfGRzaWNsa19zZWwK KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNpMF9w bGxfcG9zdF9vdXRfZGl2X2NsaworICovCisKKyNkZWZpbmUgRFNJX0JZVEVfUExMX0NMSwkJMAor I2RlZmluZSBEU0lfUElYRUxfUExMX0NMSwkJMQorI2RlZmluZSBOVU1fUFJPVklERURfQ0xLUwkJ MgorCitzdHJ1Y3QgZHNpX3BsbF9yZWdzIHsKKwl1MzIgcGxsX3Byb3BfZ2Fpbl9yYXRlOworCXUz MiBwbGxfbG9ja2RldF9yYXRlOworCXUzMiBkZWNpbWFsX2Rpdl9zdGFydDsKKwl1MzIgZnJhY19k aXZfc3RhcnRfbG93OworCXUzMiBmcmFjX2Rpdl9zdGFydF9taWQ7CisJdTMyIGZyYWNfZGl2X3N0 YXJ0X2hpZ2g7CisJdTMyIHBsbF9jbG9ja19pbnZlcnRlcnM7CisJdTMyIHNzY19zdGVwc2l6ZV9s b3c7CisJdTMyIHNzY19zdGVwc2l6ZV9oaWdoOworCXUzMiBzc2NfZGl2X3Blcl9sb3c7CisJdTMy IHNzY19kaXZfcGVyX2hpZ2g7CisJdTMyIHNzY19hZGpwZXJfbG93OworCXUzMiBzc2NfYWRqcGVy X2hpZ2g7CisJdTMyIHNzY19jb250cm9sOworfTsKKworc3RydWN0IGRzaV9wbGxfY29uZmlnIHsK Kwl1MzIgcmVmX2ZyZXE7CisJYm9vbCBkaXZfb3ZlcnJpZGU7CisJdTMyIG91dHB1dF9kaXY7CisJ Ym9vbCBpZ25vcmVfZnJhYzsKKwlib29sIGRpc2FibGVfcHJlc2NhbGVyOworCWJvb2wgZW5hYmxl X3NzYzsKKwlib29sIHNzY19jZW50ZXI7CisJdTMyIGRlY19iaXRzOworCXUzMiBmcmFjX2JpdHM7 CisJdTMyIGxvY2tfdGltZXI7CisJdTMyIHNzY19mcmVxOworCXUzMiBzc2Nfb2Zmc2V0OworCXUz MiBzc2NfYWRqX3BlcjsKKwl1MzIgdGhyZXNoX2N5Y2xlczsKKwl1MzIgcmVmY2xrX2N5Y2xlczsK K307CisKK3N0cnVjdCBwbGxfMTBubV9jYWNoZWRfc3RhdGUgeworCXVuc2lnbmVkIGxvbmcgdmNv X3JhdGU7CisJdTggYml0X2Nsa19kaXY7CisJdTggcGl4X2Nsa19kaXY7CisJdTggcGxsX291dF9k aXY7CisJdTggcGxsX211eDsKK307CisKIHN0cnVjdCBkc2lfcGxsXzEwbm0gewogCXN0cnVjdCBt c21fZHNpX3BsbCBiYXNlOwogCkBAIC0xOSw3ICs5MSwyNCBAQCBzdHJ1Y3QgZHNpX3BsbF8xMG5t IHsKIAl2b2lkIF9faW9tZW0gKnBoeV9jbW5fbW1pbzsKIAl2b2lkIF9faW9tZW0gKm1taW87CiAK Kwl1NjQgdmNvX3JlZl9jbGtfcmF0ZTsKKwl1NjQgdmNvX2N1cnJlbnRfcmF0ZTsKKworCS8qIHBy b3RlY3RzIFJFR19EU0lfMTBubV9QSFlfQ01OX0NMS19DRkcwIHJlZ2lzdGVyICovCisJc3Bpbmxv Y2tfdCBwb3N0ZGl2X2xvY2s7CisKIAlpbnQgdmNvX2RlbGF5OworCXN0cnVjdCBkc2lfcGxsX2Nv bmZpZyBwbGxfY29uZmlndXJhdGlvbjsKKwlzdHJ1Y3QgZHNpX3BsbF9yZWdzIHJlZ19zZXR1cDsK KworCS8qIHByaXZhdGUgY2xvY2tzOiAqLworCXN0cnVjdCBjbGtfaHcgKmh3c1tOVU1fRFNJX0NM T0NLU19NQVhdOworCXUzMiBudW1faHdzOworCisJLyogY2xvY2stcHJvdmlkZXI6ICovCisJc3Ry dWN0IGNsa19od19vbmVjZWxsX2RhdGEgKmh3X2RhdGE7CisKKwlzdHJ1Y3QgcGxsXzEwbm1fY2Fj aGVkX3N0YXRlIGNhY2hlZF9zdGF0ZTsKIAogCWVudW0gbXNtX2RzaV9waHlfdXNlY2FzZSB1YzsK IAlzdHJ1Y3QgZHNpX3BsbF8xMG5tICpzbGF2ZTsKQEAgLTMzLDYgKzEyMiwxOTAgQEAgc3RydWN0 IGRzaV9wbGxfMTBubSB7CiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZHNpX3BsbF8xMG5tICpwbGxfMTBu bV9saXN0W0RTSV9NQVhdOwogCitzdGF0aWMgdm9pZCBkc2lfcGxsX3NldHVwX2NvbmZpZyhzdHJ1 Y3QgZHNpX3BsbF8xMG5tICpwbGwpCit7CisJc3RydWN0IGRzaV9wbGxfY29uZmlnICpjb25maWcg PSAmcGxsLT5wbGxfY29uZmlndXJhdGlvbjsKKworCWNvbmZpZy0+cmVmX2ZyZXEgPSBwbGwtPnZj b19yZWZfY2xrX3JhdGU7CisJY29uZmlnLT5vdXRwdXRfZGl2ID0gMTsKKwljb25maWctPmRlY19i aXRzID0gODsKKwljb25maWctPmZyYWNfYml0cyA9IDE4OworCWNvbmZpZy0+bG9ja190aW1lciA9 IDY0OworCWNvbmZpZy0+c3NjX2ZyZXEgPSAzMTUwMDsKKwljb25maWctPnNzY19vZmZzZXQgPSA1 MDAwOworCWNvbmZpZy0+c3NjX2Fkal9wZXIgPSAyOworCWNvbmZpZy0+dGhyZXNoX2N5Y2xlcyA9 IDMyOworCWNvbmZpZy0+cmVmY2xrX2N5Y2xlcyA9IDI1NjsKKworCWNvbmZpZy0+ZGl2X292ZXJy aWRlID0gZmFsc2U7CisJY29uZmlnLT5pZ25vcmVfZnJhYyA9IGZhbHNlOworCWNvbmZpZy0+ZGlz YWJsZV9wcmVzY2FsZXIgPSBmYWxzZTsKKworCWNvbmZpZy0+ZW5hYmxlX3NzYyA9IGZhbHNlOwor CWNvbmZpZy0+c3NjX2NlbnRlciA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9wbGxfY2FsY19k ZWNfZnJhYyhzdHJ1Y3QgZHNpX3BsbF8xMG5tICpwbGwpCit7CisJc3RydWN0IGRzaV9wbGxfY29u ZmlnICpjb25maWcgPSAmcGxsLT5wbGxfY29uZmlndXJhdGlvbjsKKwlzdHJ1Y3QgZHNpX3BsbF9y ZWdzICpyZWdzID0gJnBsbC0+cmVnX3NldHVwOworCXU2NCBmcmVmID0gcGxsLT52Y29fcmVmX2Ns a19yYXRlOworCXU2NCBwbGxfZnJlcTsKKwl1NjQgZGl2aWRlcjsKKwl1NjQgZGVjLCBkZWNfbXVs dGlwbGU7CisJdTMyIGZyYWM7CisJdTY0IG11bHRpcGxpZXI7CisKKwlwbGxfZnJlcSA9IHBsbC0+ dmNvX2N1cnJlbnRfcmF0ZTsKKworCWlmIChjb25maWctPmRpc2FibGVfcHJlc2NhbGVyKQorCQlk aXZpZGVyID0gZnJlZjsKKwllbHNlCisJCWRpdmlkZXIgPSBmcmVmICogMjsKKworCW11bHRpcGxp ZXIgPSAxIDw8IGNvbmZpZy0+ZnJhY19iaXRzOworCWRlY19tdWx0aXBsZSA9IGRpdl91NjQocGxs X2ZyZXEgKiBtdWx0aXBsaWVyLCBkaXZpZGVyKTsKKwlkaXZfdTY0X3JlbShkZWNfbXVsdGlwbGUs IG11bHRpcGxpZXIsICZmcmFjKTsKKworCWRlYyA9IGRpdl91NjQoZGVjX211bHRpcGxlLCBtdWx0 aXBsaWVyKTsKKworCWlmIChwbGxfZnJlcSA8PSAxOTAwMDAwMDAwVUwpCisJCXJlZ3MtPnBsbF9w cm9wX2dhaW5fcmF0ZSA9IDg7CisJZWxzZSBpZiAocGxsX2ZyZXEgPD0gMzAwMDAwMDAwMFVMKQor CQlyZWdzLT5wbGxfcHJvcF9nYWluX3JhdGUgPSAxMDsKKwllbHNlCisJCXJlZ3MtPnBsbF9wcm9w X2dhaW5fcmF0ZSA9IDEyOworCWlmIChwbGxfZnJlcSA8IDExMDAwMDAwMDBVTCkKKwkJcmVncy0+ cGxsX2Nsb2NrX2ludmVydGVycyA9IDg7CisJZWxzZQorCQlyZWdzLT5wbGxfY2xvY2tfaW52ZXJ0 ZXJzID0gMDsKKworCXJlZ3MtPnBsbF9sb2NrZGV0X3JhdGUgPSBjb25maWctPmxvY2tfdGltZXI7 CisJcmVncy0+ZGVjaW1hbF9kaXZfc3RhcnQgPSBkZWM7CisJcmVncy0+ZnJhY19kaXZfc3RhcnRf bG93ID0gKGZyYWMgJiAweGZmKTsKKwlyZWdzLT5mcmFjX2Rpdl9zdGFydF9taWQgPSAoZnJhYyAm IDB4ZmYwMCkgPj4gODsKKwlyZWdzLT5mcmFjX2Rpdl9zdGFydF9oaWdoID0gKGZyYWMgJiAweDMw MDAwKSA+PiAxNjsKK30KKworI2RlZmluZSBTU0NfQ0VOVEVSCQlCSVQoMCkKKyNkZWZpbmUgU1ND X0VOCQkJQklUKDEpCisKK3N0YXRpYyB2b2lkIGRzaV9wbGxfY2FsY19zc2Moc3RydWN0IGRzaV9w bGxfMTBubSAqcGxsKQoreworCXN0cnVjdCBkc2lfcGxsX2NvbmZpZyAqY29uZmlnID0gJnBsbC0+ cGxsX2NvbmZpZ3VyYXRpb247CisJc3RydWN0IGRzaV9wbGxfcmVncyAqcmVncyA9ICZwbGwtPnJl Z19zZXR1cDsKKwl1MzIgc3NjX3BlcjsKKwl1MzIgc3NjX21vZDsKKwl1NjQgc3NjX3N0ZXBfc2l6 ZTsKKwl1NjQgZnJhYzsKKworCWlmICghY29uZmlnLT5lbmFibGVfc3NjKSB7CisJCURCRygiU1ND IG5vdCBlbmFibGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNzY19wZXIgPSBESVZfUk9VTkRf Q0xPU0VTVChjb25maWctPnJlZl9mcmVxLCBjb25maWctPnNzY19mcmVxKSAvIDIgLSAxOworCXNz Y19tb2QgPSAoc3NjX3BlciArIDEpICUgKGNvbmZpZy0+c3NjX2Fkal9wZXIgKyAxKTsKKwlzc2Nf cGVyIC09IHNzY19tb2Q7CisKKwlmcmFjID0gcmVncy0+ZnJhY19kaXZfc3RhcnRfbG93IHwKKwkJ CShyZWdzLT5mcmFjX2Rpdl9zdGFydF9taWQgPDwgOCkgfAorCQkJKHJlZ3MtPmZyYWNfZGl2X3N0 YXJ0X2hpZ2ggPDwgMTYpOworCXNzY19zdGVwX3NpemUgPSByZWdzLT5kZWNpbWFsX2Rpdl9zdGFy dDsKKwlzc2Nfc3RlcF9zaXplICo9ICgxIDw8IGNvbmZpZy0+ZnJhY19iaXRzKTsKKwlzc2Nfc3Rl cF9zaXplICs9IGZyYWM7CisJc3NjX3N0ZXBfc2l6ZSAqPSBjb25maWctPnNzY19vZmZzZXQ7CisJ c3NjX3N0ZXBfc2l6ZSAqPSAoY29uZmlnLT5zc2NfYWRqX3BlciArIDEpOworCXNzY19zdGVwX3Np emUgPSBkaXZfdTY0KHNzY19zdGVwX3NpemUsIChzc2NfcGVyICsgMSkpOworCXNzY19zdGVwX3Np emUgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoc3NjX3N0ZXBfc2l6ZSwgMTAwMDAwMCk7CisKKwly ZWdzLT5zc2NfZGl2X3Blcl9sb3cgPSBzc2NfcGVyICYgMHhGRjsKKwlyZWdzLT5zc2NfZGl2X3Bl cl9oaWdoID0gKHNzY19wZXIgJiAweEZGMDApID4+IDg7CisJcmVncy0+c3NjX3N0ZXBzaXplX2xv dyA9ICh1MzIpKHNzY19zdGVwX3NpemUgJiAweEZGKTsKKwlyZWdzLT5zc2Nfc3RlcHNpemVfaGln aCA9ICh1MzIpKChzc2Nfc3RlcF9zaXplICYgMHhGRjAwKSA+PiA4KTsKKwlyZWdzLT5zc2NfYWRq cGVyX2xvdyA9IGNvbmZpZy0+c3NjX2Fkal9wZXIgJiAweEZGOworCXJlZ3MtPnNzY19hZGpwZXJf aGlnaCA9IChjb25maWctPnNzY19hZGpfcGVyICYgMHhGRjAwKSA+PiA4OworCisJcmVncy0+c3Nj X2NvbnRyb2wgPSBjb25maWctPnNzY19jZW50ZXIgPyBTU0NfQ0VOVEVSIDogMDsKKworCXByX2Rl YnVnKCJTQ0M6IERlYzolZCwgZnJhYzolbGx1LCBmcmFjX2JpdHM6JWRcbiIsCisJCSByZWdzLT5k ZWNpbWFsX2Rpdl9zdGFydCwgZnJhYywgY29uZmlnLT5mcmFjX2JpdHMpOworCXByX2RlYnVnKCJT U0M6IGRpdl9wZXI6MHglWCwgc3RlcHNpemU6MHglWCwgYWRqcGVyOjB4JVhcbiIsCisJCSBzc2Nf cGVyLCAodTMyKXNzY19zdGVwX3NpemUsIGNvbmZpZy0+c3NjX2Fkal9wZXIpOworfQorCitzdGF0 aWMgdm9pZCBkc2lfcGxsX3NzY19jb21taXQoc3RydWN0IGRzaV9wbGxfMTBubSAqcGxsKQorewor CXZvaWQgX19pb21lbSAqYmFzZSA9IHBsbC0+bW1pbzsKKwlzdHJ1Y3QgZHNpX3BsbF9yZWdzICpy ZWdzID0gJnBsbC0+cmVnX3NldHVwOworCisJaWYgKHBsbC0+cGxsX2NvbmZpZ3VyYXRpb24uZW5h YmxlX3NzYykgeworCQlwcl9kZWJ1ZygiU1NDIGlzIGVuYWJsZWRcbiIpOworCisJCXBsbF93cml0 ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfU1NDX1NURVBTSVpFX0xPV18xLAorCQkJICBy ZWdzLT5zc2Nfc3RlcHNpemVfbG93KTsKKwkJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzEwbm1f UEhZX1BMTF9TU0NfU1RFUFNJWkVfSElHSF8xLAorCQkJICByZWdzLT5zc2Nfc3RlcHNpemVfaGln aCk7CisJCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfU1NDX0RJVl9QRVJf TE9XXzEsCisJCQkgIHJlZ3MtPnNzY19kaXZfcGVyX2xvdyk7CisJCXBsbF93cml0ZShiYXNlICsg UkVHX0RTSV8xMG5tX1BIWV9QTExfU1NDX0RJVl9QRVJfSElHSF8xLAorCQkJICByZWdzLT5zc2Nf ZGl2X3Blcl9oaWdoKTsKKwkJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9T U0NfRElWX0FESlBFUl9MT1dfMSwKKwkJCSAgcmVncy0+c3NjX2FkanBlcl9sb3cpOworCQlwbGxf d3JpdGUoYmFzZSArIFJFR19EU0lfMTBubV9QSFlfUExMX1NTQ19ESVZfQURKUEVSX0hJR0hfMSwK KwkJCSAgcmVncy0+c3NjX2FkanBlcl9oaWdoKTsKKwkJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJ XzEwbm1fUEhZX1BMTF9TU0NfQ09OVFJPTCwKKwkJCSAgU1NDX0VOIHwgcmVncy0+c3NjX2NvbnRy b2wpOworCX0KK30KKworc3RhdGljIHZvaWQgZHNpX3BsbF9jb25maWdfaHppbmRlcF9yZWcoc3Ry dWN0IGRzaV9wbGxfMTBubSAqcGxsKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IHBsbC0+bW1p bzsKKworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfQU5BTE9HX0NPTlRS T0xTX09ORSwgMHg4MCk7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9B TkFMT0dfQ09OVFJPTFNfVFdPLCAweDAzKTsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTBu bV9QSFlfUExMX0FOQUxPR19DT05UUk9MU19USFJFRSwgMHgwMCk7CisJcGxsX3dyaXRlKGJhc2Ug KyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9EU01fRElWSURFUiwgMHgwMCk7CisJcGxsX3dyaXRlKGJh c2UgKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9GRUVEQkFDS19ESVZJREVSLCAweDRlKTsKKwlwbGxf d3JpdGUoYmFzZSArIFJFR19EU0lfMTBubV9QSFlfUExMX0NBTElCUkFUSU9OX1NFVFRJTkdTLCAw eDQwKTsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTBubV9QSFlfUExMX0JBTkRfU0VMX0NB TF9TRVRUSU5HU19USFJFRSwKKwkJICAweGJhKTsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lf MTBubV9QSFlfUExMX0ZSRVFfREVURUNUX1NFVFRJTkdTX09ORSwgMHgwYyk7CisJcGxsX3dyaXRl KGJhc2UgKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9PVVRESVYsIDB4MDApOworCXBsbF93cml0ZShi YXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfQ09SRV9PVkVSUklERSwgMHgwMCk7CisJcGxsX3dy aXRlKGJhc2UgKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9QTExfRElHSVRBTF9USU1FUlNfVFdPLCAw eDA4KTsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTBubV9QSFlfUExMX1BMTF9QUk9QX0dB SU5fUkFURV8xLCAweDA4KTsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMTBubV9QSFlfUExM X1BMTF9CQU5EX1NFVF9SQVRFXzEsIDB4YzApOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8x MG5tX1BIWV9QTExfUExMX0lOVF9HQUlOX0lGSUxUX0JBTkRfMSwgMHhmYSk7CisJcGxsX3dyaXRl KGJhc2UgKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9QTExfRkxfSU5UX0dBSU5fUEZJTFRfQkFORF8x LAorCQkgIDB4NGMpOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfUExM X0xPQ0tfT1ZFUlJJREUsIDB4ODApOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BI WV9QTExfUEZJTFQsIDB4MjkpOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9Q TExfSUZJTFQsIDB4M2YpOworfQorCitzdGF0aWMgdm9pZCBkc2lfcGxsX2NvbW1pdChzdHJ1Y3Qg ZHNpX3BsbF8xMG5tICpwbGwpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcGxsLT5tbWlvOwor CXN0cnVjdCBkc2lfcGxsX3JlZ3MgKnJlZyA9ICZwbGwtPnJlZ19zZXR1cDsKKworCXBsbF93cml0 ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfQ09SRV9JTlBVVF9PVkVSUklERSwgMHgxMik7 CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9ERUNJTUFMX0RJVl9TVEFS VF8xLAorCQkgIHJlZy0+ZGVjaW1hbF9kaXZfc3RhcnQpOworCXBsbF93cml0ZShiYXNlICsgUkVH X0RTSV8xMG5tX1BIWV9QTExfRlJBQ19ESVZfU1RBUlRfTE9XXzEsCisJCSAgcmVnLT5mcmFjX2Rp dl9zdGFydF9sb3cpOworCXBsbF93cml0ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfRlJB Q19ESVZfU1RBUlRfTUlEXzEsCisJCSAgcmVnLT5mcmFjX2Rpdl9zdGFydF9taWQpOworCXBsbF93 cml0ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfRlJBQ19ESVZfU1RBUlRfSElHSF8xLAor CQkgIHJlZy0+ZnJhY19kaXZfc3RhcnRfaGlnaCk7CisJcGxsX3dyaXRlKGJhc2UgKyBSRUdfRFNJ XzEwbm1fUEhZX1BMTF9QTExfTE9DS0RFVF9SQVRFXzEsIDB4NDApOworCXBsbF93cml0ZShiYXNl ICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfUExMX0xPQ0tfREVMQVksIDB4MDYpOworCXBsbF93cml0 ZShiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfQ01PREUsIDB4MTApOworCXBsbF93cml0ZShi YXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfQ0xPQ0tfSU5WRVJURVJTLAorCQkgIHJlZy0+cGxs X2Nsb2NrX2ludmVydGVycyk7Cit9CisKIHN0YXRpYyBpbnQgZHNpX3BsbF8xMG5tX3Zjb19zZXRf cmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCQkJCSAgICAgdW5z aWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKIHsKQEAgLTQyLDE4ICszMTUsMTkyIEBAIHN0YXRpYyBp bnQgZHNpX3BsbF8xMG5tX3Zjb19zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQg bG9uZyByYXRlLAogCURCRygiRFNJIFBMTCVkIHJhdGU9JWx1LCBwYXJlbnQncz0lbHUiLCBwbGxf MTBubS0+aWQsIHJhdGUsCiAJICAgIHBhcmVudF9yYXRlKTsKIAorCXBsbF8xMG5tLT52Y29fY3Vy cmVudF9yYXRlID0gcmF0ZTsKKwlwbGxfMTBubS0+dmNvX3JlZl9jbGtfcmF0ZSA9IHBhcmVudF9y YXRlOworCisJZHNpX3BsbF9zZXR1cF9jb25maWcocGxsXzEwbm0pOworCisJZHNpX3BsbF9jYWxj X2RlY19mcmFjKHBsbF8xMG5tKTsKKworCWRzaV9wbGxfY2FsY19zc2MocGxsXzEwbm0pOworCisJ ZHNpX3BsbF9jb21taXQocGxsXzEwbm0pOworCisJZHNpX3BsbF9jb25maWdfaHppbmRlcF9yZWco cGxsXzEwbm0pOworCisJZHNpX3BsbF9zc2NfY29tbWl0KHBsbF8xMG5tKTsKKworCS8qIGZsdXNo LCBlbnN1cmUgYWxsIHJlZ2lzdGVyIHdyaXRlcyBhcmUgZG9uZSovCisJd21iKCk7CisKIAlyZXR1 cm4gMDsKIH0KIAorc3RhdGljIGludCBkc2lfcGxsXzEwbm1fbG9ja19zdGF0dXMoc3RydWN0IGRz aV9wbGxfMTBubSAqcGxsKQoreworCWludCByYzsKKwl1MzIgc3RhdHVzID0gMDsKKwl1MzIgY29u c3QgZGVsYXlfdXMgPSAxMDA7CisJdTMyIGNvbnN0IHRpbWVvdXRfdXMgPSA1MDAwOworCisJcmMg PSByZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKHBsbC0+bW1pbyArCisJCQkJICAgICAgIFJFR19E U0lfMTBubV9QSFlfUExMX0NPTU1PTl9TVEFUVVNfT05FLAorCQkJCSAgICAgICBzdGF0dXMsCisJ CQkJICAgICAgICgoc3RhdHVzICYgQklUKDApKSA+IDApLAorCQkJCSAgICAgICBkZWxheV91cywK KwkJCQkgICAgICAgdGltZW91dF91cyk7CisJaWYgKHJjKQorCQlwcl9lcnIoIkRTSSBQTEwoJWQp IGxvY2sgZmFpbGVkLCBzdGF0dXM9MHglMDh4XG4iLAorCQkgICAgICAgcGxsLT5pZCwgc3RhdHVz KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZHNpX3BsbF9kaXNhYmxlX3BsbF9i aWFzKHN0cnVjdCBkc2lfcGxsXzEwbm0gKnBsbCkKK3sKKwl1MzIgZGF0YSA9IHBsbF9yZWFkKHBs bC0+cGh5X2Ntbl9tbWlvICsgUkVHX0RTSV8xMG5tX1BIWV9DTU5fQ1RSTF8wKTsKKworCXBsbF93 cml0ZShwbGwtPm1taW8gKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9TWVNURU1fTVVYRVMsIDApOwor CXBsbF93cml0ZShwbGwtPnBoeV9jbW5fbW1pbyArIFJFR19EU0lfMTBubV9QSFlfQ01OX0NUUkxf MCwKKwkJICBkYXRhICYgfkJJVCg1KSk7CisJbmRlbGF5KDI1MCk7Cit9CisKK3N0YXRpYyB2b2lk IGRzaV9wbGxfZW5hYmxlX3BsbF9iaWFzKHN0cnVjdCBkc2lfcGxsXzEwbm0gKnBsbCkKK3sKKwl1 MzIgZGF0YSA9IHBsbF9yZWFkKHBsbC0+cGh5X2Ntbl9tbWlvICsgUkVHX0RTSV8xMG5tX1BIWV9D TU5fQ1RSTF8wKTsKKworCXBsbF93cml0ZShwbGwtPnBoeV9jbW5fbW1pbyArIFJFR19EU0lfMTBu bV9QSFlfQ01OX0NUUkxfMCwKKwkJICBkYXRhIHwgQklUKDUpKTsKKwlwbGxfd3JpdGUocGxsLT5t bWlvICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfU1lTVEVNX01VWEVTLCAweGMwKTsKKwluZGVsYXko MjUwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BsbF9kaXNhYmxlX2dsb2JhbF9jbGsoc3RydWN0 IGRzaV9wbGxfMTBubSAqcGxsKQoreworCXUzMiBkYXRhOworCisJZGF0YSA9IHBsbF9yZWFkKHBs bC0+cGh5X2Ntbl9tbWlvICsgUkVHX0RTSV8xMG5tX1BIWV9DTU5fQ0xLX0NGRzEpOworCXBsbF93 cml0ZShwbGwtPnBoeV9jbW5fbW1pbyArIFJFR19EU0lfMTBubV9QSFlfQ01OX0NMS19DRkcxLAor CQkgIGRhdGEgJiB+QklUKDUpKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BsbF9lbmFibGVfZ2xv YmFsX2NsayhzdHJ1Y3QgZHNpX3BsbF8xMG5tICpwbGwpCit7CisJdTMyIGRhdGE7CisKKwlkYXRh ID0gcGxsX3JlYWQocGxsLT5waHlfY21uX21taW8gKyBSRUdfRFNJXzEwbm1fUEhZX0NNTl9DTEtf Q0ZHMSk7CisJcGxsX3dyaXRlKHBsbC0+cGh5X2Ntbl9tbWlvICsgUkVHX0RTSV8xMG5tX1BIWV9D TU5fQ0xLX0NGRzEsCisJCSAgZGF0YSB8IEJJVCg1KSk7Cit9CisKK3N0YXRpYyBpbnQgZHNpX3Bs bF8xMG5tX3Zjb19wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBtc21fZHNp X3BsbCAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7CisJc3RydWN0IGRzaV9wbGxfMTBubSAqcGxs XzEwbm0gPSB0b19wbGxfMTBubShwbGwpOworCWludCByYzsKKworCWRzaV9wbGxfZW5hYmxlX3Bs bF9iaWFzKHBsbF8xMG5tKTsKKwlpZiAocGxsXzEwbm0tPnNsYXZlKQorCQlkc2lfcGxsX2VuYWJs ZV9wbGxfYmlhcyhwbGxfMTBubS0+c2xhdmUpOworCisJLyogU3RhcnQgUExMICovCisJcGxsX3dy aXRlKHBsbF8xMG5tLT5waHlfY21uX21taW8gKyBSRUdfRFNJXzEwbm1fUEhZX0NNTl9QTExfQ05U UkwsCisJCSAgMHgwMSk7CisKKwkvKgorCSAqIGVuc3VyZSBhbGwgUExMIGNvbmZpZ3VyYXRpb25z IGFyZSB3cml0dGVuIHByaW9yIHRvIGNoZWNraW5nCisJICogZm9yIFBMTCBsb2NrLgorCSAqLwor CXdtYigpOworCisJLyogQ2hlY2sgZm9yIFBMTCBsb2NrICovCisJcmMgPSBkc2lfcGxsXzEwbm1f bG9ja19zdGF0dXMocGxsXzEwbm0pOworCWlmIChyYykgeworCQlwcl9lcnIoIlBMTCglZCkgbG9j ayBmYWlsZWRcbiIsIHBsbF8xMG5tLT5pZCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcGxsLT5w bGxfb24gPSB0cnVlOworCisJZHNpX3BsbF9lbmFibGVfZ2xvYmFsX2NsayhwbGxfMTBubSk7CisJ aWYgKHBsbF8xMG5tLT5zbGF2ZSkKKwkJZHNpX3BsbF9lbmFibGVfZ2xvYmFsX2NsayhwbGxfMTBu bS0+c2xhdmUpOworCisJcGxsX3dyaXRlKHBsbF8xMG5tLT5waHlfY21uX21taW8gKyBSRUdfRFNJ XzEwbm1fUEhZX0NNTl9SQlVGX0NUUkwsCisJCSAgMHgwMSk7CisJaWYgKHBsbF8xMG5tLT5zbGF2 ZSkKKwkJcGxsX3dyaXRlKHBsbF8xMG5tLT5zbGF2ZS0+cGh5X2Ntbl9tbWlvICsKKwkJCSAgUkVH X0RTSV8xMG5tX1BIWV9DTU5fUkJVRl9DVFJMLCAweDAxKTsKKworZXJyb3I6CisJcmV0dXJuIHJj OworfQorCitzdGF0aWMgdm9pZCBkc2lfcGxsX2Rpc2FibGVfc3ViKHN0cnVjdCBkc2lfcGxsXzEw bm0gKnBsbCkKK3sKKwlwbGxfd3JpdGUocGxsLT5waHlfY21uX21taW8gKyBSRUdfRFNJXzEwbm1f UEhZX0NNTl9SQlVGX0NUUkwsIDApOworCWRzaV9wbGxfZGlzYWJsZV9wbGxfYmlhcyhwbGwpOwor fQorCitzdGF0aWMgdm9pZCBkc2lfcGxsXzEwbm1fdmNvX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3 ICpodykKK3sKKwlzdHJ1Y3QgbXNtX2RzaV9wbGwgKnBsbCA9IGh3X2Nsa190b19wbGwoaHcpOwor CXN0cnVjdCBkc2lfcGxsXzEwbm0gKnBsbF8xMG5tID0gdG9fcGxsXzEwbm0ocGxsKTsKKworCS8q CisJICogVG8gYXZvaWQgYW55IHN0cmF5IGdsaXRjaGVzIHdoaWxlIGFicnVwdGx5IHBvd2VyaW5n IGRvd24gdGhlIFBMTAorCSAqIG1ha2Ugc3VyZSB0byBnYXRlIHRoZSBjbG9jayB1c2luZyB0aGUg Y2xvY2sgZW5hYmxlIGJpdCBiZWZvcmUKKwkgKiBwb3dlcmluZyBkb3duIHRoZSBQTEwKKwkgKi8K Kwlkc2lfcGxsX2Rpc2FibGVfZ2xvYmFsX2NsayhwbGxfMTBubSk7CisJcGxsX3dyaXRlKHBsbF8x MG5tLT5waHlfY21uX21taW8gKyBSRUdfRFNJXzEwbm1fUEhZX0NNTl9QTExfQ05UUkwsIDApOwor CWRzaV9wbGxfZGlzYWJsZV9zdWIocGxsXzEwbm0pOworCWlmIChwbGxfMTBubS0+c2xhdmUpIHsK KwkJZHNpX3BsbF9kaXNhYmxlX2dsb2JhbF9jbGsocGxsXzEwbm0tPnNsYXZlKTsKKwkJZHNpX3Bs bF9kaXNhYmxlX3N1YihwbGxfMTBubS0+c2xhdmUpOworCX0KKwkvKiBmbHVzaCwgZW5zdXJlIGFs bCByZWdpc3RlciB3cml0ZXMgYXJlIGRvbmUgKi8KKwl3bWIoKTsKKwlwbGwtPnBsbF9vbiA9IGZh bHNlOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkc2lfcGxsXzEwbm1fdmNvX3JlY2FsY19y YXRlKHN0cnVjdCBjbGtfaHcgKmh3LAogCQkJCQkJICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRl KQogewogCXN0cnVjdCBtc21fZHNpX3BsbCAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7CiAJc3Ry dWN0IGRzaV9wbGxfMTBubSAqcGxsXzEwbm0gPSB0b19wbGxfMTBubShwbGwpOworCXZvaWQgX19p b21lbSAqYmFzZSA9IHBsbF8xMG5tLT5tbWlvOworCXU2NCByZWZfY2xrID0gcGxsXzEwbm0tPnZj b19yZWZfY2xrX3JhdGU7CiAJdTY0IHZjb19yYXRlID0gMHgwOwotCi0JREJHKCJEU0kgUExMJWQg cmV0dXJuaW5nIHZjbyByYXRlID0gJWx1IiwgcGxsXzEwbm0tPmlkLAotCSAgICAodW5zaWduZWQg bG9uZyl2Y29fcmF0ZSk7CisJdTY0IG11bHRpcGxpZXI7CisJdTMyIGZyYWM7CisJdTMyIGRlYzsK Kwl1NjQgcGxsX2ZyZXEsIHRtcDY0OworCisJZGVjID0gcGxsX3JlYWQoYmFzZSArIFJFR19EU0lf MTBubV9QSFlfUExMX0RFQ0lNQUxfRElWX1NUQVJUXzEpOworCWRlYyAmPSAweGZmOworCisJZnJh YyA9IHBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9GUkFDX0RJVl9TVEFSVF9M T1dfMSk7CisJZnJhYyB8PSAoKHBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJXzEwbm1fUEhZX1BMTF9G UkFDX0RJVl9TVEFSVF9NSURfMSkgJgorCQkgIDB4ZmYpIDw8IDgpOworCWZyYWMgfD0gKChwbGxf cmVhZChiYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfRlJBQ19ESVZfU1RBUlRfSElHSF8xKSAm CisJCSAgMHgzKSA8PCAxNik7CisKKwkvKgorCSAqIFRPRE86CisJICoJMS4gQXNzdW1lcyBwcmVz Y2FsZXIgaXMgZGlzYWJsZWQKKwkgKgkyLiBNdWx0aXBsaWVyIGlzIDJeMTguIGl0IHNob3VsZCBi ZSAyXihudW1fb2ZfZnJhY19iaXRzKQorCSAqLworCW11bHRpcGxpZXIgPSAxIDw8IDE4OworCXBs bF9mcmVxID0gZGVjICogKHJlZl9jbGsgKiAyKTsKKwl0bXA2NCA9IChyZWZfY2xrICogMiAqIGZy YWMpOworCXBsbF9mcmVxICs9IGRpdl91NjQodG1wNjQsIG11bHRpcGxpZXIpOworCisJdmNvX3Jh dGUgPSBwbGxfZnJlcTsKKworCURCRygiRFNJIFBMTCVkIHJldHVybmluZyB2Y28gcmF0ZSA9ICVs dSwgZGVjID0gJXgsIGZyYWMgPSAleCIsCisJICAgIHBsbF8xMG5tLT5pZCwgKHVuc2lnbmVkIGxv bmcpdmNvX3JhdGUsIGRlYywgZnJhYyk7CiAKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdmNvX3Jh dGU7CiB9CkBAIC02Miw4ICs1MDksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgY2xr X29wc19kc2lfcGxsXzEwbm1fdmNvID0gewogCS5yb3VuZF9yYXRlID0gbXNtX2RzaV9wbGxfaGVs cGVyX2Nsa19yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZSA9IGRzaV9wbGxfMTBubV92Y29fc2V0X3Jh dGUsCiAJLnJlY2FsY19yYXRlID0gZHNpX3BsbF8xMG5tX3Zjb19yZWNhbGNfcmF0ZSwKLQkucHJl cGFyZSA9IG1zbV9kc2lfcGxsX2hlbHBlcl9jbGtfcHJlcGFyZSwKLQkudW5wcmVwYXJlID0gbXNt X2RzaV9wbGxfaGVscGVyX2Nsa191bnByZXBhcmUsCisJLnByZXBhcmUgPSBkc2lfcGxsXzEwbm1f dmNvX3ByZXBhcmUsCisJLnVucHJlcGFyZSA9IGRzaV9wbGxfMTBubV92Y29fdW5wcmVwYXJlLAog fTsKIAogLyoKQEAgLTczLDEzICs1MjAsNDUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3Bz IGNsa19vcHNfZHNpX3BsbF8xMG5tX3ZjbyA9IHsKIHN0YXRpYyB2b2lkIGRzaV9wbGxfMTBubV9z YXZlX3N0YXRlKHN0cnVjdCBtc21fZHNpX3BsbCAqcGxsKQogewogCXN0cnVjdCBkc2lfcGxsXzEw bm0gKnBsbF8xMG5tID0gdG9fcGxsXzEwbm0ocGxsKTsKKwlzdHJ1Y3QgcGxsXzEwbm1fY2FjaGVk X3N0YXRlICpjYWNoZWQgPSAmcGxsXzEwbm0tPmNhY2hlZF9zdGF0ZTsKKwl2b2lkIF9faW9tZW0g KnBoeV9iYXNlID0gcGxsXzEwbm0tPnBoeV9jbW5fbW1pbzsKKwl1MzIgY21uX2Nsa19jZmcwLCBj bW5fY2xrX2NmZzE7CiAKLQlEQkcoIkRTSSBQTEwlZCIsIHBsbF8xMG5tLT5pZCk7CisJY2FjaGVk LT5wbGxfb3V0X2RpdiA9IHBsbF9yZWFkKHBsbF8xMG5tLT5tbWlvICsKKwkJCQkgICAgICAgUkVH X0RTSV8xMG5tX1BIWV9QTExfUExMX09VVERJVl9SQVRFKTsKKwljYWNoZWQtPnBsbF9vdXRfZGl2 ICY9IDB4MzsKKworCWNtbl9jbGtfY2ZnMCA9IHBsbF9yZWFkKHBoeV9iYXNlICsgUkVHX0RTSV8x MG5tX1BIWV9DTU5fQ0xLX0NGRzApOworCWNhY2hlZC0+Yml0X2Nsa19kaXYgPSBjbW5fY2xrX2Nm ZzAgJiAweGY7CisJY2FjaGVkLT5waXhfY2xrX2RpdiA9IChjbW5fY2xrX2NmZzAgJiAweGYwKSA+ PiA0OworCisJY21uX2Nsa19jZmcxID0gcGxsX3JlYWQocGh5X2Jhc2UgKyBSRUdfRFNJXzEwbm1f UEhZX0NNTl9DTEtfQ0ZHMSk7CisJY2FjaGVkLT5wbGxfbXV4ID0gY21uX2Nsa19jZmcxICYgMHgz OworCisJREJHKCJEU0kgUExMJWQgb3V0ZGl2ICV4IGJpdF9jbGtfZGl2ICV4IHBpeF9jbGtfZGl2 ICV4IHBsbF9tdXggJXgiLAorCSAgICBwbGxfMTBubS0+aWQsIGNhY2hlZC0+cGxsX291dF9kaXYs IGNhY2hlZC0+Yml0X2Nsa19kaXYsCisJICAgIGNhY2hlZC0+cGl4X2Nsa19kaXYsIGNhY2hlZC0+ cGxsX211eCk7CiB9CiAKIHN0YXRpYyBpbnQgZHNpX3BsbF8xMG5tX3Jlc3RvcmVfc3RhdGUoc3Ry dWN0IG1zbV9kc2lfcGxsICpwbGwpCiB7CiAJc3RydWN0IGRzaV9wbGxfMTBubSAqcGxsXzEwbm0g PSB0b19wbGxfMTBubShwbGwpOworCXN0cnVjdCBwbGxfMTBubV9jYWNoZWRfc3RhdGUgKmNhY2hl ZCA9ICZwbGxfMTBubS0+Y2FjaGVkX3N0YXRlOworCXZvaWQgX19pb21lbSAqcGh5X2Jhc2UgPSBw bGxfMTBubS0+cGh5X2Ntbl9tbWlvOworCXUzMiB2YWw7CisKKwl2YWwgPSBwbGxfcmVhZChwbGxf MTBubS0+bW1pbyArIFJFR19EU0lfMTBubV9QSFlfUExMX1BMTF9PVVRESVZfUkFURSk7CisJdmFs ICY9IH4weDM7CisJdmFsIHw9IGNhY2hlZC0+cGxsX291dF9kaXY7CisJcGxsX3dyaXRlKHBsbF8x MG5tLT5tbWlvICsgUkVHX0RTSV8xMG5tX1BIWV9QTExfUExMX09VVERJVl9SQVRFLCB2YWwpOwor CisJcGxsX3dyaXRlKHBoeV9iYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9DTU5fQ0xLX0NGRzAsCisJ CSAgY2FjaGVkLT5iaXRfY2xrX2RpdiB8IChjYWNoZWQtPnBpeF9jbGtfZGl2IDw8IDQpKTsKKwor CXZhbCA9IHBsbF9yZWFkKHBoeV9iYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9DTU5fQ0xLX0NGRzEp OworCXZhbCAmPSB+MHgzOworCXZhbCB8PSBjYWNoZWQtPnBsbF9tdXg7CisJcGxsX3dyaXRlKHBo eV9iYXNlICsgUkVHX0RTSV8xMG5tX1BIWV9DTU5fQ0xLX0NGRzEsIHZhbCk7CiAKIAlEQkcoIkRT SSBQTEwlZCIsIHBsbF8xMG5tLT5pZCk7CiAKQEAgLTkwLDkgKzU2OSwyOSBAQCBzdGF0aWMgaW50 IGRzaV9wbGxfMTBubV9zZXRfdXNlY2FzZShzdHJ1Y3QgbXNtX2RzaV9wbGwgKnBsbCwKIAkJCQkg ICAgZW51bSBtc21fZHNpX3BoeV91c2VjYXNlIHVjKQogewogCXN0cnVjdCBkc2lfcGxsXzEwbm0g KnBsbF8xMG5tID0gdG9fcGxsXzEwbm0ocGxsKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwbGxf MTBubS0+cGh5X2Ntbl9tbWlvOworCXUzMiBkYXRhID0gMHgwOwkvKiBpbnRlcm5hbCBQTEwgKi8K IAogCURCRygiRFNJIFBMTCVkIiwgcGxsXzEwbm0tPmlkKTsKIAorCXN3aXRjaCAodWMpIHsKKwlj YXNlIE1TTV9EU0lfUEhZX1NUQU5EQUxPTkU6CisJCWJyZWFrOworCWNhc2UgTVNNX0RTSV9QSFlf TUFTVEVSOgorCQlwbGxfMTBubS0+c2xhdmUgPSBwbGxfMTBubV9saXN0WyhwbGxfMTBubS0+aWQg KyAxKSAlIERTSV9NQVhdOworCQlicmVhazsKKwljYXNlIE1TTV9EU0lfUEhZX1NMQVZFOgorCQlk YXRhID0gMHgxOyAvKiBleHRlcm5hbCBQTEwgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJLyogc2V0IFBMTCBzcmMgKi8KKwlwbGxfd3JpdGUoYmFzZSAr IFJFR19EU0lfMTBubV9QSFlfQ01OX0NMS19DRkcxLCAoZGF0YSA8PCAyKSk7CisKKwlwbGxfMTBu bS0+dWMgPSB1YzsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDEsMTMgKzYwMCwxNCBAQCBzdGF0 aWMgaW50IGRzaV9wbGxfMTBubV9nZXRfcHJvdmlkZXIoc3RydWN0IG1zbV9kc2lfcGxsICpwbGws CiAJCQkJICAgICBzdHJ1Y3QgY2xrICoqcGl4ZWxfY2xrX3Byb3ZpZGVyKQogewogCXN0cnVjdCBk c2lfcGxsXzEwbm0gKnBsbF8xMG5tID0gdG9fcGxsXzEwbm0ocGxsKTsKKwlzdHJ1Y3QgY2xrX2h3 X29uZWNlbGxfZGF0YSAqaHdfZGF0YSA9IHBsbF8xMG5tLT5od19kYXRhOwogCiAJREJHKCJEU0kg UExMJWQiLCBwbGxfMTBubS0+aWQpOwogCiAJaWYgKGJ5dGVfY2xrX3Byb3ZpZGVyKQotCQkqYnl0 ZV9jbGtfcHJvdmlkZXIgPSBOVUxMOworCQkqYnl0ZV9jbGtfcHJvdmlkZXIgPSBod19kYXRhLT5o d3NbRFNJX0JZVEVfUExMX0NMS10tPmNsazsKIAlpZiAocGl4ZWxfY2xrX3Byb3ZpZGVyKQotCQkq cGl4ZWxfY2xrX3Byb3ZpZGVyID0gTlVMTDsKKwkJKnBpeGVsX2Nsa19wcm92aWRlciA9IGh3X2Rh dGEtPmh3c1tEU0lfUElYRUxfUExMX0NMS10tPmNsazsKIAogCXJldHVybiAwOwogfQpAQCAtMTE5 LDggKzYxOSwxNTEgQEAgc3RhdGljIHZvaWQgZHNpX3BsbF8xMG5tX2Rlc3Ryb3koc3RydWN0IG1z bV9kc2lfcGxsICpwbGwpCiAJREJHKCJEU0kgUExMJWQiLCBwbGxfMTBubS0+aWQpOwogfQogCisv KgorICogVGhlIHBvc3QgZGl2aWRlcnMgYW5kIG11eCBjbG9ja3MgYXJlIGNyZWF0ZWQgdXNpbmcg dGhlIHN0YW5kYXJkIGRpdmlkZXIgYW5kCisgKiBtdXggQVBJLiBVbmxpa2UgdGhlIDE0bm0gUEhZ LCB0aGUgc2xhdmUgUExMIGRvZXNuJ3QgbmVlZCBpdHMgZGl2aWRlcnMvbXV4CisgKiBzdGF0ZSB0 byBmb2xsb3cgdGhlIG1hc3RlciBQTEwncyBkaXZpZGVyL211eCBzdGF0ZS4gVGhlcmVmb3JlLCB3 ZSBkb24ndAorICogcmVxdWlyZSBzcGVjaWFsIGNsb2NrIG9wcyB0aGF0IGFsc28gY29uZmlndXJl IHRoZSBzbGF2ZSBQTEwgcmVnaXN0ZXJzCisgKi8KIHN0YXRpYyBpbnQgcGxsXzEwbm1fcmVnaXN0 ZXIoc3RydWN0IGRzaV9wbGxfMTBubSAqcGxsXzEwbm0pCiB7CisJY2hhciBjbGtfbmFtZVszMl0s IHBhcmVudFszMl0sIHZjb19uYW1lWzMyXTsKKwljaGFyIHBhcmVudDJbMzJdLCBwYXJlbnQzWzMy XSwgcGFyZW50NFszMl07CisJc3RydWN0IGNsa19pbml0X2RhdGEgdmNvX2luaXQgPSB7CisJCS5w YXJlbnRfbmFtZXMgPSAoY29uc3QgY2hhciAqW10peyAieG8iIH0sCisJCS5udW1fcGFyZW50cyA9 IDEsCisJCS5uYW1lID0gdmNvX25hbWUsCisJCS5mbGFncyA9IENMS19JR05PUkVfVU5VU0VELAor CQkub3BzID0gJmNsa19vcHNfZHNpX3BsbF8xMG5tX3ZjbywKKwl9OworCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZwbGxfMTBubS0+cGRldi0+ZGV2OworCXN0cnVjdCBjbGtfaHcgKipod3MgPSBwbGxf MTBubS0+aHdzOworCXN0cnVjdCBjbGtfaHdfb25lY2VsbF9kYXRhICpod19kYXRhOworCXN0cnVj dCBjbGtfaHcgKmh3OworCWludCBudW0gPSAwOworCWludCByZXQ7CisKKwlEQkcoIkRTSSVkIiwg cGxsXzEwbm0tPmlkKTsKKworCWh3X2RhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmh3 X2RhdGEpICsKKwkJCSAgICAgICBOVU1fUFJPVklERURfQ0xLUyAqIHNpemVvZihzdHJ1Y3QgY2xr X2h3ICopLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghaHdfZGF0YSkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlzbnByaW50Zih2Y29fbmFtZSwgMzIsICJkc2klZHZjb19jbGsiLCBwbGxf MTBubS0+aWQpOworCXBsbF8xMG5tLT5iYXNlLmNsa19ody5pbml0ID0gJnZjb19pbml0OworCisJ cmV0ID0gY2xrX2h3X3JlZ2lzdGVyKGRldiwgJnBsbF8xMG5tLT5iYXNlLmNsa19odyk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWh3c1tudW0rK10gPSAmcGxsXzEwbm0tPmJhc2UuY2xr X2h3OworCisJc25wcmludGYoY2xrX25hbWUsIDMyLCAiZHNpJWRfcGxsX291dF9kaXZfY2xrIiwg cGxsXzEwbm0tPmlkKTsKKwlzbnByaW50ZihwYXJlbnQsIDMyLCAiZHNpJWR2Y29fY2xrIiwgcGxs XzEwbm0tPmlkKTsKKworCWh3ID0gY2xrX2h3X3JlZ2lzdGVyX2RpdmlkZXIoZGV2LCBjbGtfbmFt ZSwKKwkJCQkgICAgIHBhcmVudCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCwKKwkJCQkgICAgIHBsbF8x MG5tLT5tbWlvICsKKwkJCQkgICAgIFJFR19EU0lfMTBubV9QSFlfUExMX1BMTF9PVVRESVZfUkFU RSwKKwkJCQkgICAgIDAsIDIsIENMS19ESVZJREVSX1BPV0VSX09GX1RXTywgTlVMTCk7CisJaWYg KElTX0VSUihodykpCisJCXJldHVybiBQVFJfRVJSKGh3KTsKKworCWh3c1tudW0rK10gPSBodzsK KworCXNucHJpbnRmKGNsa19uYW1lLCAzMiwgImRzaSVkX3BsbF9iaXRfY2xrIiwgcGxsXzEwbm0t PmlkKTsKKwlzbnByaW50ZihwYXJlbnQsIDMyLCAiZHNpJWRfcGxsX291dF9kaXZfY2xrIiwgcGxs XzEwbm0tPmlkKTsKKworCS8qIEJJVCBDTEs6IERJVl9DVFJMXzNfMCAqLworCWh3ID0gY2xrX2h3 X3JlZ2lzdGVyX2RpdmlkZXIoZGV2LCBjbGtfbmFtZSwgcGFyZW50LAorCQkJCSAgICAgQ0xLX1NF VF9SQVRFX1BBUkVOVCwKKwkJCQkgICAgIHBsbF8xMG5tLT5waHlfY21uX21taW8gKworCQkJCSAg ICAgUkVHX0RTSV8xMG5tX1BIWV9DTU5fQ0xLX0NGRzAsCisJCQkJICAgICAwLCA0LCBDTEtfRElW SURFUl9PTkVfQkFTRUQsCisJCQkJICAgICAmcGxsXzEwbm0tPnBvc3RkaXZfbG9jayk7CisJaWYg KElTX0VSUihodykpCisJCXJldHVybiBQVFJfRVJSKGh3KTsKKworCWh3c1tudW0rK10gPSBodzsK KworCXNucHJpbnRmKGNsa19uYW1lLCAzMiwgImRzaSVkcGxsYnl0ZSIsIHBsbF8xMG5tLT5pZCk7 CisJc25wcmludGYocGFyZW50LCAzMiwgImRzaSVkX3BsbF9iaXRfY2xrIiwgcGxsXzEwbm0tPmlk KTsKKworCS8qIERTSSBCeXRlIGNsb2NrID0gVkNPX0NMSyAvIE9VVF9ESVYgLyBCSVRfRElWIC8g OCAqLworCWh3ID0gY2xrX2h3X3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihkZXYsIGNsa19uYW1lLCBw YXJlbnQsCisJCQkJCSAgQ0xLX1NFVF9SQVRFX1BBUkVOVCwgMSwgOCk7CisJaWYgKElTX0VSUiho dykpCisJCXJldHVybiBQVFJfRVJSKGh3KTsKKworCWh3c1tudW0rK10gPSBodzsKKwlod19kYXRh LT5od3NbRFNJX0JZVEVfUExMX0NMS10gPSBodzsKKworCXNucHJpbnRmKGNsa19uYW1lLCAzMiwg ImRzaSVkX3BsbF9ieV8yX2JpdF9jbGsiLCBwbGxfMTBubS0+aWQpOworCXNucHJpbnRmKHBhcmVu dCwgMzIsICJkc2klZF9wbGxfYml0X2NsayIsIHBsbF8xMG5tLT5pZCk7CisKKwlodyA9IGNsa19o d19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoZGV2LCBjbGtfbmFtZSwgcGFyZW50LAorCQkJCQkgIDAs IDEsIDIpOworCWlmIChJU19FUlIoaHcpKQorCQlyZXR1cm4gUFRSX0VSUihodyk7CisKKwlod3Nb bnVtKytdID0gaHc7CisKKwlzbnByaW50ZihjbGtfbmFtZSwgMzIsICJkc2klZF9wbGxfcG9zdF9v dXRfZGl2X2NsayIsIHBsbF8xMG5tLT5pZCk7CisJc25wcmludGYocGFyZW50LCAzMiwgImRzaSVk X3BsbF9vdXRfZGl2X2NsayIsIHBsbF8xMG5tLT5pZCk7CisKKwlodyA9IGNsa19od19yZWdpc3Rl cl9maXhlZF9mYWN0b3IoZGV2LCBjbGtfbmFtZSwgcGFyZW50LAorCQkJCQkgIDAsIDEsIDQpOwor CWlmIChJU19FUlIoaHcpKQorCQlyZXR1cm4gUFRSX0VSUihodyk7CisKKwlod3NbbnVtKytdID0g aHc7CisKKwlzbnByaW50ZihjbGtfbmFtZSwgMzIsICJkc2klZF9wY2xrX211eCIsIHBsbF8xMG5t LT5pZCk7CisJc25wcmludGYocGFyZW50LCAzMiwgImRzaSVkX3BsbF9iaXRfY2xrIiwgcGxsXzEw bm0tPmlkKTsKKwlzbnByaW50ZihwYXJlbnQyLCAzMiwgImRzaSVkX3BsbF9ieV8yX2JpdF9jbGsi LCBwbGxfMTBubS0+aWQpOworCXNucHJpbnRmKHBhcmVudDMsIDMyLCAiZHNpJWRfcGxsX291dF9k aXZfY2xrIiwgcGxsXzEwbm0tPmlkKTsKKwlzbnByaW50ZihwYXJlbnQ0LCAzMiwgImRzaSVkX3Bs bF9wb3N0X291dF9kaXZfY2xrIiwgcGxsXzEwbm0tPmlkKTsKKworCWh3ID0gY2xrX2h3X3JlZ2lz dGVyX211eChkZXYsIGNsa19uYW1lLAorCQkJCSAoY29uc3QgY2hhciAqW10peworCQkJCSBwYXJl bnQsIHBhcmVudDIsIHBhcmVudDMsIHBhcmVudDQKKwkJCQkgfSwgNCwgMCwgcGxsXzEwbm0tPnBo eV9jbW5fbW1pbyArCisJCQkJIFJFR19EU0lfMTBubV9QSFlfQ01OX0NMS19DRkcxLAorCQkJCSAw LCAyLCAwLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGh3KSkKKwkJcmV0dXJuIFBUUl9FUlIoaHcpOwor CisJaHdzW251bSsrXSA9IGh3OworCisJc25wcmludGYoY2xrX25hbWUsIDMyLCAiZHNpJWRwbGwi LCBwbGxfMTBubS0+aWQpOworCXNucHJpbnRmKHBhcmVudCwgMzIsICJkc2klZF9wY2xrX211eCIs IHBsbF8xMG5tLT5pZCk7CisKKwkvKiBQSVggQ0xLIERJViA6IERJVl9DVFJMXzdfNCovCisJaHcg PSBjbGtfaHdfcmVnaXN0ZXJfZGl2aWRlcihkZXYsIGNsa19uYW1lLCBwYXJlbnQsCisJCQkJICAg ICAwLCBwbGxfMTBubS0+cGh5X2Ntbl9tbWlvICsKKwkJCQkJUkVHX0RTSV8xMG5tX1BIWV9DTU5f Q0xLX0NGRzAsCisJCQkJICAgICA0LCA0LCBDTEtfRElWSURFUl9PTkVfQkFTRUQsCisJCQkJICAg ICAmcGxsXzEwbm0tPnBvc3RkaXZfbG9jayk7CisJaWYgKElTX0VSUihodykpCisJCXJldHVybiBQ VFJfRVJSKGh3KTsKKworCWh3c1tudW0rK10gPSBodzsKKwlod19kYXRhLT5od3NbRFNJX1BJWEVM X1BMTF9DTEtdID0gaHc7CisKKwlwbGxfMTBubS0+bnVtX2h3cyA9IG51bTsKKworCWh3X2RhdGEt Pm51bSA9IE5VTV9QUk9WSURFRF9DTEtTOworCXBsbF8xMG5tLT5od19kYXRhID0gaHdfZGF0YTsK KworCXJldCA9IG9mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfaHdf b25lY2VsbF9nZXQsCisJCQkJICAgICBwbGxfMTBubS0+aHdfZGF0YSk7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBjbGsgcHJvdmlkZXI6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0xNzIsNSArODE1 LDggQEAgc3RydWN0IG1zbV9kc2lfcGxsICptc21fZHNpX3BsbF8xMG5tX2luaXQoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlkKQogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0K IAorCS8qIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gd2UgaGF2ZSBwcm9wZXIgZGlzcGxheSBoYW5k b3ZlciBzdXBwb3J0ICovCisJbXNtX2RzaV9wbGxfc2F2ZV9zdGF0ZShwbGwpOworCiAJcmV0dXJu IHBsbDsKIH0KLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1l bWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmhvc3RlZCBieSBUaGUgTGludXggRm91bmRh dGlvbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==