From: Jonathan Marek Subject: [PATCH v2 6/9] drm/msm/adreno: add a2xx Date: Wed, 21 Nov 2018 20:52:32 -0500 Message-ID: <20181122015237.14534-6-jonathan@marek.ca> References: <20181122015237.14534-1-jonathan@marek.ca> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181122015237.14534-1-jonathan-eSc4qw6YbEQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Archit Taneja , Kees Cook , David Airlie , open list , Jordan Crouse , "open list:DRM DRIVER FOR MSM ADRENO GPU" , Bjorn Andersson , Rob Clark , Chris.Healy-c8ZVq/bFV1I@public.gmane.org, "open list:DRM DRIVER FOR MSM ADRENO GPU" , Nicolas Dechesne , festevam-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Daniel Mack List-Id: dri-devel@lists.freedesktop.org ZGVyaXZlZCBmcm9tIHRoZSBhM3h4IGRyaXZlciBhbmQgdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcg aGFyZHdhcmU6CmlteDUxLXppaS1yZHUxIChhMjAwIHdpdGggMTI4a2IgZ21lbSkKaW14NTMtcXNy YiAoYTIwMCkKbXNtODA2MC10ZW5kZXJsb2luIChhMjIwKQoKU2lnbmVkLW9mZi1ieTogSm9uYXRo YW4gTWFyZWsgPGpvbmF0aGFuQG1hcmVrLmNhPgpSZXZpZXdlZC1ieTogSm9yZGFuIENyb3VzZSA8 amNyb3VzZUBjb2RlYXVyb3JhLm9yZz4KLS0tCnYyOiAKLWZhaWwgd2hlbiBNTVUgaXMgbm90IHBy ZXNlbnQgKGluc3RlYWQgb2YganVzdCBhIHdhcm5pbmcsIG1hdGNoZXMgYTN4eCkKLXJlbW92ZWQg d2hpdGVzcGFjZSBhbmQgcmVtb3ZlZCAiWFhYIiBpbiBjb21tZW50cwoKIGRyaXZlcnMvZ3B1L2Ry bS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2FkcmVuby9hMnh4X2dwdS5jICAgICAgfCA0NDYgKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hMnh4X2dwdS5oICAgICAgfCAgMjEgKwogZHJpdmVycy9n cHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2RldmljZS5jIHwgIDMzICsrCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMgICAgfCAgMjcgKy0KIGRyaXZlcnMvZ3B1L2RybS9t c20vYWRyZW5vL2FkcmVub19ncHUuaCAgICB8ICAxNSArCiA2IGZpbGVzIGNoYW5nZWQsIDUzNSBp bnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vYWRyZW5vL2EyeHhfZ3B1LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2FkcmVuby9hMnh4X2dwdS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXggMTlh YjUyMWQ0YzNhLi4wMTcwNzY2MzkzZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v TWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQpAQCAtNiw2ICs2LDcg QEAgY2NmbGFncy0kKENPTkZJR19EUk1fTVNNX0RTSSkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vbXNt L2RzaQogbXNtLXkgOj0gXAogCWFkcmVuby9hZHJlbm9fZGV2aWNlLm8gXAogCWFkcmVuby9hZHJl bm9fZ3B1Lm8gXAorCWFkcmVuby9hMnh4X2dwdS5vIFwKIAlhZHJlbm8vYTN4eF9ncHUubyBcCiAJ YWRyZW5vL2E0eHhfZ3B1Lm8gXAogCWFkcmVuby9hNXh4X2dwdS5vIFwKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2EyeHhfZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2FkcmVuby9hMnh4X2dwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uOTM2MjQyZjY5ZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9h ZHJlbm8vYTJ4eF9ncHUuYwpAQCAtMCwwICsxLDQ0NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAoYykgMjAxOCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi8KKworI2luY2x1ZGUgImEyeHhfZ3B1LmgiCisKK2V4 dGVybiBib29sIGhhbmdfZGVidWc7CisKK3N0YXRpYyB2b2lkIGEyeHhfZHVtcChzdHJ1Y3QgbXNt X2dwdSAqZ3B1KTsKK3N0YXRpYyBib29sIGEyeHhfaWRsZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsK Kworc3RhdGljIGJvb2wgYTJ4eF9tZV9pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3Ry dWN0IG1zbV9yaW5nYnVmZmVyICpyaW5nID0gZ3B1LT5yYlswXTsKKworCU9VVF9QS1QzKHJpbmcs IENQX01FX0lOSVQsIDE4KTsKKworCS8qIEFsbCBmaWVsZHMgcHJlc2VudCAoYml0cyA5OjApICov CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDNmZik7CisJLyogRGlzYWJsZS9FbmFibGUgUmVhbC1U aW1lIFN0cmVhbSBwcm9jZXNzaW5nIChwcmVzZW50IGJ1dCBpZ25vcmVkKSAqLworCU9VVF9SSU5H KHJpbmcsIDB4MDAwMDAwMDApOworCS8qIEVuYWJsZSAoMkQgPC0+IDNEKSBpbXBsaWNpdCBzeW5j aHJvbml6YXRpb24gKHByZXNlbnQgYnV0IGlnbm9yZWQpICovCisJT1VUX1JJTkcocmluZywgMHgw MDAwMDAwMCk7CisKKwlPVVRfUklORyhyaW5nLCBSRUdfQTJYWF9SQl9TVVJGQUNFX0lORk8gLSAw eDIwMDApOworCU9VVF9SSU5HKHJpbmcsIFJFR19BMlhYX1BBX1NDX1dJTkRPV19PRkZTRVQgLSAw eDIwMDApOworCU9VVF9SSU5HKHJpbmcsIFJFR19BMlhYX1ZHVF9NQVhfVlRYX0lORFggLSAweDIw MDApOworCU9VVF9SSU5HKHJpbmcsIFJFR19BMlhYX1NRX1BST0dSQU1fQ05UTCAtIDB4MjAwMCk7 CisJT1VUX1JJTkcocmluZywgUkVHX0EyWFhfUkJfREVQVEhDT05UUk9MIC0gMHgyMDAwKTsKKwlP VVRfUklORyhyaW5nLCBSRUdfQTJYWF9QQV9TVV9QT0lOVF9TSVpFIC0gMHgyMDAwKTsKKwlPVVRf UklORyhyaW5nLCBSRUdfQTJYWF9QQV9TQ19MSU5FX0NOVEwgLSAweDIwMDApOworCU9VVF9SSU5H KHJpbmcsIFJFR19BMlhYX1BBX1NVX1BPTFlfT0ZGU0VUX0ZST05UX1NDQUxFIC0gMHgyMDAwKTsK KworCS8qIFZlcnRleCBhbmQgUGl4ZWwgU2hhZGVyIFN0YXJ0IEFkZHJlc3NlcyBpbiBpbnN0cnVj dGlvbnMKKwkgKiAoMyBEV09SRFMgcGVyIGluc3RydWN0aW9uKSAqLworCU9VVF9SSU5HKHJpbmcs IDB4ODAwMDAxODApOworCS8qIE1heGltdW0gQ29udGV4dHMgKi8KKwlPVVRfUklORyhyaW5nLCAw eDAwMDAwMDAxKTsKKwkvKiBXcml0ZSBDb25maXJtIEludGVydmFsIGFuZCBUaGUgQ1Agd2lsbCB3 YWl0IHRoZQorCSAqIHdhaXRfaW50ZXJ2YWwgKiAxNiBjbG9ja3MgYmV0d2VlbiBwb2xsaW5nICAq LworCU9VVF9SSU5HKHJpbmcsIDB4MDAwMDAwMDApOworCS8qIE5RIGFuZCBFeHRlcm5hbCBNZW1v cnkgU3dhcCAqLworCU9VVF9SSU5HKHJpbmcsIDB4MDAwMDAwMDApOworCS8qIHByb3RlY3RlZCBt b2RlIGVycm9yIGNoZWNraW5nICgweDFmMiBpcyBSRUdfQVhYWF9DUF9JTlRfQ05UTCkgKi8KKwlP VVRfUklORyhyaW5nLCAweDIwMDAwMWYyKTsKKwkvKiBEaXNhYmxlIGhlYWRlciBkdW1waW5nIGFu ZCBIZWFkZXIgZHVtcCBhZGRyZXNzICovCisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisJ LyogSGVhZGVyIGR1bXAgc2l6ZSAqLworCU9VVF9SSU5HKHJpbmcsIDB4MDAwMDAwMDApOworCisJ LyogZW5hYmxlIHByb3RlY3RlZCBtb2RlICovCisJT1VUX1BLVDMocmluZywgQ1BfU0VUX1BST1RF Q1RFRF9NT0RFLCAxKTsKKwlPVVRfUklORyhyaW5nLCAxKTsKKworCWdwdS0+ZnVuY3MtPmZsdXNo KGdwdSwgcmluZyk7CisJcmV0dXJuIGEyeHhfaWRsZShncHUpOworfQorCitzdGF0aWMgaW50IGEy eHhfaHdfaW5pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICph ZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXVpbnQzMl90ICpwdHIsIGxlbjsKKwlp bnQgaSwgcmV0OworCisJREJHKCIlcyIsIGdwdS0+bmFtZSk7CisKKwlncHVfd3JpdGUoZ3B1LCBS RUdfQTJYWF9SQkJNX1BNX09WRVJSSURFMSwgMHhmZmZmZmZmZSk7CisJZ3B1X3dyaXRlKGdwdSwg UkVHX0EyWFhfUkJCTV9QTV9PVkVSUklERTIsIDB4ZmZmZmZmZmYpOworCisJLyogbm90ZToga2dz bCB1c2VzIDB4MDAwMDAwMDEgYWZ0ZXIgZmlyc3QgcmVzZXQgb24gYTIyeCAqLworCWdwdV93cml0 ZShncHUsIFJFR19BMlhYX1JCQk1fU09GVF9SRVNFVCwgMHhmZmZmZmZmZik7CisJbXNsZWVwKDMw KTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTJYWF9SQkJNX1NPRlRfUkVTRVQsIDB4MDAwMDAwMDAp OworCisJaWYgKGFkcmVub19pc19hMjI1KGFkcmVub19ncHUpKQorCQlncHVfd3JpdGUoZ3B1LCBS RUdfQTJYWF9TUV9GTE9XX0NPTlRST0wsIDB4MTgwMDAwMDApOworCisJLyogbm90ZToga2dzbCB1 c2VzIDB4MDAwMGZmZmYgZm9yIGEyMHggKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTJYWF9SQkJN X0NOVEwsIDB4MDAwMDQ0NDIpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0EyWFhfTUhfTU1VX0NP TkZJRywgMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0EyWFhfTUhfTU1VX01QVV9CQVNFLCAwKTsK KwlncHVfd3JpdGUoZ3B1LCBSRUdfQTJYWF9NSF9NTVVfTVBVX0VORCwgMHhmZmZmZjAwMCk7CisJ Z3B1X3dyaXRlKGdwdSwgUkVHX0EyWFhfTUhfQVJCSVRFUl9DT05GSUcsCisJCUEyWFhfTUhfQVJC SVRFUl9DT05GSUdfU0FNRV9QQUdFX0xJTUlUKDE2KSB8CisJCUEyWFhfTUhfQVJCSVRFUl9DT05G SUdfTDFfQVJCX0VOQUJMRSB8CisJCUEyWFhfTUhfQVJCSVRFUl9DT05GSUdfTDFfQVJCX0hPTERf RU5BQkxFIHwKKwkJQTJYWF9NSF9BUkJJVEVSX0NPTkZJR19QQUdFX1NJWkUoMSkgfAorCQlBMlhY X01IX0FSQklURVJfQ09ORklHX1RDX1JFT1JERVJfRU5BQkxFIHwKKwkJQTJYWF9NSF9BUkJJVEVS X0NPTkZJR19UQ19BUkJfSE9MRF9FTkFCTEUgfAorCQlBMlhYX01IX0FSQklURVJfQ09ORklHX0lO X0ZMSUdIVF9MSU1JVF9FTkFCTEUgfAorCQlBMlhYX01IX0FSQklURVJfQ09ORklHX0lOX0ZMSUdI VF9MSU1JVCg4KSB8CisJCUEyWFhfTUhfQVJCSVRFUl9DT05GSUdfQ1BfQ0xOVF9FTkFCTEUgfAor CQlBMlhYX01IX0FSQklURVJfQ09ORklHX1ZHVF9DTE5UX0VOQUJMRSB8CisJCUEyWFhfTUhfQVJC SVRFUl9DT05GSUdfVENfQ0xOVF9FTkFCTEUgfAorCQlBMlhYX01IX0FSQklURVJfQ09ORklHX1JC X0NMTlRfRU5BQkxFIHwKKwkJQTJYWF9NSF9BUkJJVEVSX0NPTkZJR19QQV9DTE5UX0VOQUJMRSk7 CisJaWYgKCFhZHJlbm9faXNfYTIweChhZHJlbm9fZ3B1KSkKKwkJZ3B1X3dyaXRlKGdwdSwgUkVH X0EyWFhfTUhfQ0xOVF9JTlRGX0NUUkxfQ09ORklHMSwgMHgwMDAzMmYwNyk7CisKKwlncHVfd3Jp dGUoZ3B1LCBSRUdfQTJYWF9TUV9WU19QUk9HUkFNLCAweDAwMDAwMDAwKTsKKwlncHVfd3JpdGUo Z3B1LCBSRUdfQTJYWF9TUV9QU19QUk9HUkFNLCAweDAwMDAwMDAwKTsKKworCWdwdV93cml0ZShn cHUsIFJFR19BMlhYX1JCQk1fUE1fT1ZFUlJJREUxLCAwKTsgLyogMHgyMDAgZm9yIG1zbTg5NjA/ ICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0EyWFhfUkJCTV9QTV9PVkVSUklERTIsIDApOyAvKiAw eDgwLzB4MWEwIGZvciBhMjJ4PyAqLworCisJLyogbm90ZTogZ3NsIGRvZXNuJ3Qgc2V0IHRoaXMg Ki8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTJYWF9SQkJNX0RFQlVHLCAweDAwMDgwMDAwKTsKKwor CWdwdV93cml0ZShncHUsIFJFR19BMlhYX1JCQk1fSU5UX0NOVEwsIDApOworCWdwdV93cml0ZShn cHUsIFJFR19BWFhYX0NQX0lOVF9DTlRMLCAweDgwMDAwMDAwKTsgLyogUkIgSU5UICovCisJZ3B1 X3dyaXRlKGdwdSwgUkVHX0EyWFhfU1FfSU5UX0NOVEwsIDApOworCisJZm9yIChpID0gMzsgaSA8 PSA1OyBpKyspCisJCWlmICgoU1pfMTZLIDw8IGkpID09IGFkcmVub19ncHUtPmdtZW0pCisJCQli cmVhazsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTJYWF9SQl9FRFJBTV9JTkZPLCBpKTsKKworCXJl dCA9IGFkcmVub19od19pbml0KGdwdSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8q IE5PVEU6IFBNNC9taWNyby1lbmdpbmUgZmlybXdhcmUgcmVnaXN0ZXJzIGxvb2sgdG8gYmUgdGhl IHNhbWUKKwkgKiBmb3IgYTJ4eCBhbmQgYTN4eC4uIHdlIGNvdWxkIHBvc3NpYmx5IHB1c2ggdGhh dCBwYXJ0IGRvd24gdG8KKwkgKiBhZHJlbm9fZ3B1IGJhc2UgY2xhc3MuICBPciBwdXNoIGJvdGgg UE00IGFuZCBQRlAgYnV0CisJICogcGFyYW1ldGVyaXplIHRoZSBwZnAgdWNvZGUgYWRkci9kYXRh IHJlZ2lzdGVycy4uCisJICovCisKKwkvKiBMb2FkIFBNNDogKi8KKwlwdHIgPSAodWludDMyX3Qg KikoYWRyZW5vX2dwdS0+ZndbQURSRU5PX0ZXX1BNNF0tPmRhdGEpOworCWxlbiA9IGFkcmVub19n cHUtPmZ3W0FEUkVOT19GV19QTTRdLT5zaXplIC8gNDsKKwlEQkcoImxvYWRpbmcgUE00IHVjb2Rl IHZlcnNpb246ICV4IiwgcHRyWzFdKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BWFhYX0NQX0RF QlVHLCAweDAyMDAwMDAwKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQVhYWF9DUF9NRV9SQU1fV0FE RFIsIDApOworCWZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykKKwkJZ3B1X3dyaXRlKGdwdSwgUkVH X0FYWFhfQ1BfTUVfUkFNX0RBVEEsIHB0cltpXSk7CisKKwkvKiBMb2FkIFBGUDogKi8KKwlwdHIg PSAodWludDMyX3QgKikoYWRyZW5vX2dwdS0+ZndbQURSRU5PX0ZXX1BGUF0tPmRhdGEpOworCWxl biA9IGFkcmVub19ncHUtPmZ3W0FEUkVOT19GV19QRlBdLT5zaXplIC8gNDsKKwlEQkcoImxvYWRp bmcgUEZQIHVjb2RlIHZlcnNpb246ICV4IiwgcHRyWzVdKTsKKworCWdwdV93cml0ZShncHUsIFJF R19BMlhYX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwlmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKysp CisJCWdwdV93cml0ZShncHUsIFJFR19BMlhYX0NQX1BGUF9VQ09ERV9EQVRBLCBwdHJbaV0pOwor CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0FYWFhfQ1BfUVVFVUVfVEhSRVNIT0xEUywgMHgwMDBDMDgw NCk7CisKKwkvKiBjbGVhciBNRV9IQUxUIHRvIHN0YXJ0IG1pY3JvIGVuZ2luZSAqLworCWdwdV93 cml0ZShncHUsIFJFR19BWFhYX0NQX01FX0NOVEwsIDApOworCisJcmV0dXJuIGEyeHhfbWVfaW5p dChncHUpID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGEyeHhfcmVjb3ZlcihzdHJ1 Y3QgbXNtX2dwdSAqZ3B1KQoreworCWludCBpOworCisJYWRyZW5vX2R1bXBfaW5mbyhncHUpOwor CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlwcmludGsoIkNQX1NDUkFUQ0hfUkVHJWQ6 ICV1XG4iLCBpLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdfQVhYWF9DUF9TQ1JBVENIX1JFRzAgKyBp KSk7CisJfQorCisJLyogZHVtcCByZWdpc3RlcnMgYmVmb3JlIHJlc2V0dGluZyBncHUsIGlmIGVu YWJsZWQ6ICovCisJaWYgKGhhbmdfZGVidWcpCisJCWEyeHhfZHVtcChncHUpOworCisJZ3B1X3dy aXRlKGdwdSwgUkVHX0EyWFhfUkJCTV9TT0ZUX1JFU0VULCAxKTsKKwlncHVfcmVhZChncHUsIFJF R19BMlhYX1JCQk1fU09GVF9SRVNFVCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0EyWFhfUkJCTV9T T0ZUX1JFU0VULCAwKTsKKwlhZHJlbm9fcmVjb3ZlcihncHUpOworfQorCitzdGF0aWMgdm9pZCBh Mnh4X2Rlc3Ryb3koc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAq YWRyZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTJ4eF9ncHUgKmEyeHhf Z3B1ID0gdG9fYTJ4eF9ncHUoYWRyZW5vX2dwdSk7CisKKwlEQkcoIiVzIiwgZ3B1LT5uYW1lKTsK KworCWFkcmVub19ncHVfY2xlYW51cChhZHJlbm9fZ3B1KTsKKworCWtmcmVlKGEyeHhfZ3B1KTsK K30KKworc3RhdGljIGJvb2wgYTJ4eF9pZGxlKHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJLyog d2FpdCBmb3IgcmluZ2J1ZmZlciB0byBkcmFpbjogKi8KKwlpZiAoIWFkcmVub19pZGxlKGdwdSwg Z3B1LT5yYlswXSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIHRoZW4gd2FpdCBmb3IgR1BVIHRv IGZpbmlzaDogKi8KKwlpZiAoc3Bpbl91bnRpbCghKGdwdV9yZWFkKGdwdSwgUkVHX0EyWFhfUkJC TV9TVEFUVVMpICYKKwkJCUEyWFhfUkJCTV9TVEFUVVNfR1VJX0FDVElWRSkpKSB7CisJCURSTV9F UlJPUigiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgR1BVIHRvIGlkbGUhXG4iLCBncHUtPm5hbWUp OworCisJCS8qIFRPRE8gbWF5YmUgd2UgbmVlZCB0byByZXNldCBHUFUgaGVyZSB0byByZWNvdmVy IGZyb20gaGFuZz8gKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQor CitzdGF0aWMgaXJxcmV0dXJuX3QgYTJ4eF9pcnEoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwl1 aW50MzJfdCBtc3RhdHVzLCBzdGF0dXM7CisKKwltc3RhdHVzID0gZ3B1X3JlYWQoZ3B1LCBSRUdf QTJYWF9NQVNURVJfSU5UX1NJR05BTCk7CisKKwlpZiAobXN0YXR1cyAmIEEyWFhfTUFTVEVSX0lO VF9TSUdOQUxfTUhfSU5UX1NUQVQpIHsKKwkJc3RhdHVzID0gZ3B1X3JlYWQoZ3B1LCBSRUdfQTJY WF9NSF9JTlRFUlJVUFRfU1RBVFVTKTsKKworCQlkZXZfd2FybihncHUtPmRldi0+ZGV2LCAiTUhf SU5UOiAlMDhYXG4iLCBzdGF0dXMpOworCQlkZXZfd2FybihncHUtPmRldi0+ZGV2LCAiTU1VX1BB R0VfRkFVTFQ6ICUwOFhcbiIsCisJCQlncHVfcmVhZChncHUsIFJFR19BMlhYX01IX01NVV9QQUdF X0ZBVUxUKSk7CisKKwkJZ3B1X3dyaXRlKGdwdSwgUkVHX0EyWFhfTUhfSU5URVJSVVBUX0NMRUFS LCBzdGF0dXMpOworCX0KKworCWlmIChtc3RhdHVzICYgQTJYWF9NQVNURVJfSU5UX1NJR05BTF9D UF9JTlRfU1RBVCkgeworCQlzdGF0dXMgPSBncHVfcmVhZChncHUsIFJFR19BWFhYX0NQX0lOVF9T VEFUVVMpOworCisJCS8qIG9ubHkgUkJfSU5UIGlzIGV4cGVjdGVkICovCisJCWlmIChzdGF0dXMg JiB+QVhYWF9DUF9JTlRfQ05UTF9SQl9JTlRfTUFTSykKKwkJCWRldl93YXJuKGdwdS0+ZGV2LT5k ZXYsICJDUF9JTlQ6ICUwOFhcbiIsIHN0YXR1cyk7CisKKwkJZ3B1X3dyaXRlKGdwdSwgUkVHX0FY WFhfQ1BfSU5UX0FDSywgc3RhdHVzKTsKKwl9CisKKwlpZiAobXN0YXR1cyAmIEEyWFhfTUFTVEVS X0lOVF9TSUdOQUxfUkJCTV9JTlRfU1RBVCkgeworCQlzdGF0dXMgPSBncHVfcmVhZChncHUsIFJF R19BMlhYX1JCQk1fSU5UX1NUQVRVUyk7CisKKwkJZGV2X3dhcm4oZ3B1LT5kZXYtPmRldiwgIlJC Qk1fSU5UOiAlMDhYXG4iLCBzdGF0dXMpOworCisJCWdwdV93cml0ZShncHUsIFJFR19BMlhYX1JC Qk1fSU5UX0FDSywgc3RhdHVzKTsKKwl9CisKKwltc21fZ3B1X3JldGlyZShncHUpOworCisJcmV0 dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGEyMDBfcmVn aXN0ZXJzW10gPSB7CisJMHgwMDAwLCAweDAwMDIsIDB4MDAwNCwgMHgwMDBCLCAweDAwM0IsIDB4 MDAzRCwgMHgwMDQwLCAweDAwNDQsCisJMHgwMDQ2LCAweDAwNDcsIDB4MDFDMCwgMHgwMUMxLCAw eDAxQzMsIDB4MDFDOCwgMHgwMUQ1LCAweDAxRDksCisJMHgwMURDLCAweDAxREQsIDB4MDFFQSwg MHgwMUVBLCAweDAxRUUsIDB4MDFGMywgMHgwMUY2LCAweDAxRjcsCisJMHgwMUZDLCAweDAxRkYs IDB4MDM5MSwgMHgwMzkyLCAweDAzOUIsIDB4MDM5RSwgMHgwM0IyLCAweDAzQjUsCisJMHgwM0I3 LCAweDAzQjcsIDB4MDNGOCwgMHgwM0ZCLCAweDA0NDAsIDB4MDQ0MCwgMHgwNDQzLCAweDA0NDQs CisJMHgwNDRCLCAweDA0NEIsIDB4MDQ0RCwgMHgwNDRGLCAweDA0NTIsIDB4MDQ1MiwgMHgwNDU0 LCAweDA0NUIsCisJMHgwNDdGLCAweDA0N0YsIDB4MDU3OCwgMHgwNTg3LCAweDA1QzksIDB4MDVD OSwgMHgwNUQwLCAweDA1RDAsCisJMHgwNjAxLCAweDA2MDQsIDB4MDYwNiwgMHgwNjA5LCAweDA2 MEIsIDB4MDYwRSwgMHgwNjEzLCAweDA2MTQsCisJMHgwQTI5LCAweDBBMkIsIDB4MEEyRiwgMHgw QTMxLCAweDBBNDAsIDB4MEE0MywgMHgwQTQ1LCAweDBBNDUsCisJMHgwQTRFLCAweDBBNEYsIDB4 MEMyQywgMHgwQzJDLCAweDBDMzAsIDB4MEMzMCwgMHgwQzM4LCAweDBDM0MsCisJMHgwQzQwLCAw eDBDNDAsIDB4MEM0NCwgMHgwQzQ0LCAweDBDODAsIDB4MEM4NiwgMHgwQzg4LCAweDBDOTQsCisJ MHgwQzk5LCAweDBDOUEsIDB4MENBNCwgMHgwQ0E1LCAweDBEMDAsIDB4MEQwMywgMHgwRDA2LCAw eDBEMDYsCisJMHgwRDA4LCAweDBEMEIsIDB4MEQzNCwgMHgwRDM1LCAweDBEQUUsIDB4MERDMSwg MHgwREM4LCAweDBERDQsCisJMHgwREQ4LCAweDBERDksIDB4MEUwMCwgMHgwRTAwLCAweDBFMDIs IDB4MEUwNCwgMHgwRTE3LCAweDBFMUUsCisJMHgwRUMwLCAweDBFQzksIDB4MEVDQiwgMHgwRUND LCAweDBFRDAsIDB4MEVEMCwgMHgwRUQ0LCAweDBFRDcsCisJMHgwRUUwLCAweDBFRTIsIDB4MEYw MSwgMHgwRjAyLCAweDBGMEMsIDB4MEYwQywgMHgwRjBFLCAweDBGMTIsCisJMHgwRjI2LCAweDBG MkEsIDB4MEYyQywgMHgwRjJDLCAweDIwMDAsIDB4MjAwMiwgMHgyMDA2LCAweDIwMEYsCisJMHgy MDgwLCAweDIwODIsIDB4MjEwMCwgMHgyMTA5LCAweDIxMEMsIDB4MjExNCwgMHgyMTgwLCAweDIx ODQsCisJMHgyMUY1LCAweDIxRjcsIDB4MjIwMCwgMHgyMjA4LCAweDIyODAsIDB4MjI4MywgMHgy MjkzLCAweDIyOTQsCisJMHgyMzAwLCAweDIzMDgsIDB4MjMxMiwgMHgyMzEyLCAweDIzMTYsIDB4 MjMxRCwgMHgyMzI0LCAweDIzMjYsCisJMHgyMzgwLCAweDIzODMsIDB4MjQwMCwgMHgyNDAyLCAw eDI0MDYsIDB4MjQwRiwgMHgyNDgwLCAweDI0ODIsCisJMHgyNTAwLCAweDI1MDksIDB4MjUwQywg MHgyNTE0LCAweDI1ODAsIDB4MjU4NCwgMHgyNUY1LCAweDI1RjcsCisJMHgyNjAwLCAweDI2MDgs IDB4MjY4MCwgMHgyNjgzLCAweDI2OTMsIDB4MjY5NCwgMHgyNzAwLCAweDI3MDgsCisJMHgyNzEy LCAweDI3MTIsIDB4MjcxNiwgMHgyNzFELCAweDI3MjQsIDB4MjcyNiwgMHgyNzgwLCAweDI3ODMs CisJMHg0MDAwLCAweDQwMDMsIDB4NDgwMCwgMHg0ODA1LCAweDQ5MDAsIDB4NDkwMCwgMHg0OTA4 LCAweDQ5MDgsCisJfjAgICAvKiBzZW50aW5lbCAqLworfTsKKworc3RhdGljIGNvbnN0IHVuc2ln bmVkIGludCBhMjIwX3JlZ2lzdGVyc1tdID0geworCTB4MDAwMCwgMHgwMDAyLCAweDAwMDQsIDB4 MDAwQiwgMHgwMDNCLCAweDAwM0QsIDB4MDA0MCwgMHgwMDQ0LAorCTB4MDA0NiwgMHgwMDQ3LCAw eDAxQzAsIDB4MDFDMSwgMHgwMUMzLCAweDAxQzgsIDB4MDFENSwgMHgwMUQ5LAorCTB4MDFEQywg MHgwMURELCAweDAxRUEsIDB4MDFFQSwgMHgwMUVFLCAweDAxRjMsIDB4MDFGNiwgMHgwMUY3LAor CTB4MDFGQywgMHgwMUZGLCAweDAzOTEsIDB4MDM5MiwgMHgwMzlCLCAweDAzOUUsIDB4MDNCMiwg MHgwM0I1LAorCTB4MDNCNywgMHgwM0I3LCAweDAzRjgsIDB4MDNGQiwgMHgwNDQwLCAweDA0NDAs IDB4MDQ0MywgMHgwNDQ0LAorCTB4MDQ0QiwgMHgwNDRCLCAweDA0NEQsIDB4MDQ0RiwgMHgwNDUy LCAweDA0NTIsIDB4MDQ1NCwgMHgwNDVCLAorCTB4MDQ3RiwgMHgwNDdGLCAweDA1NzgsIDB4MDU4 NywgMHgwNUM5LCAweDA1QzksIDB4MDVEMCwgMHgwNUQwLAorCTB4MDYwMSwgMHgwNjA0LCAweDA2 MDYsIDB4MDYwOSwgMHgwNjBCLCAweDA2MEUsIDB4MDYxMywgMHgwNjE0LAorCTB4MEEyOSwgMHgw QTJCLCAweDBBMkYsIDB4MEEzMSwgMHgwQTQwLCAweDBBNDAsIDB4MEE0MiwgMHgwQTQzLAorCTB4 MEE0NSwgMHgwQTQ1LCAweDBBNEUsIDB4MEE0RiwgMHgwQzMwLCAweDBDMzAsIDB4MEMzOCwgMHgw QzM5LAorCTB4MEMzQywgMHgwQzNDLCAweDBDODAsIDB4MEM4MSwgMHgwQzg4LCAweDBDOTMsIDB4 MEQwMCwgMHgwRDAzLAorCTB4MEQwNSwgMHgwRDA2LCAweDBEMDgsIDB4MEQwQiwgMHgwRDM0LCAw eDBEMzUsIDB4MERBRSwgMHgwREMxLAorCTB4MERDOCwgMHgwREQ0LCAweDBERDgsIDB4MEREOSwg MHgwRTAwLCAweDBFMDAsIDB4MEUwMiwgMHgwRTA0LAorCTB4MEUxNywgMHgwRTFFLCAweDBFQzAs IDB4MEVDOSwgMHgwRUNCLCAweDBFQ0MsIDB4MEVEMCwgMHgwRUQwLAorCTB4MEVENCwgMHgwRUQ3 LCAweDBFRTAsIDB4MEVFMiwgMHgwRjAxLCAweDBGMDIsIDB4MjAwMCwgMHgyMDAyLAorCTB4MjAw NiwgMHgyMDBGLCAweDIwODAsIDB4MjA4MiwgMHgyMTAwLCAweDIxMDIsIDB4MjEwNCwgMHgyMTA5 LAorCTB4MjEwQywgMHgyMTE0LCAweDIxODAsIDB4MjE4NCwgMHgyMUY1LCAweDIxRjcsIDB4MjIw MCwgMHgyMjAyLAorCTB4MjIwNCwgMHgyMjA0LCAweDIyMDgsIDB4MjIwOCwgMHgyMjgwLCAweDIy ODIsIDB4MjI5NCwgMHgyMjk0LAorCTB4MjMwMCwgMHgyMzA4LCAweDIzMDksIDB4MjMwQSwgMHgy MzEyLCAweDIzMTIsIDB4MjMxNiwgMHgyMzE2LAorCTB4MjMxOCwgMHgyMzFELCAweDIzMjQsIDB4 MjMyNiwgMHgyMzgwLCAweDIzODMsIDB4MjQwMCwgMHgyNDAyLAorCTB4MjQwNiwgMHgyNDBGLCAw eDI0ODAsIDB4MjQ4MiwgMHgyNTAwLCAweDI1MDIsIDB4MjUwNCwgMHgyNTA5LAorCTB4MjUwQywg MHgyNTE0LCAweDI1ODAsIDB4MjU4NCwgMHgyNUY1LCAweDI1RjcsIDB4MjYwMCwgMHgyNjAyLAor CTB4MjYwNCwgMHgyNjA2LCAweDI2MDgsIDB4MjYwOCwgMHgyNjgwLCAweDI2ODIsIDB4MjY5NCwg MHgyNjk0LAorCTB4MjcwMCwgMHgyNzA4LCAweDI3MTIsIDB4MjcxMiwgMHgyNzE2LCAweDI3MTYs IDB4MjcxOCwgMHgyNzFELAorCTB4MjcyNCwgMHgyNzI2LCAweDI3ODAsIDB4Mjc4MywgMHg0MDAw LCAweDQwMDMsIDB4NDgwMCwgMHg0ODA1LAorCTB4NDkwMCwgMHg0OTAwLCAweDQ5MDgsIDB4NDkw OCwKKwl+MCAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50 IGEyMjVfcmVnaXN0ZXJzW10gPSB7CisJMHgwMDAwLCAweDAwMDIsIDB4MDAwNCwgMHgwMDBCLCAw eDAwM0IsIDB4MDAzRCwgMHgwMDQwLCAweDAwNDQsCisJMHgwMDQ2LCAweDAwNDcsIDB4MDEzQywg MHgwMTNDLCAweDAxNDAsIDB4MDE0RiwgMHgwMUMwLCAweDAxQzEsCisJMHgwMUMzLCAweDAxQzgs IDB4MDFENSwgMHgwMUQ5LCAweDAxREMsIDB4MDFERCwgMHgwMUVBLCAweDAxRUEsCisJMHgwMUVF LCAweDAxRjMsIDB4MDFGNiwgMHgwMUY3LCAweDAxRkMsIDB4MDFGRiwgMHgwMzkxLCAweDAzOTIs CisJMHgwMzlCLCAweDAzOUUsIDB4MDNCMiwgMHgwM0I1LCAweDAzQjcsIDB4MDNCNywgMHgwM0Y4 LCAweDAzRkIsCisJMHgwNDQwLCAweDA0NDAsIDB4MDQ0MywgMHgwNDQ0LCAweDA0NEIsIDB4MDQ0 QiwgMHgwNDRELCAweDA0NEYsCisJMHgwNDUyLCAweDA0NTIsIDB4MDQ1NCwgMHgwNDVCLCAweDA0 N0YsIDB4MDQ3RiwgMHgwNTc4LCAweDA1ODcsCisJMHgwNUM5LCAweDA1QzksIDB4MDVEMCwgMHgw NUQwLCAweDA2MDEsIDB4MDYwNCwgMHgwNjA2LCAweDA2MDksCisJMHgwNjBCLCAweDA2MEUsIDB4 MDYxMywgMHgwNjE0LCAweDBBMjksIDB4MEEyQiwgMHgwQTJGLCAweDBBMzEsCisJMHgwQTQwLCAw eDBBNDAsIDB4MEE0MiwgMHgwQTQzLCAweDBBNDUsIDB4MEE0NSwgMHgwQTRFLCAweDBBNEYsCisJ MHgwQzAxLCAweDBDMUQsIDB4MEMzMCwgMHgwQzMwLCAweDBDMzgsIDB4MEMzOSwgMHgwQzNDLCAw eDBDM0MsCisJMHgwQzgwLCAweDBDODEsIDB4MEM4OCwgMHgwQzkzLCAweDBEMDAsIDB4MEQwMywg MHgwRDA1LCAweDBEMDYsCisJMHgwRDA4LCAweDBEMEIsIDB4MEQzNCwgMHgwRDM1LCAweDBEQUUs IDB4MERDMSwgMHgwREM4LCAweDBERDQsCisJMHgwREQ4LCAweDBERDksIDB4MEUwMCwgMHgwRTAw LCAweDBFMDIsIDB4MEUwNCwgMHgwRTE3LCAweDBFMUUsCisJMHgwRUMwLCAweDBFQzksIDB4MEVD QiwgMHgwRUNDLCAweDBFRDAsIDB4MEVEMCwgMHgwRUQ0LCAweDBFRDcsCisJMHgwRUUwLCAweDBF RTIsIDB4MEYwMSwgMHgwRjAyLCAweDIwMDAsIDB4MjAwRiwgMHgyMDgwLCAweDIwODIsCisJMHgy MTAwLCAweDIxMDksIDB4MjEwQywgMHgyMTE0LCAweDIxODAsIDB4MjE4NCwgMHgyMUY1LCAweDIx RjcsCisJMHgyMjAwLCAweDIyMDIsIDB4MjIwNCwgMHgyMjA2LCAweDIyMDgsIDB4MjIxMCwgMHgy MjIwLCAweDIyMjIsCisJMHgyMjgwLCAweDIyODIsIDB4MjI5NCwgMHgyMjk0LCAweDIyOTcsIDB4 MjI5NywgMHgyMzAwLCAweDIzMEEsCisJMHgyMzEyLCAweDIzMTIsIDB4MjMxNSwgMHgyMzE2LCAw eDIzMTgsIDB4MjMxRCwgMHgyMzI0LCAweDIzMjYsCisJMHgyMzQwLCAweDIzNTcsIDB4MjM2MCwg MHgyMzYwLCAweDIzODAsIDB4MjM4MywgMHgyNDAwLCAweDI0MEYsCisJMHgyNDgwLCAweDI0ODIs IDB4MjUwMCwgMHgyNTA5LCAweDI1MEMsIDB4MjUxNCwgMHgyNTgwLCAweDI1ODQsCisJMHgyNUY1 LCAweDI1RjcsIDB4MjYwMCwgMHgyNjAyLCAweDI2MDQsIDB4MjYwNiwgMHgyNjA4LCAweDI2MTAs CisJMHgyNjIwLCAweDI2MjIsIDB4MjY4MCwgMHgyNjgyLCAweDI2OTQsIDB4MjY5NCwgMHgyNjk3 LCAweDI2OTcsCisJMHgyNzAwLCAweDI3MEEsIDB4MjcxMiwgMHgyNzEyLCAweDI3MTUsIDB4Mjcx NiwgMHgyNzE4LCAweDI3MUQsCisJMHgyNzI0LCAweDI3MjYsIDB4Mjc0MCwgMHgyNzU3LCAweDI3 NjAsIDB4Mjc2MCwgMHgyNzgwLCAweDI3ODMsCisJMHg0MDAwLCAweDQwMDMsIDB4NDgwMCwgMHg0 ODA2LCAweDQ4MDgsIDB4NDgwOCwgMHg0OTAwLCAweDQ5MDAsCisJMHg0OTA4LCAweDQ5MDgsCisJ fjAgICAvKiBzZW50aW5lbCAqLworfTsKKworLyogd291bGQgYmUgbmljZSB0byBub3QgaGF2ZSB0 byBkdXBsaWNhdGUgdGhlIF9zaG93KCkgc3R1ZmYgd2l0aCBwcmludGsoKTogKi8KK3N0YXRpYyB2 b2lkIGEyeHhfZHVtcChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXByaW50aygic3RhdHVzOiAg ICUwOHhcbiIsCisJCQlncHVfcmVhZChncHUsIFJFR19BMlhYX1JCQk1fU1RBVFVTKSk7CisJYWRy ZW5vX2R1bXAoZ3B1KTsKK30KKworc3RhdGljIHN0cnVjdCBtc21fZ3B1X3N0YXRlICphMnh4X2dw dV9zdGF0ZV9nZXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgbXNtX2dwdV9zdGF0 ZSAqc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKworCWlmICgh c3RhdGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJYWRyZW5vX2dwdV9zdGF0ZV9n ZXQoZ3B1LCBzdGF0ZSk7CisKKwlzdGF0ZS0+cmJibV9zdGF0dXMgPSBncHVfcmVhZChncHUsIFJF R19BMlhYX1JCQk1fU1RBVFVTKTsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyogUmVnaXN0ZXIg b2Zmc2V0IGRlZmluZXMgZm9yIEEyWFggLSBjb3B5IG9mIEEzWFggKi8KK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBpbnQgYTJ4eF9yZWdpc3Rlcl9vZmZzZXRzW1JFR19BRFJFTk9fUkVHSVNURVJfTUFY XSA9IHsKKwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX1JCX0JBU0UsIFJFR19BWFhY X0NQX1JCX0JBU0UpLAorCVJFR19BRFJFTk9fU0tJUChSRUdfQURSRU5PX0NQX1JCX0JBU0VfSEkp LAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUkJfUlBUUl9BRERSLCBSRUdfQVhY WF9DUF9SQl9SUFRSX0FERFIpLAorCVJFR19BRFJFTk9fU0tJUChSRUdfQURSRU5PX0NQX1JCX1JQ VFJfQUREUl9ISSksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19DUF9SQl9SUFRSLCBS RUdfQVhYWF9DUF9SQl9SUFRSKSwKKwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX1JC X1dQVFIsIFJFR19BWFhYX0NQX1JCX1dQVFIpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJF Tk9fQ1BfUkJfQ05UTCwgUkVHX0FYWFhfQ1BfUkJfQ05UTCksCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IGFkcmVub19ncHVfZnVuY3MgZnVuY3MgPSB7CisJLmJhc2UgPSB7CisJCS5nZXRfcGFy YW0gPSBhZHJlbm9fZ2V0X3BhcmFtLAorCQkuaHdfaW5pdCA9IGEyeHhfaHdfaW5pdCwKKwkJLnBt X3N1c3BlbmQgPSBtc21fZ3B1X3BtX3N1c3BlbmQsCisJCS5wbV9yZXN1bWUgPSBtc21fZ3B1X3Bt X3Jlc3VtZSwKKwkJLnJlY292ZXIgPSBhMnh4X3JlY292ZXIsCisJCS5zdWJtaXQgPSBhZHJlbm9f c3VibWl0LAorCQkuZmx1c2ggPSBhZHJlbm9fZmx1c2gsCisJCS5hY3RpdmVfcmluZyA9IGFkcmVu b19hY3RpdmVfcmluZywKKwkJLmlycSA9IGEyeHhfaXJxLAorCQkuZGVzdHJveSA9IGEyeHhfZGVz dHJveSwKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgfHwgZGVmaW5lZChDT05GSUdfREVW X0NPUkVEVU1QKQorCQkuc2hvdyA9IGFkcmVub19zaG93LAorI2VuZGlmCisJCS5ncHVfc3RhdGVf Z2V0ID0gYTJ4eF9ncHVfc3RhdGVfZ2V0LAorCQkuZ3B1X3N0YXRlX3B1dCA9IGFkcmVub19ncHVf c3RhdGVfcHV0LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1zbV9ncHVfcGVyZmNu dHIgcGVyZmNudHJzW10gPSB7CisvKiBUT0RPICovCit9OworCitzdHJ1Y3QgbXNtX2dwdSAqYTJ4 eF9ncHVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhMnh4X2dwdSAq YTJ4eF9ncHUgPSBOVUxMOworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1OworCXN0cnVj dCBtc21fZ3B1ICpncHU7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHByaXYtPmdwdV9wZGV2 OworCWludCByZXQ7CisKKwlpZiAoIXBkZXYpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIm5vIGEy eHggZGV2aWNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZhaWw7CisJfQorCisJYTJ4 eF9ncHUgPSBremFsbG9jKHNpemVvZigqYTJ4eF9ncHUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWEy eHhfZ3B1KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlhZHJlbm9f Z3B1ID0gJmEyeHhfZ3B1LT5iYXNlOworCWdwdSA9ICZhZHJlbm9fZ3B1LT5iYXNlOworCisJZ3B1 LT5wZXJmY250cnMgPSBwZXJmY250cnM7CisJZ3B1LT5udW1fcGVyZmNudHJzID0gQVJSQVlfU0la RShwZXJmY250cnMpOworCisJaWYgKGFkcmVub19pc19hMjB4KGFkcmVub19ncHUpKQorCQlhZHJl bm9fZ3B1LT5yZWdpc3RlcnMgPSBhMjAwX3JlZ2lzdGVyczsKKwllbHNlIGlmIChhZHJlbm9faXNf YTIyNShhZHJlbm9fZ3B1KSkKKwkJYWRyZW5vX2dwdS0+cmVnaXN0ZXJzID0gYTIyNV9yZWdpc3Rl cnM7CisJZWxzZQorCQlhZHJlbm9fZ3B1LT5yZWdpc3RlcnMgPSBhMjIwX3JlZ2lzdGVyczsKKwor CWFkcmVub19ncHUtPnJlZ19vZmZzZXRzID0gYTJ4eF9yZWdpc3Rlcl9vZmZzZXRzOworCisJcmV0 ID0gYWRyZW5vX2dwdV9pbml0KGRldiwgcGRldiwgYWRyZW5vX2dwdSwgJmZ1bmNzLCAxKTsKKwlp ZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlpZiAoIWdwdS0+YXNwYWNlKSB7CisJCWRldl9lcnIo ZGV2LT5kZXYsICJObyBtZW1vcnkgcHJvdGVjdGlvbiB3aXRob3V0IE1NVVxuIik7CisJCXJldCA9 IC1FTlhJTzsKKwkJZ290byBmYWlsOworCX0KKworCXJldHVybiBncHU7CisKK2ZhaWw6CisJaWYg KGEyeHhfZ3B1KQorCQlhMnh4X2Rlc3Ryb3koJmEyeHhfZ3B1LT5iYXNlLmJhc2UpOworCisJcmV0 dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRy ZW5vL2EyeHhfZ3B1LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hMnh4X2dwdS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDJmYmEyY2I4OTMyCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTJ4eF9ncHUuaApAQCAt MCwwICsxLDIxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyogQ29w eXJpZ2h0IChjKSAyMDE4IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LiAqLworCisjaWZuZGVmIF9fQTJYWF9HUFVfSF9fCisjZGVmaW5lIF9fQTJYWF9HUFVfSF9fCisK KyNpbmNsdWRlICJhZHJlbm9fZ3B1LmgiCisKKy8qIGFycmcsIHNvbWVob3cgZmIuaCBpcyBnZXR0 aW5nIHB1bGxlZCBpbjogKi8KKyN1bmRlZiBST1BfQ09QWQorI3VuZGVmIFJPUF9YT1IKKworI2lu Y2x1ZGUgImEyeHgueG1sLmgiCisKK3N0cnVjdCBhMnh4X2dwdSB7CisJc3RydWN0IGFkcmVub19n cHUgYmFzZTsKKwlib29sIHBtX2VuYWJsZWQ7Cit9OworI2RlZmluZSB0b19hMnh4X2dwdSh4KSBj b250YWluZXJfb2YoeCwgc3RydWN0IGEyeHhfZ3B1LCBiYXNlKQorCisjZW5kaWYgLyogX19BMlhY X0dQVV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVu b19kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19kZXZpY2UuYwpp bmRleCA4NmFiZGIyYjNhOWMuLjZlM2Y3OGQ0ZGE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYWRyZW5vX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v YWRyZW5vL2FkcmVub19kZXZpY2UuYwpAQCAtMjcsNiArMjcsMzkgQEAgbW9kdWxlX3BhcmFtX25h bWVkKGhhbmdfZGVidWcsIGhhbmdfZGVidWcsIGJvb2wsIDA2MDApOwogCiBzdGF0aWMgY29uc3Qg c3RydWN0IGFkcmVub19pbmZvIGdwdWxpc3RbXSA9IHsKIAl7CisJCS5yZXYgICA9IEFEUkVOT19S RVYoMiwgMCwgMCwgMCksCisJCS5yZXZuICA9IDIwMCwKKwkJLm5hbWUgID0gIkEyMDAiLAorCQku ZncgPSB7CisJCQlbQURSRU5PX0ZXX1BNNF0gPSAieWFtYXRvX3BtNC5mdyIsCisJCQlbQURSRU5P X0ZXX1BGUF0gPSAieWFtYXRvX3BmcC5mdyIsCisJCX0sCisJCS5nbWVtICA9IFNaXzI1NkssCisJ CS5pbmFjdGl2ZV9wZXJpb2QgPSBEUk1fTVNNX0lOQUNUSVZFX1BFUklPRCwKKwkJLmluaXQgID0g YTJ4eF9ncHVfaW5pdCwKKwl9LCB7IC8qIGEyMDAgb24gaS5teDUxIGhhcyBvbmx5IDEyOGtpYiBn bWVtICovCisJCS5yZXYgICA9IEFEUkVOT19SRVYoMiwgMCwgMCwgMSksCisJCS5yZXZuICA9IDIw MSwKKwkJLm5hbWUgID0gIkEyMDAiLAorCQkuZncgPSB7CisJCQlbQURSRU5PX0ZXX1BNNF0gPSAi eWFtYXRvX3BtNC5mdyIsCisJCQlbQURSRU5PX0ZXX1BGUF0gPSAieWFtYXRvX3BmcC5mdyIsCisJ CX0sCisJCS5nbWVtICA9IFNaXzEyOEssCisJCS5pbmFjdGl2ZV9wZXJpb2QgPSBEUk1fTVNNX0lO QUNUSVZFX1BFUklPRCwKKwkJLmluaXQgID0gYTJ4eF9ncHVfaW5pdCwKKwl9LCB7CisJCS5yZXYg ICA9IEFEUkVOT19SRVYoMiwgMiwgMCwgQU5ZX0lEKSwKKwkJLnJldm4gID0gMjIwLAorCQkubmFt ZSAgPSAiQTIyMCIsCisJCS5mdyA9IHsKKwkJCVtBRFJFTk9fRldfUE00XSA9ICJsZWlhX3BtNF80 NzAuZnciLAorCQkJW0FEUkVOT19GV19QRlBdID0gImxlaWFfcGZwXzQ3MC5mdyIsCisJCX0sCisJ CS5nbWVtICA9IFNaXzUxMkssCisJCS5pbmFjdGl2ZV9wZXJpb2QgPSBEUk1fTVNNX0lOQUNUSVZF X1BFUklPRCwKKwkJLmluaXQgID0gYTJ4eF9ncHVfaW5pdCwKKwl9LCB7CiAJCS5yZXYgICA9IEFE UkVOT19SRVYoMywgMCwgNSwgQU5ZX0lEKSwKIAkJLnJldm4gID0gMzA1LAogCQkubmFtZSAgPSAi QTMwNSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1 LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMKaW5kZXggOTNkNzBm NGEyMTU0Li5lMDk2NzEzMjRiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRy ZW5vL2FkcmVub19ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9f Z3B1LmMKQEAgLTMxOSwxNiArMzE5LDI3IEBAIHZvaWQgYWRyZW5vX3N1Ym1pdChzdHJ1Y3QgbXNt X2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dlbV9zdWJtaXQgKnN1Ym1pdCwKIAkJICovCiAJCU9VVF9Q S1QzKHJpbmcsIENQX0VWRU5UX1dSSVRFLCAxKTsKIAkJT1VUX1JJTkcocmluZywgSExTUV9GTFVT SCk7Ci0KLQkJT1VUX1BLVDMocmluZywgQ1BfV0FJVF9GT1JfSURMRSwgMSk7Ci0JCU9VVF9SSU5H KHJpbmcsIDB4MDAwMDAwMDApOwogCX0KIAotCS8qIEJJVCgzMSkgb2YgQ0FDSEVfRkxVU0hfVFMg dHJpZ2dlcnMgQ0FDSEVfRkxVU0hfVFMgSVJRIGZyb20gR1BVICovCi0JT1VUX1BLVDMocmluZywg Q1BfRVZFTlRfV1JJVEUsIDMpOwotCU9VVF9SSU5HKHJpbmcsIENBQ0hFX0ZMVVNIX1RTIHwgQklU KDMxKSk7Ci0JT1VUX1JJTkcocmluZywgcmJtZW1wdHIocmluZywgZmVuY2UpKTsKLQlPVVRfUklO RyhyaW5nLCBzdWJtaXQtPnNlcW5vKTsKKwkvKiB3YWl0IGZvciBpZGxlIGJlZm9yZSBjYWNoZSBm bHVzaC9pbnRlcnJ1cHQgKi8KKwlPVVRfUEtUMyhyaW5nLCBDUF9XQUlUX0ZPUl9JRExFLCAxKTsK KwlPVVRfUklORyhyaW5nLCAweDAwMDAwMDAwKTsKKworCWlmICghYWRyZW5vX2lzX2EyeHgoYWRy ZW5vX2dwdSkpIHsKKwkJLyogQklUKDMxKSBvZiBDQUNIRV9GTFVTSF9UUyB0cmlnZ2VycyBDQUNI RV9GTFVTSF9UUyBJUlEgZnJvbSBHUFUgKi8KKwkJT1VUX1BLVDMocmluZywgQ1BfRVZFTlRfV1JJ VEUsIDMpOworCQlPVVRfUklORyhyaW5nLCBDQUNIRV9GTFVTSF9UUyB8IEJJVCgzMSkpOworCQlP VVRfUklORyhyaW5nLCByYm1lbXB0cihyaW5nLCBmZW5jZSkpOworCQlPVVRfUklORyhyaW5nLCBz dWJtaXQtPnNlcW5vKTsKKwl9IGVsc2UgeworCQkvKiBCSVQoMzEpIG1lYW5zIHNvbWV0aGluZyBl bHNlIG9uIGEyeHggKi8KKwkJT1VUX1BLVDMocmluZywgQ1BfRVZFTlRfV1JJVEUsIDMpOworCQlP VVRfUklORyhyaW5nLCBDQUNIRV9GTFVTSF9UUyk7CisJCU9VVF9SSU5HKHJpbmcsIHJibWVtcHRy KHJpbmcsIGZlbmNlKSk7CisJCU9VVF9SSU5HKHJpbmcsIHN1Ym1pdC0+c2Vxbm8pOworCQlPVVRf UEtUMyhyaW5nLCBDUF9JTlRFUlJVUFQsIDEpOworCQlPVVRfUklORyhyaW5nLCAweDgwMDAwMDAw KTsKKwl9CiAKICNpZiAwCiAJaWYgKGFkcmVub19pc19hM3h4KGFkcmVub19ncHUpKSB7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmgKaW5kZXggZGU2ZTZlZTQyZmJhLi40YWRj OTdhOTFlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19n cHUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmgKQEAgLTE1 NCw2ICsxNTQsMjAgQEAgc3RydWN0IGFkcmVub19wbGF0Zm9ybV9jb25maWcgewogCV9fcmV0OyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0pCiAKK3N0YXRp YyBpbmxpbmUgYm9vbCBhZHJlbm9faXNfYTJ4eChzdHJ1Y3QgYWRyZW5vX2dwdSAqZ3B1KQorewor CXJldHVybiAoZ3B1LT5yZXZuIDwgMzAwKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFkcmVu b19pc19hMjB4KHN0cnVjdCBhZHJlbm9fZ3B1ICpncHUpCit7CisJcmV0dXJuIChncHUtPnJldm4g PCAyMTApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYWRyZW5vX2lzX2EyMjUoc3RydWN0IGFk cmVub19ncHUgKmdwdSkKK3sKKwlyZXR1cm4gZ3B1LT5yZXZuID09IDIyNTsKK30KIAogc3RhdGlj IGlubGluZSBib29sIGFkcmVub19pc19hM3h4KHN0cnVjdCBhZHJlbm9fZ3B1ICpncHUpCiB7CkBA IC0zMzQsNiArMzQ4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkcmVub19ncHVfd3JpdGUoc3Ry dWN0IGFkcmVub19ncHUgKmdwdSwKIAkJZ3B1X3dyaXRlKCZncHUtPmJhc2UsIHJlZyAtIDEsIGRh dGEpOwogfQogCitzdHJ1Y3QgbXNtX2dwdSAqYTJ4eF9ncHVfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKIHN0cnVjdCBtc21fZ3B1ICphM3h4X2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwogc3RydWN0IG1zbV9ncHUgKmE0eHhfZ3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7CiBzdHJ1Y3QgbXNtX2dwdSAqYTV4eF9ncHVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJl ZWRyZW5vCg==