From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 4/5] drm/vc4: Add DPI driver Date: Fri, 18 Mar 2016 19:42:45 -0700 Message-ID: <1458355366-7073-5-git-send-email-eric@anholt.net> References: <1458355366-7073-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1458355366-7073-1-git-send-email-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-rpi-kernel@lists.infradead.org Cc: Mark Rutland , devicetree@vger.kernel.org, Ian Campbell , Pawel Moll , Stephen Warren , Lee Jones , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rob Herring , Kumar Gala , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhlIERQSSBpbnRlcmZhY2UgaW52b2x2ZXMgdGFraW5nIGEgdG9uIG9mIG91ciBHUElPcyB0byBi ZSB1c2VkIGFzCm91dHB1dHMsIGFuZCByb3V0aW5nIGRpc3BsYXkgc2lnbmFscyBvdmVyIHRoZW0g aW4gcGFyYWxsZWwuCgpTaWduZWQtb2ZmLWJ5OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0 PgotLS0KIC4uLi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJjbSxiY20tdmM0LnR4dCAg IHwgIDY3ICsrKwogZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZGVidWdmcy5jICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHBpLmMgICAgICAg ICAgICAgICAgICAgICAgfCA1MTggKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kcnYuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9kcnYuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArCiA3IGZpbGVz IGNoYW5nZWQsIDU5NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfZHBpLmMKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRy ZWUvYmluZGluZ3MvZGlzcGxheS9icmNtLGJjbS12YzQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZp Y2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJjbSxiY20tdmM0LnR4dAppbmRleCA1NmE5NjFhLi4x NzgyYzNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlz cGxheS9icmNtLGJjbS12YzQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5k aW5ncy9kaXNwbGF5L2JyY20sYmNtLXZjNC50eHQKQEAgLTM1LDYgKzM1LDQ0IEBAIE9wdGlvbmFs IHByb3BlcnRpZXMgZm9yIEhETUk6CiAJCSAgYXMgYW4gaW50ZXJydXB0L3N0YXR1cyBiaXQgaW4g dGhlIEhETUkgY29udHJvbGxlcgogCQkgIGl0c2VsZikuICBTZWUgYmluZGluZ3MvcGluY3RybC9i cmNtLGJjbTI4MzUtZ3Bpby50eHQKIAorUmVxdWlyZWQgcHJvcGVydGllcyBmb3IgRFBJOgorLSBj b21wYXRpYmxlOgkJU2hvdWxkIGJlICJicmNtLGJjbTI4MzUtZHBpIgorLSByZWc6CQkJUGh5c2lj YWwgYmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVycworLSBjbG9ja3M6CQlh KSBjb3JlOiBUaGUgY29yZSBjbG9jayB0aGUgdW5pdCBydW5zIG9uCisJCQliKSBwaXhlbDogVGhl IHBpeGVsIGNsb2NrIHRoYXQgZmVlZHMgdGhlIHBpeGVsdmFsdmUKKy0gcG9ydDoJCQlQb3J0IG5v ZGUgd2l0aCBhIHNpbmdsZSBlbmRwb2ludCBjb25uZWN0aW5nIHRvIHRoZQorCQkJICBwYW5lbCBk ZXZpY2UsIGFzIGRlZmluZWQgaW4gWzFdCistIGJyY20sb3V0cHV0LWZvcm1hdDoJT3V0cHV0IGRh dGEgZm9ybWF0LCBtdXN0IGJlIG9uZSBvZjoKKwkJCTApIGRpc2FibGVkCisJCQkxKSAwMDAwMDAw MHJycnJyZ2dnZ2dnYmJiYmIKKwkJCTIpIDAwMHJycnJyMDBnZ2dnZ2cwMDBiYmJiYgorCQkJMykg MDBycnJycjAwMGdnZ2dnZzAwYmJiYmIwCisJCQk0KSAwMDAwMDBycnJycnJnZ2dnZ2diYmJiYmIK KwkJCTUpIDAwcnJycnJyMDBnZ2dnZ2cwMGJiYmJiYgorCQkJNikgcnJycnJycnJnZ2dnZ2dnZ2Ji YmJiYmJiCisKK09wdGlvbmFsIHByb3BlcnRpZXMgZm9yIERQSToKKy0gYnJjbSxyZ2Itb3JkZXI6 CQlSR0IgcmVvcmRlcmluZywgbXVzdCBiZSBvbmUgb2Y6CisJCQkJMCkgUkdCCisJCQkJMSkgQkdS CisJCQkJMikgR1JCCisJCQkJMykgQlJHCistIGJyY20saHN5bmMtZGlzYWJsZToJCURpc2FibGVz IHRoZSBoc3luYyBzaWduYWwKKy0gYnJjbSx2c3luYy1kaXNhYmxlOgkJRGlzYWJsZXMgdGhlIHZz eW5jIHNpZ25hbAorLSBicmNtLG91dHB1dC1lbmFibGUtZGlzYWJsZToJRGlzYWJsZXMgdGhlIG91 dHB1dCBlbmFibGUgc2lnbmFsCistIGJyY20saHN5bmMtZmFsbGluZzoJCU91dHB1dHMgdGhlIGhz eW5jIHNpZ25hbCBvbiB0aGUgZmFsbGluZyBjbGsgZWRnZQorLSBicmNtLHZzeW5jLWZhbGxpbmc6 CQlPdXRwdXRzIHRoZSB2c3luYyBzaWduYWwgb24gdGhlIGZhbGxpbmcgY2xrIGVkZ2UKKy0gYnJj bSxvdXRwdXQtZW5hYmxlLWZhbGxpbmc6CU91dHB1dHMgdGhlIG91dHB1dCBlbmFibGUgc2lnbmFs IG9uIHRoZQorCQkJCSAgZmFsbGluZyBjbGsgZWRnZQorLSBicmNtLG91dHB1dC1lbmFibGUtaW52 ZXJ0OglJbnZlcnRzIHRoZSBwb2xhcml0eSBvZiB0aGUgb3V0cHV0IGVuYWJsZQorCQkJCSAgc2ln bmFsCistIGJyY20scGl4ZWwtY2xrLWludmVydDoJSW52ZXJ0cyB0aGUgcG9sYXJpdHkgb2YgdGhl IHBpeGVsIGNsayBzaWduYWwKKy0gYnJjbSxvdXRwdXQtZW5hYmxlLW1vZGU6CVNldHMgb3V0cHV0 IGVuYWJsZSB3aGVuICh2c3luYyB8IGhzeW5jKQorCQkJCSAgaW5zdGVhZCBvZiAoaGFjdGl2ZSAm IHZhY3RpdmUpCisKKworWzFdIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRp YS92aWRlby1pbnRlcmZhY2VzLnR4dAorCiBFeGFtcGxlOgogcGl4ZWx2YWx2ZUA3ZTgwNzAwMCB7 CiAJY29tcGF0aWJsZSA9ICJicmNtLGJjbTI4MzUtcGl4ZWx2YWx2ZTIiOwpAQCAtNjAsNiArOTgs MzUgQEAgaGRtaTogaGRtaUA3ZTkwMjAwMCB7CiAJY2xvY2stbmFtZXMgPSAicGl4ZWwiLCAiaGRt aSI7CiB9OwogCitkcGk6IGRwaUA3ZTIwODAwMCB7CisJY29tcGF0aWJsZSA9ICJicmNtLGJjbTI4 MzUtZHBpIjsKKwlyZWcgPSA8MHg3ZTIwODAwMCAweDhjPjsKKwljbG9ja3MgPSA8JmNsb2NrcyBC Q00yODM1X0NMT0NLX1ZQVT4sCisJICAgICAgICAgPCZjbG9ja3MgQkNNMjgzNV9DTE9DS19EUEk+ OworCWNsb2NrLW5hbWVzID0gImNvcmUiLCAicGl4ZWwiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+ OworCSNzaXplLWNlbGxzID0gPDA+OworCisJYnJjbSxyZ2Itb3JkZXIgPSA8MD47CisJYnJjbSxv dXRwdXQtZm9ybWF0ID0gPDQ+OworCisJcG9ydCB7CisJCWRwaV9vdXQ6IGVuZHBvaW50QDAgewor CQkJcmVtb3RlLWVuZHBvaW50ID0gPCZwYW5lbF9pbj47CisJCX07CisJfTsKK307CisKIHZjNDog Z3B1IHsKIAljb21wYXRpYmxlID0gImJyY20sYmNtMjgzNS12YzQiOwogfTsKKworcGFuZWw6IHBh bmVsIHsKKwljb21wYXRpYmxlID0gIm9udGF0LHl4NzAwd3YwMyIsICJzaW1wbGUtcGFuZWwiOwor CisJcG9ydCB7CisJCXBhbmVsX2luOiBlbmRwb2ludCB7CisJCQlyZW1vdGUtZW5kcG9pbnQgPSA8 JmRwaV9vdXQ+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zj NC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnCmluZGV4IDU4NDgxMDQuLmU1 M2RmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZworKysgYi9kcml2 ZXJzL2dwdS9kcm0vdmM0L0tjb25maWcKQEAgLTUsNiArNSw3IEBAIGNvbmZpZyBEUk1fVkM0CiAJ c2VsZWN0IERSTV9LTVNfSEVMUEVSCiAJc2VsZWN0IERSTV9LTVNfQ01BX0hFTFBFUgogCXNlbGVj dCBEUk1fR0VNX0NNQV9IRUxQRVIKKwlzZWxlY3QgRFJNX1BBTkVMCiAJaGVscAogCSAgQ2hvb3Nl IHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgc3lzdGVtIHRoYXQgaGFzIGEgQnJvYWRjb20KIAkg IFZDNCBHUFUsIHN1Y2ggYXMgdGhlIFJhc3BiZXJyeSBQaSBvciBvdGhlciBCQ00yNzA4L0JDTTI4 MzUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL3ZjNC9NYWtlZmlsZQppbmRleCA0YzZhOTlmLi5mYjc3ZGI3IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFr ZWZpbGUKQEAgLTcsNiArNyw3IEBAIHZjNC15IDo9IFwKIAl2YzRfYm8ubyBcCiAJdmM0X2NydGMu byBcCiAJdmM0X2Rydi5vIFwKKwl2YzRfZHBpLm8gXAogCXZjNF9rbXMubyBcCiAJdmM0X2dlbS5v IFwKIAl2YzRfaGRtaS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rl YnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RlYnVnZnMuYwppbmRleCBkNzZhZDEw Li4yNDUxMTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZGVidWdmcy5jCkBAIC0xNyw2ICsxNyw3IEBA CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2luZm9fbGlzdCB2YzRfZGVidWdmc19saXN0W10g PSB7CiAJeyJib19zdGF0cyIsIHZjNF9ib19zdGF0c19kZWJ1Z2ZzLCAwfSwKKwl7ImRwaV9yZWdz IiwgdmM0X2RwaV9kZWJ1Z2ZzX3JlZ3MsIDB9LAogCXsiaGRtaV9yZWdzIiwgdmM0X2hkbWlfZGVi dWdmc19yZWdzLCAwfSwKIAl7Imh2c19yZWdzIiwgdmM0X2h2c19kZWJ1Z2ZzX3JlZ3MsIDB9LAog CXsiY3J0YzBfcmVncyIsIHZjNF9jcnRjX2RlYnVnZnNfcmVncywgMCwgKHZvaWQgKikodWludHB0 cl90KTB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHBpLmMgYi9kcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi40ZWRiNzBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf ZHBpLmMKQEAgLTAsMCArMSw1MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQnJvYWRj b20gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkK KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoqCisgKiBET0M6 IFZDNCBEUEkgbW9kdWxlCisgKgorICogVGhlIFZDNCBEUEkgaGFyZHdhcmUgc3VwcG9ydHMgTUlQ SSBEUEkgdHlwZSA0IGFuZCBOb2tpYSBWaVNTSQorICogc2lnbmFscywgd2hpY2ggYXJlIHJvdXRl ZCBvdXQgdG8gR1BJTzAtMjcgd2l0aCB0aGUgQUxUMiBmdW5jdGlvbi4KKyAqLworCisjaW5jbHVk ZSAiZHJtX2F0b21pY19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNp bmNsdWRlICJkcm1fZWRpZC5oIgorI2luY2x1ZGUgImRybV9wYW5lbC5oIgorI2luY2x1ZGUgImxp bnV4L2Nsay5oIgorI2luY2x1ZGUgImxpbnV4L2NvbXBvbmVudC5oIgorI2luY2x1ZGUgImxpbnV4 L29mX2dyYXBoLmgiCisjaW5jbHVkZSAibGludXgvb2ZfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJ2 YzRfZHJ2LmgiCisjaW5jbHVkZSAidmM0X3JlZ3MuaCIKKworI2RlZmluZSBEUElfQwkJCTB4MDAK KyMgZGVmaW5lIERQSV9PVVRQVVRfRU5BQkxFX01PREUJCUJJVCgxNikKKworLyogVGhlIG9yZGVy IGZpZWxkIHRha2VzIHRoZSBpbmNvbWluZyAyNCBiaXQgUkdCIGZyb20gdGhlIHBpeGVsIHZhbHZl CisgKiBhbmQgc2h1ZmZsZXMgdGhlIDMgY2hhbm5lbHMuCisgKi8KKyMgZGVmaW5lIERQSV9PUkRF Ul9NQVNLCQkJVkM0X01BU0soMTUsIDE0KQorIyBkZWZpbmUgRFBJX09SREVSX1NISUZUCQkxNAor IyBkZWZpbmUgRFBJX09SREVSX1JHQgkJCTAKKyMgZGVmaW5lIERQSV9PUkRFUl9CR1IJCQkxCisj IGRlZmluZSBEUElfT1JERVJfR1JCCQkJMgorIyBkZWZpbmUgRFBJX09SREVSX0JSRwkJCTMKKwor LyogVGhlIGZvcm1hdCBmaWVsZCB0YWtlcyB0aGUgT1JERVItc2h1ZmZsZWQgcGl4ZWwgdmFsdmUg ZGF0YSBhbmQKKyAqIGZvcm1hdHMgaXQgb250byB0aGUgb3V0cHV0IGxpbmVzLgorICovCisjIGRl ZmluZSBEUElfRk9STUFUX01BU0sJCVZDNF9NQVNLKDEzLCAxMSkKKyMgZGVmaW5lIERQSV9GT1JN QVRfU0hJRlQJCTExCisvKiBUaGlzIGRlZmluZSBpcyBuYW1lZCBpbiB0aGUgaGFyZHdhcmUsIGJ1 dCBhY3R1YWxseSBqdXN0IG91dHB1dHMgMC4gKi8KKyMgZGVmaW5lIERQSV9GT1JNQVRfOUJJVF82 NjZfUkdCCTAKKy8qIE91dHB1dHMgMDAwMDAwMDBycnJycmdnZ2dnZ2JiYmJiICovCisjIGRlZmlu ZSBEUElfRk9STUFUXzE2QklUXzU2NV9SR0JfMQkxCisvKiBPdXRwdXRzIDAwMHJycnJyMDBnZ2dn Z2cwMDBiYmJiYiAqLworIyBkZWZpbmUgRFBJX0ZPUk1BVF8xNkJJVF81NjVfUkdCXzIJMgorLyog T3V0cHV0cyAwMHJycnJyMDAwZ2dnZ2dnMDBiYmJiYjAgKi8KKyMgZGVmaW5lIERQSV9GT1JNQVRf MTZCSVRfNTY1X1JHQl8zCTMKKy8qIE91dHB1dHMgMDAwMDAwcnJycnJyZ2dnZ2dnYmJiYmJiICov CisjIGRlZmluZSBEUElfRk9STUFUXzE4QklUXzY2Nl9SR0JfMQk0CisvKiBPdXRwdXRzIDAwcnJy cnJyMDBnZ2dnZ2cwMGJiYmJiYiAqLworIyBkZWZpbmUgRFBJX0ZPUk1BVF8xOEJJVF82NjZfUkdC XzIJNQorLyogT3V0cHV0cyBycnJycnJycmdnZ2dnZ2dnYmJiYmJiYmIgKi8KKyMgZGVmaW5lIERQ SV9GT1JNQVRfMjRCSVRfODg4X1JHQgk2CisKKy8qIFJldmVyc2VzIHRoZSBwb2xhcml0eSBvZiB0 aGUgY29ycmVzcG9uZGluZyBzaWduYWwgKi8KKyMgZGVmaW5lIERQSV9QSVhFTF9DTEtfSU5WRVJU CQlCSVQoMTApCisjIGRlZmluZSBEUElfSFNZTkNfSU5WRVJUCQlCSVQoOSkKKyMgZGVmaW5lIERQ SV9WU1lOQ19JTlZFUlQJCUJJVCg4KQorIyBkZWZpbmUgRFBJX09VVFBVVF9FTkFCTEVfSU5WRVJU CUJJVCg3KQorCisvKiBPdXRwdXRzIHRoZSBzaWduYWwgdGhlIGZhbGxpbmcgY2xvY2sgZWRnZSBp bnN0ZWFkIG9mIHJpc2luZy4gKi8KKyMgZGVmaW5lIERQSV9IU1lOQ19ORUdBVEUJCUJJVCg2KQor IyBkZWZpbmUgRFBJX1ZTWU5DX05FR0FURQkJQklUKDUpCisjIGRlZmluZSBEUElfT1VUUFVUX0VO QUJMRV9ORUdBVEUJQklUKDQpCisKKy8qIERpc2FibGVzIHRoZSBzaWduYWwgKi8KKyMgZGVmaW5l IERQSV9IU1lOQ19ESVNBQkxFCQlCSVQoMykKKyMgZGVmaW5lIERQSV9WU1lOQ19ESVNBQkxFCQlC SVQoMikKKyMgZGVmaW5lIERQSV9PVVRQVVRfRU5BQkxFX0RJU0FCTEUJQklUKDEpCisKKy8qIFBv d2VyIGdhdGUgdG8gdGhlIGRldmljZSwgZnVsbCByZXNldCBhdCAwIC0+IDEgdHJhbnNpdGlvbiAq LworIyBkZWZpbmUgRFBJX0VOQUJMRQkJCUJJVCgwKQorCisvKiBBbGwgb3RoZXIgcmVnaXN0ZXJz IGJlc2lkZXMgRFBJX0MgcmV0dXJuIHRoZSBJRCAqLworI2RlZmluZSBEUElfSUQJCQkweDA0Cisj IGRlZmluZSBEUElfSURfVkFMVUUJCTB4MDA2NDcwNjkKKworLyogR2VuZXJhbCBEUEkgaGFyZHdh cmUgc3RhdGUuICovCitzdHJ1Y3QgdmM0X2RwaSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldjsKKworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCisJdm9pZCBfX2lv bWVtICpyZWdzOworCisJc3RydWN0IGNsayAqcGl4ZWxfY2xvY2s7CisJc3RydWN0IGNsayAqY29y ZV9jbG9jazsKKworCXUzMiBkcGlfYzsKK307CisKKyNkZWZpbmUgRFBJX1JFQUQob2Zmc2V0KSBy ZWFkbChkcGktPnJlZ3MgKyAob2Zmc2V0KSkKKyNkZWZpbmUgRFBJX1dSSVRFKG9mZnNldCwgdmFs KSB3cml0ZWwodmFsLCBkcGktPnJlZ3MgKyAob2Zmc2V0KSkKKworLyogVkM0IERQSSBlbmNvZGVy IEtNUyBzdHJ1Y3QgKi8KK3N0cnVjdCB2YzRfZHBpX2VuY29kZXIgeworCXN0cnVjdCB2YzRfZW5j b2RlciBiYXNlOworCXN0cnVjdCB2YzRfZHBpICpkcGk7Cit9OworCitzdGF0aWMgaW5saW5lIHN0 cnVjdCB2YzRfZHBpX2VuY29kZXIgKgordG9fdmM0X2RwaV9lbmNvZGVyKHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVjdCB2 YzRfZHBpX2VuY29kZXIsIGJhc2UuYmFzZSk7Cit9CisKKy8qIFZDNCBEUEkgY29ubmVjdG9yIEtN UyBzdHJ1Y3QgKi8KK3N0cnVjdCB2YzRfZHBpX2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9jb25u ZWN0b3IgYmFzZTsKKwlzdHJ1Y3QgdmM0X2RwaSAqZHBpOworCisJLyogU2luY2UgdGhlIGNvbm5l Y3RvciBpcyBhdHRhY2hlZCB0byBqdXN0IHRoZSBvbmUgZW5jb2RlciwKKwkgKiB0aGlzIGlzIHRo ZSByZWZlcmVuY2UgdG8gaXQgc28gd2UgY2FuIGRvIHRoZSBiZXN0X2VuY29kZXIoKQorCSAqIGhv b2suCisJICovCisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworfTsKKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgdmM0X2RwaV9jb25uZWN0b3IgKgordG9fdmM0X2RwaV9jb25uZWN0b3Ioc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNv bm5lY3Rvciwgc3RydWN0IHZjNF9kcGlfY29ubmVjdG9yLCBiYXNlKTsKK30KKworI2RlZmluZSBE UElfUkVHKHJlZykgeyByZWcsICNyZWcgfQorc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdTMyIHJl ZzsKKwljb25zdCBjaGFyICpuYW1lOworfSBkcGlfcmVnc1tdID0geworCURQSV9SRUcoRFBJX0Mp LAorCURQSV9SRUcoRFBJX0lEKSwKK307CisKK3N0YXRpYyB2b2lkIHZjNF9kcGlfZHVtcF9yZWdz KHN0cnVjdCB2YzRfZHBpICpkcGkpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShkcGlfcmVncyk7IGkrKykgeworCQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4JTA4 eFxuIiwKKwkJCSBkcGlfcmVnc1tpXS5yZWcsIGRwaV9yZWdzW2ldLm5hbWUsCisJCQkgRFBJX1JF QUQoZHBpX3JlZ3NbaV0ucmVnKSk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitp bnQgdmM0X2RwaV9kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQp Cit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUg KiltLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2 OworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJc3RydWN0IHZjNF9k cGkgKmRwaSA9IHZjNC0+ZHBpOworCWludCBpOworCisJaWYgKCFkcGkpCisJCXJldHVybiAwOwor CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHBpX3JlZ3MpOyBpKyspIHsKKwkJc2VxX3By aW50ZihtLCAiJXMgKDB4JTA0eCk6IDB4JTA4eFxuIiwKKwkJCSAgIGRwaV9yZWdzW2ldLm5hbWUs IGRwaV9yZWdzW2ldLnJlZywKKwkJCSAgIERQSV9SRUFEKGRwaV9yZWdzW2ldLnJlZykpOworCX0K KworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzCit2YzRfZHBpX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgdmM0X2RwaV9jb25uZWN0b3IgKnZjNF9jb25u ZWN0b3IgPQorCQl0b192YzRfZHBpX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCB2YzRf ZHBpICpkcGkgPSB2YzRfY29ubmVjdG9yLT5kcGk7CisKKwlpZiAoZHBpLT5wYW5lbCkKKwkJcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UKKwkJcmV0dXJuIGNvbm5lY3Rv cl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCB2YzRfZHBpX2Nvbm5lY3Rv cl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5l Y3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5l Y3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgdmM0X2RwaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHZjNF9kcGlfY29ubmVjdG9y ICp2YzRfY29ubmVjdG9yID0KKwkJdG9fdmM0X2RwaV9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlz dHJ1Y3QgdmM0X2RwaSAqZHBpID0gdmM0X2Nvbm5lY3Rvci0+ZHBpOworCisJaWYgKGRwaS0+cGFu ZWwpCisJCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRwaS0+cGFuZWwpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIgKgordmM0X2RwaV9jb25uZWN0b3Jf YmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0 IHZjNF9kcGlfY29ubmVjdG9yICpkcGlfY29ubmVjdG9yID0KKwkJdG9fdmM0X2RwaV9jb25uZWN0 b3IoY29ubmVjdG9yKTsKKwlyZXR1cm4gZHBpX2Nvbm5lY3Rvci0+ZW5jb2RlcjsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHZjNF9kcGlfY29ubmVjdG9yX2Z1 bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRl dGVjdCA9IHZjNF9kcGlfY29ubmVjdG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxw ZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IHZjNF9kcGlfY29u bmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jl c2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdmM0X2RwaV9jb25uZWN0b3JfaGVscGVyX2Z1 bmNzID0geworCS5nZXRfbW9kZXMgPSB2YzRfZHBpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLmJl c3RfZW5jb2RlciA9IHZjNF9kcGlfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKK307CisKK3N0YXRp YyBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqdmM0X2RwaV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJCQkJICAgIHN0cnVjdCB2YzRfZHBpICpkcGkpCit7CisJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IE5VTEw7CisJc3RydWN0IHZjNF9kcGlfY29ubmVj dG9yICpkcGlfY29ubmVjdG9yOworCWludCByZXQgPSAwOworCisJZHBpX2Nvbm5lY3RvciA9IGRl dm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpkcGlfY29ubmVjdG9yKSwKKwkJCQkgICAgIEdG UF9LRVJORUwpOworCWlmICghZHBpX2Nvbm5lY3RvcikgeworCQlyZXQgPSAtRU5PTUVNOworCQln b3RvIGZhaWw7CisJfQorCWNvbm5lY3RvciA9ICZkcGlfY29ubmVjdG9yLT5iYXNlOworCisJZHBp X2Nvbm5lY3Rvci0+ZW5jb2RlciA9IGRwaS0+ZW5jb2RlcjsKKwlkcGlfY29ubmVjdG9yLT5kcGkg PSBkcGk7CisKKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZ2YzRfZHBpX2Nv bm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EUEkpOworCWRybV9jb25u ZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZ2YzRfZHBpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVu Y3MpOworCisJY29ubmVjdG9yLT5wb2xsZWQgPSAwOworCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2Fs bG93ZWQgPSAwOworCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gMDsKKworCWRybV9t b2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGRwaS0+ZW5jb2Rlcik7CisK KwlyZXR1cm4gY29ubmVjdG9yOworCisgZmFpbDoKKwlpZiAoY29ubmVjdG9yKQorCQl2YzRfZHBp X2Nvbm5lY3Rvcl9kZXN0cm95KGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQpOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHZjNF9kcGlfZW5jb2Rl cl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitzdGF0 aWMgdm9pZCB2YzRfZHBpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCit7CisJc3RydWN0IHZjNF9kcGlfZW5jb2RlciAqdmM0X2VuY29kZXIgPSB0b192YzRfZHBp X2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHZjNF9kcGkgKmRwaSA9IHZjNF9lbmNvZGVyLT5k cGk7CisKKwlkcm1fcGFuZWxfZGlzYWJsZShkcGktPnBhbmVsKTsKKworCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShkcGktPnBpeGVsX2Nsb2NrKTsKKworCWRybV9wYW5lbF91bnByZXBhcmUoZHBpLT5w YW5lbCk7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9kcGlfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0g JmVuY29kZXItPmNydGMtPm1vZGU7CisJc3RydWN0IHZjNF9kcGlfZW5jb2RlciAqdmM0X2VuY29k ZXIgPSB0b192YzRfZHBpX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHZjNF9kcGkgKmRwaSA9 IHZjNF9lbmNvZGVyLT5kcGk7CisJdTMyIGRwaV9jID0gZHBpLT5kcGlfYzsKKwlpbnQgcmV0Owor CisJcmV0ID0gZHJtX3BhbmVsX3ByZXBhcmUoZHBpLT5wYW5lbCk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIlBhbmVsIGZhaWxlZCB0byBwcmVwYXJlXG4iKTsKKwkJcmV0dXJuOworCX0KKwor CXJldCA9IGNsa19zZXRfcmF0ZShkcGktPnBpeGVsX2Nsb2NrLCBtb2RlLT5jbG9jayAqIDEwMDAp OworCWlmIChyZXQpCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHNldCBjbG9jayByYXRlOiAlZFxu IiwgcmV0KTsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKQorCQlk cGlfYyB8PSBEUElfSFNZTkNfSU5WRVJUOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZM QUdfTlZTWU5DKQorCQlkcGlfYyB8PSBEUElfVlNZTkNfSU5WRVJUOworCisJRFBJX1dSSVRFKERQ SV9DLCBkcGlfYyk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHBpLT5waXhlbF9jbG9j ayk7CisJaWYgKHJldCkKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGNsb2NrIHJhdGU6ICVk XG4iLCByZXQpOworCisJcmV0ID0gZHJtX3BhbmVsX2VuYWJsZShkcGktPnBhbmVsKTsKKwlpZiAo cmV0KSB7CisJCURSTV9FUlJPUigiUGFuZWwgZmFpbGVkIHRvIGVuYWJsZVxuIik7CisJCWRybV9w YW5lbF91bnByZXBhcmUoZHBpLT5wYW5lbCk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHZjNF9kcGlfZW5jb2Rlcl9oZWxw ZXJfZnVuY3MgPSB7CisJLmRpc2FibGUgPSB2YzRfZHBpX2VuY29kZXJfZGlzYWJsZSwKKwkuZW5h YmxlID0gdmM0X2RwaV9lbmNvZGVyX2VuYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIHZjNF9kcGlfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJy Y20sYmNtMjgzNS1kcGkiLCAuZGF0YSA9IE5VTEwgfSwKKwl7fQorfTsKKworLyogV2Fsa3MgdGhl IE9GIGdyYXBoIHRvIGZpbmQgdGhlIHBhbmVsIG5vZGUgYW5kIHRoZW4gYXNrcyBEUk0gdG8gbG9v aworICogdXAgdGhlIHBhbmVsLgorICovCitzdGF0aWMgc3RydWN0IGRybV9wYW5lbCAqdmM0X2Rw aV9nZXRfcGFuZWwoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq ZW5kcG9pbnQsICpwYW5lbF9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9m X25vZGU7CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisKKwllbmRwb2ludCA9IG9mX2dyYXBo X2dldF9uZXh0X2VuZHBvaW50KG5wLCBOVUxMKTsKKwlpZiAoIWVuZHBvaW50KSB7CisJCWRldl9l cnIoZGV2LCAibm8gZW5kcG9pbnQgdG8gZmV0Y2ggRFBJIHBhbmVsXG4iKTsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJLyogZG9uJ3QgcHJvY2VlZCBpZiB3ZSBoYXZlIGFuIGVuZHBvaW50IGJ1dCBu byBwYW5lbF9ub2RlIHRpZWQgdG8gaXQgKi8KKwlwYW5lbF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3Jl bW90ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7CisJb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOworCWlm ICghcGFuZWxfbm9kZSkgeworCQlkZXZfZXJyKGRldiwgIm5vIHZhbGlkIHBhbmVsIG5vZGVcbiIp OworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKHBhbmVs X25vZGUpOworCW9mX25vZGVfcHV0KHBhbmVsX25vZGUpOworCisJcmV0dXJuIHBhbmVsOworfQor CitzdGF0aWMgaW50IHZjNF9kcGlfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZp Y2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRl dl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2 KGRybSk7CisJc3RydWN0IHZjNF9kcGkgKmRwaTsKKwlzdHJ1Y3QgdmM0X2RwaV9lbmNvZGVyICp2 YzRfZHBpX2VuY29kZXI7CisJdTMyIHByb3A7CisJaW50IHJldDsKKworCWRwaSA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqZHBpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcGkpCisJCXJldHVy biAtRU5PTUVNOworCisJdmM0X2RwaV9lbmNvZGVyID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCp2YzRfZHBpX2VuY29kZXIpLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjNF9k cGlfZW5jb2RlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJdmM0X2RwaV9lbmNvZGVyLT5iYXNlLnR5 cGUgPSBWQzRfRU5DT0RFUl9UWVBFX0RQSTsKKwl2YzRfZHBpX2VuY29kZXItPmRwaSA9IGRwaTsK KwlkcGktPmVuY29kZXIgPSAmdmM0X2RwaV9lbmNvZGVyLT5iYXNlLmJhc2U7CisKKwlkcGktPnBk ZXYgPSBwZGV2OworCWRwaS0+cmVncyA9IHZjNF9pb3JlbWFwX3JlZ3MocGRldiwgMCk7CisJaWYg KElTX0VSUihkcGktPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihkcGktPnJlZ3MpOworCisJdmM0 X2RwaV9kdW1wX3JlZ3MoZHBpKTsKKworCWlmIChEUElfUkVBRChEUElfSUQpICE9IERQSV9JRF9W QUxVRSkgeworCQlkZXZfZXJyKGRldiwgIlBvcnQgcmV0dXJuZWQgMHglMDh4IGZvciBJRCBpbnN0 ZWFkIG9mIDB4JTA4eFxuIiwKKwkJCURQSV9SRUFEKERQSV9JRCksIERQSV9JRF9WQUxVRSk7CisJ CXJldHVybiAtRU5PREVWOworCX0KKworCWRwaS0+ZHBpX2MgPSBEUElfRU5BQkxFOworCisJcmV0 ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAiYnJjbSxyZ2Itb3JkZXIiLCAm cHJvcCk7CisJaWYgKHJldCA9PSAwKQorCQlkcGktPmRwaV9jIHw9IFZDNF9TRVRfRklFTEQocHJv cCwgRFBJX09SREVSKTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9k ZSwgImJyY20sb3V0cHV0LWZvcm1hdCIsICZwcm9wKTsKKwlpZiAocmV0ID09IDApCisJCWRwaS0+ ZHBpX2MgfD0gVkM0X1NFVF9GSUVMRChwcm9wLCBEUElfRk9STUFUKTsKKwllbHNlCisJCWdvdG8g ZXJyOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtPm9mX25vZGUsICJicmNtLGhz eW5jLWZhbGxpbmciKSkKKwkJZHBpLT5kcGlfYyB8PSBEUElfSFNZTkNfTkVHQVRFOworCWlmIChv Zl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLCAiYnJjbSx2c3luYy1mYWxsaW5nIikp CisJCWRwaS0+ZHBpX2MgfD0gRFBJX1ZTWU5DX05FR0FURTsKKwlpZiAob2ZfcHJvcGVydHlfcmVh ZF9ib29sKGRldi0+b2Zfbm9kZSwgImJyY20sb3V0cHV0LWVuYWJsZS1mYWxsaW5nIikpCisJCWRw aS0+ZHBpX2MgfD0gRFBJX09VVFBVVF9FTkFCTEVfTkVHQVRFOworCisJaWYgKG9mX3Byb3BlcnR5 X3JlYWRfYm9vbChkZXYtPm9mX25vZGUsICJicmNtLGhzeW5jLWRpc2FibGUiKSkKKwkJZHBpLT5k cGlfYyB8PSBEUElfSFNZTkNfRElTQUJMRTsKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGRl di0+b2Zfbm9kZSwgImJyY20sdnN5bmMtZGlzYWJsZSIpKQorCQlkcGktPmRwaV9jIHw9IERQSV9W U1lOQ19ESVNBQkxFOworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLCAi YnJjbSxvdXRwdXQtZW5hYmxlLWRpc2FibGUiKSkKKwkJZHBpLT5kcGlfYyB8PSBEUElfT1VUUFVU X0VOQUJMRV9ESVNBQkxFOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtPm9mX25v ZGUsICJicmNtLG91dHB1dC1lbmFibGUtaW52ZXJ0IikpCisJCWRwaS0+ZHBpX2MgfD0gRFBJX09V VFBVVF9FTkFCTEVfSU5WRVJUOworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9u b2RlLCAiYnJjbSxwaXhlbC1jbG9jay1pbnZlcnQiKSkKKwkJZHBpLT5kcGlfYyB8PSBEUElfUElY RUxfQ0xLX0lOVkVSVDsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2Rl LCAiYnJjbSxvdXRwdXQtZW5hYmxlLW1vZGUiKSkKKwkJZHBpLT5kcGlfYyB8PSBEUElfT1VUUFVU X0VOQUJMRV9NT0RFOworCisJZHBpLT5jb3JlX2Nsb2NrID0gZGV2bV9jbGtfZ2V0KGRldiwgImNv cmUiKTsKKwlpZiAoSVNfRVJSKGRwaS0+Y29yZV9jbG9jaykpIHsKKwkJRFJNX0VSUk9SKCJGYWls ZWQgdG8gZ2V0IGNvcmUgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcGktPmNvcmVfY2xv Y2spOworCX0KKwlkcGktPnBpeGVsX2Nsb2NrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBpeGVsIik7 CisJaWYgKElTX0VSUihkcGktPnBpeGVsX2Nsb2NrKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0 byBnZXQgcGl4ZWwgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcGktPnBpeGVsX2Nsb2Nr KTsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHBpLT5jb3JlX2Nsb2NrKTsKKwlp ZiAocmV0KQorCQlEUk1fRVJST1IoIkZhaWxlZCB0byB0dXJuIG9uIGNvcmUgY2xvY2s6ICVkXG4i LCByZXQpOworCisJZHBpLT5wYW5lbCA9IHZjNF9kcGlfZ2V0X3BhbmVsKGRldik7CisKKwlkcm1f ZW5jb2Rlcl9pbml0KGRybSwgZHBpLT5lbmNvZGVyLCAmdmM0X2RwaV9lbmNvZGVyX2Z1bmNzLAor CQkJIERSTV9NT0RFX0VOQ09ERVJfRFBJLCBOVUxMKTsKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRk KGRwaS0+ZW5jb2RlciwgJnZjNF9kcGlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJZHBpLT5j b25uZWN0b3IgPSB2YzRfZHBpX2Nvbm5lY3Rvcl9pbml0KGRybSwgZHBpKTsKKwlpZiAoSVNfRVJS KGRwaS0+Y29ubmVjdG9yKSkgeworCQlyZXQgPSBQVFJfRVJSKGRwaS0+Y29ubmVjdG9yKTsKKwkJ Z290byBlcnJfZGVzdHJveV9lbmNvZGVyOworCX0KKworCWlmIChkcGktPnBhbmVsKQorCQlkcm1f cGFuZWxfYXR0YWNoKGRwaS0+cGFuZWwsIGRwaS0+Y29ubmVjdG9yKTsKKworCWRldl9zZXRfZHJ2 ZGF0YShkZXYsIGRwaSk7CisKKwl2YzQtPmRwaSA9IGRwaTsKKworCXJldHVybiAwOworCitlcnJf ZGVzdHJveV9lbmNvZGVyOgorCWRybV9lbmNvZGVyX2NsZWFudXAoZHBpLT5lbmNvZGVyKTsKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoZHBpLT5jb3JlX2Nsb2NrKTsKK2VycjoKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgdm9pZCB2YzRfZHBpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCB2YzRfZGV2ICp2 YzQgPSB0b192YzRfZGV2KGRybSk7CisJc3RydWN0IHZjNF9kcGkgKmRwaSA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCisJaWYgKGRwaS0+cGFuZWwpCisJCWRybV9wYW5lbF9kZXRhY2goZHBpLT5w YW5lbCk7CisKKwl2YzRfZHBpX2Nvbm5lY3Rvcl9kZXN0cm95KGRwaS0+Y29ubmVjdG9yKTsKKwlk cm1fZW5jb2Rlcl9jbGVhbnVwKGRwaS0+ZW5jb2Rlcik7CisKKwljbGtfZGlzYWJsZV91bnByZXBh cmUoZHBpLT5jb3JlX2Nsb2NrKTsKKworCXZjNC0+ZHBpID0gTlVMTDsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIHZjNF9kcGlfb3BzID0geworCS5iaW5kICAgPSB2YzRf ZHBpX2JpbmQsCisJLnVuYmluZCA9IHZjNF9kcGlfdW5iaW5kLAorfTsKKworc3RhdGljIGludCB2 YzRfZHBpX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVy biBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ2YzRfZHBpX29wcyk7Cit9CisKK3N0YXRpYyBp bnQgdmM0X2RwaV9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ Y29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmdmM0X2RwaV9vcHMpOworCXJldHVybiAwOworfQor CitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZjNF9kcGlfZHJpdmVyID0geworCS5wcm9iZSA9IHZj NF9kcGlfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSB2YzRfZHBpX2Rldl9yZW1vdmUsCisJLmRyaXZl ciA9IHsKKwkJLm5hbWUgPSAidmM0X2RwaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHZjNF9kcGlf ZHRfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9k cnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCmluZGV4IGYxNjU1ZmYuLjA0NzQ3 NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCkBAIC0yNDcsNiArMjQ3LDcgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyB2YzRfZHJtX29wcyA9IHsKIAogc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmNvbnN0IGNvbXBvbmVudF9kcml2ZXJzW10gPSB7CiAJJnZj NF9oZG1pX2RyaXZlciwKKwkmdmM0X2RwaV9kcml2ZXIsCiAJJnZjNF9jcnRjX2RyaXZlciwKIAkm dmM0X2h2c19kcml2ZXIsCiAJJnZjNF92M2RfZHJpdmVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAppbmRl eCA4M2RiMGI3Li44ZjIyZGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9k cnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaApAQCAtMTYsNiArMTYsNyBA QCBzdHJ1Y3QgdmM0X2RldiB7CiAJc3RydWN0IHZjNF9odnMgKmh2czsKIAlzdHJ1Y3QgdmM0X2Ny dGMgKmNydGNbM107CiAJc3RydWN0IHZjNF92M2QgKnYzZDsKKwlzdHJ1Y3QgdmM0X2RwaSAqZHBp OwogCiAJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2OwogCkBAIC00MDYsNiArNDA3LDEwIEBA IHZvaWQgdmM0X2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiAvKiB2 YzRfZHJ2LmMgKi8KIHZvaWQgX19pb21lbSAqdmM0X2lvcmVtYXBfcmVncyhzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpkZXYsIGludCBpbmRleCk7CiAKKy8qIHZjNF9kcGkuYyAqLworZXh0ZXJuIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X2RwaV9kcml2ZXI7CitpbnQgdmM0X2RwaV9kZWJ1Z2Zz X3JlZ3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpOworCiAvKiB2YzRfZ2VtLmMg Ki8KIHZvaWQgdmM0X2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCB2YzRf Z2VtX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0tIAoyLjcuMAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==