From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v3 2/7] drm/tinydrm: Add helper functions Date: Tue, 31 Jan 2017 17:03:14 +0100 Message-ID: <20170131160319.9695-3-noralf@tronnes.org> References: <20170131160319.9695-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170131160319.9695-1-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org Cc: thomas.petazzoni@free-electrons.com, linux-kernel@vger.kernel.org List-Id: devicetree@vger.kernel.org QWRkIGNvbW1vbiBmdW5jdGlvbmFsaXR5IG5lZWRlZCBieSBtYW55IHRpbnlkcm0gZHJpdmVycy4K ClNpZ25lZC1vZmYtYnk6IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgpBY2tl ZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KLS0tCiBEb2N1bWVu dGF0aW9uL2dwdS90aW55ZHJtLnJzdCAgICAgICAgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMv Z3B1L2RybS90aW55ZHJtL2NvcmUvTWFrZWZpbGUgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMv Z3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1oZWxwZXJzLmMgfCA0NjIgKysrKysrKysrKysr KysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLWhlbHBlcnMuaCAgICAg ICAgICB8IDEwMCArKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNTcyIGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9j b3JlL3Rpbnlkcm0taGVscGVycy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vdGlu eWRybS90aW55ZHJtLWhlbHBlcnMuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L3Rp bnlkcm0ucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvdGlueWRybS5yc3QKaW5kZXggZWM0YTIwZC4u ZmIyNTZkMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvdGlueWRybS5yc3QKKysrIGIv RG9jdW1lbnRhdGlvbi9ncHUvdGlueWRybS5yc3QKQEAgLTE5LDMgKzE5LDEyIEBAIENvcmUgZnVu Y3Rpb25hbGl0eQogCiAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29y ZS90aW55ZHJtLXBpcGUuYwogICAgOmV4cG9ydDoKKworQWRkaXRpb25hbCBoZWxwZXJzCis9PT09 PT09PT09PT09PT09PT0KKworLi4ga2VybmVsLWRvYzo6IGluY2x1ZGUvZHJtL3Rpbnlkcm0vdGlu eWRybS1oZWxwZXJzLmgKKyAgIDppbnRlcm5hbDoKKworLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMv Z3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1oZWxwZXJzLmMKKyAgIDpleHBvcnQ6CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQppbmRleCA0ZjE0YTBmLi5mYjIyMWU2IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACi10aW55ZHJt LXkgOj0gdGlueWRybS1jb3JlLm8gdGlueWRybS1waXBlLm8KK3Rpbnlkcm0teSA6PSB0aW55ZHJt LWNvcmUubyB0aW55ZHJtLXBpcGUubyB0aW55ZHJtLWhlbHBlcnMubwogCiBvYmotJChDT05GSUdf RFJNX1RJTllEUk0pICs9IHRpbnlkcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rp bnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2Nv cmUvdGlueWRybS1oZWxwZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NzVlNGU1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUv dGlueWRybS1oZWxwZXJzLmMKQEAgLTAsMCArMSw0NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTYgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq LworCisjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vdGlueWRybS5oPgorI2luY2x1ZGUgPGRybS90aW55 ZHJtL3Rpbnlkcm0taGVscGVycy5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUg PGxpbnV4L3N3YWIuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCBzcGlfbWF4OworbW9kdWxlX3Bh cmFtKHNwaV9tYXgsIHVpbnQsIDA0MDApOworTU9EVUxFX1BBUk1fREVTQyhzcGlfbWF4LCAiU2V0 IGEgbG93ZXIgU1BJIG1heCB0cmFuc2ZlciBzaXplIik7CisKKy8qKgorICogdGlueWRybV9tZXJn ZV9jbGlwcyAtIE1lcmdlIGNsaXAgcmVjdGFuZ2xlcworICogQGRzdDogRGVzdGluYXRpb24gY2xp cCByZWN0YW5nbGUKKyAqIEBzcmM6IFNvdXJjZSBjbGlwIHJlY3RhbmdsZShzKQorICogQG51bV9j bGlwczogTnVtYmVyIG9mIEBzcmMgY2xpcCByZWN0YW5nbGVzCisgKiBAZmxhZ3M6IERpcnR5IGZi IGlvY3RsIGZsYWdzCisgKiBAbWF4X3dpZHRoOiBNYXhpbXVtIHdpZHRoIG9mIEBkc3QKKyAqIEBt YXhfaGVpZ2h0OiBNYXhpbXVtIGhlaWdodCBvZiBAZHN0CisgKgorICogVGhpcyBmdW5jdGlvbiBt ZXJnZXMgQHNyYyBjbGlwIHJlY3RhbmdsZShzKSBpbnRvIEBkc3QuIElmIEBzcmMgaXMgTlVMTCwK KyAqIEBtYXhfd2lkdGggYW5kIEBtaW5fd2lkdGggaXMgdXNlZCB0byBzZXQgYSBmdWxsIEBkc3Qg Y2xpcCByZWN0YW5nbGUuCisgKgorICogUmV0dXJuczoKKyAqIHRydWUgaWYgaXQncyBhIGZ1bGwg Y2xpcCwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK2Jvb2wgdGlueWRybV9tZXJnZV9jbGlwcyhzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCAqZHN0LAorCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpzcmMsIHVu c2lnbmVkIGludCBudW1fY2xpcHMsCisJCQkgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgbWF4X3dp ZHRoLCB1MzIgbWF4X2hlaWdodCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghc3JjIHx8 ICFudW1fY2xpcHMpIHsKKwkJZHN0LT54MSA9IDA7CisJCWRzdC0+eDIgPSBtYXhfd2lkdGg7CisJ CWRzdC0+eTEgPSAwOworCQlkc3QtPnkyID0gbWF4X2hlaWdodDsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJZHN0LT54MSA9IH4wOworCWRzdC0+eTEgPSB+MDsKKwlkc3QtPngyID0gMDsKKwlkc3Qt PnkyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY2xpcHM7IGkrKykgeworCQlpZiAoZmxh Z3MgJiBEUk1fTU9ERV9GQl9ESVJUWV9BTk5PVEFURV9DT1BZKQorCQkJaSsrOworCQlkc3QtPngx ID0gbWluKGRzdC0+eDEsIHNyY1tpXS54MSk7CisJCWRzdC0+eDIgPSBtYXgoZHN0LT54Miwgc3Jj W2ldLngyKTsKKwkJZHN0LT55MSA9IG1pbihkc3QtPnkxLCBzcmNbaV0ueTEpOworCQlkc3QtPnky ID0gbWF4KGRzdC0+eTIsIHNyY1tpXS55Mik7CisJfQorCisJaWYgKGRzdC0+eDIgPiBtYXhfd2lk dGggfHwgZHN0LT55MiA+IG1heF9oZWlnaHQgfHwKKwkgICAgZHN0LT54MSA+PSBkc3QtPngyIHx8 IGRzdC0+eTEgPj0gZHN0LT55MikgeworCQlEUk1fREVCVUdfS01TKCJJbGxlZ2FsIGNsaXA6IHgx PSV1LCB4Mj0ldSwgeTE9JXUsIHkyPSV1XG4iLAorCQkJICAgICAgZHN0LT54MSwgZHN0LT54Miwg ZHN0LT55MSwgZHN0LT55Mik7CisJCWRzdC0+eDEgPSAwOworCQlkc3QtPnkxID0gMDsKKwkJZHN0 LT54MiA9IG1heF93aWR0aDsKKwkJZHN0LT55MiA9IG1heF9oZWlnaHQ7CisJfQorCisJcmV0dXJu IChkc3QtPngyIC0gZHN0LT54MSkgPT0gbWF4X3dpZHRoICYmCisJICAgICAgIChkc3QtPnkyIC0g ZHN0LT55MSkgPT0gbWF4X2hlaWdodDsKK30KK0VYUE9SVF9TWU1CT0wodGlueWRybV9tZXJnZV9j bGlwcyk7CisKKy8qKgorICogdGlueWRybV9tZW1jcHkgLSBDb3B5IGNsaXAgYnVmZmVyCisgKiBA ZHN0OiBEZXN0aW5hdGlvbiBidWZmZXIKKyAqIEB2YWRkcjogU291cmNlIGJ1ZmZlcgorICogQGZi OiBEUk0gZnJhbWVidWZmZXIKKyAqIEBjbGlwOiBDbGlwIHJlY3RhbmdsZSBhcmVhIHRvIGNvcHkK KyAqLwordm9pZCB0aW55ZHJtX21lbWNweSh2b2lkICpkc3QsIHZvaWQgKnZhZGRyLCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwKQor eworCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+Zm9ybWF0LT5m b3JtYXQsIDApOworCXVuc2lnbmVkIGludCBwaXRjaCA9IGZiLT5waXRjaGVzWzBdOworCXZvaWQg KnNyYyA9IHZhZGRyICsgKGNsaXAtPnkxICogcGl0Y2gpICsgKGNsaXAtPngxICogY3BwKTsKKwlz aXplX3QgbGVuID0gKGNsaXAtPngyIC0gY2xpcC0+eDEpICogY3BwOworCXVuc2lnbmVkIGludCB5 OworCisJZm9yICh5ID0gY2xpcC0+eTE7IHkgPCBjbGlwLT55MjsgeSsrKSB7CisJCW1lbWNweShk c3QsIHNyYywgbGVuKTsKKwkJc3JjICs9IHBpdGNoOworCQlkc3QgKz0gbGVuOworCX0KK30KK0VY UE9SVF9TWU1CT0wodGlueWRybV9tZW1jcHkpOworCisvKioKKyAqIHRpbnlkcm1fc3dhYjE2IC0g U3dhcCBieXRlcyBpbnRvIGNsaXAgYnVmZmVyCisgKiBAZHN0OiBSR0I1NjUgZGVzdGluYXRpb24g YnVmZmVyCisgKiBAdmFkZHI6IFJHQjU2NSBzb3VyY2UgYnVmZmVyCisgKiBAZmI6IERSTSBmcmFt ZWJ1ZmZlcgorICogQGNsaXA6IENsaXAgcmVjdGFuZ2xlIGFyZWEgdG8gY29weQorICovCit2b2lk IHRpbnlkcm1fc3dhYjE2KHUxNiAqZHN0LCB2b2lkICp2YWRkciwgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCisJCSAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCkKK3sKKwlzaXplX3Qg bGVuID0gKGNsaXAtPngyIC0gY2xpcC0+eDEpICogc2l6ZW9mKHUxNik7CisJdW5zaWduZWQgaW50 IHgsIHk7CisJdTE2ICpzcmMsICpidWY7CisKKwkvKgorCSAqIFRoZSBjbWEgbWVtb3J5IGlzIHdy aXRlLWNvbWJpbmVkIHNvIHJlYWRzIGFyZSB1bmNhY2hlZC4KKwkgKiBTcGVlZCB1cCBieSBmZXRj aGluZyBvbmUgbGluZSBhdCBhIHRpbWUuCisJICovCisJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9L RVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm47CisKKwlmb3IgKHkgPSBjbGlwLT55MTsgeSA8 IGNsaXAtPnkyOyB5KyspIHsKKwkJc3JjID0gdmFkZHIgKyAoeSAqIGZiLT5waXRjaGVzWzBdKTsK KwkJc3JjICs9IGNsaXAtPngxOworCQltZW1jcHkoYnVmLCBzcmMsIGxlbik7CisJCXNyYyA9IGJ1 ZjsKKwkJZm9yICh4ID0gY2xpcC0+eDE7IHggPCBjbGlwLT54MjsgeCsrKQorCQkJKmRzdCsrID0g c3dhYjE2KCpzcmMrKyk7CisJfQorCisJa2ZyZWUoYnVmKTsKK30KK0VYUE9SVF9TWU1CT0wodGlu eWRybV9zd2FiMTYpOworCisvKioKKyAqIHRpbnlkcm1feHJnYjg4ODhfdG9fcmdiNTY1IC0gQ29u dmVydCBYUkdCODg4OCB0byBSR0I1NjUgY2xpcCBidWZmZXIKKyAqIEBkc3Q6IFJHQjU2NSBkZXN0 aW5hdGlvbiBidWZmZXIKKyAqIEB2YWRkcjogWFJHQjg4ODggc291cmNlIGJ1ZmZlcgorICogQGZi OiBEUk0gZnJhbWVidWZmZXIKKyAqIEBjbGlwOiBDbGlwIHJlY3RhbmdsZSBhcmVhIHRvIGNvcHkK KyAqIEBzd2FwOiBTd2FwIGJ5dGVzCisgKgorICogRHJpdmVycyBjYW4gdXNlIHRoaXMgZnVuY3Rp b24gZm9yIFJHQjU2NSBkZXZpY2VzIHRoYXQgZG9uJ3QgbmF0aXZlbHkKKyAqIHN1cHBvcnQgWFJH Qjg4ODguCisgKi8KK3ZvaWQgdGlueWRybV94cmdiODg4OF90b19yZ2I1NjUodTE2ICpkc3QsIHZv aWQgKnZhZGRyLAorCQkJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCXN0cnVjdCBk cm1fY2xpcF9yZWN0ICpjbGlwLCBib29sIHN3YXApCit7CisJc2l6ZV90IGxlbiA9IChjbGlwLT54 MiAtIGNsaXAtPngxKSAqIHNpemVvZih1MzIpOworCXVuc2lnbmVkIGludCB4LCB5OworCXUzMiAq c3JjLCAqYnVmOworCXUxNiB2YWwxNjsKKworCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCisJZm9yICh5ID0gY2xpcC0+eTE7IHkgPCBjbGlw LT55MjsgeSsrKSB7CisJCXNyYyA9IHZhZGRyICsgKHkgKiBmYi0+cGl0Y2hlc1swXSk7CisJCXNy YyArPSBjbGlwLT54MTsKKwkJbWVtY3B5KGJ1Ziwgc3JjLCBsZW4pOworCQlzcmMgPSBidWY7CisJ CWZvciAoeCA9IGNsaXAtPngxOyB4IDwgY2xpcC0+eDI7IHgrKykgeworCQkJdmFsMTYgPSAoKCpz cmMgJiAweDAwRjgwMDAwKSA+PiA4KSB8CisJCQkJKCgqc3JjICYgMHgwMDAwRkMwMCkgPj4gNSkg fAorCQkJCSgoKnNyYyAmIDB4MDAwMDAwRjgpID4+IDMpOworCQkJc3JjKys7CisJCQlpZiAoc3dh cCkKKwkJCQkqZHN0KysgPSBzd2FiMTYodmFsMTYpOworCQkJZWxzZQorCQkJCSpkc3QrKyA9IHZh bDE2OworCQl9CisJfQorCisJa2ZyZWUoYnVmKTsKK30KK0VYUE9SVF9TWU1CT0wodGlueWRybV94 cmdiODg4OF90b19yZ2I1NjUpOworCisjaWZkZWYgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJ Q0UKKy8qKgorICogdGlueWRybV9vZl9maW5kX2JhY2tsaWdodCAtIEZpbmQgYmFja2xpZ2h0IGRl dmljZSBpbiBkZXZpY2UtdHJlZQorICogQGRldjogRGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlv biBsb29rcyBmb3IgYSBEVCBub2RlIHBvaW50ZWQgdG8gYnkgYSBwcm9wZXJ0eSBuYW1lZCAnYmFj a2xpZ2h0JworICogYW5kIHVzZXMgb2ZfZmluZF9iYWNrbGlnaHRfYnlfbm9kZSgpIHRvIGdldCB0 aGUgYmFja2xpZ2h0IGRldmljZS4KKyAqIEFkZGl0aW9uYWxseSBpZiB0aGUgYnJpZ2h0bmVzcyBw cm9wZXJ0eSBpcyB6ZXJvLCBpdCBpcyBzZXQgdG8KKyAqIG1heF9icmlnaHRuZXNzLgorICoKKyAq IFJldHVybnM6CisgKiBOVUxMIGlmIHRoZXJlJ3Mgbm8gYmFja2xpZ2h0IHByb3BlcnR5LgorICog RXJyb3IgcG9pbnRlciAtRVBST0JFX0RFRkVSIGlmIHRoZSBEVCBub2RlIGlzIGZvdW5kLCBidXQg bm8gYmFja2xpZ2h0IGRldmljZQorICogaXMgZm91bmQuCisgKiBJZiB0aGUgYmFja2xpZ2h0IGRl dmljZSBpcyBmb3VuZCwgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuCisg Ki8KK3N0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KHN0 cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0 OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlucCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2 LT5vZl9ub2RlLCAiYmFja2xpZ2h0IiwgMCk7CisJaWYgKCFucCkKKwkJcmV0dXJuIE5VTEw7CisK KwliYWNrbGlnaHQgPSBvZl9maW5kX2JhY2tsaWdodF9ieV9ub2RlKG5wKTsKKwlvZl9ub2RlX3B1 dChucCk7CisKKwlpZiAoIWJhY2tsaWdodCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZF Uik7CisKKwlpZiAoIWJhY2tsaWdodC0+cHJvcHMuYnJpZ2h0bmVzcykgeworCQliYWNrbGlnaHQt PnByb3BzLmJyaWdodG5lc3MgPSBiYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzOworCQlE Uk1fREVCVUdfS01TKCJCYWNrbGlnaHQgYnJpZ2h0bmVzcyBzZXQgdG8gJWRcbiIsCisJCQkgICAg ICBiYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MpOworCX0KKworCXJldHVybiBiYWNrbGlnaHQ7 Cit9CitFWFBPUlRfU1lNQk9MKHRpbnlkcm1fb2ZfZmluZF9iYWNrbGlnaHQpOworCisvKioKKyAq IHRpbnlkcm1fZW5hYmxlX2JhY2tsaWdodCAtIEVuYWJsZSBiYWNrbGlnaHQgaGVscGVyCisgKiBA YmFja2xpZ2h0OiBCYWNrbGlnaHQgZGV2aWNlCisgKgorICogUmV0dXJuczoKKyAqIFplcm8gb24g c3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgdGlueWRy bV9lbmFibGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpCit7 CisJdW5zaWduZWQgaW50IG9sZF9zdGF0ZTsKKwlpbnQgcmV0OworCisJaWYgKCFiYWNrbGlnaHQp CisJCXJldHVybiAwOworCisJb2xkX3N0YXRlID0gYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZTsKKwli YWNrbGlnaHQtPnByb3BzLnN0YXRlICY9IH5CTF9DT1JFX0ZCQkxBTks7CisJRFJNX0RFQlVHX0tN UygiQmFja2xpZ2h0IHN0YXRlOiAweCV4IC0+IDB4JXhcbiIsIG9sZF9zdGF0ZSwKKwkJICAgICAg YmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSk7CisKKwlyZXQgPSBiYWNrbGlnaHRfdXBkYXRlX3N0YXR1 cyhiYWNrbGlnaHQpOworCWlmIChyZXQpCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBi YWNrbGlnaHQgJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0 aW55ZHJtX2VuYWJsZV9iYWNrbGlnaHQpOworCisvKioKKyAqIHRpbnlkcm1fZGlzYWJsZV9iYWNr bGlnaHQgLSBEaXNhYmxlIGJhY2tsaWdodCBoZWxwZXIKKyAqIEBiYWNrbGlnaHQ6IEJhY2tsaWdo dCBkZXZpY2UKKyAqCisgKiBSZXR1cm5zOgorICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCB0aW55ZHJtX2Rpc2FibGVfYmFja2xpZ2h0 KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpCit7CisJdW5zaWduZWQgaW50IG9s ZF9zdGF0ZTsKKwlpbnQgcmV0OworCisJaWYgKCFiYWNrbGlnaHQpCisJCXJldHVybiAwOworCisJ b2xkX3N0YXRlID0gYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZTsKKwliYWNrbGlnaHQtPnByb3BzLnN0 YXRlIHw9IEJMX0NPUkVfRkJCTEFOSzsKKwlEUk1fREVCVUdfS01TKCJCYWNrbGlnaHQgc3RhdGU6 IDB4JXggLT4gMHgleFxuIiwgb2xkX3N0YXRlLAorCQkgICAgICBiYWNrbGlnaHQtPnByb3BzLnN0 YXRlKTsKKwlyZXQgPSBiYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiYWNrbGlnaHQpOworCWlmIChy ZXQpCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUgYmFja2xpZ2h0ICVkXG4iLCByZXQp OworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodGlueWRybV9kaXNhYmxlX2JhY2ts aWdodCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TUEkKKworLyoqCisgKiB0aW55ZHJtX3Nw aV9tYXhfdHJhbnNmZXJfc2l6ZSAtIERldGVybWluZSBtYXggU1BJIHRyYW5zZmVyIHNpemUKKyAq IEBzcGk6IFNQSSBkZXZpY2UKKyAqIEBtYXhfbGVuOiBNYXhpbXVtIGJ1ZmZlciBzaXplIG5lZWRl ZCAob3B0aW9uYWwpCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtYXhpbXVtIHNp emUgdG8gdXNlIGZvciBTUEkgdHJhbnNmZXJzLiBJdCBjaGVja3MKKyAqIHRoZSBTUEkgbWFzdGVy LCB0aGUgb3B0aW9uYWwgQG1heF9sZW4gYW5kIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHNwaV9tYXgg YW5kCisgKiByZXR1cm5zIHRoZSBzbWFsbGVzdC4KKyAqCisgKiBSZXR1cm5zOgorICogTWF4aW11 bSBzaXplIGZvciBTUEkgdHJhbnNmZXJzCisgKi8KK3NpemVfdCB0aW55ZHJtX3NwaV9tYXhfdHJh bnNmZXJfc2l6ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzaXplX3QgbWF4X2xlbikKK3sKKwlz aXplX3QgcmV0OworCisJcmV0ID0gbWluKHNwaV9tYXhfdHJhbnNmZXJfc2l6ZShzcGkpLCBzcGkt Pm1hc3Rlci0+bWF4X2RtYV9sZW4pOworCWlmIChtYXhfbGVuKQorCQlyZXQgPSBtaW4ocmV0LCBt YXhfbGVuKTsKKwlpZiAoc3BpX21heCkKKwkJcmV0ID0gbWluX3Qoc2l6ZV90LCByZXQsIHNwaV9t YXgpOworCXJldCAmPSB+MHgzOworCWlmIChyZXQgPCA0KQorCQlyZXQgPSA0OworCisJcmV0dXJu IHJldDsKK30KK0VYUE9SVF9TWU1CT0wodGlueWRybV9zcGlfbWF4X3RyYW5zZmVyX3NpemUpOwor CisvKioKKyAqIHRpbnlkcm1fc3BpX2Jwd19zdXBwb3J0ZWQgLSBDaGVjayBpZiBiaXRzIHBlciB3 b3JkIGlzIHN1cHBvcnRlZAorICogQHNwaTogU1BJIGRldmljZQorICogQGJwdzogQml0cyBwZXIg d29yZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgU1BJIG1hc3Rl ciBkcml2ZXIgc3VwcG9ydHMgQGJwdy4KKyAqCisgKiBSZXR1cm5zOgorICogVHJ1ZSBpZiBAYnB3 IGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRpbnlkcm1fc3BpX2Jw d19zdXBwb3J0ZWQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdTggYnB3KQoreworCXUzMiBicHdf bWFzayA9IHNwaS0+bWFzdGVyLT5iaXRzX3Blcl93b3JkX21hc2s7CisKKwlpZiAoYnB3ID09IDgp CisJCXJldHVybiB0cnVlOworCisJaWYgKCFicHdfbWFzaykgeworCQlkZXZfd2Fybl9vbmNlKCZz cGktPmRldiwKKwkJCSAgICAgICJiaXRzX3Blcl93b3JkX21hc2sgbm90IHNldCwgYXNzdW1lIDgt Yml0IG9ubHlcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGJwd19tYXNrICYgU1BJ X0JQV19NQVNLKGJwdykpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorRVhQ T1JUX1NZTUJPTCh0aW55ZHJtX3NwaV9icHdfc3VwcG9ydGVkKTsKKworc3RhdGljIHZvaWQKK3Rp bnlkcm1fZGJnX3NwaV9wcmludChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3Ry YW5zZmVyICp0ciwKKwkJICAgICAgY29uc3Qgdm9pZCAqYnVmLCBpbnQgaWR4LCBib29sIHR4KQor eworCXUzMiBzcGVlZF9oeiA9IHRyLT5zcGVlZF9oeiA/IHRyLT5zcGVlZF9oeiA6IHNwaS0+bWF4 X3NwZWVkX2h6OworCWNoYXIgbGluZWJ1ZlszICogMzJdOworCisJaGV4X2R1bXBfdG9fYnVmZmVy KGJ1ZiwgdHItPmxlbiwgMTYsCisJCQkgICBESVZfUk9VTkRfVVAodHItPmJpdHNfcGVyX3dvcmQs IDgpLAorCQkJICAgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpLCBmYWxzZSk7CisKKwlwcmludGso S0VSTl9ERUJVRworCSAgICAgICAiICAgIHRyKCVpKTogc3BlZWQ9JXUlcywgYnB3PSVpLCBsZW49 JXUsICVzX2J1Zj1bJXMlc11cbiIsIGlkeCwKKwkgICAgICAgc3BlZWRfaHogPiAxMDAwMDAwID8g c3BlZWRfaHogLyAxMDAwMDAwIDogc3BlZWRfaHogLyAxMDAwLAorCSAgICAgICBzcGVlZF9oeiA+ IDEwMDAwMDAgPyAiTUh6IiA6ICJrSHoiLCB0ci0+Yml0c19wZXJfd29yZCwgdHItPmxlbiwKKwkg ICAgICAgdHggPyAidHgiIDogInJ4IiwgbGluZWJ1ZiwgdHItPmxlbiA+IDE2ID8gIiAuLi4iIDog IiIpOworfQorCisvKiBjYWxsZWQgdGhyb3VnaCB0aW55ZHJtX2RiZ19zcGlfbWVzc2FnZSgpICov Cit2b2lkIF90aW55ZHJtX2RiZ19zcGlfbWVzc2FnZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBz dHJ1Y3Qgc3BpX21lc3NhZ2UgKm0pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqdG1wOworCXN0 cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlpbnQgaSA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywg Jm0tPnRyYW5zZmVycykgeworCQl0bXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNwaV90cmFu c2ZlciwgdHJhbnNmZXJfbGlzdCk7CisKKwkJaWYgKHRtcC0+dHhfYnVmKQorCQkJdGlueWRybV9k Ymdfc3BpX3ByaW50KHNwaSwgdG1wLCB0bXAtPnR4X2J1ZiwgaSwgdHJ1ZSk7CisJCWlmICh0bXAt PnJ4X2J1ZikKKwkJCXRpbnlkcm1fZGJnX3NwaV9wcmludChzcGksIHRtcCwgdG1wLT5yeF9idWYs IGksIGZhbHNlKTsKKwkJaSsrOworCX0KK30KK0VYUE9SVF9TWU1CT0woX3Rpbnlkcm1fZGJnX3Nw aV9tZXNzYWdlKTsKKworLyoqCisgKiB0aW55ZHJtX3NwaV90cmFuc2ZlciAtIFNQSSB0cmFuc2Zl ciBoZWxwZXIKKyAqIEBzcGk6IFNQSSBkZXZpY2UKKyAqIEBzcGVlZF9oejogT3ZlcnJpZGUgc3Bl ZWQgKG9wdGlvbmFsKQorICogQGhlYWRlcjogT3B0aW9uYWwgaGVhZGVyIHRyYW5zZmVyCisgKiBA YnB3OiBCaXRzIHBlciB3b3JkCisgKiBAYnVmOiBCdWZmZXIgdG8gdHJhbnNmZXIKKyAqIEBsZW46 IEJ1ZmZlciBsZW5ndGgKKyAqCisgKiBUaGlzIFNQSSB0cmFuc2ZlciBoZWxwZXIgYnJlYWtzIHVw IHRoZSB0cmFuc2ZlciBvZiBAYnVmIGludG8gY2h1bmtzIHdoaWNoCisgKiB0aGUgU1BJIG1hc3Rl ciBkcml2ZXIgY2FuIGhhbmRsZS4gSWYgdGhlIG1hY2hpbmUgaXMgTGl0dGxlIEVuZGlhbiBhbmQg dGhlCisgKiBTUEkgbWFzdGVyIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgMTYgYml0cyBwZXIgd29y ZCwgaXQgc3dhcHMgdGhlIGJ5dGVzIGFuZAorICogZG9lcyBhIDgtYml0IHRyYW5zZmVyLgorICog SWYgQGhlYWRlciBpcyBzZXQsIGl0IGlzIHByZXBlbmRlZCB0byBlYWNoIFNQSSBtZXNzYWdlLgor ICoKKyAqIFJldHVybnM6CisgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUg b24gZmFpbHVyZS4KKyAqLworaW50IHRpbnlkcm1fc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2 aWNlICpzcGksIHUzMiBzcGVlZF9oeiwKKwkJCSBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICpoZWFkZXIs IHU4IGJwdywgY29uc3Qgdm9pZCAqYnVmLAorCQkJIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNw aV90cmFuc2ZlciB0ciA9IHsKKwkJLmJpdHNfcGVyX3dvcmQgPSBicHcsCisJCS5zcGVlZF9oeiA9 IHNwZWVkX2h6LAorCX07CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTE2ICpzd2FwX2J1ZiA9 IE5VTEw7CisJc2l6ZV90IG1heF9jaHVuazsKKwlzaXplX3QgY2h1bms7CisJaW50IHJldCA9IDA7 CisKKwlpZiAoV0FSTl9PTl9PTkNFKGJwdyAhPSA4ICYmIGJwdyAhPSAxNikpCisJCXJldHVybiAt RUlOVkFMOworCisJbWF4X2NodW5rID0gdGlueWRybV9zcGlfbWF4X3RyYW5zZmVyX3NpemUoc3Bp LCAwKTsKKworCWlmIChkcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKQorCQlwcl9kZWJ1ZygiW2Ry bTolc10gYnB3PSV1LCBtYXhfY2h1bms9JXp1LCB0cmFuc2ZlcnM6XG4iLAorCQkJIF9fZnVuY19f LCBicHcsIG1heF9jaHVuayk7CisKKwlpZiAoYnB3ID09IDE2ICYmICF0aW55ZHJtX3NwaV9icHdf c3VwcG9ydGVkKHNwaSwgMTYpKSB7CisJCXRyLmJpdHNfcGVyX3dvcmQgPSA4OworCQlpZiAodGlu eWRybV9tYWNoaW5lX2xpdHRsZV9lbmRpYW4oKSkgeworCQkJc3dhcF9idWYgPSBrbWFsbG9jKG1p bihsZW4sIG1heF9jaHVuayksIEdGUF9LRVJORUwpOworCQkJaWYgKCFzd2FwX2J1ZikKKwkJCQly ZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCWlmICho ZWFkZXIpCisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKGhlYWRlciwgJm0pOworCXNwaV9tZXNzYWdl X2FkZF90YWlsKCZ0ciwgJm0pOworCisJd2hpbGUgKGxlbikgeworCQljaHVuayA9IG1pbihsZW4s IG1heF9jaHVuayk7CisKKwkJdHIudHhfYnVmID0gYnVmOworCQl0ci5sZW4gPSBjaHVuazsKKwor CQlpZiAoc3dhcF9idWYpIHsKKwkJCWNvbnN0IHUxNiAqYnVmMTYgPSBidWY7CisJCQl1bnNpZ25l ZCBpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IGNodW5rIC8gMjsgaSsrKQorCQkJCXN3YXBf YnVmW2ldID0gc3dhYjE2KGJ1ZjE2W2ldKTsKKworCQkJdHIudHhfYnVmID0gc3dhcF9idWY7CisJ CX0KKworCQlidWYgKz0gY2h1bms7CisJCWxlbiAtPSBjaHVuazsKKworCQl0aW55ZHJtX2RiZ19z cGlfbWVzc2FnZShzcGksICZtKTsKKwkJcmV0ID0gc3BpX3N5bmMoc3BpLCAmbSk7CisJCWlmIChy ZXQpCisJCQlyZXR1cm4gcmV0OworCX07CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wo dGlueWRybV9zcGlfdHJhbnNmZXIpOworCisjZW5kaWYgLyogQ09ORklHX1NQSSAqLwpkaWZmIC0t Z2l0IGEvaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLWhlbHBlcnMuaCBiL2luY2x1ZGUvZHJt L3Rpbnlkcm0vdGlueWRybS1oZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNzgxNzVmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL3Rpbnlkcm0vdGlu eWRybS1oZWxwZXJzLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw MTYgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBM aWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLwor CisjaWZuZGVmIF9fTElOVVhfVElOWURSTV9IRUxQRVJTX0gKKyNkZWZpbmUgX19MSU5VWF9USU5Z RFJNX0hFTFBFUlNfSAorCitzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZTsKK3N0cnVjdCB0aW55ZHJt X2RldmljZTsKK3N0cnVjdCBkcm1fY2xpcF9yZWN0Oworc3RydWN0IHNwaV90cmFuc2ZlcjsKK3N0 cnVjdCBzcGlfbWVzc2FnZTsKK3N0cnVjdCBzcGlfZGV2aWNlOworc3RydWN0IGRldmljZTsKKwor LyoqCisgKiB0aW55ZHJtX21hY2hpbmVfbGl0dGxlX2VuZGlhbiAtIE1hY2hpbmUgaXMgbGl0dGxl IGVuZGlhbgorICoKKyAqIFJldHVybnM6CisgKiB0cnVlIGlmICpkZWZpbmVkKF9fTElUVExFX0VO RElBTikqLCBmYWxzZSBvdGhlcndpc2UKKyAqLworc3RhdGljIGlubGluZSBib29sIHRpbnlkcm1f bWFjaGluZV9saXR0bGVfZW5kaWFuKHZvaWQpCit7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJ QU4pCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiti b29sIHRpbnlkcm1fbWVyZ2VfY2xpcHMoc3RydWN0IGRybV9jbGlwX3JlY3QgKmRzdCwKKwkJCSBz dHJ1Y3QgZHJtX2NsaXBfcmVjdCAqc3JjLCB1bnNpZ25lZCBpbnQgbnVtX2NsaXBzLAorCQkJIHVu c2lnbmVkIGludCBmbGFncywgdTMyIG1heF93aWR0aCwgdTMyIG1heF9oZWlnaHQpOwordm9pZCB0 aW55ZHJtX21lbWNweSh2b2lkICpkc3QsIHZvaWQgKnZhZGRyLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKKwkJICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwKTsKK3ZvaWQgdGlueWRy bV9zd2FiMTYodTE2ICpkc3QsIHZvaWQgKnZhZGRyLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwKKwkJICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwKTsKK3ZvaWQgdGlueWRybV94cmdi ODg4OF90b19yZ2I1NjUodTE2ICpkc3QsIHZvaWQgKnZhZGRyLAorCQkJCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAorCQkJCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwLCBib29sIHN3YXAp OworCisjaWZkZWYgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKK3N0cnVjdCBiYWNrbGln aHRfZGV2aWNlICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRldik7 CitpbnQgdGlueWRybV9lbmFibGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpi YWNrbGlnaHQpOworaW50IHRpbnlkcm1fZGlzYWJsZV9iYWNrbGlnaHQoc3RydWN0IGJhY2tsaWdo dF9kZXZpY2UgKmJhY2tsaWdodCk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgYmFja2xp Z2h0X2RldmljZSAqCit0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRl dikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGlueWRybV9lbmFi bGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpCit7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0aW55ZHJtX2Rpc2FibGVfYmFja2xpZ2h0 KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpCit7CisJcmV0dXJuIDA7Cit9Cisj ZW5kaWYKKworc2l6ZV90IHRpbnlkcm1fc3BpX21heF90cmFuc2Zlcl9zaXplKHN0cnVjdCBzcGlf ZGV2aWNlICpzcGksIHNpemVfdCBtYXhfbGVuKTsKK2Jvb2wgdGlueWRybV9zcGlfYnB3X3N1cHBv cnRlZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1OCBicHcpOworaW50IHRpbnlkcm1fc3BpX3Ry YW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHUzMiBzcGVlZF9oeiwKKwkJCSBzdHJ1Y3Qg c3BpX3RyYW5zZmVyICpoZWFkZXIsIHU4IGJwdywgY29uc3Qgdm9pZCAqYnVmLAorCQkJIHNpemVf dCBsZW4pOwordm9pZCBfdGlueWRybV9kYmdfc3BpX21lc3NhZ2Uoc3RydWN0IHNwaV9kZXZpY2Ug KnNwaSwgc3RydWN0IHNwaV9tZXNzYWdlICptKTsKKworI2lmZGVmIERFQlVHCisvKioKKyAqIHRp bnlkcm1fZGJnX3NwaV9tZXNzYWdlIC0gRHVtcCBTUEkgbWVzc2FnZQorICogQHNwaTogU1BJIGRl dmljZQorICogQG06IFNQSSBtZXNzYWdlCisgKgorICogRHVtcHMgaW5mbyBhYm91dCB0aGUgdHJh bnNmZXJzIGluIGEgU1BJIG1lc3NhZ2UgaW5jbHVkaW5nIGJ1ZmZlciBjb250ZW50LgorICogREVC VUcgaGFzIHRvIGJlIGRlZmluZWQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgZW5hYmxlZCBhbG9u Z3NpZGUgc2V0dGluZworICogdGhlIERSTV9VVF9EUklWRVIgYml0IG9mICZkcm1fZGVidWcuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW55ZHJtX2RiZ19zcGlfbWVzc2FnZShzdHJ1Y3Qgc3Bp X2RldmljZSAqc3BpLAorCQkJCQkgICBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm0pCit7CisJaWYgKGRy bV9kZWJ1ZyAmIERSTV9VVF9EUklWRVIpCisJCV90aW55ZHJtX2RiZ19zcGlfbWVzc2FnZShzcGks IG0pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW55ZHJtX2RiZ19zcGlfbWVzc2Fn ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCQkgICBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm0p Cit7Cit9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2VuZGlmIC8qIF9fTElOVVhfVElOWURSTV9I RUxQRVJTX0ggKi8KLS0gCjIuMTAuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==