From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v3 13/18] drm: panel: Add support for Himax HX8369A MIPI DSI panel Date: Tue, 23 Dec 2014 11:46:34 +0800 Message-ID: <1419306399-9387-14-git-send-email-Ying.Liu@freescale.com> References: <1419306399-9387-1-git-send-email-Ying.Liu@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1419306399-9387-1-git-send-email-Ying.Liu@freescale.com> 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 Cc: devicetree@vger.kernel.org, linux@arm.linux.org.uk, kernel@pengutronix.de, linux-kernel@vger.kernel.org, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org, andyshrk@gmail.com List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEhpbWF4IEhYODM2OUEgTUlQSSBEU0kgcGFuZWwu CgpTaWduZWQtb2ZmLWJ5OiBMaXUgWWluZyA8WWluZy5MaXVAZnJlZXNjYWxlLmNvbT4KLS0tCnYy LT52MzoKICogU29ydCB0aGUgaW5jbHVkZWQgaGVhZGVyIGZpbGVzIGFscGhhYmV0aWNhbGx5LgoK djEtPnYyOgogKiBBZGRyZXNzIGFsbW9zdCBhbGwgY29tbWVudHMgZnJvbSBUaGllcnJ5IFJlZGlu Zy4KICogUmVtb3ZlIHNldmVyYWwgRFQgcHJvcGVydGllcyBhcyB0aGV5IGNhbiBiZSBpbXBsaWVk IGJ5IHRoZSBjb21wYXRpYmxlIHN0cmluZy4KICogQWRkIHRoZSBISU1BWC9oaW1heCBwcmVmaXhl cyB0byB0aGUgZHJpdmVyJ3MgS2NvbmZpZyBuYW1lIGFuZCBkcml2ZXIgbmFtZS4KICogTW92ZSB0 aGUgZHJpdmVyJ3MgTWFrZWZpbGUgZW50cnkgcGxhY2UgdG8gc29ydCB0aGUgZW50cmllcyBhbHBo YWJldGljYWxseS4KICogUmV1c2Ugc2V2ZXJhbCBzdGFuZGFyZCBEQ1MgZnVuY3Rpb25zIGluc3Rl YWQgb2YgaW52ZW50aW5nIHdoZWVscy4KICogTW92ZSB0aGUgcGFuZWwgcmVzZXR0aW5nIGFuZCBw b3dlciBsb2dpY3MgdG8gdGhlIGRyaXZlciBwcm9iZS9yZW1vdmUgc3RhZ2VzLgogICBUaGlzIG1h eSBzaW1wbGlmeSBwYW5lbCBwcmVwYXJlL3VucHJlcGFyZSBob29rcy4gVGhlIHBvd2VyIGNvbnN1 bXB0aW9uIHNob3VsZAogICBub3QgY2hhbmdlIGEgbG90IGF0IERQTVMgc2luY2UgdGhlIHBhbmVs IGVudGVycyBzbGVlcCBtb2RlIGF0IHRoYXQgdGltZS4KICogQWRkIHRoZSBtb2R1bGUgYXV0aG9y LgogKiBPdGhlciBtaW5vciBjaGFuZ2VzLCBzdWNoIGFzIGNvZGluZyBzdHlsZSBpc3N1ZXMuCgog Li4uL2RldmljZXRyZWUvYmluZGluZ3MvcGFuZWwvaGltYXgsaHg4MzY5YS50eHQgICAgfCAgNDEg KysKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwg ICA1ICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1oaW1heC1oeDgzNjlhLmMgICAg ICAgIHwgNTczICsrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA2MjAgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9i aW5kaW5ncy9wYW5lbC9oaW1heCxoeDgzNjlhLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1oaW1heC1oeDgzNjlhLmMKCmRpZmYgLS1naXQgYS9Eb2N1 bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGFuZWwvaGltYXgsaHg4MzY5YS50eHQgYi9E b2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGFuZWwvaGltYXgsaHg4MzY5YS50eHQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhMmYxMQotLS0gL2Rldi9udWxs CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wYW5lbC9oaW1heCxoeDgz NjlhLnR4dApAQCAtMCwwICsxLDQxIEBACitIaW1heCBIWDgzNjlBIFdWR0EgMTYuN00gY29sb3Ig VEZUIHNpbmdsZSBjaGlwIGRyaXZlciB3aXRoIGludGVybmFsIEdSQU0KKworSGltYXggSFg4MzY5 QSBpcyBhIFdWR0EgcmVzb2x1dGlvbiBkcml2aW5nIGNvbnRyb2xsZXIuCitJdCBpcyBkZXNpZ25l ZCB0byBwcm92aWRlIGEgc2luZ2xlIGNoaXAgc29sdXRpb24gdGhhdCBjb21iaW5lcyBhIHNvdXJj ZQorZHJpdmVyIGFuZCBwb3dlciBzdXBwbHkgY2lyY3VpdHMgdG8gZHJpdmUgYSBURlQgZG90IG1h dHJpeCBMQ0Qgd2l0aAorNDgwUkdCeDg2NCBkb3RzIGF0IHRoZSBtYXhpbXVtLgorCitUaGUgSFg4 MzY5QSBzdXBwb3J0cyBzZXZlcmFsIGludGVyZmFjZSBtb2RlcywgaW5jbHVkaW5nIE1QVSBNSVBJ IERCSSBUeXBlCitBL0IgbW9kZSwgTUlQSSBEUEkvREJJIFR5cGUgQyBtb2RlLCBNSVBJIERTSSB2 aWRlbyBtb2RlLCBNSVBJIERTSSBjb21tYW5kCittb2RlIGFuZCBNRERJIG1vZGUuIFRoZSBpbnRl cmZhY2UgbW9kZSBpcyBzZWxlY3RlZCBieSB0aGUgZXh0ZXJuYWwgaGFyZHdhcmUKK3BpbnMgQlNb MzowXS4KKworQ3VycmVudGx5LCBvbmx5IHRoZSBNSVBJIERTSSB2aWRlbyBtb2RlIGlzIHN1cHBv cnRlZC4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKyAgLSBjb21wYXRpYmxlOiBzaG91bGQgYmUg YSBwYW5lbCdzIGNvbXBhdGlibGUgc3RyaW5nCisgIC0gcmVnOiB0aGUgdmlydHVhbCBjaGFubmVs IG51bWJlciBvZiBhIERTSSBwZXJpcGhlcmFsIGFzIGRlc2NyaWJlZCBpbiBbMV0KKyAgLSByZXNl dC1ncGlvczogYSBHUElPIHNwZWMgZm9yIHRoZSByZXNldCBwaW4KKworT3B0aW9uYWwgcHJvcGVy dGllczoKKyAgLSB2ZGQxLXN1cHBseTogSS9PIGFuZCBpbnRlcmZhY2UgcG93ZXIgc3VwcGx5Cisg IC0gdmRkMi1zdXBwbHk6IGFuYWxvZyBwb3dlciBzdXBwbHkKKyAgLSB2ZGQzLXN1cHBseTogbG9n aWMgcG93ZXIgc3VwcGx5CisgIC0gZHNpLXZjYy1zdXBwbHk6IERTSSBhbmQgTURESSBwb3dlciBz dXBwbHkKKyAgLSB2cHAtc3VwcGx5OiBPVFAgcHJvZ3JhbW1pbmcgdm9sdGFnZQorICAtIGJzMC1n cGlvczogYSBHUElPIHNwZWMgZm9yIHRoZSBwaW4gQlMwCisgIC0gYnMxLWdwaW9zOiBhIEdQSU8g c3BlYyBmb3IgdGhlIHBpbiBCUzEKKyAgLSBiczItZ3Bpb3M6IGEgR1BJTyBzcGVjIGZvciB0aGUg cGluIEJTMgorICAtIGJzMy1ncGlvczogYSBHUElPIHNwZWMgZm9yIHRoZSBwaW4gQlMzCisKK1sx XSBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWlwaS9kc2kvbWlwaS1kc2ktYnVz LnR4dAorCitFeGFtcGxlOgorCXBhbmVsIHsKKwkJY29tcGF0aWJsZSA9ICJ0cnVseSx0ZnQ0ODA4 MDAtMTYtZS1kc2kiOworCQlyZWcgPSA8MD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7 CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9taXBpX3BhbmVsPjsKKwkJcmVzZXQtZ3Bpb3MgPSA8 JmdwaW82IDExIEdQSU9fQUNUSVZFX0xPVz47CisJCWJzMi1ncGlvcyA9IDwmZ3BpbzYgMTQgR1BJ T19BQ1RJVkVfSElHSD47CisJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9L Y29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKaW5kZXggMDI0ZTk4ZS4uODFi MGJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJp dmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTE2LDYgKzE2LDExIEBAIGNvbmZpZyBEUk1f UEFORUxfU0lNUExFCiAJICB0aGF0IGl0IGNhbiBiZSBhdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYg d2hlbiB0aGUgcGFuZWwgZ29lcyBpbnRvIGEKIAkgIGxvdyBwb3dlciBzdGF0ZS4KIAorY29uZmln IERSTV9QQU5FTF9ISU1BWF9IWDgzNjlBCisJdHJpc3RhdGUgIkhpbWF4IEhYODM2OUEgcGFuZWwi CisJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwogY29uZmlnIERSTV9QQU5F TF9MRDkwNDAKIAl0cmlzdGF0ZSAiTEQ5MDQwIFJHQi9TUEkgcGFuZWwiCiAJZGVwZW5kcyBvbiBP RiAmJiBTUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQppbmRleCA0YjJhMDQzLi5kNWRiZTA2IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3BhbmVsL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9TSU1QTEUpICs9IHBhbmVsLXNpbXBsZS5vCitvYmotJChDT05GSUdfRFJNX1BBTkVMX0hJTUFY X0hYODM2OUEpICs9IHBhbmVsLWhpbWF4LWh4ODM2OWEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9MRDkwNDApICs9IHBhbmVsLWxkOTA0MC5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1M2RThB QTApICs9IHBhbmVsLXM2ZThhYTAubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEw MVIxU1gwMSkgKz0gcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEubwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL3BhbmVsLWhpbWF4LWh4ODM2OWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9w YW5lbC9wYW5lbC1oaW1heC1oeDgzNjlhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNmVmY2U4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9w YW5lbC1oaW1heC1oeDgzNjlhLmMKQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgKiBIaW1heCBIWDgz NjlBIHBhbmVsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBGcmVlc2Nh bGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwor ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp cyBkcml2ZXIgaXMgYmFzZWQgb24gU2Ftc3VuZyBzNmU4YWEwIHBhbmVsIGRyaXZlci4KKyAqLwor CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1l ci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3Vs YXRvci9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisjaW5j bHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+ CisKKyNkZWZpbmUgV1JESVNCVgkJMHg1MQorI2RlZmluZSBXUkNUUkxECQkweDUzCisjZGVmaW5l IFdSQ0FCQwkJMHg1NQorI2RlZmluZSBTRVRQT1dFUgkweGIxCisjZGVmaW5lIFNFVERJU1AJCTB4 YjIKKyNkZWZpbmUgU0VUQ1lDCQkweGI0CisjZGVmaW5lIFNFVFZDT00JCTB4YjYKKyNkZWZpbmUg U0VURVhUQwkJMHhiOQorI2RlZmluZSBTRVRNSVBJCQkweGJhCisjZGVmaW5lIFNFVFBBTkVMCTB4 Y2MKKyNkZWZpbmUgU0VUR0lQCQkweGQ1CisjZGVmaW5lIFNFVEdBTU1BCTB4ZTAKKworI2RlZmlu ZSBIWDgzNjlBX01JTl9CUklHSFRORVNTCTB4MDAKKyNkZWZpbmUgSFg4MzY5QV9NQVhfQlJJR0hU TkVTUwkweGZmCisKK2VudW0gaHg4MzY5YV9tcHVfaW50ZXJmYWNlIHsKKwlIWDgzNjlBX0RCSV9U WVBFX0FfOEJJVCwKKwlIWDgzNjlBX0RCSV9UWVBFX0FfOUJJVCwKKwlIWDgzNjlBX0RCSV9UWVBF X0FfMTZCSVQsCisJSFg4MzY5QV9EQklfVFlQRV9BXzE4QklULAorCUhYODM2OUFfREJJX1RZUEVf Ql84QklULAorCUhYODM2OUFfREJJX1RZUEVfQl85QklULAorCUhYODM2OUFfREJJX1RZUEVfQl8x NkJJVCwKKwlIWDgzNjlBX0RCSV9UWVBFX0JfMThCSVQsCisJSFg4MzY5QV9EU0lfQ01EX01PREUs CisJSFg4MzY5QV9EQklfVFlQRV9CXzI0QklULAorCUhYODM2OUFfRFNJX1ZJREVPX01PREUsCisJ SFg4MzY5QV9NRERJLAorCUhYODM2OUFfRFBJX0RCSV9UWVBFX0NfT1BUMSwKKwlIWDgzNjlBX0RQ SV9EQklfVFlQRV9DX09QVDIsCisJSFg4MzY5QV9EUElfREJJX1RZUEVfQ19PUFQzCit9OworCitl bnVtIGh4ODM2OWFfcmVzb2x1dGlvbiB7CisJSFg4MzY5QV9SRVNfNDgwXzg2NCwKKwlIWDgzNjlB X1JFU180ODBfODU0LAorCUhYODM2OUFfUkVTXzQ4MF84MDAsCisJSFg4MzY5QV9SRVNfNDgwXzY0 MCwKKwlIWDgzNjlBX1JFU18zNjBfNjQwLAorCUhYODM2OUFfUkVTXzQ4MF83MjAsCit9OworCitz dHJ1Y3QgaHg4MzY5YV9wYW5lbF9kZXNjIHsKKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZTsKKworCS8qIG1zICovCisJdW5zaWduZWQgaW50IHBvd2VyX29uX2RlbGF5OworCXVu c2lnbmVkIGludCByZXNldF9kZWxheTsKKworCXVuc2lnbmVkIGludCBkc2lfbGFuZXM7Cit9Owor CitzdHJ1Y3QgaHg4MzY5YSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcm1fcGFu ZWwgcGFuZWw7CisKKwljb25zdCBzdHJ1Y3QgaHg4MzY5YV9wYW5lbF9kZXNjICpwZDsKKworCXN0 cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzWzVdOworCXN0cnVjdCBncGlvX2Rlc2Mg KnJlc2V0X2dwaW87CisJc3RydWN0IGdwaW9fZGVzYyAqYnNfZ3Bpb1s0XTsKKwl1OCByZXNfc2Vs OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaHg4MzY5YSAqcGFuZWxfdG9faHg4MzY5YShz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBhbmVsLCBz dHJ1Y3QgaHg4MzY5YSwgcGFuZWwpOworfQorCitzdGF0aWMgdm9pZCBoeDgzNjlhX2Rjc193cml0 ZShzdHJ1Y3QgaHg4MzY5YSAqY3R4LCBjb25zdCBjaGFyICpmdW5jLAorCQkJICAgICAgY29uc3Qg dm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kg PSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCXNzaXplX3QgcmV0OworCisJcmV0ID0g bWlwaV9kc2lfZGNzX3dyaXRlX2J1ZmZlcihkc2ksIGRhdGEsIGxlbik7CisJaWYgKHJldCA8IDAp CisJCWRldl9lcnIoY3R4LT5kZXYsICIlcyBmYWlsZWQ6ICVkXG4iLCBmdW5jLCByZXQpOworfQor CisjZGVmaW5lIGh4ODM2OWFfZGNzX3dyaXRlX3NlcShjdHgsIHNlcS4uLikgXAorKHsgXAorCWNv bnN0IHU4IGRbXSA9IHsgc2VxIH07IFwKKwlCVUlMRF9CVUdfT05fTVNHKEFSUkFZX1NJWkUoZCkg PiA2NCwgIkRDUyBzZXF1ZW5jZSB0b28gYmlnIGZvciBzdGFjayIpOyBcCisJaHg4MzY5YV9kY3Nf d3JpdGUoY3R4LCBfX2Z1bmNfXywgZCwgQVJSQVlfU0laRShkKSk7IFwKK30pCisKKyNkZWZpbmUg aHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIHNlcS4uLikgXAorKHsgXAorCXN0YXRp YyBjb25zdCB1OCBkW10gPSB7IHNlcSB9OyBcCisJaHg4MzY5YV9kY3Nfd3JpdGUoY3R4LCBfX2Z1 bmNfXywgZCwgQVJSQVlfU0laRShkKSk7IFwKK30pCisKK3N0YXRpYyB2b2lkIGh4ODM2OWFfZHNp X3NldF9kaXNwbGF5X3JlbGF0ZWRfcmVnaXN0ZXIoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwl1 OCBzZWNfcCA9IChjdHgtPnJlc19zZWwgPDwgNCkgfCAweDAzOworCisJaHg4MzY5YV9kY3Nfd3Jp dGVfc2VxKGN0eCwgU0VURElTUCwgMHgwMCwgc2VjX3AsIDB4MDMsCisJCTB4MDMsIDB4NzAsIDB4 MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCTB4MDMsIDB4MDMsIDB4MDAsIDB4 MDEpOworfQorCitzdGF0aWMgdm9pZCBoeDgzNjlhX2RzaV9zZXRfZGlzcGxheV93YXZlZm9ybV9j eWNsZShzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCWh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0 aWMoY3R4LCBTRVRDWUMsIDB4MDAsIDB4MWQsIDB4NWYsIDB4MGUsIDB4MDYpOworfQorCitzdGF0 aWMgdm9pZCBoeDgzNjlhX2RzaV9zZXRfZ2lwKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJaHg4 MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVEdJUCwgMHgwMCwgMHgwNCwgMHgwMywg MHgwMCwgMHgwMSwKKwkJCQkweDA1LCAweDFjLCAweDcwLCAweDAxLCAweDAzLCAweDAwLCAweDAw LCAweDQwLAorCQkJCTB4MDYsIDB4NTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDYsIDB4 NTAsCisJCQkJMHgwNywgMHgwNywgMHgwZiwgMHgwNCk7Cit9CisKK3N0YXRpYyB2b2lkIGh4ODM2 OWFfZHNpX3NldF9wb3dlcihzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCWh4ODM2OWFfZGNzX3dy aXRlX3NlcV9zdGF0aWMoY3R4LCBTRVRQT1dFUiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwNiwgMHgw MCwKKwkJCQkweDBmLCAweDBmLCAweDJhLCAweDMyLCAweDNmLCAweDNmLCAweDA3LCAweDNhLAor CQkJCTB4MDEsIDB4ZTYsIDB4ZTYsIDB4ZTYsIDB4ZTYsIDB4ZTYpOworfQorCitzdGF0aWMgdm9p ZCBoeDgzNjlhX2RzaV9zZXRfdmNvbV92b2x0YWdlKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJ aHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVFZDT00sIDB4NTYsIDB4NTYpOwor fQorCitzdGF0aWMgdm9pZCBoeDgzNjlhX2RzaV9zZXRfcGFuZWwoc3RydWN0IGh4ODM2OWEgKmN0 eCkKK3sKKwloeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUUEFORUwsIDB4MDIp OworfQorCitzdGF0aWMgdm9pZCBoeDgzNjlhX2RzaV9zZXRfZ2FtbWFfY3VydmUoc3RydWN0IGh4 ODM2OWEgKmN0eCkKK3sKKwloeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUR0FN TUEsIDB4MDAsIDB4MWQsIDB4MjIsIDB4MzgsIDB4M2QsCisJCQkJMHgzZiwgMHgyZSwgMHg0YSwg MHgwNiwgMHgwZCwgMHgwZiwgMHgxMywgMHgxNSwKKwkJCQkweDEzLCAweDE2LCAweDEwLCAweDE5 LCAweDAwLCAweDFkLCAweDIyLCAweDM4LAorCQkJCTB4M2QsIDB4M2YsIDB4MmUsIDB4NGEsIDB4 MDYsIDB4MGQsIDB4MGYsIDB4MTMsCisJCQkJMHgxNSwgMHgxMywgMHgxNiwgMHgxMCwgMHgxOSk7 Cit9CisKK3N0YXRpYyB2b2lkIGh4ODM2OWFfZHNpX3NldF9taXBpKHN0cnVjdCBoeDgzNjlhICpj dHgpCit7CisJdTggZWxldmVudGhfcCA9IGN0eC0+cGQtPmRzaV9sYW5lcyA9PSAyID8gMHgxMSA6 IDB4MTA7CisKKwloeDgzNjlhX2Rjc193cml0ZV9zZXEoY3R4LCBTRVRNSVBJLCAweDAwLCAweGEw LCAweGM2LCAweDAwLCAweDBhLCAweDAwLAorCQkJMHgxMCwgMHgzMCwgMHg2ZiwgMHgwMiwgZWxl dmVudGhfcCwgMHgxOCwgMHg0MCk7Cit9CisKK3N0YXRpYyB2b2lkIGh4ODM2OWFfZHNpX3NldF9p bnRlcmZhY2VfcGl4ZWxfZm9tYXQoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCXU4IGZv cm1hdDsKKwlpbnQgcmV0OworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I4 ODgpCisJCWZvcm1hdCA9IDB4Nzc7CisJZWxzZSBpZiAoZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lf Rk1UX1JHQjU2NSkKKwkJZm9ybWF0ID0gMHg1NTsKKwllbHNlCisJCWZvcm1hdCA9IDB4NjY7CisK KwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X3BpeGVsX2Zvcm1hdChkc2ksIGZvcm1hdCk7CisJaWYg KHJldCA8IDApCisJCWRldl9lcnIoY3R4LT5kZXYsICIlcyBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNf XywgcmV0KTsKK30KKworc3RhdGljIHZvaWQgaHg4MzY5YV9kc2lfc2V0X2NvbHVtbl9hZGRyZXNz KHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0g dG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSA9IGN0eC0+cGQtPm1vZGU7CisJaW50IHJldDsKKworCXJldCA9IG1pcGlfZHNp X2Rjc19zZXRfY29sdW1uX2FkZHJlc3MoZHNpLCAwLCBtb2RlLT5oZGlzcGxheSAtIDEpOworCWlm IChyZXQgPCAwKQorCQlkZXZfZXJyKGN0eC0+ZGV2LCAiJXMgZmFpbGVkOiAlZFxuIiwgX19mdW5j X18sIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGh4ODM2OWFfZHNpX3NldF9wYWdlX2FkZHJlc3Mo c3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0 b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlID0gY3R4LT5wZC0+bW9kZTsKKwlpbnQgcmV0OworCisJcmV0ID0gbWlwaV9kc2lf ZGNzX3NldF9wYWdlX2FkZHJlc3MoZHNpLCAwLCBtb2RlLT52ZGlzcGxheSAtIDEpOworCWlmIChy ZXQgPCAwKQorCQlkZXZfZXJyKGN0eC0+ZGV2LCAiJXMgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18s IHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGh4ODM2OWFfZHNpX3dyaXRlX2Rpc3BsYXlfYnJpZ2h0 bmVzcyhzdHJ1Y3QgaHg4MzY5YSAqY3R4LCB1OCBicmlnaHRuZXNzKQoreworCWh4ODM2OWFfZGNz X3dyaXRlX3NlcShjdHgsIFdSRElTQlYsIGJyaWdodG5lc3MpOworfQorCitzdGF0aWMgdm9pZCBo eDgzNjlhX2RzaV93cml0ZV9jYWJjKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJaHg4MzY5YV9k Y3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFdSQ0FCQywgMHgwMSk7Cit9CisKK3N0YXRpYyB2b2lk IGh4ODM2OWFfZHNpX3dyaXRlX2NvbnRyb2xfZGlzcGxheShzdHJ1Y3QgaHg4MzY5YSAqY3R4KQor eworCWh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBXUkNUUkxELCAweDI0KTsKK30K Kworc3RhdGljIHZvaWQgaHg4MzY5YV9kc2lfcGFuZWxfaW5pdChzdHJ1Y3QgaHg4MzY5YSAqY3R4 KQoreworCWh4ODM2OWFfZHNpX3NldF9kaXNwbGF5X3JlbGF0ZWRfcmVnaXN0ZXIoY3R4KTsKKwlo eDgzNjlhX2RzaV9zZXRfZGlzcGxheV93YXZlZm9ybV9jeWNsZShjdHgpOworCWh4ODM2OWFfZHNp X3NldF9naXAoY3R4KTsKKwloeDgzNjlhX2RzaV9zZXRfcG93ZXIoY3R4KTsKKwloeDgzNjlhX2Rz aV9zZXRfdmNvbV92b2x0YWdlKGN0eCk7CisJaHg4MzY5YV9kc2lfc2V0X3BhbmVsKGN0eCk7CisJ aHg4MzY5YV9kc2lfc2V0X2dhbW1hX2N1cnZlKGN0eCk7CisJaHg4MzY5YV9kc2lfc2V0X21pcGko Y3R4KTsKKwloeDgzNjlhX2RzaV9zZXRfaW50ZXJmYWNlX3BpeGVsX2ZvbWF0KGN0eCk7CisJaHg4 MzY5YV9kc2lfc2V0X2NvbHVtbl9hZGRyZXNzKGN0eCk7CisJaHg4MzY5YV9kc2lfc2V0X3BhZ2Vf YWRkcmVzcyhjdHgpOworCWh4ODM2OWFfZHNpX3dyaXRlX2NhYmMoY3R4KTsKKwloeDgzNjlhX2Rz aV93cml0ZV9jb250cm9sX2Rpc3BsYXkoY3R4KTsKK30KKworc3RhdGljIHZvaWQgaHg4MzY5YV9k c2lfc2V0X2V4dGVuc2lvbl9jb21tYW5kKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJaHg4MzY5 YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVEVYVEMsIDB4ZmYsIDB4ODMsIDB4NjkpOwor fQorCitzdGF0aWMgdm9pZCBoeDgzNjlhX2RzaV9zZXRfbWF4aW11bV9yZXR1cm5fcGFja2V0X3Np emUoc3RydWN0IGh4ODM2OWEgKmN0eCwKKwkJCQkJCSAgICAgICB1MTYgc2l6ZSkKK3sKKwlzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOwor CWludCByZXQ7CisKKwlyZXQgPSBtaXBpX2RzaV9zZXRfbWF4aW11bV9yZXR1cm5fcGFja2V0X3Np emUoZHNpLCBzaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihjdHgtPmRldiwKKwkJCSJl cnJvciAlZCBzZXR0aW5nIG1heGltdW0gcmV0dXJuIHBhY2tldCBzaXplIHRvICVkXG4iLAorCQkJ cmV0LCBzaXplKTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRfc2VxdWVuY2Uoc3Ry dWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19t aXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCWludCByZXQ7CisKKwloeDgzNjlhX2RzaV9zZXRf ZXh0ZW5zaW9uX2NvbW1hbmQoY3R4KTsKKwloeDgzNjlhX2RzaV9zZXRfbWF4aW11bV9yZXR1cm5f cGFja2V0X3NpemUoY3R4LCA0KTsKKwloeDgzNjlhX2RzaV9wYW5lbF9pbml0KGN0eCk7CisKKwly ZXQgPSBtaXBpX2RzaV9kY3NfZXhpdF9zbGVlcF9tb2RlKGRzaSk7CisJaWYgKHJldCA8IDApIHsK KwkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBleGl0IHNsZWVwIG1vZGU6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxh eV9vbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQg dG8gc2V0IGRpc3BsYXkgb246ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8q CisJICogSXQncyBuZWNlc3NhcnkgdG8gd2FpdCAxMjBtc2VjIGFmdGVyIHNlbmRpbmcgdGhlIFNs ZWVwIE91dAorCSAqIGNvbW1hbmQgYmVmb3JlIFNsZWVwIEluIGNvbW1hbmQgY2FuIGJlIHNlbnQs IGFjY29yZGluZyB0bworCSAqIHRoZSBIWDgzNjlBIGRhdGEgc2hlZXQuCisJICovCisJbXNsZWVw KDEyMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9kaXNhYmxl KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBoeDgzNjlhICpjdHggPSBwYW5l bF90b19oeDgzNjlhKHBhbmVsKTsKKwloeDgzNjlhX2RzaV93cml0ZV9kaXNwbGF5X2JyaWdodG5l c3MoY3R4LCBIWDgzNjlBX01JTl9CUklHSFRORVNTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBoeDgzNjlhX2RzaV91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJ c3RydWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFuZWwpOworCXN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7CisJaW50 IHJldDsKKworCXJldCA9IG1pcGlfZHNpX2Rjc19lbnRlcl9zbGVlcF9tb2RlKGRzaSk7CisJaWYg KHJldCA8IDApIHsKKwkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBlbnRlciBzbGVlcCBt b2RlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBtaXBpX2RzaV9k Y3Nfc2V0X2Rpc3BsYXlfb2ZmKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjdHgt PmRldiwgImZhaWxlZCB0byBzZXQgZGlzcGxheSBvZmY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCS8qCisJICogVGhpcyBpcyB0byBhbGxvdyB0aW1lIGZvciB0aGUgc3VwcGx5 IHZvbHRhZ2VzIGFuZCBjbG9jaworCSAqIGNpcmN1aXRzIHRvIHN0YWJsaXplLCBhY2NvcmRpbmcg dG8gdGhlIEhYODM2OUEgZGF0YSBzaGVldC4KKwkgKi8KKwltc2xlZXAoNSk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3ByZXBhcmUoc3RydWN0IGRybV9wYW5l bCAqcGFuZWwpCit7CisJc3RydWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFu ZWwpOworCXJldHVybiBoeDgzNjlhX2RzaV9zZXRfc2VxdWVuY2UoY3R4KTsKK30KKworc3RhdGlj IGludCBoeDgzNjlhX2RzaV9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3Ry dWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFuZWwpOworCWh4ODM2OWFfZHNp X3dyaXRlX2Rpc3BsYXlfYnJpZ2h0bmVzcyhjdHgsIEhYODM2OUFfTUFYX0JSSUdIVE5FU1MpOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZ2V0X21vZGVzKHN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5l bC0+Y29ubmVjdG9yOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwYW5lbC0+ZHJtOworCXN0 cnVjdCBoeDgzNjlhICpjdHggPSBwYW5lbF90b19oeDgzNjlhKHBhbmVsKTsKKwlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbSA9 IGN0eC0+cGQtPm1vZGU7CisKKwltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRybSwgbSk7CisJ aWYgKCFtb2RlKSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJmYWlsZWQgdG8gYWRkIG1vZGUgJXV4 JXVAJXVcbiIsCisJCQltLT5oZGlzcGxheSwgbS0+dmRpc3BsYXksIG0tPnZyZWZyZXNoKTsKKwkJ cmV0dXJuIDA7CisJfQorCisJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisJbW9kZS0+dHlwZSA9 IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisKKwljb25u ZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgPSA4OworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndp ZHRoX21tID0gbW9kZS0+d2lkdGhfbW07CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0 X21tID0gbW9kZS0+aGVpZ2h0X21tOworCisJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3Is IG1vZGUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVs X2Z1bmNzIGh4ODM2OWFfZHNpX2RybV9mdW5jcyA9IHsKKwkuZGlzYWJsZSA9IGh4ODM2OWFfZHNp X2Rpc2FibGUsCisJLnVucHJlcGFyZSA9IGh4ODM2OWFfZHNpX3VucHJlcGFyZSwKKwkucHJlcGFy ZSA9IGh4ODM2OWFfZHNpX3ByZXBhcmUsCisJLmVuYWJsZSA9IGh4ODM2OWFfZHNpX2VuYWJsZSwK KwkuZ2V0X21vZGVzID0gaHg4MzY5YV9nZXRfbW9kZXMsCit9OworCitzdGF0aWMgaW50IGh4ODM2 OWFfcG93ZXJfb24oc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0g cmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3Vw cGxpZXMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbXNsZWVwKGN0eC0+cGQt PnBvd2VyX29uX2RlbGF5KTsKKworCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEp OworCXVzbGVlcF9yYW5nZSg1MCwgNjApOworCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dw aW8sIDApOworCisJbXNsZWVwKGN0eC0+cGQtPnJlc2V0X2RlbGF5KTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGh4ODM2OWFfcG93ZXJfb2ZmKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7 CisJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVz KSwgY3R4LT5zdXBwbGllcyk7OworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfdm1fdG9fcmVzX3Nl bChzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlID0gY3R4LT5wZC0+bW9kZTsKKworCXN3aXRjaCAobW9kZS0+aGRpc3BsYXkpIHsKKwlj YXNlIDQ4MDoKKwkJc3dpdGNoIChtb2RlLT52ZGlzcGxheSkgeworCQljYXNlIDg2NDoKKwkJCWN0 eC0+cmVzX3NlbCA9IEhYODM2OUFfUkVTXzQ4MF84NjQ7CisJCQlicmVhazsKKwkJY2FzZSA4NTQ6 CisJCQljdHgtPnJlc19zZWwgPSBIWDgzNjlBX1JFU180ODBfODU0OworCQkJYnJlYWs7CisJCWNh c2UgODAwOgorCQkJY3R4LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfNDgwXzgwMDsKKwkJCWJyZWFr OworCQljYXNlIDY0MDoKKwkJCWN0eC0+cmVzX3NlbCA9IEhYODM2OUFfUkVTXzQ4MF82NDA7CisJ CQlicmVhazsKKwkJY2FzZSA3MjA6CisJCQljdHgtPnJlc19zZWwgPSBIWDgzNjlBX1JFU180ODBf NzIwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlj YXNlIDM2MDoKKwkJaWYgKG1vZGUtPnZkaXNwbGF5ID09IDY0MCkKKwkJCWN0eC0+cmVzX3NlbCA9 IEhYODM2OUFfUkVTXzM2MF82NDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg dHJ1bHlfdGZ0NDgwODAwXzE2X2VfbW9kZSA9IHsKKwkuY2xvY2sgPSAyNjQwMCwKKwkuaGRpc3Bs YXkgPSA0ODAsCisJLmhzeW5jX3N0YXJ0ID0gNDgwICsgOCwKKwkuaHN5bmNfZW5kID0gNDgwICsg OCArIDgsCisJLmh0b3RhbCA9IDQ4MCArIDggKyA4ICsgOCwKKwkudmRpc3BsYXkgPSA4MDAsCisJ LnZzeW5jX3N0YXJ0ID0gODAwICsgNiwKKwkudnN5bmNfZW5kID0gODAwICsgNiArIDYsCisJLnZ0 b3RhbCA9IDgwMCArIDYgKyA2ICsgNiwKKwkudnJlZnJlc2ggPSA2MCwKKwkud2lkdGhfbW0gPSA0 NSwKKwkuaGVpZ2h0X21tID0gNzYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGh4ODM2OWFf cGFuZWxfZGVzYyB0cnVseV90ZnQ0ODA4MDBfMTZfZV9kc2kgPSB7CisJLm1vZGUgPSAmdHJ1bHlf dGZ0NDgwODAwXzE2X2VfbW9kZSwKKwkucG93ZXJfb25fZGVsYXkgPSAxMCwKKwkucmVzZXRfZGVs YXkgPSAxMCwKKwkuZHNpX2xhbmVzID0gMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIGh4ODM2OWFfZHNpX29mX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9 ICJ0cnVseSx0ZnQ0ODA4MDAtMTYtZS1kc2kiLAorCQkuZGF0YSA9ICZ0cnVseV90ZnQ0ODA4MDBf MTZfZV9kc2ksCisJfSwgeworCQkvKiBzZW50aW5lbCAqLworCX0sCit9OworTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgaHg4MzY5YV9kc2lfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IGh4ODM2OWFf ZHNpX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmZHNpLT5kZXY7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPQor CQkJb2ZfbWF0Y2hfZGV2aWNlKGh4ODM2OWFfZHNpX29mX21hdGNoLCBkZXYpOworCXN0cnVjdCBo eDgzNjlhICpjdHg7CisJaW50IHJldCwgaTsKKwljaGFyIGJzWzRdOworCisJY3R4ID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwljdHgtPmRldiA9IGRldjsKKworCWlmIChvZl9pZCkgeworCQljdHgt PnBkID0gb2ZfaWQtPmRhdGE7CisJfSBlbHNlIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZmlu ZCBjb21wYXRpYmxlIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9 IGh4ODM2OWFfdm1fdG9fcmVzX3NlbChjdHgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0 OworCisJY3R4LT5zdXBwbGllc1swXS5zdXBwbHkgPSAidmRkMSI7CisJY3R4LT5zdXBwbGllc1sx XS5zdXBwbHkgPSAidmRkMiI7CisJY3R4LT5zdXBwbGllc1syXS5zdXBwbHkgPSAidmRkMyI7CisJ Y3R4LT5zdXBwbGllc1szXS5zdXBwbHkgPSAiZHNpLXZjYyI7CisJY3R4LT5zdXBwbGllc1s0XS5z dXBwbHkgPSAidnBwIjsKKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChkZXYsIEFSUkFZ X1NJWkUoY3R4LT5zdXBwbGllcyksCisJCQkJICAgICAgY3R4LT5zdXBwbGllcyk7CisJaWYgKHJl dCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlZ3VsYXRvcnM6ICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWN0eC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bp b2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihjdHgtPnJl c2V0X2dwaW8pKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCByZXNldC1ncGlvcyAlbGRc biIsCisJCQlQVFJfRVJSKGN0eC0+cmVzZXRfZ3BpbykpOworCQlyZXR1cm4gUFRSX0VSUihjdHgt PnJlc2V0X2dwaW8pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc25wcmlu dGYoYnMsIHNpemVvZihicyksICJicyVkIiwgaSk7CisJCWN0eC0+YnNfZ3Bpb1tpXSA9IGRldm1f Z3Bpb2RfZ2V0KGRldiwgYnMsIEdQSU9EX09VVF9ISUdIKTsKKworCQlkZXZfZGJnKGRldiwgImJz JWQtZ3BpbyBpcyBjb25maWd1cmVkXG4iLCBpKTsKKwl9CisKKwlyZXQgPSBoeDgzNjlhX3Bvd2Vy X29uKGN0eCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgcG93ZXIg b25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9wYW5lbF9pbml0KCZjdHgtPnBhbmVs KTsKKwljdHgtPnBhbmVsLmRldiA9IGRldjsKKwljdHgtPnBhbmVsLmZ1bmNzID0gJmh4ODM2OWFf ZHNpX2RybV9mdW5jczsKKworCXJldCA9IGRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwpOworCWlm IChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbWlwaV9kc2lfc2V0X2RydmRhdGEoZHNpLCBj dHgpOworCisJZHNpLT5jaGFubmVsID0gMDsKKwlkc2ktPmxhbmVzID0gY3R4LT5wZC0+ZHNpX2xh bmVzOworCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxh Z3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwKKwkJCSAgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJT VCB8CisJCQkgIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRTsKKwlyZXQgPSBtaXBpX2Rz aV9hdHRhY2goZHNpKTsKKwlpZiAocmV0IDwgMCkKKwkJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5w YW5lbCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3JlbW92 ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCit7CisJc3RydWN0IGh4ODM2OWEgKmN0eCA9 IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7CisKKwltaXBpX2RzaV9kZXRhY2goZHNpKTsKKwlk cm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKKwlyZXR1cm4gaHg4MzY5YV9wb3dlcl9vZmYo Y3R4KTsKK30KKworc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kcml2ZXIgaHg4MzY5YV9kc2lfZHJp dmVyID0geworCS5wcm9iZSA9IGh4ODM2OWFfZHNpX3Byb2JlLAorCS5yZW1vdmUgPSBoeDgzNjlh X2RzaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicGFuZWwtaHg4MzY5YS1kc2ki LAorCQkub2ZfbWF0Y2hfdGFibGUgPSBoeDgzNjlhX2RzaV9vZl9tYXRjaCwKKwl9LAorfTsKK21v ZHVsZV9taXBpX2RzaV9kcml2ZXIoaHg4MzY5YV9kc2lfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NS SVBUSU9OKCJIaW1heCBIWDgzNjlBIHBhbmVsIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTGl1 IFlpbmcgPFlpbmcuTGl1QGZyZWVzY2FsZS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYy Iik7Ci0tIAoyLjEuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK