From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joel Stanley Subject: [PATCH 2/2] drm: Add ASPEED GFX driver Date: Thu, 28 Mar 2019 16:13:16 +1030 Message-ID: <20190328054316.17939-3-joel@jms.id.au> References: <20190328054316.17939-1-joel@jms.id.au> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id DF5AF6E2D9 for ; Thu, 28 Mar 2019 05:43:58 +0000 (UTC) Received: by mail-pf1-x442.google.com with SMTP id e24so9972092pfi.12 for ; Wed, 27 Mar 2019 22:43:58 -0700 (PDT) In-Reply-To: <20190328054316.17939-1-joel@jms.id.au> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Daniel Vetter , Rob Herring Cc: devicetree@vger.kernel.org, linux-aspeed@lists.ozlabs.org, Andrew Jeffery , dri-devel@lists.freedesktop.org, Maxime Ripard , Sean Paul , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBBU1BFRUQgQk1DIFNvQydzIEdGWCBkaXNwbGF5IGhhcmR3 YXJlLiBUaGlzCmRyaXZlciBydW5zIG9uIHRoZSBBUk0gYmFzZWQgQk1DIHN5c3RlbXMsIHVubGlr ZSB0aGUgYXN0IGRyaXZlciB3aGljaApydW5zIG9uIGEgaG9zdCBDUFUgYW5kIGlzIGlzIGZvciBh IFBDSSBncmFwaGljcyBkZXZpY2UuCgpTaWduZWQtb2ZmLWJ5OiBKb2VsIFN0YW5sZXkgPGpvZWxA am1zLmlkLmF1PgotLQpDaGFuZ2VzIHNpbmNlIFJGQzoKIGRybV9mYmRldl9jbWFfaW5pdCAtPiBk cm1fZmJfY21hX2ZiZGV2X2luaXQgYW5kIHVzZSBnZW5lcmljIGxhc3RjbG9zZSBjYWxsYmFjawog VXNlIGdlbmVyaWMgaXJxIGhhbmRsaW5nIGluc3RlYWQgb2YgZHJtX2lycV9pbnN0YWxsCiBBZGQg ZG9jIHRvIGRyaXZlcgogR2V0IHJpZCBvZiB1bm5jZXNzYXJ5IHJlYWRzIGluIGlycSBlbmFibGUv ZGlzYWJsZSBwYXRoCiBSZWJhc2Ugb24gbGludXgtbmV4dAoKIGRyaXZlcnMvZ3B1L2RybS9LY29u ZmlnICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAg ICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vYXNwZWVkL0tjb25maWcgICAg ICAgICAgIHwgIDE1ICsrCiBkcml2ZXJzL2dwdS9kcm0vYXNwZWVkL01ha2VmaWxlICAgICAgICAg IHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9hc3BlZWQvYXNwZWVkX2dmeC5oICAgICAgfCAxMDQg KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYXNwZWVkL2FzcGVlZF9nZnhfY3J0Yy5jIHwgMjQ4 ICsrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2FzcGVlZC9hc3BlZWRfZ2Z4 X2Rydi5jICB8IDI2OSArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2Fz cGVlZC9hc3BlZWRfZ2Z4X291dC5jICB8ICA0OSArKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA2OTEg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hc3BlZWQv S2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hc3BlZWQvTWFrZWZp bGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXNwZWVkL2FzcGVlZF9nZngu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hc3BlZWQvYXNwZWVkX2dmeF9j cnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXNwZWVkL2FzcGVlZF9n ZnhfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXNwZWVkL2FzcGVl ZF9nZnhfb3V0LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDgyYmIyMjFlYzk0ZS4uYjFlYzhmODVjMmE4IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZwpAQCAtMzM1LDYgKzMzNSw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3hlbi9LY29u ZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vS2NvbmZpZyIKIAorc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vYXNwZWVkL0tjb25maWciCisKICMgS2VlcCBsZWdhY3kgZHJp dmVycyBsYXN0CiAKIG1lbnVjb25maWcgRFJNX0xFR0FDWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDBiYWYxNDhl MzY4Ny4uZGY4ODM1MDQ1MzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC0xMTAsMyArMTEwLDQgQEAgb2JqLSQo Q09ORklHX0RSTV9QTDExMSkgKz0gcGwxMTEvCiBvYmotJChDT05GSUdfRFJNX1RWRTIwMCkgKz0g dHZlMjAwLwogb2JqLSQoQ09ORklHX0RSTV9YRU4pICs9IHhlbi8KIG9iai0kKENPTkZJR19EUk1f VkJPWFZJREVPKSArPSB2Ym94dmlkZW8vCitvYmotJChDT05GSUdfRFJNX0FTUEVFRF9HRlgpICs9 IGFzcGVlZC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hc3BlZWQvS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9hc3BlZWQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjZmMWU2NGMwYTZjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hc3BlZWQvS2NvbmZpZwpAQCAtMCwwICsxLDE1IEBACitjb25maWcgRFJNX0FTUEVFRF9H RlgKKwl0cmlzdGF0ZSAiQVNQRUVEIEJNQyBEaXNwbGF5IENvbnRyb2xsZXIiCisJZGVwZW5kcyBv biBEUk0gJiYgT0YKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgRFJNX0tNU19GQl9I RUxQRVIKKwlzZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVSCisJc2VsZWN0IERSTV9QQU5FTAorCXNl bGVjdCBETUFfQ01BCisJc2VsZWN0IENNQQorCXNlbGVjdCBNRkRfU1lTQ09OCisJaGVscAorCSAg Q2hvc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gQVNQRUVEIEFTVDI0MDAvQVNUMjUwMAor CSAgU09DIERpc3BsYXkgQ29udHJvbGxlciAoYWthIEdGWCkuCisKKwkgIElmIE0gaXMgc2VsZWN0 ZWQgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXNwZWVkX2dmeC4KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hc3BlZWQvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYXNwZWVkL01h a2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNmUxOTRjZDc5 MGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzcGVlZC9NYWtlZmlsZQpA QCAtMCwwICsxLDMgQEAKK2FzcGVlZF9nZngteSA6PSBhc3BlZWRfZ2Z4X2Rydi5vIGFzcGVlZF9n ZnhfY3J0Yy5vIGFzcGVlZF9nZnhfb3V0Lm8KKworb2JqLSQoQ09ORklHX0RSTV9BU1BFRURfR0ZY KSArPSBhc3BlZWRfZ2Z4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hc3BlZWQvYXNw ZWVkX2dmeC5oIGIvZHJpdmVycy9ncHUvZHJtL2FzcGVlZC9hc3BlZWRfZ2Z4LmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mYjU2ZTQyNWJkNDgKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYXNwZWVkL2FzcGVlZF9nZnguaApAQCAtMCwwICsxLDEw NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvLyBDb3B5cmlnaHQg MjAxOCBJQk0gQ29ycG9yYXRpb24KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5oPgorCitzdHJ1Y3QgYXNwZWVkX2dmeCB7CisJdm9p ZCBfX2lvbWVtCQkJKmJhc2U7CisJc3RydWN0IGNsawkJCSpjbGs7CisJc3RydWN0IHJlc2V0X2Nv bnRyb2wJCSpyc3Q7CisJc3RydWN0IHJlZ21hcAkJCSpzY3U7CisKKwlzdHJ1Y3QgZHJtX3NpbXBs ZV9kaXNwbGF5X3BpcGUJcGlwZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvcgkJY29ubmVjdG9yOwor CXN0cnVjdCBkcm1fZmJkZXZfY21hCQkqZmJkZXY7Cit9OworCitpbnQgYXNwZWVkX2dmeF9jcmVh dGVfcGlwZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKK2ludCBhc3BlZWRfZ2Z4X2NyZWF0ZV9v dXRwdXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7CisKKyNkZWZpbmUgQ1JUX0NUUkwxCQkweDYw IC8qIENSVCBDb250cm9sIEkgKi8KKyNkZWZpbmUgQ1JUX0NUUkwyCQkweDY0IC8qIENSVCBDb250 cm9sIElJICovCisjZGVmaW5lIENSVF9TVEFUVVMJCTB4NjggLyogQ1JUIFN0YXR1cyAqLworI2Rl ZmluZSBDUlRfTUlTQwkJMHg2YyAvKiBDUlQgTWlzYyBTZXR0aW5nICovCisjZGVmaW5lIENSVF9I T1JJWjAJCTB4NzAgLyogQ1JUIEhvcml6b250YWwgVG90YWwgJiBEaXNwbGF5IEVuYWJsZSBFbmQg Ki8KKyNkZWZpbmUgQ1JUX0hPUklaMQkJMHg3NCAvKiBDUlQgSG9yaXpvbnRhbCBSZXRyYWNlIFN0 YXJ0ICYgRW5kICovCisjZGVmaW5lIENSVF9WRVJUMAkJMHg3OCAvKiBDUlQgVmVydGljYWwgVG90 YWwgJiBEaXNwbGF5IEVuYWJsZSBFbmQgKi8KKyNkZWZpbmUgQ1JUX1ZFUlQxCQkweDdDIC8qIENS VCBWZXJ0aWNhbCBSZXRyYWNlIFN0YXJ0ICYgRW5kICovCisjZGVmaW5lIENSVF9BRERSCQkweDgw IC8qIENSVCBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgKi8KKyNkZWZpbmUgQ1JUX09GRlNFVAkJ MHg4NCAvKiBDUlQgRGlzcGxheSBPZmZzZXQgJiBUZXJtaW5hbCBDb3VudCAqLworI2RlZmluZSBD UlRfVEhST0QJCTB4ODggLyogQ1JUIFRocmVzaG9sZCAqLworI2RlZmluZSBDUlRfWFNDQUxFCQkw eDhDIC8qIENSVCBTY2FsaW5nLVVwIEZhY3RvciAqLworI2RlZmluZSBDUlRfQ1VSU09SMAkJMHg5 MCAvKiBDUlQgSGFyZHdhcmUgQ3Vyc29yIFggJiBZIE9mZnNldCAqLworI2RlZmluZSBDUlRfQ1VS U09SMQkJMHg5NCAvKiBDUlQgSGFyZHdhcmUgQ3Vyc29yIFggJiBZIFBvc2l0aW9uICovCisjZGVm aW5lIENSVF9DVVJTT1IyCQkweDk4IC8qIENSVCBIYXJkd2FyZSBDdXJzb3IgUGF0dGVybiBBZGRy ZXNzICovCisjZGVmaW5lIENSVF85QwkJCTB4OUMKKyNkZWZpbmUgQ1JUX09TRF9ICQkweEEwIC8q IENSVCBPU0QgSG9yaXpvbnRhbCBTdGFydC9FbmQgKi8KKyNkZWZpbmUgQ1JUX09TRF9WCQkweEE0 IC8qIENSVCBPU0QgVmVydGljYWwgU3RhcnQvRW5kICovCisjZGVmaW5lIENSVF9PU0RfQUREUgkJ MHhBOCAvKiBDUlQgT1NEIFBhdHRlcm4gQWRkcmVzcyAqLworI2RlZmluZSBDUlRfT1NEX0RJU1AJ CTB4QUMgLyogQ1JUIE9TRCBPZmZzZXQgKi8KKyNkZWZpbmUgQ1JUX09TRF9USFJFU0gJCTB4QjAg LyogQ1JUIE9TRCBUaHJlc2hvbGQgJiBBbHBoYSAqLworI2RlZmluZSBDUlRfQjQJCQkweEI0Cisj ZGVmaW5lIENSVF9TVFNfVgkJMHhCOCAvKiBDUlQgU3RhdHVzIFYgKi8KKyNkZWZpbmUgQ1JUX1ND UkFUQ0gJCTB4QkMgLyogU2NyYXRjaHBhZCAqLworI2RlZmluZSBDUlRfQkIwX0FERFIJCTB4RDAg LyogQ1JUIERpc3BsYXkgQkIwIFN0YXJ0aW5nIEFkZHJlc3MgKi8KKyNkZWZpbmUgQ1JUX0JCMV9B RERSCQkweEQ0IC8qIENSVCBEaXNwbGF5IEJCMSBTdGFydGluZyBBZGRyZXNzICovCisjZGVmaW5l IENSVF9CQl9DT1VOVAkJMHhEOCAvKiBDUlQgRGlzcGxheSBCQiBUZXJtaW5hbCBDb3VudCAqLwor I2RlZmluZSBPU0RfQ09MT1IxCQkweEUwIC8qIE9TRCBDb2xvciBQYWxldHRlIEluZGV4IDEgJiAw ICovCisjZGVmaW5lIE9TRF9DT0xPUjIJCTB4RTQgLyogT1NEIENvbG9yIFBhbGV0dGUgSW5kZXgg MyAmIDIgKi8KKyNkZWZpbmUgT1NEX0NPTE9SMwkJMHhFOCAvKiBPU0QgQ29sb3IgUGFsZXR0ZSBJ bmRleCA1ICYgNCAqLworI2RlZmluZSBPU0RfQ09MT1I0CQkweEVDIC8qIE9TRCBDb2xvciBQYWxl dHRlIEluZGV4IDcgJiA2ICovCisjZGVmaW5lIE9TRF9DT0xPUjUJCTB4RjAgLyogT1NEIENvbG9y IFBhbGV0dGUgSW5kZXggOSAmIDggKi8KKyNkZWZpbmUgT1NEX0NPTE9SNgkJMHhGNCAvKiBPU0Qg Q29sb3IgUGFsZXR0ZSBJbmRleCAxMSAmIDEwICovCisjZGVmaW5lIE9TRF9DT0xPUjcJCTB4Rjgg LyogT1NEIENvbG9yIFBhbGV0dGUgSW5kZXggMTMgJiAxMiAqLworI2RlZmluZSBPU0RfQ09MT1I4 CQkweEZDIC8qIE9TRCBDb2xvciBQYWxldHRlIEluZGV4IDE1ICYgMTQgKi8KKworLyogQ1RSTDEg Ki8KKyNkZWZpbmUgQ1JUX0NUUkxfRU4JCQlCSVQoMCkKKyNkZWZpbmUgQ1JUX0NUUkxfSFdfQ1VS U09SX0VOCQlCSVQoMSkKKyNkZWZpbmUgQ1JUX0NUUkxfT1NEX0VOCQkJQklUKDIpCisjZGVmaW5l IENSVF9DVFJMX0lOVEVSTEFDRUQJCUJJVCgzKQorI2RlZmluZSBDUlRfQ1RSTF9DT0xPUl9SR0I1 NjUJCSgwIDw8IDcpCisjZGVmaW5lIENSVF9DVFJMX0NPTE9SX1lVVjQ0NAkJKDEgPDwgNykKKyNk ZWZpbmUgQ1JUX0NUUkxfQ09MT1JfWFJHQjg4ODgJCSgyIDw8IDcpCisjZGVmaW5lIENSVF9DVFJM X0NPTE9SX1JHQjg4OAkJKDMgPDwgNykKKyNkZWZpbmUgQ1JUX0NUUkxfQ09MT1JfWVVWNDQ0XzJS R0IJKDUgPDwgNykKKyNkZWZpbmUgQ1JUX0NUUkxfQ09MT1JfWVVWNDIyCQkoNyA8PCA3KQorI2Rl ZmluZSBDUlRfQ1RSTF9DT0xPUl9NQVNLCQlHRU5NQVNLKDksIDcpCisjZGVmaW5lIENSVF9DVFJM X0hTWU5DX05FR0FUSVZFCQlCSVQoMTYpCisjZGVmaW5lIENSVF9DVFJMX1ZTWU5DX05FR0FUSVZF CQlCSVQoMTcpCisjZGVmaW5lIENSVF9DVFJMX1ZFUlRJQ0FMX0lOVFJfRU4JQklUKDMwKQorI2Rl ZmluZSBDUlRfQ1RSTF9WRVJUSUNBTF9JTlRSX1NUUwlCSVQoMzEpCisKKy8qIENUUkwyICovCisj ZGVmaW5lIENSVF9DVFJMX0RBQ19FTgkJCUJJVCgwKQorI2RlZmluZSBDUlRfQ1RSTF9WQkxBTktf TElORSh4KQkJKCgoeCkgPDwgMjApICYgQ1JUX0NUUkxfVkJMQU5LX0xJTkVfTUFTSykKKyNkZWZp bmUgQ1JUX0NUUkxfVkJMQU5LX0xJTkVfTUFTSwlHRU5NQVNLKDIwLCAzMSkKKworLyogQ1JUX0hP UklaMCAqLworI2RlZmluZSBDUlRfSF9UT1RBTCh4KQkJCSh4KQorI2RlZmluZSBDUlRfSF9ERSh4 KQkJCSgoeCkgPDwgMTYpCisKKy8qIENSVF9IT1JJWjEgKi8KKyNkZWZpbmUgQ1JUX0hfUlNfU1RB UlQoeCkJCSh4KQorI2RlZmluZSBDUlRfSF9SU19FTkQoeCkJCQkoKHgpIDw8IDE2KQorCisvKiBD UlRfVklSVDAgKi8KKyNkZWZpbmUgQ1JUX1ZfVE9UQUwoeCkJCQkoeCkKKyNkZWZpbmUgQ1JUX1Zf REUoeCkJCQkoKHgpIDw8IDE2KQorCisvKiBDUlRfVklSVDEgKi8KKyNkZWZpbmUgQ1JUX1ZfUlNf U1RBUlQoeCkJCSh4KQorI2RlZmluZSBDUlRfVl9SU19FTkQoeCkJCQkoKHgpIDw8IDE2KQorCisv KiBDUlRfT0ZGU0VUICovCisjZGVmaW5lIENSVF9ESVNQX09GRlNFVCh4KQkJKHgpCisjZGVmaW5l IENSVF9URVJNX0NPVU5UKHgpCQkoKHgpIDw8IDE2KQorCisvKiBDUlRfVEhST0QgKi8KKyNkZWZp bmUgQ1JUX1RIUk9EX0xPVyh4KQkJKHgpCisjZGVmaW5lIENSVF9USFJPRF9ISUdIKHgpCQkoKHgp IDw8IDgpCisKKy8qIERlZmF1bHQgVGhyZXNob2xkIFNldGluZyAqLworI2RlZmluZSBHNV9DUlRf VEhST0RfVkFMCShDUlRfVEhST0RfTE9XKDB4MjQpIHwgQ1JUX1RIUk9EX0hJR0goMHgzQykpCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXNwZWVkL2FzcGVlZF9nZnhfY3J0Yy5jIGIvZHJp dmVycy9ncHUvZHJtL2FzcGVlZC9hc3BlZWRfZ2Z4X2NydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmUyZDFkNzQ5NzM1MgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hc3BlZWQvYXNwZWVkX2dmeF9jcnRjLmMKQEAgLTAsMCArMSwyNDggQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLy8gQ29weXJpZ2h0IDIwMTgg SUJNIENvcnBvcmF0aW9uCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51 eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCisjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVs Lmg+CisKKyNpbmNsdWRlICJhc3BlZWRfZ2Z4LmgiCisKK3N0YXRpYyBzdHJ1Y3QgYXNwZWVkX2dm eCAqCitkcm1fcGlwZV90b19hc3BlZWRfZ2Z4KHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlw ZSAqcGlwZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBpcGUsIHN0cnVjdCBhc3BlZWRfZ2Z4 LCBwaXBlKTsKK30KKworc3RhdGljIGludCBhc3BlZWRfZ2Z4X3NldF9waXhlbF9mbXQoc3RydWN0 IGFzcGVlZF9nZnggKnByaXYsIHUzMiAqYnBwKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9 ICZwcml2LT5waXBlLmNydGM7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGNydGMtPmRldjsK Kwljb25zdCB1MzIgZm9ybWF0ID0gY3J0Yy0+cHJpbWFyeS0+c3RhdGUtPmZiLT5mb3JtYXQtPmZv cm1hdDsKKwl1MzIgY3RybDE7CisKKwljdHJsMSA9IHJlYWRsKHByaXYtPmJhc2UgKyBDUlRfQ1RS TDEpOworCWN0cmwxICY9IH5DUlRfQ1RSTF9DT0xPUl9NQVNLOworCisJc3dpdGNoIChmb3JtYXQp IHsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlkZXZfZGJnKGRybS0+ZGV2LCAiU2V0dGlu ZyB1cCBSR0I1NjUgbW9kZVxuIik7CisJCWN0cmwxIHw9IENSVF9DVFJMX0NPTE9SX1JHQjU2NTsK KwkJKmJwcCA9IDE2OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJCWRl dl9kYmcoZHJtLT5kZXYsICJTZXR0aW5nIHVwIFhSR0I4ODg4IG1vZGVcbiIpOworCQljdHJsMSB8 PSBDUlRfQ1RSTF9DT0xPUl9YUkdCODg4ODsKKwkJKmJwcCA9IDMyOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlkZXZfZXJyKGRybS0+ZGV2LCAiVW5oYW5kbGVkIHBpeGVsIGZvcm1hdCAlMDh4XG4i LCBmb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3cml0ZWwoY3RybDEsIHByaXYt PmJhc2UgKyBDUlRfQ1RSTDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFzcGVl ZF9nZnhfZW5hYmxlX2NvbnRyb2xsZXIoc3RydWN0IGFzcGVlZF9nZnggKnByaXYpCit7CisJdTMy IGN0cmwxID0gcmVhZGwocHJpdi0+YmFzZSArIENSVF9DVFJMMSk7CisJdTMyIGN0cmwyID0gcmVh ZGwocHJpdi0+YmFzZSArIENSVF9DVFJMMik7CisKKwkvKiBTQ1UyQzogc2V0IERBQyBzb3VyY2Ug Zm9yIGRpc3BsYXkgb3V0cHV0IHRvIEdyYXBoaWNzIENSVCAoR0ZYKSAqLworCXJlZ21hcF91cGRh dGVfYml0cyhwcml2LT5zY3UsIDB4MmMsIEJJVCgxNiksIEJJVCgxNikpOworCisJd3JpdGVsKGN0 cmwxIHwgQ1JUX0NUUkxfRU4sIHByaXYtPmJhc2UgKyBDUlRfQ1RSTDEpOworCXdyaXRlbChjdHJs MiB8IENSVF9DVFJMX0RBQ19FTiwgcHJpdi0+YmFzZSArIENSVF9DVFJMMik7Cit9CisKK3N0YXRp YyB2b2lkIGFzcGVlZF9nZnhfZGlzYWJsZV9jb250cm9sbGVyKHN0cnVjdCBhc3BlZWRfZ2Z4ICpw cml2KQoreworCXUzMiBjdHJsMSA9IHJlYWRsKHByaXYtPmJhc2UgKyBDUlRfQ1RSTDEpOworCXUz MiBjdHJsMiA9IHJlYWRsKHByaXYtPmJhc2UgKyBDUlRfQ1RSTDIpOworCisJd3JpdGVsKGN0cmwx ICYgfkNSVF9DVFJMX0VOLCBwcml2LT5iYXNlICsgQ1JUX0NUUkwxKTsKKwl3cml0ZWwoY3RybDIg JiB+Q1JUX0NUUkxfREFDX0VOLCBwcml2LT5iYXNlICsgQ1JUX0NUUkwyKTsKKworCXJlZ21hcF91 cGRhdGVfYml0cyhwcml2LT5zY3UsIDB4MmMsIEJJVCgxNiksIDApOworfQorCitzdGF0aWMgdm9p ZCBhc3BlZWRfZ2Z4X2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgYXNwZWVkX2dmeCAqcHJpdikK K3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbSA9ICZwcml2LT5waXBlLmNydGMuc3RhdGUt PmFkanVzdGVkX21vZGU7CisJdTMyIGN0cmwxLCBkX29mZnNldCwgdF9jb3VudCwgYnBwOworCWlu dCBlcnI7CisKKwllcnIgPSBhc3BlZWRfZ2Z4X3NldF9waXhlbF9mbXQocHJpdiwgJmJwcCk7CisJ aWYgKGVycikKKwkJcmV0dXJuOworCisjaWYgMAorCS8qIFRPRE86IHdlIGhhdmUgb25seSBiZWVu IGFibGUgdG8gdGVzdCB3aXRoIHRoZSA0ME1IeiBVU0IgY2xvY2suIFRoZQorCSAqIGNsb2NrIGlz IGZpeGVkLCBzbyB3ZSBjYW5ub3QgYWRqdXN0IGl0IGhlcmUuICovCisJY2xrX3NldF9yYXRlKHBy aXYtPnBpeGVsX2NsaywgbS0+Y3J0Y19jbG9jayAqIDEwMDApOworI2VuZGlmCisKKwljdHJsMSA9 IHJlYWRsKHByaXYtPmJhc2UgKyBDUlRfQ1RSTDEpOworCWN0cmwxICY9IH4oQ1JUX0NUUkxfSU5U RVJMQUNFRCB8CisJCQlDUlRfQ1RSTF9IU1lOQ19ORUdBVElWRSB8CisJCQlDUlRfQ1RSTF9WU1lO Q19ORUdBVElWRSk7CisKKwlpZiAobS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkK KwkJY3RybDEgfD0gQ1JUX0NUUkxfSU5URVJMQUNFRDsKKworCWlmICghKG0tPmZsYWdzICYgRFJN X01PREVfRkxBR19QSFNZTkMpKQorCQljdHJsMSB8PSBDUlRfQ1RSTF9IU1lOQ19ORUdBVElWRTsK KworCWlmICghKG0tPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpKQorCQljdHJsMSB8PSBD UlRfQ1RSTF9WU1lOQ19ORUdBVElWRTsKKworCXdyaXRlbChjdHJsMSwgcHJpdi0+YmFzZSArIENS VF9DVFJMMSk7CisKKwkvKiBIb3Jpem9udGFsIHRpbWluZyAqLworCXdyaXRlbChDUlRfSF9UT1RB TChtLT5odG90YWwgLSAxKSB8IENSVF9IX0RFKG0tPmhkaXNwbGF5IC0gMSksCisJCQlwcml2LT5i YXNlICsgQ1JUX0hPUklaMCk7CisJd3JpdGVsKENSVF9IX1JTX1NUQVJUKG0tPmhzeW5jX3N0YXJ0 IC0gMSkgfCBDUlRfSF9SU19FTkQobS0+aHN5bmNfZW5kKSwKKwkJCXByaXYtPmJhc2UgKyBDUlRf SE9SSVoxKTsKKworCisJLyogVmVydGljYWwgdGltaW5nICovCisJd3JpdGVsKENSVF9WX1RPVEFM KG0tPnZ0b3RhbCAtIDEpIHwgQ1JUX1ZfREUobS0+dmRpc3BsYXkgLSAxKSwKKwkJCXByaXYtPmJh c2UgKyBDUlRfVkVSVDApOworCXdyaXRlbChDUlRfVl9SU19TVEFSVChtLT52c3luY19zdGFydCkg fCBDUlRfVl9SU19FTkQobS0+dnN5bmNfZW5kKSwKKwkJCXByaXYtPmJhc2UgKyBDUlRfVkVSVDEp OworCisJLyoKKwkgKiBEaXNwbGF5IE9mZnNldDogYWRkcmVzcyBkaWZmZXJlbmNlIGJldHdlZW4g Y29uc2VjdXRpdmUgc2NhbiBsaW5lcworCSAqIFRlcm1pbmFsIENvdW50OiBtZW1vcnkgc2l6ZSBv ZiBvbmUgc2NhbiBsaW5lCisJICovCisJZF9vZmZzZXQgPSBtLT5oZGlzcGxheSAqIGJwcCAvIDg7 CisJdF9jb3VudCA9IChtLT5oZGlzcGxheSAqIGJwcCArIDEyNykgLyAxMjg7CisJd3JpdGVsKENS VF9ESVNQX09GRlNFVChkX29mZnNldCkgfCBDUlRfVEVSTV9DT1VOVCh0X2NvdW50KSwKKwkJCXBy aXYtPmJhc2UgKyBDUlRfT0ZGU0VUKTsKKworCS8qCisJICogVGhyZXNob2xkOiBGSUZPIHRocmVz aG9sZHMgb2YgcmVmaWxsIGFuZCBzdG9wICgxNiBieXRlIGNodW5rcworCSAqIHBlciBsaW5lLCBy b3VuZGVkIHVwKQorCSAqLworCXdyaXRlbChHNV9DUlRfVEhST0RfVkFMLCBwcml2LT5iYXNlICsg Q1JUX1RIUk9EKTsKK30KKworc3RhdGljIHZvaWQgYXNwZWVkX2dmeF9waXBlX2VuYWJsZShzdHJ1 Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgYXNwZWVkX2dmeCAqcHJpdiA9IGRybV9waXBlX3RvX2Fz cGVlZF9nZngocGlwZSk7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJnBpcGUtPmNydGM7CisK Kwlhc3BlZWRfZ2Z4X2NydGNfbW9kZV9zZXRfbm9mYihwcml2KTsKKwlhc3BlZWRfZ2Z4X2VuYWJs ZV9jb250cm9sbGVyKHByaXYpOworCWRybV9jcnRjX3ZibGFua19vbihjcnRjKTsKK30KKworc3Rh dGljIHZvaWQgYXNwZWVkX2dmeF9waXBlX2Rpc2FibGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxh eV9waXBlICpwaXBlKQoreworCXN0cnVjdCBhc3BlZWRfZ2Z4ICpwcml2ID0gZHJtX3BpcGVfdG9f YXNwZWVkX2dmeChwaXBlKTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsK KworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisJYXNwZWVkX2dmeF9kaXNhYmxlX2NvbnRy b2xsZXIocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIGFzcGVlZF9nZnhfcGlwZV91cGRhdGUoc3Ry dWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJCSAgIHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBhc3BlZWRfZ2Z4ICpwcml2ID0gZHJt X3BpcGVfdG9fYXNwZWVkX2dmeChwaXBlKTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlw ZS0+Y3J0YzsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBpcGUtPnBsYW5lLnN0YXRl LT5mYjsKKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3Qg ZHJtX2dlbV9jbWFfb2JqZWN0ICpnZW07CisKKwlpZiAoIWNydGMpCisJCXJldHVybjsKKworCXNw aW5fbG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7CisJZXZlbnQgPSBjcnRjLT5zdGF0 ZS0+ZXZlbnQ7CisJaWYgKGV2ZW50KSB7CisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisK KwkJaWYgKGRybV9jcnRjX3ZibGFua19nZXQoY3J0YykgPT0gMCkKKwkJCWRybV9jcnRjX2FybV92 YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOworCQllbHNlCisJCQlkcm1fY3J0Y19zZW5kX3ZibGFu a19ldmVudChjcnRjLCBldmVudCk7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY3J0Yy0+ZGV2LT5l dmVudF9sb2NrKTsKKworCWlmICghZmIpCisJCXJldHVybjsKKworCWdlbSA9IGRybV9mYl9jbWFf Z2V0X2dlbV9vYmooZmIsIDApOworCWlmICghZ2VtKQorCQlyZXR1cm47CisJd3JpdGVsKGdlbS0+ cGFkZHIsIHByaXYtPmJhc2UgKyBDUlRfQUREUik7Cit9CisKK3N0YXRpYyBpbnQgYXNwZWVkX2dm eF9waXBlX3ByZXBhcmVfZmIoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAor CQkJCSBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlyZXR1cm4gZHJt X2dlbV9mYl9wcmVwYXJlX2ZiKCZwaXBlLT5wbGFuZSwgcGxhbmVfc3RhdGUpOworfQorCitzdGF0 aWMgaW50IGFzcGVlZF9nZnhfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5 X3BpcGUgKnBpcGUpCit7CisJc3RydWN0IGFzcGVlZF9nZnggKnByaXYgPSBkcm1fcGlwZV90b19h c3BlZWRfZ2Z4KHBpcGUpOworCXUzMiByZWcgPSByZWFkbChwcml2LT5iYXNlICsgQ1JUX0NUUkwx KTsKKworCS8qIENsZWFyIHBlbmRpbmcgVkJMQU5LIElSUSAqLworCXdyaXRlbChyZWcgfCBDUlRf Q1RSTF9WRVJUSUNBTF9JTlRSX1NUUywgcHJpdi0+YmFzZSArIENSVF9DVFJMMSk7CisKKwlyZWcg fD0gQ1JUX0NUUkxfVkVSVElDQUxfSU5UUl9FTjsKKwl3cml0ZWwocmVnLCBwcml2LT5iYXNlICsg Q1JUX0NUUkwxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhc3BlZWRfZ2Z4X2Rp c2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkKK3sKKwlz dHJ1Y3QgYXNwZWVkX2dmeCAqcHJpdiA9IGRybV9waXBlX3RvX2FzcGVlZF9nZngocGlwZSk7CisJ dTMyIHJlZyA9IHJlYWRsKHByaXYtPmJhc2UgKyBDUlRfQ1RSTDEpOworCisJcmVnICY9IH5DUlRf Q1RSTF9WRVJUSUNBTF9JTlRSX0VOOworCXdyaXRlbChyZWcsIHByaXYtPmJhc2UgKyBDUlRfQ1RS TDEpOworCisJLyogQ2xlYXIgcGVuZGluZyBWQkxBTksgSVJRICovCisJd3JpdGVsKHJlZyB8IENS VF9DVFJMX1ZFUlRJQ0FMX0lOVFJfU1RTLCBwcml2LT5iYXNlICsgQ1JUX0NUUkwxKTsKK30KKwor c3RhdGljIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyBhc3BlZWRfZ2Z4X2Z1 bmNzID0geworCS5lbmFibGUJCT0gYXNwZWVkX2dmeF9waXBlX2VuYWJsZSwKKwkuZGlzYWJsZQk9 IGFzcGVlZF9nZnhfcGlwZV9kaXNhYmxlLAorCS51cGRhdGUJCT0gYXNwZWVkX2dmeF9waXBlX3Vw ZGF0ZSwKKwkucHJlcGFyZV9mYgk9IGFzcGVlZF9nZnhfcGlwZV9wcmVwYXJlX2ZiLAorCS5lbmFi bGVfdmJsYW5rCT0gYXNwZWVkX2dmeF9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuawk9 IGFzcGVlZF9nZnhfZGlzYWJsZV92YmxhbmssCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3Qg YXNwZWVkX2dmeF9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9S TUFUX1JHQjU2NSwKK307CisKK2ludCBhc3BlZWRfZ2Z4X2NyZWF0ZV9waXBlKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pCit7CisJc3RydWN0IGFzcGVlZF9nZnggKnByaXYgPSBkcm0tPmRldl9wcml2 YXRlOworCisJcmV0dXJuIGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQoZHJtLCAmcHJpdi0+ cGlwZSwgJmFzcGVlZF9nZnhfZnVuY3MsCisJCQkJCSAgICBhc3BlZWRfZ2Z4X2Zvcm1hdHMsCisJ CQkJCSAgICBBUlJBWV9TSVpFKGFzcGVlZF9nZnhfZm9ybWF0cyksCisJCQkJCSAgICBOVUxMLAor CQkJCQkgICAgJnByaXYtPmNvbm5lY3Rvcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYXNwZWVkL2FzcGVlZF9nZnhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXNwZWVkL2FzcGVl ZF9nZnhfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42Yjg4 ZDY1OGFjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYXNwZWVkL2FzcGVl ZF9nZnhfZHJ2LmMKQEAgLTAsMCArMSwyNjkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wKworLy8gQ29weXJpZ2h0IDIwMTggSUJNIENvcnBvcmF0aW9uCisKKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3Jlc2Vy dmVkX21lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVn bWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorCisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dl bV9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fcHJvYmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJhc3BlZWRfZ2Z4LmgiCisKKy8qKgor ICogRE9DOiBBU1BFRUQgR0ZYIERyaXZlcgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUg QVNQRUVEIEJNQyBTb0MncyBHRlggZGlzcGxheSBoYXJkd2FyZS4gVGhpcworICogZHJpdmVyIHJ1 bnMgb24gdGhlIEFSTSBiYXNlZCBCTUMgc3lzdGVtcywgdW5saWtlIHRoZSBhc3QgZHJpdmVyIHdo aWNoCisgKiBydW5zIG9uIGEgaG9zdCBDUFUgYW5kIGlzIGlzIGZvciBhIFBDSSBncmFwaGljcyBk ZXZpY2UuCisgKgorICogVGhlIEFTVDI1MDAgc3VwcG9ydHMgYSB0b3RhbCBvZiAzIG91dHB1dCBw YXRoczoKKyAqCisgKiAgIDEuIFZHQSBvdXRwdXQsIHRoZSBvdXRwdXQgdGFyZ2V0IGNhbiBjaG9v c2UgZWl0aGVyIG9yIGJvdGggdG8gdGhlIERBQworICogICBvciBEVk8gaW50ZXJmYWNlLgorICoK KyAqICAgMi4gR3JhcGhpY3MgQ1JUIG91dHB1dCwgdGhlIG91dHB1dCB0YXJnZXQgY2FuIGNob29z ZSBlaXRoZXIgb3IgYm90aCB0bworICogICB0aGUgREFDIG9yIERWTyBpbnRlcmZhY2UuCisgKgor ICogICAzLiBWaWRlbyBpbnB1dCBmcm9tIERWTywgdGhlIHZpZGVvIGlucHV0IGNhbiBiZSB1c2Vk IGZvciB2aWRlbyBlbmdpbmUKKyAqICAgY2FwdHVyZSBvciBEQUMgZGlzcGxheSBvdXRwdXQuCisg KgorICogT3V0cHV0IG9wdGlvbnMgYXJlIHNlbGVjdGVkIGluIFNDVTJDLgorICoKKyAqIFRoZSAi VkdBIG1vZGUiIGRldmljZSBpcyB0aGUgUENJIGF0dGFjaGVkIGNvbnRyb2xsZXIuIFRoZSAiR3Jh cGhpY3MgQ1JUIgorICogaXMgdGhlIEFSTSdzIGludGVybmFsIGRpc3BsYXkgY29udHJvbGxlci4K KyAqCisgKiBUaGUgZHJpdmVyIG9ubHkgc3VwcG9ydHMgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBj b25zaXN0aW5nIG9mIGEgNDBNSHoKKyAqIHBpeGVsIGNsb2NrLCBmaXhlZCBieSBoYXJkd2FyZSBs aW1pdGF0aW9ucywgYW5kIHRoZSBWR0Egb3V0cHV0IHBhdGguCisgKi8KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgYXNwZWVkX2dmeF9tb2RlX2NvbmZpZ19mdW5j cyA9IHsKKwkuZmJfY3JlYXRlCQk9IGRybV9nZW1fZmJfY3JlYXRlLAorCS5hdG9taWNfY2hlY2sJ CT0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQJCT0gZHJtX2F0b21p Y19oZWxwZXJfY29tbWl0LAorfTsKKworc3RhdGljIHZvaWQgYXNwZWVkX2dmeF9zZXR1cF9tb2Rl X2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9tb2RlX2NvbmZpZ19pbml0 KGRybSk7CisKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDA7CisJZHJtLT5tb2RlX2Nv bmZpZy5taW5faGVpZ2h0ID0gMDsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDgwMDsK Kwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA2MDA7CisJZHJtLT5tb2RlX2NvbmZpZy5m dW5jcyA9ICZhc3BlZWRfZ2Z4X21vZGVfY29uZmlnX2Z1bmNzOworfQorCitzdGF0aWMgaXJxcmV0 dXJuX3QgYXNwZWVkX2dmeF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0 cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCBhc3BlZWRfZ2Z4ICpwcml2ID0g ZHJtLT5kZXZfcHJpdmF0ZTsKKwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwocHJpdi0+YmFzZSAr IENSVF9DVFJMMSk7CisKKwlpZiAocmVnICYgQ1JUX0NUUkxfVkVSVElDQUxfSU5UUl9TVFMpIHsK KwkJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmcHJpdi0+cGlwZS5jcnRjKTsKKwkJd3JpdGVsKHJl ZywgcHJpdi0+YmFzZSArIENSVF9DVFJMMSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisK KwlyZXR1cm4gSVJRX05PTkU7Cit9CisKKworCitzdGF0aWMgaW50IGFzcGVlZF9nZnhfbG9hZChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYg PSB0b19wbGF0Zm9ybV9kZXZpY2UoZHJtLT5kZXYpOworCXN0cnVjdCBhc3BlZWRfZ2Z4ICpwcml2 OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlwcml2ID0gZGV2bV9remFs bG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikK KwkJcmV0dXJuIC1FTk9NRU07CisJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXY7CisKKwlyZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXByaXYtPmJh c2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZHJtLT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihw cml2LT5iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+YmFzZSk7CisKKwlwcml2LT5zY3Ug PSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9jb21wYXRpYmxlKCJhc3BlZWQsYXN0MjUwMC1zY3Ui KTsKKwlpZiAoSVNfRVJSKHByaXYtPnNjdSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFp bGVkIHRvIGZpbmQgU0NVIHJlZ21hcFxuIik7CisJCXJldHVybiBQVFJfRVJSKHByaXYtPnNjdSk7 CisJfQorCisJcmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9pbml0KGRybS0+ZGV2KTsKKwlp ZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSByZXNlcnZlZCBtZW06ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9 IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZHJtLT5kZXYsIERNQV9CSVRfTUFTSygzMikpOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHNldCBETUEgbWFz azogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcHJpdi0+cnN0ID0gZGV2bV9y ZXNldF9jb250cm9sX2dldF9leGNsdXNpdmUoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VS Uihwcml2LT5yc3QpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJtaXNzaW5nIG9yIGlu dmFsaWQgcmVzZXQgY29udHJvbGxlciBkZXZpY2UgdHJlZSBlbnRyeSIpOworCQlyZXR1cm4gUFRS X0VSUihwcml2LT5yc3QpOworCX0KKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtPnJzdCk7 CisKKwlwcml2LT5jbGsgPSBkZXZtX2Nsa19nZXQoZHJtLT5kZXYsIE5VTEwpOworCWlmIChJU19F UlIocHJpdi0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkibWlzc2luZyBvciBp bnZhbGlkIGNsayBkZXZpY2UgdHJlZSBlbnRyeSIpOworCQlyZXR1cm4gUFRSX0VSUihwcml2LT5j bGspOworCX0KKwljbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Y2xrKTsKKworCS8qIFNhbml0aXpl IGNvbnRyb2wgcmVnaXN0ZXJzICovCisJd3JpdGVsKDAsIHByaXYtPmJhc2UgKyBDUlRfQ1RSTDEp OworCXdyaXRlbCgwLCBwcml2LT5iYXNlICsgQ1JUX0NUUkwyKTsKKworCWFzcGVlZF9nZnhfc2V0 dXBfbW9kZV9jb25maWcoZHJtKTsKKworCXJldCA9IGRybV92YmxhbmtfaW5pdChkcm0sIDEpOwor CWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGlz ZSB2YmxhbmtcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGFzcGVlZF9nZnhfY3Jl YXRlX291dHB1dChkcm0pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJG YWlsZWQgdG8gY3JlYXRlIG91dHB1dHNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9 IGFzcGVlZF9nZnhfY3JlYXRlX3BpcGUoZHJtKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJy KGRybS0+ZGV2LCAiQ2Fubm90IHNldHVwIHNpbXBsZSBkaXNwbGF5IHBpcGVcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZHJtLT5kZXYsIHBsYXRmb3Jt X2dldF9pcnEocGRldiwgMCksCisJCQkgICAgICAgYXNwZWVkX2dmeF9pcnFfaGFuZGxlciwgMCwg ImFzcGVlZCBnZngiLCBkcm0pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHJtLT5kZXYs ICJGYWlsZWQgdG8gaW5zdGFsbCBJUlEgaGFuZGxlclxuIik7CisJCXJldHVybiByZXQ7CisJfQor CisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwlkcm1fZmJkZXZfZ2VuZXJpY19zZXR1 cChkcm0sIDMyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhc3BlZWRfZ2Z4X3Vu bG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9rbXNfaGVscGVyX3BvbGxfZmlu aShkcm0pOworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisKKwlkcm0tPmRldl9wcml2 YXRlID0gTlVMTDsKK30KKworREVGSU5FX0RSTV9HRU1fQ01BX0ZPUFMoZm9wcyk7CisKK3N0YXRp YyBzdHJ1Y3QgZHJtX2RyaXZlciBhc3BlZWRfZ2Z4X2RyaXZlciA9IHsKKwkuZHJpdmVyX2ZlYXR1 cmVzICAgICAgICA9IERSSVZFUl9HRU0gfCBEUklWRVJfTU9ERVNFVCB8CisJCQkJRFJJVkVSX1BS SU1FIHwgRFJJVkVSX0FUT01JQyB8CisJCQkJRFJJVkVSX0hBVkVfSVJRLAorCS5nZW1fZnJlZV9v YmplY3RfdW5sb2NrZWQgPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyAg ICAgICAgICAgICA9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCisJLmR1bWJfY3JlYXRlICAgICAgICAg ICAgPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSwKKwkucHJpbWVfaGFuZGxlX3RvX2ZkICAgICA9 IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAorCS5wcmltZV9mZF90b19oYW5kbGUgICAgID0g ZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQgICAgICAgPSBk cm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCAgICAgICA9IGRybV9nZW1f cHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJp bWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9j bWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfdm1hcCAgICAgICAgID0gZHJt X2dlbV9jbWFfcHJpbWVfdm1hcCwKKwkuZ2VtX3ByaW1lX3Z1bm1hcCAgICAgICA9IGRybV9nZW1f Y21hX3ByaW1lX3Z1bm1hcCwKKwkuZ2VtX3ByaW1lX21tYXAgICAgICAgICA9IGRybV9nZW1fY21h X3ByaW1lX21tYXAsCisJLmZvcHMgPSAmZm9wcywKKwkubmFtZSA9ICJhc3BlZWQtZ2Z4LWRybSIs CisJLmRlc2MgPSAiQVNQRUVEIEdGWCBEUk0iLAorCS5kYXRlID0gIjIwMTgwMzE5IiwKKwkubWFq b3IgPSAxLAorCS5taW5vciA9IDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBhc3BlZWRfZ2Z4X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhc3BlZWQsYXN0 MjQwMC1nZngiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhc3BlZWQsYXN0MjUwMC1nZngiIH0sCisJ eyB9Cit9OworCitzdGF0aWMgaW50IGFzcGVlZF9nZnhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCWludCByZXQ7CisKKwlk cm0gPSBkcm1fZGV2X2FsbG9jKCZhc3BlZWRfZ2Z4X2RyaXZlciwgJnBkZXYtPmRldik7CisJaWYg KElTX0VSUihkcm0pKQorCQlyZXR1cm4gUFRSX0VSUihkcm0pOworCisJcmV0ID0gYXNwZWVkX2dm eF9sb2FkKGRybSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKKworCXJldCA9IGRybV9k ZXZfcmVnaXN0ZXIoZHJtLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl91bmxvYWQ7CisKKwly ZXR1cm4gMDsKKworZXJyX3VubG9hZDoKKwlhc3BlZWRfZ2Z4X3VubG9hZChkcm0pOworZXJyX2Zy ZWU6CisJZHJtX2Rldl9wdXQoZHJtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg YXNwZWVkX2dmeF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkcm1f ZGV2X3VucmVnaXN0ZXIoZHJtKTsKKwlhc3BlZWRfZ2Z4X3VubG9hZChkcm0pOworCWRybV9kZXZf cHV0KGRybSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgYXNwZWVkX2dmeF9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGFzcGVlZF9nZnhf cHJvYmUsCisJLnJlbW92ZQkJPSBhc3BlZWRfZ2Z4X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQku bmFtZSA9ICJhc3BlZWRfZ2Z4IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gYXNwZWVkX2dmeF9tYXRj aCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhc3BlZWRfZ2Z4X3BsYXRmb3Jt X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkpvZWwgU3RhbmxleSA8am9lbEBqbXMuaWQuYXU+ Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFTUEVFRCBCTUMgRFJNL0tNUyBkcml2ZXIiKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hc3BlZWQv YXNwZWVkX2dmeF9vdXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9hc3BlZWQvYXNwZWVkX2dmeF9vdXQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdkMjA1N2UwMDA1Ngot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hc3BlZWQvYXNwZWVkX2dmeF9vdXQu YwpAQCAtMCwwICsxLDQ5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsK Ky8vIENvcHlyaWdodCAyMDE4IElCTSBDb3Jwb3JhdGlvbgorCisjaW5jbHVkZSA8ZHJtL2RybVAu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2Nvbm5lY3Rvci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgorCisjaW5jbHVkZSAiYXNwZWVkX2dmeC5oIgorCitz dGF0aWMgaW50IGFzcGVlZF9nZnhfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCit7CisJcmV0dXJuIGRybV9hZGRfbW9kZXNfbm9lZGlkKGNvbm5lY3RvciwgODAwLCA2 MDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0Citkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5j cyBhc3BlZWRfZ2Z4X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGFz cGVlZF9nZnhfZ2V0X21vZGVzLAorfTsKKworc3RhdGljIHZvaWQgYXNwZWVkX2dmeF9jb25uZWN0 b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybV9jb25u ZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25u ZWN0b3IpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgYXNw ZWVkX2dmeF9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmZpbGxfbW9kZXMJCT0gZHJtX2hlbHBlcl9w cm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95CQk9IGFzcGVlZF9nZnhfY29u bmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0CQkJPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf cmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworaW50IGFzcGVlZF9nZnhf Y3JlYXRlX291dHB1dChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBhc3BlZWRf Z2Z4ICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcHJpdi0+Y29ubmVj dG9yLmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKKwlwcml2LT5jb25uZWN0b3IucG9sbGVkID0g MDsKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnByaXYtPmNvbm5lY3RvciwKKwkJCQkgJmFz cGVlZF9nZnhfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9p bml0KGRybSwgJnByaXYtPmNvbm5lY3RvciwKKwkJCQkgJmFzcGVlZF9nZnhfY29ubmVjdG9yX2Z1 bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bik7CisJcmV0dXJuIHJldDsKK30K LS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs