From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: [PATCH] drm: Add Grain Media GM12U320 driver v2 Date: Sun, 21 Jul 2019 15:25:25 +0200 Message-ID: <20190721132525.10396-1-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id ED77089B67 for ; Sun, 21 Jul 2019 13:25:29 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Maarten Lankhorst , Maxime Ripard , Sean Paul , Daniel Vetter , David Airlie Cc: Hans de Goede , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QWRkIGEgbW9kZXNldHRpbmcgZHJpdmVyIGZvciBHcmFpbiBNZWRpYSBHTTEyVTMyMCBiYXNlZCBk ZXZpY2VzCihwcmltYXJpbHkgQWNlciBDMTIwIHByb2plY3RvciwgYnV0IHRoZXJlIG1heSBiZSBj b21wYXRpYmxlIGRldmljZXMpLgoKVGhpcyBpcyBiYXNlZCBvbiB0aGUgZmIgZHJpdmVyIGZyb20g VmlhY2hlc2xhdiBOdXJtZWtoYW1pdG92OgpodHRwczovL2dpdGh1Yi5jb20vc2xhdnJuL2dtMTJ1 MzIwCgpUaGlzIGRyaXZlciB1c2VzIGRybV9zaW1wbGVfZGlzcGxheV9waXBlIHRvIGRlYWwgd2l0 aCBhbGwgdGhlIGF0b21pYwpzdHVmZiwgZ2VtX3NobWVtX2hlbHBlciBmdW5jdGlvbnMgZm9yIGJ1 ZmZlciBtYW5hZ2VtZW50IGFuZApkcm1fZmJkZXZfZ2VuZXJpY19zZXR1cCBmb3IgZmJkZXYgZW11 bGF0aW9uLCBzbyB0aGF0IGxlYXZlcyB0aGUgZHJpdmVyCml0c2VsZiB3aXRoIG9ubHkgdGhlIGFj dHVhbCBjb2RlIGZvciB0YWxraW5nIHRvIHRoZSBnbTEzdTMyMCBjaGlwLApsZWFkaW5nIHRvIGEg bmljZSBzaW1wbGUgYW5kIGNsZWFuIGRyaXZlci4KCkNoYW5nZXMgaW4gdjI6Ci1BZGQgZHJtLW1p c2MgdHJlZSB0byBNQUlOVEFJTkVSUwotRHJvcCBtb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGgg PSAyNCAvIGZpeCBmYmRldiBzdXBwb3J0CgpSZXZpZXdlZC1ieTogTm9yYWxmIFRyw7hubmVzIDxu b3JhbGZAdHJvbm5lcy5vcmc+ClNpZ25lZC1vZmYtYnk6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRl QHJlZGhhdC5jb20+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDYgKwogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2dt MTJ1MzIwL0tjb25maWcgICAgfCAgIDkgKwogZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2Vm aWxlICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwLmMgfCA4MTUg KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA4MzUgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9LY29u ZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxl CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwLmMK CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGUyZGIwZDQ2Nzk2 Ni4uMzI5MGJjZmU2N2IyIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVS UwpAQCAtNTAyNSw2ICs1MDI1LDEyIEBAIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9wYW5lbC1mZWl5YW5nLWZ5MDcwMjRkaTI2YTMwZC5jCiBGOglEb2N1bWVudGF0aW9u L2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9wYW5lbC9mZWl5YW5nLGZ5MDcwMjRkaTI2YTMw ZC50eHQKIAorRFJNIERSSVZFUiBGT1IgR1JBSU4gTUVESUEgR00xMlUzMjAgUFJPSkVDVE9SUwor TToJSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KK1Q6CWdpdCBnaXQ6Ly9hbm9u Z2l0LmZyZWVkZXNrdG9wLm9yZy9kcm0vZHJtLW1pc2MKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZl cnMvZ3B1L2RybS9nbTEydTMyMC8KKwogRFJNIERSSVZFUiBGT1IgSUxJVEVLIElMSTkyMjUgUEFO RUxTCiBNOglEYXZpZCBMZWNobmVyIDxkYXZpZEBsZWNobm9sb2d5LmNvbT4KIFM6CU1haW50YWlu ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJt L0tjb25maWcKaW5kZXggMzZmOTAwZDYzOTc5Li5hZjgyMDAyODI1ZWQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0z NDMsNiArMzQzLDggQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvS2NvbmZpZyIK IAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYXNwZWVkL0tjb25maWciCiAKK3NvdXJjZSAiZHJp dmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWciCisKICMgS2VlcCBsZWdhY3kgZHJpdmVycyBs YXN0CiAKIG1lbnVjb25maWcgRFJNX0xFR0FDWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDcyZjUwMzZkOWJmYS4u OGE0Zjg1MWY1NGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC0xMTMsMyArMTEzLDQgQEAgb2JqLSQoQ09ORklH X0RSTV9WQk9YVklERU8pICs9IHZib3h2aWRlby8KIG9iai0kKENPTkZJR19EUk1fTElNQSkgICs9 IGxpbWEvCiBvYmotJChDT05GSUdfRFJNX1BBTkZST1NUKSArPSBwYW5mcm9zdC8KIG9iai0kKENP TkZJR19EUk1fQVNQRUVEX0dGWCkgKz0gYXNwZWVkLworb2JqLSQoQ09ORklHX0RSTV9HTTEyVTMy MCkgKz0gZ20xMnUzMjAvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvS2Nv bmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDg4MmE2MWMwNGQ1Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWcKQEAgLTAsMCArMSw5IEBACisjIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworY29uZmlnIERSTV9HTTEyVTMyMAorCXRyaXN0 YXRlICJHTTEyVTMyMCBkcml2ZXIgZm9yIFVTQiBwcm9qZWN0b3JzIgorCWRlcGVuZHMgb24gRFJN ICYmIFVTQgorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fR0VNX1NITUVNX0hF TFBFUgorCWhlbHAKKwkgVGhpcyBpcyBhIEtNUyBkcml2ZXIgZm9yIHByb2plY3RvcnMgd2hpY2gg dXNlIHRoZSBHTTEyVTMyMCBjaGlwc2V0CisJIGZvciB2aWRlbyB0cmFuc2ZlciBvdmVyIFVTQjIv Mywgc3VjaCBhcyB0aGUgQWNlciBDMTIwIG1pbmkgcHJvamVjdG9yLgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIw L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZWE1MTQz ODJmMDBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2Vm aWxlCkBAIC0wLDAgKzEsMiBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsK K29iai0kKENPTkZJR19EUk1fR00xMlUzMjApICs9IGdtMTJ1MzIwLm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMC5jIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1 MzIwL2dtMTJ1MzIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4z ZGZlODZkZWZlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAv Z20xMnUzMjAuYwpAQCAtMCwwICsxLDgxNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjArCisvKgorICogQ29weXJpZ2h0IDIwMTkgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVA cmVkaGF0LmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfc3RhdGVfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2RhbWFnZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgorI2luY2x1ZGUgPGRy bS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9mb3JtYXRfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dl bV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9wcm9iZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV92YmxhbmsuaD4KKworc3RhdGljIGJvb2wgZWNvX21vZGU7Citt b2R1bGVfcGFyYW0oZWNvX21vZGUsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhlY29f bW9kZSwgIlR1cm4gb24gRWNvIG1vZGUgKGxlc3MgYnJpZ2h0LCBtb3JlIHNpbGVudCkiKTsKKwor I2RlZmluZSBEUklWRVJfTkFNRQkJImdtMTJ1MzIwIgorI2RlZmluZSBEUklWRVJfREVTQwkJIkdy YWluIE1lZGlhIEdNMTJVMzIwIFVTQiBwcm9qZWN0b3IgZGlzcGxheSIKKyNkZWZpbmUgRFJJVkVS X0RBVEUJCSIyMDE5IgorI2RlZmluZSBEUklWRVJfTUFKT1IJCTEKKyNkZWZpbmUgRFJJVkVSX01J Tk9SCQkwCisjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTEKKworLyoKKyAqIFRoZSBETFAgaGFz IGFuIGFjdHVhbCB3aWR0aCBvZiA4NTQgcGl4ZWxzLCBidXQgdGhhdCBpcyBub3QgYSBtdWx0aXBs ZQorICogb2YgOCwgYnJlYWtpbmcgdGhpbmdzIGxlZnQgYW5kIHJpZ2h0LCBzbyB3ZSBleHBvcnQg YSB3aWR0aCBvZiA4NDguCisgKi8KKyNkZWZpbmUgR00xMlUzMjBfVVNFUl9XSURUSAkJODQ4Cisj ZGVmaW5lIEdNMTJVMzIwX1JFQUxfV0lEVEgJCTg1NAorI2RlZmluZSBHTTEyVTMyMF9IRUlHSFQJ CQk0ODAKKworI2RlZmluZSBHTTEyVTMyMF9CTE9DS19DT1VOVAkJMjAKKworI2RlZmluZSBNSVND X1JDVl9FUFQJCQkxCisjZGVmaW5lIERBVEFfUkNWX0VQVAkJCTIKKyNkZWZpbmUgREFUQV9TTkRf RVBUCQkJMworI2RlZmluZSBNSVNDX1NORF9FUFQJCQk0CisKKyNkZWZpbmUgREFUQV9CTE9DS19I RUFERVJfU0laRQkJODQKKyNkZWZpbmUgREFUQV9CTE9DS19DT05URU5UX1NJWkUJCTY0NTEyCisj ZGVmaW5lIERBVEFfQkxPQ0tfRk9PVEVSX1NJWkUJCTIwCisjZGVmaW5lIERBVEFfQkxPQ0tfU0la RQkJCShEQVRBX0JMT0NLX0hFQURFUl9TSVpFICsgXAorCQkJCQkgREFUQV9CTE9DS19DT05URU5U X1NJWkUgKyBcCisJCQkJCSBEQVRBX0JMT0NLX0ZPT1RFUl9TSVpFKQorI2RlZmluZSBEQVRBX0xB U1RfQkxPQ0tfQ09OVEVOVF9TSVpFCTQwMzIKKyNkZWZpbmUgREFUQV9MQVNUX0JMT0NLX1NJWkUJ CShEQVRBX0JMT0NLX0hFQURFUl9TSVpFICsgXAorCQkJCQkgREFUQV9MQVNUX0JMT0NLX0NPTlRF TlRfU0laRSArIFwKKwkJCQkJIERBVEFfQkxPQ0tfRk9PVEVSX1NJWkUpCisKKyNkZWZpbmUgQ01E X1NJWkUJCQkzMQorI2RlZmluZSBSRUFEX1NUQVRVU19TSVpFCQkxMworI2RlZmluZSBNSVNDX1ZB TFVFX1NJWkUJCQk0CisKKyNkZWZpbmUgQ01EX1RJTUVPVVQJCQltc2Vjc190b19qaWZmaWVzKDIw MCkKKyNkZWZpbmUgREFUQV9USU1FT1VUCQkJbXNlY3NfdG9famlmZmllcygxMDAwKQorI2RlZmlu ZSBJRExFX1RJTUVPVVQJCQltc2Vjc190b19qaWZmaWVzKDIwMDApCisjZGVmaW5lIEZJUlNUX0ZS QU1FX1RJTUVPVVQJCW1zZWNzX3RvX2ppZmZpZXMoMjAwMCkKKworI2RlZmluZSBNSVNDX1JFUV9H RVRfU0VUX0VDT19BCQkweGZmCisjZGVmaW5lIE1JU0NfUkVRX0dFVF9TRVRfRUNPX0IJCTB4MzUK Ky8qIFdpbmRvd3MgZHJpdmVyIGRvZXMgb25jZSBldmVyeSBzZWNvbmQsIHdpdGggYXJnIGQgPSAx LCBvdGhlciBhcmdzIDAgKi8KKyNkZWZpbmUgTUlTQ19SRVFfVU5LTk9XTjFfQQkJMHhmZgorI2Rl ZmluZSBNSVNDX1JFUV9VTktOT1dOMV9CCQkweDM4CisvKiBXaW5kb3dzIGRyaXZlciBkb2VzIHRo aXMgb24gaW5pdCwgd2l0aCBhcmcgYSwgYiA9IDAsIGMgPSAweGEwLCBkID0gNCAqLworI2RlZmlu ZSBNSVNDX1JFUV9VTktOT1dOMl9BCQkweGE1CisjZGVmaW5lIE1JU0NfUkVRX1VOS05PV04yX0IJ CTB4MDAKKworc3RydWN0IGdtMTJ1MzIwX2RldmljZSB7CisJc3RydWN0IGRybV9kZXZpY2UJICAg ICAgICAgZGV2OworCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAgIHBpcGU7CisJc3Ry dWN0IGRybV9jb25uZWN0b3IJICAgICAgICAgY29ubjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAg ICAgICAgICAgICp1ZGV2OworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgICAgKmNtZF9i dWY7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgICAqZGF0YV9idWZbR00xMlUzMjBf QkxPQ0tfQ09VTlRdOworCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVfZW5h YmxlZDsKKwlzdHJ1Y3QgeworCQlib29sICAgICAgICAgICAgICAgICAgICAgcnVuOworCQlzdHJ1 Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3E7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICB3 b3JrOworCQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgd2FpdHE7CisJCXN0cnVjdCBtdXRleCAg ICAgICAgICAgICBsb2NrOworCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICAqZmI7CisJCXN0cnVj dCBkcm1fcmVjdCAgICAgICAgICByZWN0OworCX0gZmJfdXBkYXRlOworfTsKKworc3RhdGljIGNv bnN0IGNoYXIgY21kX2RhdGFbQ01EX1NJWkVdID0geworCTB4NTUsIDB4NTMsIDB4NDIsIDB4NDMs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHhmYywgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgxMCwgMHhmZiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAw eDgwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307 CisKK3N0YXRpYyBjb25zdCBjaGFyIGNtZF9kcmF3W0NNRF9TSVpFXSA9IHsKKwkweDU1LCAweDUz LCAweDQyLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ZmUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwg MHhkMSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgY2hhciBjbWRfbWlzY1tDTURfU0laRV0gPSB7 CisJMHg1NSwgMHg1MywgMHg0MiwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDA0 LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDEwLCAweGZkLAorCTB4MDAsIDB4MDAs IDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgZGF0YV9ibG9j a19oZWFkZXJbREFUQV9CTE9DS19IRUFERVJfU0laRV0gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZmIsIDB4MTQsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwNCwgMHgxNSwgMHgwMCwg MHgwMCwgMHhmYywgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGRiCit9OworCitz dGF0aWMgY29uc3QgY2hhciBkYXRhX2xhc3RfYmxvY2tfaGVhZGVyW0RBVEFfQkxPQ0tfSEVBREVS X1NJWkVdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwKKwkweGZiLCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLAorCTB4MmEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4YzAsIDB4MGYsIDB4MDAsIDB4MDAsCisJ MHgwMSwgMHgwMCwgMHgwMCwgMHhkNworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgZGF0YV9ibG9j a19mb290ZXJbREFUQV9CTE9DS19GT09URVJfU0laRV0gPSB7CisJMHhmYiwgMHgxNCwgMHgwMiwg MHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NGYKK307CisKK3N0 YXRpYyBpbnQgZ20xMnUzMjBfdXNiX2FsbG9jKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1 MzIwKQoreworCWludCBpLCBibG9ja19zaXplOworCWNvbnN0IGNoYXIgKmhkcjsKKworCWdtMTJ1 MzIwLT5jbWRfYnVmID0ga21hbGxvYyhDTURfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnbTEy dTMyMC0+Y21kX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgR00x MlUzMjBfQkxPQ0tfQ09VTlQ7IGkrKykgeworCQlpZiAoaSA9PSBHTTEyVTMyMF9CTE9DS19DT1VO VCAtIDEpIHsKKwkJCWJsb2NrX3NpemUgPSBEQVRBX0xBU1RfQkxPQ0tfU0laRTsKKwkJCWhkciA9 IGRhdGFfbGFzdF9ibG9ja19oZWFkZXI7CisJCX0gZWxzZSB7CisJCQlibG9ja19zaXplID0gREFU QV9CTE9DS19TSVpFOworCQkJaGRyID0gZGF0YV9ibG9ja19oZWFkZXI7CisJCX0KKworCQlnbTEy dTMyMC0+ZGF0YV9idWZbaV0gPSBremFsbG9jKGJsb2NrX3NpemUsIEdGUF9LRVJORUwpOworCQlp ZiAoIWdtMTJ1MzIwLT5kYXRhX2J1ZltpXSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbWNw eShnbTEydTMyMC0+ZGF0YV9idWZbaV0sIGhkciwgREFUQV9CTE9DS19IRUFERVJfU0laRSk7CisJ CW1lbWNweShnbTEydTMyMC0+ZGF0YV9idWZbaV0gKworCQkJCShibG9ja19zaXplIC0gREFUQV9C TE9DS19GT09URVJfU0laRSksCisJCSAgICAgICBkYXRhX2Jsb2NrX2Zvb3RlciwgREFUQV9CTE9D S19GT09URVJfU0laRSk7CisJfQorCisJZ20xMnUzMjAtPmZiX3VwZGF0ZS53b3JrcSA9IGNyZWF0 ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKERSSVZFUl9OQU1FKTsKKwlpZiAoIWdtMTJ1MzIwLT5m Yl91cGRhdGUud29ya3EpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIGdtMTJ1MzIwX3VzYl9mcmVlKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1 MzIwKQoreworCWludCBpOworCisJaWYgKGdtMTJ1MzIwLT5mYl91cGRhdGUud29ya3EpCisJCWRl c3Ryb3lfd29ya3F1ZXVlKGdtMTJ1MzIwLT5mYl91cGRhdGUud29ya3EpOworCisJZm9yIChpID0g MDsgaSA8IEdNMTJVMzIwX0JMT0NLX0NPVU5UOyBpKyspCisJCWtmcmVlKGdtMTJ1MzIwLT5kYXRh X2J1ZltpXSk7CisKKwlrZnJlZShnbTEydTMyMC0+Y21kX2J1Zik7Cit9CisKK3N0YXRpYyBpbnQg Z20xMnUzMjBfbWlzY19yZXF1ZXN0KHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwLAor CQkJCSB1OCByZXFfYSwgdTggcmVxX2IsCisJCQkJIHU4IGFyZ19hLCB1OCBhcmdfYiwgdTggYXJn X2MsIHU4IGFyZ19kKQoreworCWludCByZXQsIGxlbjsKKworCW1lbWNweShnbTEydTMyMC0+Y21k X2J1ZiwgJmNtZF9taXNjLCBDTURfU0laRSk7CisJZ20xMnUzMjAtPmNtZF9idWZbMjBdID0gcmVx X2E7CisJZ20xMnUzMjAtPmNtZF9idWZbMjFdID0gcmVxX2I7CisJZ20xMnUzMjAtPmNtZF9idWZb MjJdID0gYXJnX2E7CisJZ20xMnUzMjAtPmNtZF9idWZbMjNdID0gYXJnX2I7CisJZ20xMnUzMjAt PmNtZF9idWZbMjRdID0gYXJnX2M7CisJZ20xMnUzMjAtPmNtZF9idWZbMjVdID0gYXJnX2Q7CisK KwkvKiBTZW5kIHJlcXVlc3QgKi8KKwlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYs CisJCQkgICB1c2Jfc25kYnVsa3BpcGUoZ20xMnUzMjAtPnVkZXYsIE1JU0NfU05EX0VQVCksCisJ CQkgICBnbTEydTMyMC0+Y21kX2J1ZiwgQ01EX1NJWkUsICZsZW4sIENNRF9USU1FT1VUKTsKKwlp ZiAocmV0IHx8IGxlbiAhPSBDTURfU0laRSkgeworCQlkZXZfZXJyKCZnbTEydTMyMC0+dWRldi0+ ZGV2LCAiTWlzYy4gcmVxLiBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU87CisJfQor CisJLyogUmVhZCB2YWx1ZSAqLworCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwK KwkJCSAgIHVzYl9yY3ZidWxrcGlwZShnbTEydTMyMC0+dWRldiwgTUlTQ19SQ1ZfRVBUKSwKKwkJ CSAgIGdtMTJ1MzIwLT5jbWRfYnVmLCBNSVNDX1ZBTFVFX1NJWkUsICZsZW4sCisJCQkgICBEQVRB X1RJTUVPVVQpOworCWlmIChyZXQgfHwgbGVuICE9IE1JU0NfVkFMVUVfU0laRSkgeworCQlkZXZf ZXJyKCZnbTEydTMyMC0+dWRldi0+ZGV2LCAiTWlzYy4gdmFsdWUgZXJyb3IgJWRcbiIsIHJldCk7 CisJCXJldHVybiAtRUlPOworCX0KKwkvKiBjbWRfYnVmWzBdIG5vdyBjb250YWlucyB0aGUgcmVh ZCB2YWx1ZSwgd2hpY2ggd2UgZG9uJ3QgdXNlICovCisKKwkvKiBSZWFkIHN0YXR1cyAqLworCXJl dCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZShn bTEydTMyMC0+dWRldiwgTUlTQ19SQ1ZfRVBUKSwKKwkJCSAgIGdtMTJ1MzIwLT5jbWRfYnVmLCBS RUFEX1NUQVRVU19TSVpFLCAmbGVuLAorCQkJICAgQ01EX1RJTUVPVVQpOworCWlmIChyZXQgfHwg bGVuICE9IFJFQURfU1RBVFVTX1NJWkUpIHsKKwkJZGV2X2VycigmZ20xMnUzMjAtPnVkZXYtPmRl diwgIk1pc2MuIHN0YXR1cyBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU87CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwXzMyYnBwX3RvXzI0YnBwX3Bh Y2tlZCh1OCAqZHN0LCB1OCAqc3JjLCBpbnQgbGVuKQoreworCXdoaWxlIChsZW4tLSkgeworCQkq ZHN0KysgPSAqc3JjKys7CisJCSpkc3QrKyA9ICpzcmMrKzsKKwkJKmRzdCsrID0gKnNyYysrOwor CQlzcmMrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2NvcHlfZmJfdG9fYmxvY2tz KHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQoreworCWludCBibG9jaywgZHN0X29m ZnNldCwgbGVuLCByZW1haW4sIHJldCwgeDEsIHgyLCB5MSwgeTI7CisJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmI7CisJdm9pZCAqdmFkZHI7CisJdTggKnNyYzsKKworCW11dGV4X2xvY2soJmdt MTJ1MzIwLT5mYl91cGRhdGUubG9jayk7CisKKwlpZiAoIWdtMTJ1MzIwLT5mYl91cGRhdGUuZmIp CisJCWdvdG8gdW5sb2NrOworCisJZmIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLmZiOworCXgxID0g Z20xMnUzMjAtPmZiX3VwZGF0ZS5yZWN0LngxOworCXgyID0gZ20xMnUzMjAtPmZiX3VwZGF0ZS5y ZWN0LngyOworCXkxID0gZ20xMnUzMjAtPmZiX3VwZGF0ZS5yZWN0LnkxOworCXkyID0gZ20xMnUz MjAtPmZiX3VwZGF0ZS5yZWN0LnkyOworCisJdmFkZHIgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmIt Pm9ialswXSk7CisJaWYgKElTX0VSUih2YWRkcikpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g dm1hcCBmYjogJWxkXG4iLCBQVFJfRVJSKHZhZGRyKSk7CisJCWdvdG8gcHV0X2ZiOworCX0KKwor CWlmIChmYi0+b2JqWzBdLT5pbXBvcnRfYXR0YWNoKSB7CisJCXJldCA9IGRtYV9idWZfYmVnaW5f Y3B1X2FjY2VzcygKKwkJCWZiLT5vYmpbMF0tPmltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwgRE1BX0ZS T01fREVWSUNFKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJkbWFfYnVmX2JlZ2luX2Nw dV9hY2Nlc3MgZXJyOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gdnVubWFwOworCQl9CisJfQorCisJ c3JjID0gdmFkZHIgKyB5MSAqIGZiLT5waXRjaGVzWzBdICsgeDEgKiA0OworCisJeDEgKz0gKEdN MTJVMzIwX1JFQUxfV0lEVEggLSBHTTEyVTMyMF9VU0VSX1dJRFRIKSAvIDI7CisJeDIgKz0gKEdN MTJVMzIwX1JFQUxfV0lEVEggLSBHTTEyVTMyMF9VU0VSX1dJRFRIKSAvIDI7CisKKwlmb3IgKDsg eTEgPCB5MjsgeTErKykgeworCQlyZW1haW4gPSAwOworCQlsZW4gPSAoeDIgLSB4MSkgKiAzOwor CQlkc3Rfb2Zmc2V0ID0gKHkxICogR00xMlUzMjBfUkVBTF9XSURUSCArIHgxKSAqIDM7CisJCWJs b2NrID0gZHN0X29mZnNldCAvIERBVEFfQkxPQ0tfQ09OVEVOVF9TSVpFOworCQlkc3Rfb2Zmc2V0 ICU9IERBVEFfQkxPQ0tfQ09OVEVOVF9TSVpFOworCisJCWlmICgoZHN0X29mZnNldCArIGxlbikg PiBEQVRBX0JMT0NLX0NPTlRFTlRfU0laRSkgeworCQkJcmVtYWluID0gZHN0X29mZnNldCArIGxl biAtIERBVEFfQkxPQ0tfQ09OVEVOVF9TSVpFOworCQkJbGVuID0gREFUQV9CTE9DS19DT05URU5U X1NJWkUgLSBkc3Rfb2Zmc2V0OworCQl9CisKKwkJZHN0X29mZnNldCArPSBEQVRBX0JMT0NLX0hF QURFUl9TSVpFOworCQlsZW4gLz0gMzsKKworCQlnbTEydTMyMF8zMmJwcF90b18yNGJwcF9wYWNr ZWQoCisJCQlnbTEydTMyMC0+ZGF0YV9idWZbYmxvY2tdICsgZHN0X29mZnNldCwKKwkJCXNyYywg bGVuKTsKKworCQlpZiAocmVtYWluKSB7CisJCQlibG9jaysrOworCQkJZHN0X29mZnNldCA9IERB VEFfQkxPQ0tfSEVBREVSX1NJWkU7CisJCQlnbTEydTMyMF8zMmJwcF90b18yNGJwcF9wYWNrZWQo CisJCQkJZ20xMnUzMjAtPmRhdGFfYnVmW2Jsb2NrXSArIGRzdF9vZmZzZXQsCisJCQkJc3JjICsg bGVuICogNCwgcmVtYWluIC8gMyk7CisJCX0KKwkJc3JjICs9IGZiLT5waXRjaGVzWzBdOworCX0K KworCWlmIChmYi0+b2JqWzBdLT5pbXBvcnRfYXR0YWNoKSB7CisJCXJldCA9IGRtYV9idWZfZW5k X2NwdV9hY2Nlc3MoZmItPm9ialswXS0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLAorCQkJCQkgICAg IERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChyZXQpCisJCQlEUk1fRVJST1IoImRtYV9idWZfZW5k X2NwdV9hY2Nlc3MgZXJyOiAlZFxuIiwgcmV0KTsKKwl9Cit2dW5tYXA6CisJZHJtX2dlbV9zaG1l bV92dW5tYXAoZmItPm9ialswXSwgdmFkZHIpOworcHV0X2ZiOgorCWRybV9mcmFtZWJ1ZmZlcl9w dXQoZmIpOworCWdtMTJ1MzIwLT5mYl91cGRhdGUuZmIgPSBOVUxMOwordW5sb2NrOgorCW11dGV4 X3VubG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKK30KKworc3RhdGljIGludCBnbTEy dTMyMF9mYl91cGRhdGVfcmVhZHkoc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjApCit7 CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7CisJ cmV0ID0gIWdtMTJ1MzIwLT5mYl91cGRhdGUucnVuIHx8IGdtMTJ1MzIwLT5mYl91cGRhdGUuZmIg IT0gTlVMTDsKKwltdXRleF91bmxvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9mYl91cGRhdGVfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUz MjAgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGdtMTJ1MzIwX2RldmljZSwgZmJfdXBk YXRlLndvcmspOworCWludCBkcmF3X3N0YXR1c190aW1lb3V0ID0gRklSU1RfRlJBTUVfVElNRU9V VDsKKwlpbnQgYmxvY2ssIGJsb2NrX3NpemUsIGxlbjsKKwlpbnQgZnJhbWUgPSAwOworCWludCBy ZXQgPSAwOworCisJd2hpbGUgKGdtMTJ1MzIwLT5mYl91cGRhdGUucnVuKSB7CisJCWdtMTJ1MzIw X2NvcHlfZmJfdG9fYmxvY2tzKGdtMTJ1MzIwKTsKKworCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sg PCBHTTEyVTMyMF9CTE9DS19DT1VOVDsgYmxvY2srKykgeworCQkJaWYgKGJsb2NrID09IEdNMTJV MzIwX0JMT0NLX0NPVU5UIC0gMSkKKwkJCQlibG9ja19zaXplID0gREFUQV9MQVNUX0JMT0NLX1NJ WkU7CisJCQllbHNlCisJCQkJYmxvY2tfc2l6ZSA9IERBVEFfQkxPQ0tfU0laRTsKKworCQkJLyog U2VuZCBkYXRhIGNvbW1hbmQgdG8gZGV2aWNlICovCisJCQltZW1jcHkoZ20xMnUzMjAtPmNtZF9i dWYsIGNtZF9kYXRhLCBDTURfU0laRSk7CisJCQlnbTEydTMyMC0+Y21kX2J1Zls4XSA9IGJsb2Nr X3NpemUgJiAweGZmOworCQkJZ20xMnUzMjAtPmNtZF9idWZbOV0gPSBibG9ja19zaXplID4+IDg7 CisJCQlnbTEydTMyMC0+Y21kX2J1ZlsyMF0gPSAweGZjIC0gYmxvY2sgKiA0OworCQkJZ20xMnUz MjAtPmNtZF9idWZbMjFdID0gYmxvY2sgfCAoZnJhbWUgPDwgNyk7CisKKwkJCXJldCA9IHVzYl9i dWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCQl1c2Jfc25kYnVsa3BpcGUoZ20xMnUzMjAtPnVk ZXYsIERBVEFfU05EX0VQVCksCisJCQkJZ20xMnUzMjAtPmNtZF9idWYsIENNRF9TSVpFLCAmbGVu LAorCQkJCUNNRF9USU1FT1VUKTsKKwkJCWlmIChyZXQgfHwgbGVuICE9IENNRF9TSVpFKQorCQkJ CWdvdG8gZXJyOworCisJCQkvKiBTZW5kIGRhdGEgYmxvY2sgdG8gZGV2aWNlICovCisJCQlyZXQg PSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCisJCQkJdXNiX3NuZGJ1bGtwaXBlKGdtMTJ1 MzIwLT51ZGV2LCBEQVRBX1NORF9FUFQpLAorCQkJCWdtMTJ1MzIwLT5kYXRhX2J1ZltibG9ja10s IGJsb2NrX3NpemUsCisJCQkJJmxlbiwgREFUQV9USU1FT1VUKTsKKwkJCWlmIChyZXQgfHwgbGVu ICE9IGJsb2NrX3NpemUpCisJCQkJZ290byBlcnI7CisKKwkJCS8qIFJlYWQgc3RhdHVzICovCisJ CQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCisJCQkJdXNiX3JjdmJ1bGtwaXBl KGdtMTJ1MzIwLT51ZGV2LCBEQVRBX1JDVl9FUFQpLAorCQkJCWdtMTJ1MzIwLT5jbWRfYnVmLCBS RUFEX1NUQVRVU19TSVpFLCAmbGVuLAorCQkJCUNNRF9USU1FT1VUKTsKKwkJCWlmIChyZXQgfHwg bGVuICE9IFJFQURfU1RBVFVTX1NJWkUpCisJCQkJZ290byBlcnI7CisJCX0KKworCQkvKiBTZW5k IGRyYXcgY29tbWFuZCB0byBkZXZpY2UgKi8KKwkJbWVtY3B5KGdtMTJ1MzIwLT5jbWRfYnVmLCBj bWRfZHJhdywgQ01EX1NJWkUpOworCQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYs CisJCQl1c2Jfc25kYnVsa3BpcGUoZ20xMnUzMjAtPnVkZXYsIERBVEFfU05EX0VQVCksCisJCQln bTEydTMyMC0+Y21kX2J1ZiwgQ01EX1NJWkUsICZsZW4sIENNRF9USU1FT1VUKTsKKwkJaWYgKHJl dCB8fCBsZW4gIT0gQ01EX1NJWkUpCisJCQlnb3RvIGVycjsKKworCQkvKiBSZWFkIHN0YXR1cyAq LworCQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCisJCQl1c2JfcmN2YnVsa3Bp cGUoZ20xMnUzMjAtPnVkZXYsIERBVEFfUkNWX0VQVCksCisJCQlnbTEydTMyMC0+Y21kX2J1Ziwg UkVBRF9TVEFUVVNfU0laRSwgJmxlbiwKKwkJCWRyYXdfc3RhdHVzX3RpbWVvdXQpOworCQlpZiAo cmV0IHx8IGxlbiAhPSBSRUFEX1NUQVRVU19TSVpFKQorCQkJZ290byBlcnI7CisKKwkJZHJhd19z dGF0dXNfdGltZW91dCA9IENNRF9USU1FT1VUOworCQlmcmFtZSA9ICFmcmFtZTsKKworCQkvKgor CQkgKiBXZSBtdXN0IGRyYXcgYSBmcmFtZSBldmVyeSAycyBvdGhlcndpc2UgdGhlIHByb2plY3Rv cgorCQkgKiBzd2l0Y2hlcyBiYWNrIHRvIHNob3dpbmcgaXRzIGxvZ28uCisJCSAqLworCQl3YWl0 X2V2ZW50X3RpbWVvdXQoZ20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0cSwKKwkJCQkgICBnbTEydTMy MF9mYl91cGRhdGVfcmVhZHkoZ20xMnUzMjApLAorCQkJCSAgIElETEVfVElNRU9VVCk7CisJfQor CXJldHVybjsKK2VycjoKKwkvKiBEbyBub3QgbG9nIGVycm9ycyBjYXVzZWQgYnkgbW9kdWxlIHVu bG9hZCBvciBkZXZpY2UgdW5wbHVnICovCisJaWYgKHJldCAhPSAtRUNPTk5SRVNFVCAmJiByZXQg IT0gLUVTSFVURE9XTikKKwkJZGV2X2VycigmZ20xMnUzMjAtPnVkZXYtPmRldiwgIkZyYW1lIHVw ZGF0ZSBlcnJvcjogJWRcbiIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2ZiX21h cmtfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgc3RydWN0IGRybV9y ZWN0ICpkaXJ0eSkKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCA9IGZiLT5k ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYiA9IE5VTEw7 CisJYm9vbCB3YWtldXAgPSBmYWxzZTsKKworCW11dGV4X2xvY2soJmdtMTJ1MzIwLT5mYl91cGRh dGUubG9jayk7CisKKwlpZiAoZ20xMnUzMjAtPmZiX3VwZGF0ZS5mYiAhPSBmYikgeworCQlvbGRf ZmIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLmZiOworCQlkcm1fZnJhbWVidWZmZXJfZ2V0KGZiKTsK KwkJZ20xMnUzMjAtPmZiX3VwZGF0ZS5mYiA9IGZiOworCQlnbTEydTMyMC0+ZmJfdXBkYXRlLnJl Y3QgPSAqZGlydHk7CisJCXdha2V1cCA9IHRydWU7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRybV9y ZWN0ICpyZWN0ID0gJmdtMTJ1MzIwLT5mYl91cGRhdGUucmVjdDsKKworCQlyZWN0LT54MSA9IG1p bihyZWN0LT54MSwgZGlydHktPngxKTsKKwkJcmVjdC0+eTEgPSBtaW4ocmVjdC0+eTEsIGRpcnR5 LT55MSk7CisJCXJlY3QtPngyID0gbWF4KHJlY3QtPngyLCBkaXJ0eS0+eDIpOworCQlyZWN0LT55 MiA9IG1heChyZWN0LT55MiwgZGlydHktPnkyKTsKKwl9CisKKwltdXRleF91bmxvY2soJmdtMTJ1 MzIwLT5mYl91cGRhdGUubG9jayk7CisKKwlpZiAod2FrZXVwKQorCQl3YWtlX3VwKCZnbTEydTMy MC0+ZmJfdXBkYXRlLndhaXRxKTsKKworCWlmIChvbGRfZmIpCisJCWRybV9mcmFtZWJ1ZmZlcl9w dXQob2xkX2ZiKTsKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfc3RhcnRfZmJfdXBkYXRlKHN0 cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQoreworCW11dGV4X2xvY2soJmdtMTJ1MzIw LT5mYl91cGRhdGUubG9jayk7CisJZ20xMnUzMjAtPmZiX3VwZGF0ZS5ydW4gPSB0cnVlOworCW11 dGV4X3VubG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKKworCXF1ZXVlX3dvcmsoZ20x MnUzMjAtPmZiX3VwZGF0ZS53b3JrcSwgJmdtMTJ1MzIwLT5mYl91cGRhdGUud29yayk7Cit9CisK K3N0YXRpYyB2b2lkIGdtMTJ1MzIwX3N0b3BfZmJfdXBkYXRlKHN0cnVjdCBnbTEydTMyMF9kZXZp Y2UgKmdtMTJ1MzIwKQoreworCW11dGV4X2xvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7 CisJZ20xMnUzMjAtPmZiX3VwZGF0ZS5ydW4gPSBmYWxzZTsKKwltdXRleF91bmxvY2soJmdtMTJ1 MzIwLT5mYl91cGRhdGUubG9jayk7CisKKwl3YWtlX3VwKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndh aXRxKTsKKwljYW5jZWxfd29ya19zeW5jKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmspOworCisJ bXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKKwlpZiAoZ20xMnUzMjAtPmZi X3VwZGF0ZS5mYikgeworCQlkcm1fZnJhbWVidWZmZXJfcHV0KGdtMTJ1MzIwLT5mYl91cGRhdGUu ZmIpOworCQlnbTEydTMyMC0+ZmJfdXBkYXRlLmZiID0gTlVMTDsKKwl9CisJbXV0ZXhfdW5sb2Nr KCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOworfQorCitzdGF0aWMgaW50IGdtMTJ1MzIwX3Nl dF9lY29tb2RlKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQoreworCXJldHVybiBn bTEydTMyMF9taXNjX3JlcXVlc3QoZ20xMnUzMjAsIE1JU0NfUkVRX0dFVF9TRVRfRUNPX0EsCisJ CQkJICAgICBNSVNDX1JFUV9HRVRfU0VUX0VDT19CLCAweDAxIC8qIHNldCAqLywKKwkJCQkgICAg IGVjb19tb2RlID8gMHgwMSA6IDB4MDAsIDB4MDAsIDB4MDEpOworfQorCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8KKy8qIGdtMTJ1MzIwIGNvbm5lY3RvcgkJCQkJCSAgICAgICovCisKKy8qCisgKsKgV2UgdXNl IGZha2UgRURJRCBpbmZvIHNvIHRoYXQgdXNlcnNwYWNlIGtub3cgdGhhdCBpdCBpcyBkZWFsaW5n IHdpdGgKKyAqIGFuIEFjZXIgcHJvamVjdG9yLCByYXRoZXIgdGhlbiBsaXN0aW5nIHRoaXMgYXMg YW4gInVua25vd24iIG1vbml0b3IuCisgKiBOb3RlIHRoaXMgYXNzdW1lcyB0aGlzIGRyaXZlciBp cyBvbmx5IGV2ZXIgdXNlZCB3aXRoIHRoZSBBY2VyIEMxMjAsIGlmIHdlCisgKiBhZGQgc3VwcG9y dCBmb3Igb3RoZXIgZGV2aWNlcyB0aGUgdmVuZG9yIGFuZCBtb2RlbCBzaG91bGQgYmUgcGFyYW1l dGVyaXplZC4KKyAqLworc3RhdGljIHN0cnVjdCBlZGlkIGdtMTJ1MzIwX2VkaWQgPSB7CisJLmhl YWRlcgkJPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAg fSwKKwkubWZnX2lkCQk9IHsgMHgwNCwgMHg3MiB9LAkvKiAiQUNSIiAqLworCS5wcm9kX2NvZGUJ PSB7IDB4MjAsIDB4YzEgfSwJLyogQzEyMGggKi8KKwkuc2VyaWFsCQk9IDB4YWE1NWFhNTUsCisJ Lm1mZ193ZWVrCT0gMSwKKwkubWZnX3llYXIJPSAxNiwKKwkudmVyc2lvbgk9IDEsCQkJLyogRURJ RCAxLjMgKi8KKwkucmV2aXNpb24JPSAzLAkJCS8qIEVESUQgMS4zICovCisJLmlucHV0CQk9IDB4 MDgsCQkJLyogQW5hbG9nIGlucHV0ICovCisJLmZlYXR1cmVzCT0gMHgwYSwJCQkvKiBQcmVmIHRp bWluZyBpbiBEVEQgMSAqLworCS5zdGFuZGFyZF90aW1pbmdzID0geyB7IDEsIDEgfSwgeyAxLCAx IH0sIHsgMSwgMSB9LCB7IDEsIDEgfSwKKwkJCSAgICAgIHsgMSwgMSB9LCB7IDEsIDEgfSwgeyAx LCAxIH0sIHsgMSwgMSB9IH0sCisJLmRldGFpbGVkX3RpbWluZ3MgPSB7IHsKKwkJLnBpeGVsX2Ns b2NrID0gMzM4MywKKwkJLyogaGFjdGl2ZSA9IDg0OCwgaGJsYW5rID0gMjU2ICovCisJCS5kYXRh LnBpeGVsX2RhdGEuaGFjdGl2ZV9sbyA9IDB4NTAsCisJCS5kYXRhLnBpeGVsX2RhdGEuaGJsYW5r X2xvID0gMHgwMCwKKwkJLmRhdGEucGl4ZWxfZGF0YS5oYWN0aXZlX2hibGFua19oaSA9IDB4MzEs CisJCS8qIHZhY3RpdmUgPSA0ODAsIHZibGFuayA9IDI4ICovCisJCS5kYXRhLnBpeGVsX2RhdGEu dmFjdGl2ZV9sbyA9IDB4ZTAsCisJCS5kYXRhLnBpeGVsX2RhdGEudmJsYW5rX2xvID0gMHgxYywK KwkJLmRhdGEucGl4ZWxfZGF0YS52YWN0aXZlX3ZibGFua19oaSA9IDB4MTAsCisJCS8qIGhzeW5j IG9mZnNldCA0MCBwdyAxMjgsIHZzeW5jIG9mZnNldCAxIHB3IDQgKi8KKwkJLmRhdGEucGl4ZWxf ZGF0YS5oc3luY19vZmZzZXRfbG8gPSAweDI4LAorCQkuZGF0YS5waXhlbF9kYXRhLmhzeW5jX3B1 bHNlX3dpZHRoX2xvID0gMHg4MCwKKwkJLmRhdGEucGl4ZWxfZGF0YS52c3luY19vZmZzZXRfcHVs c2Vfd2lkdGhfbG8gPSAweDE0LAorCQkuZGF0YS5waXhlbF9kYXRhLmhzeW5jX3ZzeW5jX29mZnNl dF9wdWxzZV93aWR0aF9oaSA9IDB4MDAsCisJCS8qIERpZ2l0YWwgc2VwYXJhdGUgc3luY3MsIGhz eW5jKywgdnN5bmMrICovCisJCS5kYXRhLnBpeGVsX2RhdGEubWlzYyA9IDB4MWUsCisJfSwgewor CQkucGl4ZWxfY2xvY2sgPSAwLAorCQkuZGF0YS5vdGhlcl9kYXRhLnR5cGUgPSAweGZkLCAvKiBN b25pdG9yIHJhbmdlcyAqLworCQkuZGF0YS5vdGhlcl9kYXRhLmRhdGEucmFuZ2UubWluX3ZmcmVx ID0gNTksCisJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5tYXhfdmZyZXEgPSA2MSwKKwkJ LmRhdGEub3RoZXJfZGF0YS5kYXRhLnJhbmdlLm1pbl9oZnJlcV9raHogPSAyOSwKKwkJLmRhdGEu b3RoZXJfZGF0YS5kYXRhLnJhbmdlLm1heF9oZnJlcV9raHogPSAzMiwKKwkJLmRhdGEub3RoZXJf ZGF0YS5kYXRhLnJhbmdlLnBpeGVsX2Nsb2NrX21oeiA9IDQsIC8qIDQwIE1IeiAqLworCQkuZGF0 YS5vdGhlcl9kYXRhLmRhdGEucmFuZ2UuZmxhZ3MgPSAwLAorCQkuZGF0YS5vdGhlcl9kYXRhLmRh dGEucmFuZ2UuZm9ybXVsYS5jdnQgPSB7CisJCQkweGEwLCAweDIwLCAweDIwLCAweDIwLCAweDIw LCAweDIwLCAweDIwIH0sCisJfSwgeworCQkucGl4ZWxfY2xvY2sgPSAwLAorCQkuZGF0YS5vdGhl cl9kYXRhLnR5cGUgPSAweGZjLCAvKiBNb2RlbCBzdHJpbmcgKi8KKwkJLmRhdGEub3RoZXJfZGF0 YS5kYXRhLnN0ci5zdHIgPSB7CisJCQknUCcsICdyJywgJ28nLCAnaicsICdlJywgJ2MnLCAndCcs ICdvJywgJ3InLCAnXG4nLAorCQkJJyAnLCAnICcsICAnICcgfSwKKwl9LCB7CisJCS5waXhlbF9j bG9jayA9IDAsCisJCS5kYXRhLm90aGVyX2RhdGEudHlwZSA9IDB4ZmUsIC8qIFVuc3BlY2lmaWVk IHRleHQgLyBwYWRkaW5nICovCisJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5zdHIuc3RyID0gewor CQkJJ1xuJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywKKwkJ CScgJywgJyAnLCAgJyAnIH0sCisJfSB9LAorCS5jaGVja3N1bSA9IDB4MTMsCit9OworCitzdGF0 aWMgaW50IGdtMTJ1MzIwX2Nvbm5fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3Is ICZnbTEydTMyMF9lZGlkKTsKKwlyZXR1cm4gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3Rvciwg JmdtMTJ1MzIwX2VkaWQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf aGVscGVyX2Z1bmNzIGdtMTJ1MzIwX2Nvbm5faGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMg PSBnbTEydTMyMF9jb25uX2dldF9tb2RlcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9mdW5jcyBnbTEydTMyMF9jb25uX2Z1bmNzID0geworCS5maWxsX21vZGVzID0g ZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgaW50IGdt MTJ1MzIwX2Nvbm5faW5pdChzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKK3sKKwlk cm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmdtMTJ1MzIwLT5jb25uLCAmZ20xMnUzMjBfY29ubl9o ZWxwZXJfZnVuY3MpOworCXJldHVybiBkcm1fY29ubmVjdG9yX2luaXQoJmdtMTJ1MzIwLT5kZXYs ICZnbTEydTMyMC0+Y29ubiwKKwkJCQkgICZnbTEydTMyMF9jb25uX2Z1bmNzLCBEUk1fTU9ERV9D T05ORUNUT1JfVkdBKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBnbTEydTMyMCAoc2ltcGxl KSBkaXNwbGF5IHBpcGUJCQkJICAgICAgKi8KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfcGlwZV9l bmFibGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJCSBzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gcGlw ZS0+Y3J0Yy5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fcmVjdCByZWN0ID0geyAwLCAw LCBHTTEyVTMyMF9VU0VSX1dJRFRILCBHTTEyVTMyMF9IRUlHSFQgfTsKKworCWdtMTJ1MzIwX2Zi X21hcmtfZGlydHkocGxhbmVfc3RhdGUtPmZiLCAmcmVjdCk7CisJZ20xMnUzMjBfc3RhcnRfZmJf dXBkYXRlKGdtMTJ1MzIwKTsKKwlnbTEydTMyMC0+cGlwZV9lbmFibGVkID0gdHJ1ZTsKK30KKwor c3RhdGljIHZvaWQgZ20xMnUzMjBfcGlwZV9kaXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3Bs YXlfcGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCA9IHBp cGUtPmNydGMuZGV2LT5kZXZfcHJpdmF0ZTsKKworCWdtMTJ1MzIwX3N0b3BfZmJfdXBkYXRlKGdt MTJ1MzIwKTsKKwlnbTEydTMyMC0+cGlwZV9lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2 b2lkIGdtMTJ1MzIwX3BpcGVfdXBkYXRlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAq cGlwZSwKKwkJCQkgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlID0gcGlwZS0+cGxhbmUuc3RhdGU7CisJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gJnBpcGUtPmNydGM7CisJc3RydWN0IGRybV9yZWN0IHJlY3Q7CisKKwlp ZiAoZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX21lcmdlZChvbGRfc3RhdGUsIHN0YXRlLCAmcmVj dCkpCisJCWdtMTJ1MzIwX2ZiX21hcmtfZGlydHkocGlwZS0+cGxhbmUuc3RhdGUtPmZiLCAmcmVj dCk7CisKKwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7CisJCXNwaW5fbG9ja19pcnEoJmNydGMt PmRldi0+ZXZlbnRfbG9jayk7CisJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNy dGMtPnN0YXRlLT5ldmVudCk7CisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisJCXNwaW5f dW5sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGVfZnVuY3MgZ20xMnUzMjBfcGlwZV9mdW5j cyA9IHsKKwkuZW5hYmxlCSAgICA9IGdtMTJ1MzIwX3BpcGVfZW5hYmxlLAorCS5kaXNhYmxlICAg ID0gZ20xMnUzMjBfcGlwZV9kaXNhYmxlLAorCS51cGRhdGUJICAgID0gZ20xMnUzMjBfcGlwZV91 cGRhdGUsCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgZ20xMnUzMjBfcGlwZV9mb3JtYXRz W10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKK307CisKK3N0YXRpYyBjb25zdCB1aW50NjRf dCBnbTEydTMyMF9waXBlX21vZGlmaWVyc1tdID0geworCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwK KwlEUk1fRk9STUFUX01PRF9JTlZBTElECit9OworCitzdGF0aWMgdm9pZCBnbTEydTMyMF9kcml2 ZXJfcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnbTEydTMyMF9k ZXZpY2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWdtMTJ1MzIwX3VzYl9mcmVl KGdtMTJ1MzIwKTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOworCWRybV9kZXZfZmlu aShkZXYpOworCWtmcmVlKGdtMTJ1MzIwKTsKK30KKworREVGSU5FX0RSTV9HRU1fU0hNRU1fRk9Q UyhnbTEydTMyMF9mb3BzKTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGdtMTJ1MzIwX2Ry bV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVS X0dFTSB8IERSSVZFUl9BVE9NSUMgfAorCQkJICAgRFJJVkVSX1BSSU1FLAorCisJLm5hbWUJCSA9 IERSSVZFUl9OQU1FLAorCS5kZXNjCQkgPSBEUklWRVJfREVTQywKKwkuZGF0ZQkJID0gRFJJVkVS X0RBVEUsCisJLm1ham9yCQkgPSBEUklWRVJfTUFKT1IsCisJLm1pbm9yCQkgPSBEUklWRVJfTUlO T1IsCisKKwkucmVsZWFzZQkgPSBnbTEydTMyMF9kcml2ZXJfcmVsZWFzZSwKKwkuZm9wcwkJID0g JmdtMTJ1MzIwX2ZvcHMsCisJRFJNX0dFTV9TSE1FTV9EUklWRVJfT1BTLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgZ20xMnUzMjBfbW9kZV9jb25maWdf ZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9IGRybV9nZW1fZmJfY3JlYXRlX3dpdGhfZGlydHksCisJ LmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0 ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAorfTsKKworc3RhdGljIGludCBnbTEydTMyMF91 c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCSAgICAgIGNvbnN0 IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpn bTEydTMyMDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCWludCByZXQ7CisKKwkvKgorCSAq IFRoZSBnbTEydTMyMCBwcmVzZW50cyBpdHNlbGYgdG8gdGhlIHN5c3RlbSBhcyAyIHVzYiBtYXNz LXN0b3JhZ2UKKwkgKiBpbnRlcmZhY2VzLCB3ZSBvbmx5IGNhcmUgYWJvdXQgLyBuZWVkIHRoZSBm aXJzdCBvbmUuCisJICovCisJaWYgKGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYklu dGVyZmFjZU51bWJlciAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWdtMTJ1MzIwID0ga3ph bGxvYyhzaXplb2YoKmdtMTJ1MzIwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGdtMTJ1MzIwID09IE5V TEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZ20xMnUzMjAtPnVkZXYgPSBpbnRlcmZhY2VfdG9f dXNiZGV2KGludGVyZmFjZSk7CisJSU5JVF9XT1JLKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmss IGdtMTJ1MzIwX2ZiX3VwZGF0ZV93b3JrKTsKKwltdXRleF9pbml0KCZnbTEydTMyMC0+ZmJfdXBk YXRlLmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdtMTJ1MzIwLT5mYl91cGRhdGUud2Fp dHEpOworCisJZGV2ID0gJmdtMTJ1MzIwLT5kZXY7CisJcmV0ID0gZHJtX2Rldl9pbml0KGRldiwg JmdtMTJ1MzIwX2RybV9kcml2ZXIsICZpbnRlcmZhY2UtPmRldik7CisJaWYgKHJldCkgeworCQlr ZnJlZShnbTEydTMyMCk7CisJCXJldHVybiByZXQ7CisJfQorCWRldi0+ZGV2X3ByaXZhdGUgPSBn bTEydTMyMDsKKworCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7CisJZGV2LT5tb2RlX2NvbmZp Zy5taW5fd2lkdGggPSBHTTEyVTMyMF9VU0VSX1dJRFRIOworCWRldi0+bW9kZV9jb25maWcubWF4 X3dpZHRoID0gR00xMlUzMjBfVVNFUl9XSURUSDsKKwlkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWln aHQgPSBHTTEyVTMyMF9IRUlHSFQ7CisJZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gR00x MlUzMjBfSEVJR0hUOworCWRldi0+bW9kZV9jb25maWcuZnVuY3MgPSAmZ20xMnUzMjBfbW9kZV9j b25maWdfZnVuY3M7CisKKwlyZXQgPSBnbTEydTMyMF91c2JfYWxsb2MoZ20xMnUzMjApOworCWlm IChyZXQpCisJCWdvdG8gZXJyX3B1dDsKKworCXJldCA9IGdtMTJ1MzIwX3NldF9lY29tb2RlKGdt MTJ1MzIwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wdXQ7CisKKwlyZXQgPSBnbTEydTMyMF9j b25uX2luaXQoZ20xMnUzMjApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3B1dDsKKworCXJldCA9 IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQoJmdtMTJ1MzIwLT5kZXYsCisJCQkJCSAgICZn bTEydTMyMC0+cGlwZSwKKwkJCQkJICAgJmdtMTJ1MzIwX3BpcGVfZnVuY3MsCisJCQkJCSAgIGdt MTJ1MzIwX3BpcGVfZm9ybWF0cywKKwkJCQkJICAgQVJSQVlfU0laRShnbTEydTMyMF9waXBlX2Zv cm1hdHMpLAorCQkJCQkgICBnbTEydTMyMF9waXBlX21vZGlmaWVycywKKwkJCQkJICAgJmdtMTJ1 MzIwLT5jb25uKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wdXQ7CisKKwlkcm1fbW9kZV9jb25m aWdfcmVzZXQoZGV2KTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCXJl dCA9IGRybV9kZXZfcmVnaXN0ZXIoZGV2LCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wdXQ7 CisKKwlkcm1fZmJkZXZfZ2VuZXJpY19zZXR1cChkZXYsIGRldi0+bW9kZV9jb25maWcucHJlZmVy cmVkX2RlcHRoKTsKKworCXJldHVybiAwOworCitlcnJfcHV0OgorCWRybV9kZXZfcHV0KGRldik7 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfdXNiX2Rpc2Nvbm5lY3Qo c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCBnbTEydTMyMF9kZXZp Y2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWdtMTJ1MzIwX3N0b3BfZmJfdXBk YXRlKGdtMTJ1MzIwKTsKKwlkcm1fZGV2X3VucGx1ZyhkZXYpOworCWRybV9kZXZfcHV0KGRldik7 Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZ20xMnUzMjBfc3VzcGVuZChzdHJ1 Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICAgIHBtX21lc3NhZ2VfdCBtZXNzYWdl KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFj ZSk7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBkZXYtPmRldl9wcml2YXRl OworCisJaWYgKGdtMTJ1MzIwLT5waXBlX2VuYWJsZWQpCisJCWdtMTJ1MzIwX3N0b3BfZmJfdXBk YXRlKGdtMTJ1MzIwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdtMTJ1MzIwX3Jl c3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IGdtMTJ1MzIw X2RldmljZSAqZ20xMnUzMjAgPSBkZXYtPmRldl9wcml2YXRlOworCisJZ20xMnUzMjBfc2V0X2Vj b21vZGUoZ20xMnUzMjApOworCWlmIChnbTEydTMyMC0+cGlwZV9lbmFibGVkKQorCQlnbTEydTMy MF9zdGFydF9mYl91cGRhdGUoZ20xMnUzMjApOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwor c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0Jf REVWSUNFKDB4MWRlMSwgMHhjMTAyKSB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUo dXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBnbTEydTMyMF91c2Jf ZHJpdmVyID0geworCS5uYW1lID0gImdtMTJ1MzIwIiwKKwkucHJvYmUgPSBnbTEydTMyMF91c2Jf cHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnbTEydTMyMF91c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFi bGUgPSBpZF90YWJsZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdtMTJ1MzIwX3N1 c3BlbmQsCisJLnJlc3VtZSA9IGdtMTJ1MzIwX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0gZ20x MnUzMjBfcmVzdW1lLAorI2VuZGlmCit9OworCittb2R1bGVfdXNiX2RyaXZlcihnbTEydTMyMF91 c2JfZHJpdmVyKTsKK01PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhh dC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0tIAoyLjIxLjAKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==