From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v5,2/3] dmaengine: mediatek: Add MediaTek High-Speed DMA controller for MT7622 and MT7623 SoC From: sean.wang@mediatek.com Message-Id: Date: Sun, 18 Feb 2018 03:08:30 +0800 To: vinod.koul@intel.com, dan.j.williams@intel.com, robh+dt@kernel.org, mark.rutland@arm.com Cc: dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Sean Wang , Randy Dunlap , Fengguang Wu , Julia Lawall List-ID: RnJvbTogU2VhbiBXYW5nIDxzZWFuLndhbmdAbWVkaWF0ZWsuY29tPgoKTWVkaWFUZWsgSGlnaC1T cGVlZCBETUEgY29udHJvbGxlciAoSFNETUEpIG9uIE1UNzYyMiBhbmQgTVQ3NjIzIFNvQyBoYXMK YSBzaW5nbGUgcmluZyBpcyBkZWRpY2F0ZWQgdG8gbWVtb3J5LXRvLW1lbW9yeSB0cmFuc2ZlciB0 aHJvdWdoIHJpbmcgYmFzZWQKZGVzY3JpcHRvciBtYW5hZ2VtZW50LgoKRXZlbiB0aG91Z2ggdGhl cmUgaXMgb25seSBvbmUgcGh5c2ljYWwgcmluZyBhdmFpbGFibGUgaW5zaWRlIEhTRE1BLCB0aGUK ZHJpdmVyIGNhbiBiZSBlYXNpbHkgZXh0ZW5kZWQgdG8gdGhlIHN1cHBvcnQgb2YgbXVsdGlwbGUg dmlydHVhbCBjaGFubmVscwpwcm9jZXNzaW5nIHNpbXVsdGFuZW91c2x5IGJ5IG1lYW5zIG9mIERN QV9WSVJUVUFMX0NIQU5ORUxTIGVmZm9ydC4KClNpZ25lZC1vZmYtYnk6IFNlYW4gV2FuZyA8c2Vh bi53YW5nQG1lZGlhdGVrLmNvbT4KQ2M6IFJhbmR5IER1bmxhcCA8cmR1bmxhcEBpbmZyYWRlYWQu b3JnPgpDYzogRmVuZ2d1YW5nIFd1IDxmZW5nZ3Vhbmcud3VAaW50ZWwuY29tPgpDYzogSnVsaWEg TGF3YWxsIDxqdWxpYS5sYXdhbGxAbGlwNi5mcj4KLS0tCiBkcml2ZXJzL2RtYS9LY29uZmlnICAg ICAgICAgICAgICB8ICAgIDIgKwogZHJpdmVycy9kbWEvTWFrZWZpbGUgICAgICAgICAgICAgfCAg ICAxICsKIGRyaXZlcnMvZG1hL21lZGlhdGVrL0tjb25maWcgICAgIHwgICAxMyArCiBkcml2ZXJz L2RtYS9tZWRpYXRlay9NYWtlZmlsZSAgICB8ICAgIDEgKwogZHJpdmVycy9kbWEvbWVkaWF0ZWsv bXRrLWhzZG1hLmMgfCAxMDU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiA1IGZpbGVzIGNoYW5nZWQsIDEwNzEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZG1hL21lZGlhdGVrL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2RtYS9tZWRpYXRlay9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL21l ZGlhdGVrL210ay1oc2RtYS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2Ry aXZlcnMvZG1hL0tjb25maWcKaW5kZXggMjdkZjNlMi4uODZhY2U3NiAxMDA2NDQKLS0tIGEvZHJp dmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC02MzMsNiArNjMz LDggQEAgY29uZmlnIFpYX0RNQQogIyBkcml2ZXIgZmlsZXMKIHNvdXJjZSAiZHJpdmVycy9kbWEv YmVzdGNvbW0vS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmln IgorCiBzb3VyY2UgImRyaXZlcnMvZG1hL3Fjb20vS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJz L2RtYS9kdy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2 ZXJzL2RtYS9NYWtlZmlsZQppbmRleCBiOWRjYThhLi43YTU3Yjk3IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtNzUsNSArNzUs NiBAQCBvYmotJChDT05GSUdfWEdFTkVfRE1BKSArPSB4Z2VuZS1kbWEubwogb2JqLSQoQ09ORklH X1pYX0RNQSkgKz0genhfZG1hLm8KIG9iai0kKENPTkZJR19TVF9GRE1BKSArPSBzdF9mZG1hLm8K IAorb2JqLXkgKz0gbWVkaWF0ZWsvCiBvYmoteSArPSBxY29tLwogb2JqLXkgKz0geGlsaW54Lwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL21l ZGlhdGVrL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiYWMw YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL21lZGlhdGVrL0tjb25maWcKQEAgLTAs MCArMSwxMyBAQAorCitjb25maWcgTVRLX0hTRE1BCisJdHJpc3RhdGUgIk1lZGlhVGVrIEhpZ2gt U3BlZWQgRE1BIGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsg fHwgQ09NUElMRV9URVNUCisJc2VsZWN0IERNQV9FTkdJTkUKKwlzZWxlY3QgRE1BX1ZJUlRVQUxf Q0hBTk5FTFMKKwktLS1oZWxwLS0tCisJICBFbmFibGUgc3VwcG9ydCBmb3IgSGlnaC1TcGVlZCBE TUEgY29udHJvbGxlciBvbiBNZWRpYVRlaworCSAgU29Dcy4KKworCSAgVGhpcyBjb250cm9sbGVy IHByb3ZpZGVzIHRoZSBjaGFubmVscyB3aGljaCBpcyBkZWRpY2F0ZWQgdG8KKwkgIG1lbW9yeS10 by1tZW1vcnkgdHJhbnNmZXIgdG8gb2ZmbG9hZCBmcm9tIENQVSB0aHJvdWdoIHJpbmctCisJICBi YXNlZCBkZXNjcmlwdG9yIG1hbmFnZW1lbnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tZWRp YXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2VmaWxlCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzc4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2RtYS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfTVRL X0hTRE1BKSArPSBtdGstaHNkbWEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvbWVkaWF0ZWsv bXRrLWhzZG1hLmMgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9tdGstaHNkbWEuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGFlMmNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9kbWEvbWVkaWF0ZWsvbXRrLWhzZG1hLmMKQEAgLTAsMCArMSwxMDU0IEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIERyaXZlciBmb3IgTWVkaWFUZWsg SGlnaC1TcGVlZCBETUEgQ29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4 IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogU2VhbiBXYW5nIDxzZWFuLndhbmdAbWVkaWF0ZWsu Y29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGlu dXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFl bmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4 L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwu aD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVk ZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZG1hLmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5o PgorI2luY2x1ZGUgPGxpbnV4L3JlZmNvdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgor CisjaW5jbHVkZSAiLi4vdmlydC1kbWEuaCIKKworI2RlZmluZSBNVEtfRE1BX0RFViBLQlVJTERf TU9ETkFNRQorCisjZGVmaW5lIE1US19IU0RNQV9VU0VDX1BPTEwJCTIwCisjZGVmaW5lIE1US19I U0RNQV9USU1FT1VUX1BPTEwJCTIwMDAwMAorI2RlZmluZSBNVEtfSFNETUFfRE1BX0JVU1dJRFRI UwkJQklUKERNQV9TTEFWRV9CVVNXSURUSF9VTkRFRklORUQpCisKKy8qIFRoZSBkZWZhdWx0IG51 bWJlciBvZiB2aXJ0dWFsIGNoYW5uZWwgKi8KKyNkZWZpbmUgTVRLX0hTRE1BX05SX1ZDSEFOUwkJ MworCisvKiBPbmx5IG9uZSBwaHlzaWNhbCBjaGFubmVsIHN1cHBvcnRlZCAqLworI2RlZmluZSBN VEtfSFNETUFfTlJfTUFYX1BDSEFOUwkJMQorCisvKiBNYWNybyBmb3IgcGh5c2ljYWwgZGVzY3Jp cHRvciAoUEQpIG1hbmlwdWxhdGlvbiAqLworLyogVGhlIG51bWJlciBvZiBQRCB3aGljaCBtdXN0 IGJlIDIgb2YgcG93ZXIgKi8KKyNkZWZpbmUgTVRLX0RNQV9TSVpFCQkJNjQKKyNkZWZpbmUgTVRL X0hTRE1BX05FWFRfREVTUF9JRFgoeCwgeSkJKCgoeCkgKyAxKSAmICgoeSkgLSAxKSkKKyNkZWZp bmUgTVRLX0hTRE1BX0xBU1RfREVTUF9JRFgoeCwgeSkJKCgoeCkgLSAxKSAmICgoeSkgLSAxKSkK KyNkZWZpbmUgTVRLX0hTRE1BX01BWF9MRU4JCTB4M2Y4MAorI2RlZmluZSBNVEtfSFNETUFfQUxJ R05fU0laRQkJNAorI2RlZmluZSBNVEtfSFNETUFfUExFTl9NQVNLCQkweDNmZmYKKyNkZWZpbmUg TVRLX0hTRE1BX0RFU0NfUExFTih4KQkJKCgoeCkgJiBNVEtfSFNETUFfUExFTl9NQVNLKSA8PCAx NikKKyNkZWZpbmUgTVRLX0hTRE1BX0RFU0NfUExFTl9HRVQoeCkJKCgoeCkgPj4gMTYpICYgTVRL X0hTRE1BX1BMRU5fTUFTSykKKworLyogUmVnaXN0ZXJzIGZvciB1bmRlcmx5aW5nIHJpbmcgbWFu aXB1bGF0aW9uICovCisjZGVmaW5lIE1US19IU0RNQV9UWF9CQVNFCQkweDAKKyNkZWZpbmUgTVRL X0hTRE1BX1RYX0NOVAkJMHg0CisjZGVmaW5lIE1US19IU0RNQV9UWF9DUFUJCTB4OAorI2RlZmlu ZSBNVEtfSFNETUFfVFhfRE1BCQkweGMKKyNkZWZpbmUgTVRLX0hTRE1BX1JYX0JBU0UJCTB4MTAw CisjZGVmaW5lIE1US19IU0RNQV9SWF9DTlQJCTB4MTA0CisjZGVmaW5lIE1US19IU0RNQV9SWF9D UFUJCTB4MTA4CisjZGVmaW5lIE1US19IU0RNQV9SWF9ETUEJCTB4MTBjCisKKy8qIFJlZ2lzdGVy cyBmb3IgZ2xvYmFsIHNldHVwICovCisjZGVmaW5lIE1US19IU0RNQV9HTE8JCQkweDIwNAorI2Rl ZmluZSBNVEtfSFNETUFfR0xPX01VTFRJX0RNQQkJQklUKDEwKQorI2RlZmluZSBNVEtfSFNETUFf VFhfV0JfRERPTkUJCUJJVCg2KQorI2RlZmluZSBNVEtfSFNETUFfQlVSU1RfNjRCWVRFUwkJKDB4 MiA8PCA0KQorI2RlZmluZSBNVEtfSFNETUFfR0xPX1JYX0JVU1kJCUJJVCgzKQorI2RlZmluZSBN VEtfSFNETUFfR0xPX1JYX0RNQQkJQklUKDIpCisjZGVmaW5lIE1US19IU0RNQV9HTE9fVFhfQlVT WQkJQklUKDEpCisjZGVmaW5lIE1US19IU0RNQV9HTE9fVFhfRE1BCQlCSVQoMCkKKyNkZWZpbmUg TVRLX0hTRE1BX0dMT19ETUEJCShNVEtfSFNETUFfR0xPX1RYX0RNQSB8CVwKKwkJCQkJIE1US19I U0RNQV9HTE9fUlhfRE1BKQorI2RlZmluZSBNVEtfSFNETUFfR0xPX0JVU1kJCShNVEtfSFNETUFf R0xPX1JYX0JVU1kgfCBcCisJCQkJCSBNVEtfSFNETUFfR0xPX1RYX0JVU1kpCisjZGVmaW5lIE1U S19IU0RNQV9HTE9fREVGQVVMVAkJKE1US19IU0RNQV9HTE9fVFhfRE1BIHwgXAorCQkJCQkgTVRL X0hTRE1BX0dMT19SWF9ETUEgfCBcCisJCQkJCSBNVEtfSFNETUFfVFhfV0JfRERPTkUgfCBcCisJ CQkJCSBNVEtfSFNETUFfQlVSU1RfNjRCWVRFUyB8IFwKKwkJCQkJIE1US19IU0RNQV9HTE9fTVVM VElfRE1BKQorCisvKiBSZWdpc3RlcnMgZm9yIHJlc2V0ICovCisjZGVmaW5lIE1US19IU0RNQV9S RVNFVAkJCTB4MjA4CisjZGVmaW5lIE1US19IU0RNQV9SU1RfVFgJCUJJVCgwKQorI2RlZmluZSBN VEtfSFNETUFfUlNUX1JYCQlCSVQoMTYpCisKKy8qIFJlZ2lzdGVycyBmb3IgaW50ZXJydXB0IGNv bnRyb2wgKi8KKyNkZWZpbmUgTVRLX0hTRE1BX0RMWUlOVAkJMHgyMGMKKyNkZWZpbmUgTVRLX0hT RE1BX1JYRExZX0lOVF9FTgkJQklUKDE1KQorCisvKiBJbnRlcnJ1cHQgZmlyZXMgd2hlbiB0aGUg cGVuZGluZyBudW1iZXIncyBtb3JlIHRoYW4gdGhlIHNwZWNpZmllZCAqLworI2RlZmluZSBNVEtf SFNETUFfUlhNQVhfUElOVCh4KQkJKCgoeCkgJiAweDdmKSA8PCA4KQorCisvKiBJbnRlcnJ1cHQg ZmlyZXMgd2hlbiB0aGUgcGVuZGluZyB0aW1lJ3MgbW9yZSB0aGFuIHRoZSBzcGVjaWZpZWQgaW4g MjAgdXMgKi8KKyNkZWZpbmUgTVRLX0hTRE1BX1JYTUFYX1BUSU1FKHgpCSgoeCkgJiAweDdmKQor I2RlZmluZSBNVEtfSFNETUFfRExZSU5UX0RFRkFVTFQJKE1US19IU0RNQV9SWERMWV9JTlRfRU4g fCBcCisJCQkJCSBNVEtfSFNETUFfUlhNQVhfUElOVCgyMCkgfCBcCisJCQkJCSBNVEtfSFNETUFf UlhNQVhfUFRJTUUoMjApKQorI2RlZmluZSBNVEtfSFNETUFfSU5UX1NUQVRVUwkJMHgyMjAKKyNk ZWZpbmUgTVRLX0hTRE1BX0lOVF9FTkFCTEUJCTB4MjI4CisjZGVmaW5lIE1US19IU0RNQV9JTlRf UlhET05FCQlCSVQoMTYpCisKK2VudW0gbXRrX2hzZG1hX3ZkZXNjX2ZsYWcgeworCU1US19IU0RN QV9WREVTQ19GSU5JU0hFRAk9IDB4MDEsCit9OworCisjZGVmaW5lIElTX01US19IU0RNQV9WREVT Q19GSU5JU0hFRCh4KSAoKHgpID09IE1US19IU0RNQV9WREVTQ19GSU5JU0hFRCkKKworLyoqCisg KiBzdHJ1Y3QgbXRrX2hzZG1hX3BkZXNjIC0gVGhpcyBpcyB0aGUgc3RydWN0IGhvbGRpbmcgaW5m byBkZXNjcmliaW5nIHBoeXNpY2FsCisgKgkJCSAgICBkZXNjcmlwdG9yIChQRCkgYW5kIGl0cyBw bGFjZW1lbnQgbXVzdCBiZSBrZXB0IGF0CisgKgkJCSAgICA0LWJ5dGVzIGFsaWdubWVudCBpbiBs aXR0bGUgZW5kaWFuIG9yZGVyLgorICogQGRlc2NbMS00XToJCSAgICBUaGUgY29udHJvbCBwYWQg dXNlZCB0byBpbmRpY2F0ZSBoYXJkd2FyZSBob3cgdG8KKyAqCQkJICAgIGRlYWwgd2l0aCB0aGUg ZGVzY3JpcHRvciBzdWNoIGFzIHNvdXJjZSBhbmQKKyAqCQkJICAgIGRlc3RpbmF0aW9uIGFkZHJl c3MgYW5kIGRhdGEgbGVuZ3RoLiBUaGUgbWF4aW11bQorICoJCQkgICAgZGF0YSBsZW5ndGggZWFj aCBwZGVzYyBjYW4gaGFuZGxlIGlzIDB4M2Y4MCBieXRlcworICovCitzdHJ1Y3QgbXRrX2hzZG1h X3BkZXNjIHsKKwlfX2xlMzIgZGVzYzE7CisJX19sZTMyIGRlc2MyOworCV9fbGUzMiBkZXNjMzsK KwlfX2xlMzIgZGVzYzQ7Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKKworLyoqCisgKiBzdHJ1 Y3QgbXRrX2hzZG1hX3ZkZXNjIC0gVGhpcyBpcyB0aGUgc3RydWN0IGhvbGRpbmcgaW5mbyBkZXNj cmliaW5nIHZpcnR1YWwKKyAqCQkJICAgIGRlc2NyaXB0b3IgKFZEKQorICogQHZkOgkJCSAgICBB biBpbnN0YW5jZSBmb3Igc3RydWN0IHZpcnRfZG1hX2Rlc2MKKyAqIEBsZW46CQkgICAgVGhlIHRv dGFsIGRhdGEgc2l6ZSBkZXZpY2Ugd2FudHMgdG8gbW92ZQorICogQHJlc2lkdWU6CQkgICAgVGhl IHJlbWFpbmluZyBkYXRhIHNpemUgZGV2aWNlIHdpbGwgbW92ZQorICogQGRlc3Q6CQkgICAgVGhl IGRlc3RpbmF0aW9uIGFkZHJlc3MgZGV2aWNlIHdhbnRzIHRvIG1vdmUgdG8KKyAqIEBzcmM6CQkg ICAgVGhlIHNvdXJjZSBhZGRyZXNzIGRldmljZSB3YW50cyB0byBtb3ZlIGZyb20KKyAqLworc3Ry dWN0IG10a19oc2RtYV92ZGVzYyB7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgdmQ7CisJc2l6ZV90 IGxlbjsKKwlzaXplX3QgcmVzaWR1ZTsKKwlkbWFfYWRkcl90IGRlc3Q7CisJZG1hX2FkZHJfdCBz cmM7Cit9OworCisvKioKKyAqIHN0cnVjdCBtdGtfaHNkbWFfY2IgLSBUaGlzIGlzIHRoZSBzdHJ1 Y3QgaG9sZGluZyBleHRyYSBpbmZvIHJlcXVpcmVkIGZvciBSWAorICoJCQkgcmluZyB0byBrbm93 IHdoYXQgcmVsZXZhbnQgVkQgdGhlIHRoZSBQRCBpcyBiZWluZworICoJCQkgbWFwcGVkIHRvLgor ICogQHZkOgkJCSBQb2ludGVyIHRvIHRoZSByZWxldmFudCBWRC4KKyAqIEBmbGFnOgkJIEZsYWcg aW5kaWNhdGluZyB3aGF0IGFjdGlvbiBzaG91bGQgYmUgdGFrZW4gd2hlbiBWRAorICoJCQkgaXMg Y29tcGxldGVkLgorICovCitzdHJ1Y3QgbXRrX2hzZG1hX2NiIHsKKwlzdHJ1Y3QgdmlydF9kbWFf ZGVzYyAqdmQ7CisJZW51bSBtdGtfaHNkbWFfdmRlc2NfZmxhZyBmbGFnOworfTsKKworLyoqCisg KiBzdHJ1Y3QgbXRrX2hzZG1hX3JpbmcgLSBUaGlzIHN0cnVjdCBob2xkcyBpbmZvIGRlc2NyaWJp bmcgdW5kZXJseWluZyByaW5nCisgKgkJCSAgIHNwYWNlCisgKiBAdHhkOgkJICAgVGhlIGRlc2Ny aXB0b3IgVFggcmluZyB3aGljaCBkZXNjcmliZXMgRE1BIHNvdXJjZQorICoJCQkgICBpbmZvcm1h dGlvbgorICogQHJ4ZDoJCSAgIFRoZSBkZXNjcmlwdG9yIFJYIHJpbmcgd2hpY2ggZGVzY3JpYmVz IERNQQorICoJCQkgICBkZXN0aW5hdGlvbiBpbmZvcm1hdGlvbgorICogQGNiOgkJCSAgIFRoZSBl eHRyYSBpbmZvcm1hdGlvbiBwb2ludGVkIGF0IGJ5IFJYIHJpbmcKKyAqIEB0cGh5czoJCSAgIFRo ZSBwaHlzaWNhbCBhZGRyIG9mIFRYIHJpbmcKKyAqIEBycGh5czoJCSAgIFRoZSBwaHlzaWNhbCBh ZGRyIG9mIFJYIHJpbmcKKyAqIEBjdXJfdHB0cjoJCSAgIFBvaW50ZXIgdG8gdGhlIG5leHQgZnJl ZSBkZXNjcmlwdG9yIHVzZWQgYnkgdGhlIGhvc3QKKyAqIEBjdXJfcnB0cjoJCSAgIFBvaW50ZXIg dG8gdGhlIGxhc3QgZG9uZSBkZXNjcmlwdG9yIGJ5IHRoZSBkZXZpY2UKKyAqLworc3RydWN0IG10 a19oc2RtYV9yaW5nIHsKKwlzdHJ1Y3QgbXRrX2hzZG1hX3BkZXNjICp0eGQ7CisJc3RydWN0IG10 a19oc2RtYV9wZGVzYyAqcnhkOworCXN0cnVjdCBtdGtfaHNkbWFfY2IgKmNiOworCWRtYV9hZGRy X3QgdHBoeXM7CisJZG1hX2FkZHJfdCBycGh5czsKKwl1MTYgY3VyX3RwdHI7CisJdTE2IGN1cl9y cHRyOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2hzZG1hX3BjaGFuIC0gVGhpcyBpcyB0aGUg c3RydWN0IGhvbGRpbmcgaW5mbyBkZXNjcmliaW5nIHBoeXNpY2FsCisgKgkJCSAgIGNoYW5uZWwg KFBDKQorICogQHJpbmc6CQkgICBBbiBpbnN0YW5jZSBmb3IgdGhlIHVuZGVybHlpbmcgcmluZwor ICogQHN6X3Jpbmc6CQkgICBUb3RhbCBzaXplIGFsbG9jYXRlZCBmb3IgdGhlIHJpbmcKKyAqIEBu cl9mcmVlOgkJICAgVG90YWwgbnVtYmVyIG9mIGZyZWUgcm9vbXMgaW4gdGhlIHJpbmcuIEl0IHdv dWxkCisgKgkJCSAgIGJlIGFjY2Vzc2VkIGFuZCB1cGRhdGVkIGZyZXF1ZW50bHkgYmV0d2VlbiBJ UlEKKyAqCQkJICAgY29udGV4dCBhbmQgdXNlciBjb250ZXh0IHRvIHJlZmxlY3Qgd2hldGhlciBy aW5nCisgKgkJCSAgIGNhbiBhY2NlcHQgcmVxdWVzdHMgZnJvbSBWRC4KKyAqLworc3RydWN0IG10 a19oc2RtYV9wY2hhbiB7CisJc3RydWN0IG10a19oc2RtYV9yaW5nIHJpbmc7CisJc2l6ZV90IHN6 X3Jpbmc7CisJYXRvbWljX3QgbnJfZnJlZTsKK307CisKKy8qKgorICogc3RydWN0IG10a19oc2Rt YV92Y2hhbiAtIFRoaXMgaXMgdGhlIHN0cnVjdCBob2xkaW5nIGluZm8gZGVzY3JpYmluZyB2aXJ0 dWFsCisgKgkJCSAgIGNoYW5uZWwgKFZDKQorICogQHZjOgkJCSAgIEFuIGluc3RhbmNlIGZvciBz dHJ1Y3QgdmlydF9kbWFfY2hhbgorICogQGlzc3VlX2NvbXBsZXRpb246CSAgIFRoZSB3YWl0IGZv ciBhbGwgaXNzdWVkIGRlc2NyaXB0b3JzIGNvbXBsZXRpdGVkCisgKiBAaXNzdWVfc3luY2hyb25p emU6CSAgIEJvb2wgaW5kaWNhdGluZyBjaGFubmVsIHN5bmNocm9uaXphdGlvbiBzdGFydHMKKyAq IEBkZXNjX2h3X3Byb2Nlc3Npbmc6CSAgIExpc3QgdGhvc2UgZGVzY3JpcHRvcnMgdGhlIGhhcmR3 YXJlIGlzIHByb2Nlc3NpbmcKKyAqLworc3RydWN0IG10a19oc2RtYV92Y2hhbiB7CisJc3RydWN0 IHZpcnRfZG1hX2NoYW4gdmM7CisJc3RydWN0IGNvbXBsZXRpb24gaXNzdWVfY29tcGxldGlvbjsK Kwlib29sIGlzc3VlX3N5bmNocm9uaXplOworCS8qIHByb3RlY3RlZCBieSB2Yy5sb2NrICovCisJ c3RydWN0IGxpc3RfaGVhZCBkZXNjX2h3X3Byb2Nlc3Npbmc7Cit9OworCisvKioKKyAqIHN0cnVj dCBtdGtfaHNkbWFfc29jIC0gVGhpcyBpcyB0aGUgc3RydWN0IGhvbGRpbmcgZGlmZmVyZW5jZXMg YW1vbmcgU29DcworICogQGRkb25lOgkJICBCaXQgbWFzayBmb3IgRERPTkUKKyAqIEBsczA6CQkg IEJpdCBtYXNrIGZvciBMUzAKKyAqLworc3RydWN0IG10a19oc2RtYV9zb2MgeworCV9fbGUzMiBk ZG9uZTsKKwlfX2xlMzIgbHMwOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2hzZG1hX2Rldmlj ZSAtIFRoaXMgaXMgdGhlIHN0cnVjdCBob2xkaW5nIGluZm8gZGVzY3JpYmluZyBIU0RNQQorICoJ CQkgICAgIGRldmljZQorICogQGRkZXY6CQkgICAgIEFuIGluc3RhbmNlIGZvciBzdHJ1Y3QgZG1h X2RldmljZQorICogQGJhc2U6CQkgICAgIFRoZSBtYXBwZWQgcmVnaXN0ZXIgSS9PIGJhc2UKKyAq IEBjbGs6CQkgICAgIFRoZSBjbG9jayB0aGF0IGRldmljZSBpbnRlcm5hbCBpcyB1c2luZworICog QGlycToJCSAgICAgVGhlIElSUSB0aGF0IGRldmljZSBhcmUgdXNpbmcKKyAqIEBkbWFfcmVxdWVz dHM6CSAgICAgVGhlIG51bWJlciBvZiBWQ3MgdGhlIGRldmljZSBzdXBwb3J0cyB0bworICogQHZj OgkJCSAgICAgVGhlIHBvaW50ZXIgdG8gYWxsIGF2YWlsYWJsZSBWQ3MKKyAqIEBwYzoJCQkgICAg IFRoZSBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIFBDCisgKiBAcGNfcmVmY250OgkJICAgICBU cmFjayBob3cgbWFueSBWQ3MgYXJlIHVzaW5nIHRoZSBQQworICogQGxvY2s6CQkgICAgIExvY2sg cHJvdGVjdCBhZ2Fpc3RpbmcgbXVsdGlwbGUgVkNzIGFjY2VzcyBQQworICogQHNvYzoJCSAgICAg VGhlIHBvaW50ZXIgdG8gYXJlYSBob2xkaW5nIGRpZmZlcmVuY2VzIGFtb25nCisgKgkJCSAgICAg dmFpb3VzIHBsYXRmb3JtCisgKi8KK3N0cnVjdCBtdGtfaHNkbWFfZGV2aWNlIHsKKwlzdHJ1Y3Qg ZG1hX2RldmljZSBkZGV2OworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgY2xrICpjbGs7 CisJdTMyIGlycTsKKworCXUzMiBkbWFfcmVxdWVzdHM7CisJc3RydWN0IG10a19oc2RtYV92Y2hh biAqdmM7CisJc3RydWN0IG10a19oc2RtYV9wY2hhbiAqcGM7CisJcmVmY291bnRfdCBwY19yZWZj bnQ7CisKKwkvKiBMb2NrIHVzZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IG11bHRpcGxlIFZDcyBhY2Nl c3MgUEMgKi8KKwlzcGlubG9ja190IGxvY2s7CisKKwljb25zdCBzdHJ1Y3QgbXRrX2hzZG1hX3Nv YyAqc29jOworfTsKKworc3RhdGljIHN0cnVjdCBtdGtfaHNkbWFfZGV2aWNlICp0b19oc2RtYV9k ZXYoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2hhbi0+ ZGV2aWNlLCBzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSwKKwkJCSAgICBkZGV2KTsKK30KKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgbXRrX2hzZG1hX3ZjaGFuICp0b19oc2RtYV92Y2hhbihzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgbXRr X2hzZG1hX3ZjaGFuLCB2Yy5jaGFuKTsKK30KKworc3RhdGljIHN0cnVjdCBtdGtfaHNkbWFfdmRl c2MgKnRvX2hzZG1hX3ZkZXNjKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKK3sKKwlyZXR1cm4g Y29udGFpbmVyX29mKHZkLCBzdHJ1Y3QgbXRrX2hzZG1hX3ZkZXNjLCB2ZCk7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgZGV2aWNlICpoc2RtYTJkZXYoc3RydWN0IG10a19oc2RtYV9kZXZpY2UgKmhzZG1h KQoreworCXJldHVybiBoc2RtYS0+ZGRldi5kZXY7Cit9CisKK3N0YXRpYyB1MzIgbXRrX2RtYV9y ZWFkKHN0cnVjdCBtdGtfaHNkbWFfZGV2aWNlICpoc2RtYSwgdTMyIHJlZykKK3sKKwlyZXR1cm4g cmVhZGwoaHNkbWEtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZG1hX3dyaXRl KHN0cnVjdCBtdGtfaHNkbWFfZGV2aWNlICpoc2RtYSwgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwl3 cml0ZWwodmFsLCBoc2RtYS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kbWFf cm13KHN0cnVjdCBtdGtfaHNkbWFfZGV2aWNlICpoc2RtYSwgdTMyIHJlZywKKwkJCXUzMiBtYXNr LCB1MzIgc2V0KQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBtdGtfZG1hX3JlYWQoaHNkbWEsIHJl Zyk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBzZXQ7CisJbXRrX2RtYV93cml0ZShoc2RtYSwg cmVnLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZG1hX3NldChzdHJ1Y3QgbXRrX2hzZG1h X2RldmljZSAqaHNkbWEsIHUzMiByZWcsIHUzMiB2YWwpCit7CisJbXRrX2RtYV9ybXcoaHNkbWEs IHJlZywgMCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RtYV9jbHIoc3RydWN0IG10a19o c2RtYV9kZXZpY2UgKmhzZG1hLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCW10a19kbWFfcm13KGhz ZG1hLCByZWcsIHZhbCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oc2RtYV92ZGVzY19mcmVl KHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YodmQsIHN0 cnVjdCBtdGtfaHNkbWFfdmRlc2MsIHZkKSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hzZG1hX2J1 c3lfd2FpdChzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSAqaHNkbWEpCit7CisJdTMyIHN0YXR1cyA9 IDA7CisKKwlyZXR1cm4gcmVhZGxfcG9sbF90aW1lb3V0KGhzZG1hLT5iYXNlICsgTVRLX0hTRE1B X0dMTywgc3RhdHVzLAorCQkJCSAgIShzdGF0dXMgJiBNVEtfSFNETUFfR0xPX0JVU1kpLAorCQkJ CSAgTVRLX0hTRE1BX1VTRUNfUE9MTCwKKwkJCQkgIE1US19IU0RNQV9USU1FT1VUX1BPTEwpOwor fQorCitzdGF0aWMgaW50IG10a19oc2RtYV9hbGxvY19wY2hhbihzdHJ1Y3QgbXRrX2hzZG1hX2Rl dmljZSAqaHNkbWEsCisJCQkJIHN0cnVjdCBtdGtfaHNkbWFfcGNoYW4gKnBjKQoreworCXN0cnVj dCBtdGtfaHNkbWFfcmluZyAqcmluZyA9ICZwYy0+cmluZzsKKwlpbnQgZXJyOworCisJbWVtc2V0 KHBjLCAwLCBzaXplb2YoKnBjKSk7CisKKwkvKgorCSAqIEFsbG9jYXRlIHJpbmcgc3BhY2Ugd2hl cmUgWzAgLi4uIE1US19ETUFfU0laRSAtIDFdIGlzIGZvciBUWCByaW5nCisJICogYW5kIFtNVEtf RE1BX1NJWkUgLi4uIDIgKiBNVEtfRE1BX1NJWkUgLSAxXSBpcyBmb3IgUlggcmluZy4KKwkgKi8K KwlwYy0+c3pfcmluZyA9IDIgKiBNVEtfRE1BX1NJWkUgKiBzaXplb2YoKnJpbmctPnR4ZCk7CisJ cmluZy0+dHhkID0gZG1hX3phbGxvY19jb2hlcmVudChoc2RtYTJkZXYoaHNkbWEpLCBwYy0+c3pf cmluZywKKwkJCQkJJnJpbmctPnRwaHlzLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXJpbmctPnR4ZCkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlyaW5nLT5yeGQgPSAmcmluZy0+dHhkW01US19ETUFfU0la RV07CisJcmluZy0+cnBoeXMgPSByaW5nLT50cGh5cyArIE1US19ETUFfU0laRSAqIHNpemVvZigq cmluZy0+dHhkKTsKKwlyaW5nLT5jdXJfdHB0ciA9IDA7CisJcmluZy0+Y3VyX3JwdHIgPSBNVEtf RE1BX1NJWkUgLSAxOworCisJcmluZy0+Y2IgPSBrY2FsbG9jKE1US19ETUFfU0laRSwgc2l6ZW9m KCpyaW5nLT5jYiksIEdGUF9LRVJORUwpOworCWlmICghcmluZy0+Y2IpIHsKKwkJZXJyID0gLUVO T01FTTsKKwkJZ290byBlcnJfZnJlZV9kbWE7CisJfQorCisJYXRvbWljX3NldCgmcGMtPm5yX2Zy ZWUsIE1US19ETUFfU0laRSAtIDEpOworCisJLyogRGlzYWJsZSBIU0RNQSBhbmQgd2FpdCBmb3Ig dGhlIGNvbXBsZXRpb24gKi8KKwltdGtfZG1hX2Nscihoc2RtYSwgTVRLX0hTRE1BX0dMTywgTVRL X0hTRE1BX0dMT19ETUEpOworCWVyciA9IG10a19oc2RtYV9idXN5X3dhaXQoaHNkbWEpOworCWlm IChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfY2I7CisKKwkvKiBSZXNldCAqLworCW10a19kbWFfc2V0 KGhzZG1hLCBNVEtfSFNETUFfUkVTRVQsCisJCSAgICBNVEtfSFNETUFfUlNUX1RYIHwgTVRLX0hT RE1BX1JTVF9SWCk7CisJbXRrX2RtYV9jbHIoaHNkbWEsIE1US19IU0RNQV9SRVNFVCwKKwkJICAg IE1US19IU0RNQV9SU1RfVFggfCBNVEtfSFNETUFfUlNUX1JYKTsKKworCS8qIFNldHVwIEhTRE1B IGluaXRpYWwgcG9pbnRlciBpbiB0aGUgcmluZyAqLworCW10a19kbWFfd3JpdGUoaHNkbWEsIE1U S19IU0RNQV9UWF9CQVNFLCByaW5nLT50cGh5cyk7CisJbXRrX2RtYV93cml0ZShoc2RtYSwgTVRL X0hTRE1BX1RYX0NOVCwgTVRLX0RNQV9TSVpFKTsKKwltdGtfZG1hX3dyaXRlKGhzZG1hLCBNVEtf SFNETUFfVFhfQ1BVLCByaW5nLT5jdXJfdHB0cik7CisJbXRrX2RtYV93cml0ZShoc2RtYSwgTVRL X0hTRE1BX1RYX0RNQSwgMCk7CisJbXRrX2RtYV93cml0ZShoc2RtYSwgTVRLX0hTRE1BX1JYX0JB U0UsIHJpbmctPnJwaHlzKTsKKwltdGtfZG1hX3dyaXRlKGhzZG1hLCBNVEtfSFNETUFfUlhfQ05U LCBNVEtfRE1BX1NJWkUpOworCW10a19kbWFfd3JpdGUoaHNkbWEsIE1US19IU0RNQV9SWF9DUFUs IHJpbmctPmN1cl9ycHRyKTsKKwltdGtfZG1hX3dyaXRlKGhzZG1hLCBNVEtfSFNETUFfUlhfRE1B LCAwKTsKKworCS8qIEVuYWJsZSBIU0RNQSAqLworCW10a19kbWFfc2V0KGhzZG1hLCBNVEtfSFNE TUFfR0xPLCBNVEtfSFNETUFfR0xPX0RNQSk7CisKKwkvKiBTZXR1cCBkZWxheWVkIGludGVycnVw dCAqLworCW10a19kbWFfd3JpdGUoaHNkbWEsIE1US19IU0RNQV9ETFlJTlQsIE1US19IU0RNQV9E TFlJTlRfREVGQVVMVCk7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0ICovCisJbXRrX2RtYV9zZXQo aHNkbWEsIE1US19IU0RNQV9JTlRfRU5BQkxFLCBNVEtfSFNETUFfSU5UX1JYRE9ORSk7CisKKwly ZXR1cm4gMDsKKworZXJyX2ZyZWVfY2I6CisJa2ZyZWUocmluZy0+Y2IpOworCitlcnJfZnJlZV9k bWE6CisJZG1hX2ZyZWVfY29oZXJlbnQoaHNkbWEyZGV2KGhzZG1hKSwKKwkJCSAgcGMtPnN6X3Jp bmcsIHJpbmctPnR4ZCwgcmluZy0+dHBoeXMpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19oc2RtYV9mcmVlX3BjaGFuKHN0cnVjdCBtdGtfaHNkbWFfZGV2aWNlICpoc2RtYSwK KwkJCQkgc3RydWN0IG10a19oc2RtYV9wY2hhbiAqcGMpCit7CisJc3RydWN0IG10a19oc2RtYV9y aW5nICpyaW5nID0gJnBjLT5yaW5nOworCisJLyogRGlzYWJsZSBIU0RNQSBhbmQgdGhlbiB3YWl0 IGZvciB0aGUgY29tcGxldGlvbiAqLworCW10a19kbWFfY2xyKGhzZG1hLCBNVEtfSFNETUFfR0xP LCBNVEtfSFNETUFfR0xPX0RNQSk7CisJbXRrX2hzZG1hX2J1c3lfd2FpdChoc2RtYSk7CisKKwkv KiBSZXNldCBwb2ludGVyIGluIHRoZSByaW5nICovCisJbXRrX2RtYV9jbHIoaHNkbWEsIE1US19I U0RNQV9JTlRfRU5BQkxFLCBNVEtfSFNETUFfSU5UX1JYRE9ORSk7CisJbXRrX2RtYV93cml0ZSho c2RtYSwgTVRLX0hTRE1BX1RYX0JBU0UsIDApOworCW10a19kbWFfd3JpdGUoaHNkbWEsIE1US19I U0RNQV9UWF9DTlQsIDApOworCW10a19kbWFfd3JpdGUoaHNkbWEsIE1US19IU0RNQV9UWF9DUFUs IDApOworCW10a19kbWFfd3JpdGUoaHNkbWEsIE1US19IU0RNQV9SWF9CQVNFLCAwKTsKKwltdGtf ZG1hX3dyaXRlKGhzZG1hLCBNVEtfSFNETUFfUlhfQ05ULCAwKTsKKwltdGtfZG1hX3dyaXRlKGhz ZG1hLCBNVEtfSFNETUFfUlhfQ1BVLCBNVEtfRE1BX1NJWkUgLSAxKTsKKworCWtmcmVlKHJpbmct PmNiKTsKKworCWRtYV9mcmVlX2NvaGVyZW50KGhzZG1hMmRldihoc2RtYSksCisJCQkgIHBjLT5z el9yaW5nLCByaW5nLT50eGQsIHJpbmctPnRwaHlzKTsKK30KKworc3RhdGljIGludCBtdGtfaHNk bWFfaXNzdWVfcGVuZGluZ192ZGVzYyhzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSAqaHNkbWEsCisJ CQkJCSBzdHJ1Y3QgbXRrX2hzZG1hX3BjaGFuICpwYywKKwkJCQkJIHN0cnVjdCBtdGtfaHNkbWFf dmRlc2MgKmh2ZCkKK3sKKwlzdHJ1Y3QgbXRrX2hzZG1hX3JpbmcgKnJpbmcgPSAmcGMtPnJpbmc7 CisJc3RydWN0IG10a19oc2RtYV9wZGVzYyAqdHhkLCAqcnhkOworCXUxNiByZXNlcnZlZCwgcHJl diwgdGxlbiwgbnVtX3NnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogUHJvdGVjdCBh Z2FpbnN0IFBDIGlzIGFjY2Vzc2VkIGJ5IG11bHRpcGxlIFZDcyBzaW11bHRhbmVvdXNseSAqLwor CXNwaW5fbG9ja19pcnFzYXZlKCZoc2RtYS0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBSZXNl cnZlIHJvb21zLCB3aGVyZSBwYy0+bnJfZnJlZSBpcyB1c2VkIHRvIHRyYWNrIGhvdyBtYW55IGZy ZWUKKwkgKiByb29tcyBpbiB0aGUgcmluZyBiZWluZyB1cGRhdGVkIGluIHVzZXIgYW5kIElSUSBj b250ZXh0LgorCSAqLworCW51bV9zZ3MgPSBESVZfUk9VTkRfVVAoaHZkLT5sZW4sIE1US19IU0RN QV9NQVhfTEVOKTsKKwlyZXNlcnZlZCA9IG1pbl90KHUxNiwgbnVtX3NncywgYXRvbWljX3JlYWQo JnBjLT5ucl9mcmVlKSk7CisKKwlpZiAoIXJlc2VydmVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmhzZG1hLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCWF0 b21pY19zdWIocmVzZXJ2ZWQsICZwYy0+bnJfZnJlZSk7CisKKwl3aGlsZSAocmVzZXJ2ZWQtLSkg eworCQkvKiBMaW1pdCBzaXplIGJ5IFBEIGNhcGFiaWxpdHkgZm9yIHZhbGlkIGRhdGEgbW92aW5n ICovCisJCXRsZW4gPSAoaHZkLT5sZW4gPiBNVEtfSFNETUFfTUFYX0xFTikgPworCQkgICAgICAg TVRLX0hTRE1BX01BWF9MRU4gOiBodmQtPmxlbjsKKworCQkvKgorCQkgKiBTZXR1cCBQRHMgdXNp bmcgdGhlIHJlbWFpbmluZyBWRCBpbmZvIG1hcHBlZCBvbiB0aG9zZQorCQkgKiByZXNlcnZlZCBy b29tcy4gQW5kIHNpbmNlIFJYRCBpcyBzaGFyZWQgbWVtb3J5IGJldHdlZW4gdGhlCisJCSAqIGhv c3QgYW5kIHRoZSBkZXZpY2UgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb2hlcmVudCBjYWxsLAor CQkgKiB0aGUgaGVscGVyIG1hY3JvIFdSSVRFX09OQ0UgY2FuIGVuc3VyZSB0aGUgZGF0YSB3cml0 dGVuIHRvCisJCSAqIFJBTSB3b3VsZCByZWFsbHkgaGFwcGVucy4KKwkJICovCisJCXR4ZCA9ICZy aW5nLT50eGRbcmluZy0+Y3VyX3RwdHJdOworCQlXUklURV9PTkNFKHR4ZC0+ZGVzYzEsIGh2ZC0+ c3JjKTsKKwkJV1JJVEVfT05DRSh0eGQtPmRlc2MyLAorCQkJICAgaHNkbWEtPnNvYy0+bHMwIHwg TVRLX0hTRE1BX0RFU0NfUExFTih0bGVuKSk7CisKKwkJcnhkID0gJnJpbmctPnJ4ZFtyaW5nLT5j dXJfdHB0cl07CisJCVdSSVRFX09OQ0UocnhkLT5kZXNjMSwgaHZkLT5kZXN0KTsKKwkJV1JJVEVf T05DRShyeGQtPmRlc2MyLCBNVEtfSFNETUFfREVTQ19QTEVOKHRsZW4pKTsKKworCQkvKiBBc3Nv Y2lhdGUgVkQsIHRoZSBQRCBiZWxvbmdlZCB0byAqLworCQlyaW5nLT5jYltyaW5nLT5jdXJfdHB0 cl0udmQgPSAmaHZkLT52ZDsKKworCQkvKiBNb3ZlIGZvcndhcmQgdGhlIHBvaW50ZXIgb2YgVFgg cmluZyAqLworCQlyaW5nLT5jdXJfdHB0ciA9IE1US19IU0RNQV9ORVhUX0RFU1BfSURYKHJpbmct PmN1cl90cHRyLAorCQkJCQkJCSBNVEtfRE1BX1NJWkUpOworCisJCS8qIFVwZGF0ZSBWRCB3aXRo IHJlbWFpbmluZyBkYXRhICovCisJCWh2ZC0+c3JjICArPSB0bGVuOworCQlodmQtPmRlc3QgKz0g dGxlbjsKKwkJaHZkLT5sZW4gIC09IHRsZW47CisJfQorCisJLyoKKwkgKiBUYWdnaW5nIGZsYWcg Zm9yIHRoZSBsYXN0IFBEIGZvciBWRCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvcgorCSAqIGNvbXBs ZXRpbmcgVkQuCisJICovCisJaWYgKCFodmQtPmxlbikgeworCQlwcmV2ID0gTVRLX0hTRE1BX0xB U1RfREVTUF9JRFgocmluZy0+Y3VyX3RwdHIsIE1US19ETUFfU0laRSk7CisJCXJpbmctPmNiW3By ZXZdLmZsYWcgPSBNVEtfSFNETUFfVkRFU0NfRklOSVNIRUQ7CisJfQorCisJLyogRW5zdXJlIGFs bCBjaGFuZ2VzIGluZGVlZCBkb25lIGJlZm9yZSB3ZSdyZSBnb2luZyBvbiAqLworCXdtYigpOwor CisJLyoKKwkgKiBVcGRhdGluZyBpbnRvIGhhcmR3YXJlIHRoZSBwb2ludGVyIG9mIFRYIHJpbmcg bGV0cyBIU0RNQSB0byB0YWtlCisJICogYWN0aW9uIGZvciB0aG9zZSBwZW5kaW5nIFBEcy4KKwkg Ki8KKwltdGtfZG1hX3dyaXRlKGhzZG1hLCBNVEtfSFNETUFfVFhfQ1BVLCByaW5nLT5jdXJfdHB0 cik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoc2RtYS0+bG9jaywgZmxhZ3MpOworCisJ cmV0dXJuICFodmQtPmxlbiA/IDAgOiAtRU5PU1BDOworfQorCitzdGF0aWMgdm9pZCBtdGtfaHNk bWFfaXNzdWVfdmNoYW5fcGVuZGluZyhzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSAqaHNkbWEsCisJ CQkJCSAgc3RydWN0IG10a19oc2RtYV92Y2hhbiAqaHZjKQoreworCXN0cnVjdCB2aXJ0X2RtYV9k ZXNjICp2ZCwgKnZkMjsKKwlpbnQgZXJyOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaHZjLT52 Yy5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2ZCwgdmQyLCAmaHZjLT52Yy5k ZXNjX2lzc3VlZCwgbm9kZSkgeworCQlzdHJ1Y3QgbXRrX2hzZG1hX3ZkZXNjICpodmQ7CisKKwkJ aHZkID0gdG9faHNkbWFfdmRlc2ModmQpOworCisJCS8qIE1hcCBWRCBpbnRvIFBDIGFuZCBhbGwg VkNzIHNoYXJlcyBhIHNpbmdsZSBQQyAqLworCQllcnIgPSBtdGtfaHNkbWFfaXNzdWVfcGVuZGlu Z192ZGVzYyhoc2RtYSwgaHNkbWEtPnBjLCBodmQpOworCisJCS8qCisJCSAqIE1vdmUgVkQgZnJv bSBkZXNjX2lzc3VlZCB0byBkZXNjX2h3X3Byb2Nlc3Npbmcgd2hlbiBlbnRpcmUKKwkJICogVkQg aXMgZml0IGludG8gYXZhaWxhYmxlIFBEcy4gT3RoZXJ3aXNlLCB0aGUgdW5jb21wbGV0ZWQKKwkJ ICogVkRzIHdvdWxkIHN0YXkgaW4gbGlzdCBkZXNjX2lzc3VlZCBhbmQgdGhlbiByZXN0YXJ0IHRo ZQorCQkgKiBwcm9jZXNzaW5nIGFzIHNvb24gYXMgcG9zc2libGUgb25jZSB1bmRlcmx5aW5nIHJp bmcgc3BhY2UKKwkJICogZ290IGZyZWVkLgorCQkgKi8KKwkJaWYgKGVyciA9PSAtRU5PU1BDKQor CQkJYnJlYWs7CisKKwkJLyoKKwkJICogVGhlIGV4dHJhIGxpc3QgZGVzY19od19wcm9jZXNzaW5n IGlzIHVzZWQgYmVjYXVzZQorCQkgKiBoYXJkd2FyZSBjYW4ndCBwcm92aWRlIHN1ZmZpY2llbnQg aW5mb3JtYXRpb24gYWxsb3dpbmcgdXMKKwkJICogdG8ga25vdyB3aGF0IFZEcyBhcmUgc3RpbGwg d29ya2luZyBvbiB0aGUgdW5kZXJseWluZyByaW5nLgorCQkgKiBUaHJvdWdoIHRoZSBhZGRpdGlv bmFsIGxpc3QsIGl0IGNhbiBoZWxwIHVzIHRvIGltcGxlbWVudAorCQkgKiB0ZXJtaW5hdGVfYWxs LCByZXNpZHVlIGNhbGN1bGF0aW9uIGFuZCBzdWNoIHRoaW5nIG5lZWRlZAorCQkgKiB0byBrbm93 IGRldGFpbCBkZXNjcmlwdG9yIHN0YXR1cyBvbiB0aGUgaGFyZHdhcmUuCisJCSAqLworCQlsaXN0 X21vdmVfdGFpbCgmdmQtPm5vZGUsICZodmMtPmRlc2NfaHdfcHJvY2Vzc2luZyk7CisJfQorfQor CitzdGF0aWMgdm9pZCBtdGtfaHNkbWFfZnJlZV9yb29tc19pbl9yaW5nKHN0cnVjdCBtdGtfaHNk bWFfZGV2aWNlICpoc2RtYSkKK3sKKwlzdHJ1Y3QgbXRrX2hzZG1hX3ZjaGFuICpodmM7CisJc3Ry dWN0IG10a19oc2RtYV9wZGVzYyAqcnhkOworCXN0cnVjdCBtdGtfaHNkbWFfdmRlc2MgKmh2ZDsK KwlzdHJ1Y3QgbXRrX2hzZG1hX3BjaGFuICpwYzsKKwlzdHJ1Y3QgbXRrX2hzZG1hX2NiICpjYjsK KwlfX2xlMzIgZGVzYzI7CisJdTMyIHN0YXR1czsKKwl1MTYgbmV4dDsKKwlpbnQgaTsKKworCXBj ID0gaHNkbWEtPnBjOworCisJLyogUmVhZCBJUlEgc3RhdHVzICovCisJc3RhdHVzID0gbXRrX2Rt YV9yZWFkKGhzZG1hLCBNVEtfSFNETUFfSU5UX1NUQVRVUyk7CisKKwkvKgorCSAqIEFjayB0aGUg cGVuZGluZyBJUlEgYWxsIHRvIGxldCBoYXJkd2FyZSBrbm93IHNvZnR3YXJlIGlzIGhhbmRsaW5n CisJICogdGhvc2UgZmluaXNoZWQgcGh5c2ljYWwgZGVzY3JpcHRvcnMuIE90aGVyd2lzZSwgdGhl IGhhcmR3YXJlIHdvdWxkCisJICoga2VlcCB0aGUgdXNlZCBJUlEgbGluZSBpbiBjZXJ0YWluIHRy aWdnZXIgc3RhdGUuCisJICovCisJbXRrX2RtYV93cml0ZShoc2RtYSwgTVRLX0hTRE1BX0lOVF9T VEFUVVMsIHN0YXR1cyk7CisKKwl3aGlsZSAoMSkgeworCQluZXh0ID0gTVRLX0hTRE1BX05FWFRf REVTUF9JRFgocGMtPnJpbmcuY3VyX3JwdHIsCisJCQkJCSAgICAgICBNVEtfRE1BX1NJWkUpOwor CQlyeGQgPSAmcGMtPnJpbmcucnhkW25leHRdOworCisJCS8qCisJCSAqIElmIE1US19IU0RNQV9E RVNDX0RET05FIGlzIG5vIHNwZWNpZmllZCwgdGhhdCBtZWFucyBkYXRhCisJCSAqIG1vdmluZyBm b3IgdGhlIFBEIGlzIHN0aWxsIHVuZGVyIGdvaW5nLgorCQkgKi8KKwkJZGVzYzIgPSBSRUFEX09O Q0UocnhkLT5kZXNjMik7CisJCWlmICghKGRlc2MyICYgaHNkbWEtPnNvYy0+ZGRvbmUpKQorCQkJ YnJlYWs7CisKKwkJY2IgPSAmcGMtPnJpbmcuY2JbbmV4dF07CisJCWlmICh1bmxpa2VseSghY2It PnZkKSkgeworCQkJZGV2X2Vycihoc2RtYTJkZXYoaHNkbWEpLCAiY2ItPnZkIGNhbm5vdCBiZSBu dWxsXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogVXBkYXRlIHJlc2lkdWUgb2YgVkQgdGhl IGFzc29jaWF0ZWQgUEQgYmVsb25nZWQgdG8gKi8KKwkJaHZkID0gdG9faHNkbWFfdmRlc2MoY2It PnZkKTsKKwkJaHZkLT5yZXNpZHVlIC09IE1US19IU0RNQV9ERVNDX1BMRU5fR0VUKHJ4ZC0+ZGVz YzIpOworCisJCS8qIENvbXBsZXRlIFZEIHVudGlsIHRoZSByZWxldmFudCBsYXN0IFBEIGlzIGZp bmlzaGVkICovCisJCWlmIChJU19NVEtfSFNETUFfVkRFU0NfRklOSVNIRUQoY2ItPmZsYWcpKSB7 CisJCQlodmMgPSB0b19oc2RtYV92Y2hhbihjYi0+dmQtPnR4LmNoYW4pOworCisJCQlzcGluX2xv Y2soJmh2Yy0+dmMubG9jayk7CisKKwkJCS8qIFJlbW92ZSBWRCBmcm9tIGxpc3QgZGVzY19od19w cm9jZXNzaW5nICovCisJCQlsaXN0X2RlbCgmY2ItPnZkLT5ub2RlKTsKKworCQkJLyogQWRkIFZE IGludG8gbGlzdCBkZXNjX2NvbXBsZXRlZCAqLworCQkJdmNoYW5fY29va2llX2NvbXBsZXRlKGNi LT52ZCk7CisKKwkJCWlmIChodmMtPmlzc3VlX3N5bmNocm9uaXplICYmCisJCQkgICAgbGlzdF9l bXB0eSgmaHZjLT5kZXNjX2h3X3Byb2Nlc3NpbmcpKSB7CisJCQkJY29tcGxldGUoJmh2Yy0+aXNz dWVfY29tcGxldGlvbik7CisJCQkJaHZjLT5pc3N1ZV9zeW5jaHJvbml6ZSA9IGZhbHNlOworCQkJ fQorCQkJc3Bpbl91bmxvY2soJmh2Yy0+dmMubG9jayk7CisKKwkJCWNiLT5mbGFnID0gMDsKKwkJ fQorCisJCWNiLT52ZCA9IDA7CisKKwkJLyoKKwkJICogUmVjeWNsZSB0aGUgUlhEIHdpdGggdGhl IGhlbHBlciBXUklURV9PTkNFIHRoYXQgY2FuIGVuc3VyZQorCQkgKiBkYXRhIHdyaXR0ZW4gaW50 byBSQU0gd291bGQgcmVhbGx5IGhhcHBlbnMuCisJCSAqLworCQlXUklURV9PTkNFKHJ4ZC0+ZGVz YzEsIDApOworCQlXUklURV9PTkNFKHJ4ZC0+ZGVzYzIsIDApOworCQlwYy0+cmluZy5jdXJfcnB0 ciA9IG5leHQ7CisKKwkJLyogUmVsZWFzZSByb29tcyAqLworCQlhdG9taWNfaW5jKCZwYy0+bnJf ZnJlZSk7CisJfQorCisJLyogRW5zdXJlIGFsbCBjaGFuZ2VzIGluZGVlZCBkb25lIGJlZm9yZSB3 ZSdyZSBnb2luZyBvbiAqLworCXdtYigpOworCisJLyogVXBkYXRlIENQVSBwb2ludGVyIGZvciB0 aG9zZSBjb21wbGV0ZWQgUERzICovCisJbXRrX2RtYV93cml0ZShoc2RtYSwgTVRLX0hTRE1BX1JY X0NQVSwgcGMtPnJpbmcuY3VyX3JwdHIpOworCisJLyogQVNBUCBoYW5kbGVzIHBlbmRpbmcgVkRz IGluIGFsbCBWQ3MgYWZ0ZXIgZnJlZWluZyBzb21lIHJvb21zICovCisJZm9yIChpID0gMDsgaSA8 IGhzZG1hLT5kbWFfcmVxdWVzdHM7IGkrKykgeworCQlodmMgPSAmaHNkbWEtPnZjW2ldOworCQlz cGluX2xvY2soJmh2Yy0+dmMubG9jayk7CisJCW10a19oc2RtYV9pc3N1ZV92Y2hhbl9wZW5kaW5n KGhzZG1hLCBodmMpOworCQlzcGluX3VubG9jaygmaHZjLT52Yy5sb2NrKTsKKwl9CisKKwkvKiBB bGwgY29tcGxldGVkIFBEcyBhcmUgY2xlYW5lZCB1cCwgc28gZW5hYmxlIGludGVycnVwdCBhZ2Fp biAqLworCW10a19kbWFfc2V0KGhzZG1hLCBNVEtfSFNETUFfSU5UX0VOQUJMRSwgTVRLX0hTRE1B X0lOVF9SWERPTkUpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2hzZG1hX2lycShpbnQg aXJxLCB2b2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSAqaHNkbWEgPSBk ZXZpZDsKKworCS8qCisJICogRGlzYWJsZSBpbnRlcnJ1cHQgdW50aWwgYWxsIGNvbXBsZXRlZCBQ RHMgYXJlIGNsZWFuZWQgdXAgaW4KKwkgKiBtdGtfaHNkbWFfZnJlZV9yb29tcyBjYWxsLgorCSAq LworCW10a19kbWFfY2xyKGhzZG1hLCBNVEtfSFNETUFfSU5UX0VOQUJMRSwgTVRLX0hTRE1BX0lO VF9SWERPTkUpOworCisJbXRrX2hzZG1hX2ZyZWVfcm9vbXNfaW5fcmluZyhoc2RtYSk7CisKKwly ZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqbXRr X2hzZG1hX2ZpbmRfYWN0aXZlX2Rlc2Moc3RydWN0IGRtYV9jaGFuICpjLAorCQkJCQkJCWRtYV9j b29raWVfdCBjb29raWUpCit7CisJc3RydWN0IG10a19oc2RtYV92Y2hhbiAqaHZjID0gdG9faHNk bWFfdmNoYW4oYyk7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkOworCisJbGlzdF9mb3JfZWFj aF9lbnRyeSh2ZCwgJmh2Yy0+ZGVzY19od19wcm9jZXNzaW5nLCBub2RlKQorCQlpZiAodmQtPnR4 LmNvb2tpZSA9PSBjb29raWUpCisJCQlyZXR1cm4gdmQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHZkLCAmaHZjLT52Yy5kZXNjX2lzc3VlZCwgbm9kZSkKKwkJaWYgKHZkLT50eC5jb29raWUgPT0g Y29va2llKQorCQkJcmV0dXJuIHZkOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBlbnVt IGRtYV9zdGF0dXMgbXRrX2hzZG1hX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmMsCisJCQkJ CSAgIGRtYV9jb29raWVfdCBjb29raWUsCisJCQkJCSAgIHN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4 c3RhdGUpCit7CisJc3RydWN0IG10a19oc2RtYV92Y2hhbiAqaHZjID0gdG9faHNkbWFfdmNoYW4o Yyk7CisJc3RydWN0IG10a19oc2RtYV92ZGVzYyAqaHZkOworCXN0cnVjdCB2aXJ0X2RtYV9kZXNj ICp2ZDsKKwllbnVtIGRtYV9zdGF0dXMgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc2l6 ZV90IGJ5dGVzID0gMDsKKworCXJldCA9IGRtYV9jb29raWVfc3RhdHVzKGMsIGNvb2tpZSwgdHhz dGF0ZSk7CisJaWYgKHJldCA9PSBETUFfQ09NUExFVEUgfHwgIXR4c3RhdGUpCisJCXJldHVybiBy ZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHZjLT52Yy5sb2NrLCBmbGFncyk7CisJdmQgPSBt dGtfaHNkbWFfZmluZF9hY3RpdmVfZGVzYyhjLCBjb29raWUpOworCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmh2Yy0+dmMubG9jaywgZmxhZ3MpOworCisJaWYgKHZkKSB7CisJCWh2ZCA9IHRvX2hz ZG1hX3ZkZXNjKHZkKTsKKwkJYnl0ZXMgPSBodmQtPnJlc2lkdWU7CisJfQorCisJZG1hX3NldF9y ZXNpZHVlKHR4c3RhdGUsIGJ5dGVzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IG10a19oc2RtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqYykKK3sKKwlzdHJ1Y3Qg bXRrX2hzZG1hX2RldmljZSAqaHNkbWEgPSB0b19oc2RtYV9kZXYoYyk7CisJc3RydWN0IG10a19o c2RtYV92Y2hhbiAqaHZjID0gdG9faHNkbWFfdmNoYW4oYyk7CisJdW5zaWduZWQgbG9uZyBmbGFn czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZodmMtPnZjLmxvY2ssIGZsYWdzKTsKKworCWlmICh2 Y2hhbl9pc3N1ZV9wZW5kaW5nKCZodmMtPnZjKSkKKwkJbXRrX2hzZG1hX2lzc3VlX3ZjaGFuX3Bl bmRpbmcoaHNkbWEsIGh2Yyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZodmMtPnZjLmxv Y2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAq CittdGtfaHNkbWFfcHJlcF9kbWFfbWVtY3B5KHN0cnVjdCBkbWFfY2hhbiAqYywgZG1hX2FkZHJf dCBkZXN0LAorCQkJICBkbWFfYWRkcl90IHNyYywgc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBm bGFncykKK3sKKwlzdHJ1Y3QgbXRrX2hzZG1hX3ZkZXNjICpodmQ7CisKKwlodmQgPSBremFsbG9j KHNpemVvZigqaHZkKSwgR0ZQX05PV0FJVCk7CisJaWYgKCFodmQpCisJCXJldHVybiBOVUxMOwor CisJaHZkLT5sZW4gPSBsZW47CisJaHZkLT5yZXNpZHVlID0gbGVuOworCWh2ZC0+c3JjID0gc3Jj OworCWh2ZC0+ZGVzdCA9IGRlc3Q7CisKKwlyZXR1cm4gdmNoYW5fdHhfcHJlcCh0b192aXJ0X2No YW4oYyksICZodmQtPnZkLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hzZG1hX2ZyZWVf aW5hY3RpdmVfZGVzYyhzdHJ1Y3QgZG1hX2NoYW4gKmMsIGJvb2wgcmV1c2VfY2xyKQoreworCXN0 cnVjdCB2aXJ0X2RtYV9jaGFuICp2YyA9IHRvX3ZpcnRfY2hhbihjKTsKKwl1bnNpZ25lZCBsb25n IGZsYWdzOworCUxJU1RfSEVBRChoZWFkKTsKKworCS8qCisJICogVGVybWluYXRlIHBlbmRpbmcg ZGVzY3JpcHRvcnMgdGhhdCBoYXZlIHByZXZpb3VzbHkgYmVlbiBzdWJtaXR0ZWQKKwkgKiB0byB0 aGUgY2hhbm5lbC4gSG93ZXZlciwgdGhlIERNQSBlbmdpbmUgZG9lc24ndCBwcm92aWRlIGFueSB3 YXkgdG8KKwkgKiBzdG9wIHRoZXNlIGRlc2NyaXB0b3JzIGJlaW5nIHByb2Nlc3NlZCBieSBoYXJk d2FyZS4gVGhlIG9ubHkgd2F5IGlzCisJICoganVzdCB3YWl0aW5nIHVudGlsIHRoZXNlIGRlc2Ny aXB0b3JzIGFyZSBhbGwgcHJvY2Vzc2luZyBkb25lLiBUaHVzLAorCSAqIHVzZXJzIG11c3Qgc3lu Y2hyb25pemUgdG8gdGhlIERNQSBjaGFubmVsIHRlcm1pbmF0aW9uIHRvIGd1YXJhbnRlZQorCSAq IHRoYXQgYWxsIHRyYW5zZmVycyBmb3IgcHJldmlvdXNseSBpc3N1ZWQgZGVzY3JpcHRvcnMgaGF2 ZSBzdG9wcGVkLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ2Yy0+bG9jaywgZmxhZ3MpOwor CWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmdmMtPmRlc2NfYWxsb2NhdGVkLCAmaGVhZCk7CisJbGlz dF9zcGxpY2VfdGFpbF9pbml0KCZ2Yy0+ZGVzY19zdWJtaXR0ZWQsICZoZWFkKTsKKwlsaXN0X3Nw bGljZV90YWlsX2luaXQoJnZjLT5kZXNjX2lzc3VlZCwgJmhlYWQpOworCisJaWYgKHJldXNlX2Ns cikgeworCQlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQ7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRy eSh2ZCwgJmhlYWQsIG5vZGUpCisJCQlkbWFlbmdpbmVfZGVzY19jbGVhcl9yZXVzZSgmdmQtPnR4 KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmMtPmxvY2ssIGZsYWdzKTsKKworCS8q IEF0IHRoZSBwb2ludCwgd2UgZG9uJ3QgZXhwZWN0IHVzZXJzIHB1dCBkZXNjcmlwdG9yIGludG8g VkMgYWdhaW4gKi8KKwl2Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QodmMsICZoZWFkKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oc2RtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBk bWFfY2hhbiAqYykKK3sKKwltdGtfaHNkbWFfZnJlZV9pbmFjdGl2ZV9kZXNjKGMsIGZhbHNlKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfaHNkbWFfc3luY2hyb25pemUoc3Ry dWN0IGRtYV9jaGFuICpjKQoreworCXN0cnVjdCBtdGtfaHNkbWFfdmNoYW4gKmh2YyA9IHRvX2hz ZG1hX3ZjaGFuKGMpOworCWJvb2wgc3luY19uZWVkZWQgPSBmYWxzZTsKKworCS8qCisJICogT25j ZSBpc3N1ZV9zeW5jaHJvbml6ZSBpcyBiZWluZyBzZXQsIHdoaWNoIG1lYW5zIG9uY2UgdGhlIGhh cmR3YXJlCisJICogY29uc3VtZXMgYWxsIGRlc2NyaXB0b3JzIGZvciB0aGUgY2hhbm5lbCBpbiB0 aGUgcmluZywgdGhlCisJICogc3luY2hyb25pemF0aW9uIG11c3QgYmUgYmUgbm90aWZpZWQgaW1t ZWRpYXRlbHkgaXQgaXMgY29tcGxldGVkLgorCSAqLworCXNwaW5fbG9jaygmaHZjLT52Yy5sb2Nr KTsKKwlpZiAoIWxpc3RfZW1wdHkoJmh2Yy0+ZGVzY19od19wcm9jZXNzaW5nKSkgeworCQlodmMt Pmlzc3VlX3N5bmNocm9uaXplID0gdHJ1ZTsKKwkJc3luY19uZWVkZWQgPSB0cnVlOworCX0KKwlz cGluX3VubG9jaygmaHZjLT52Yy5sb2NrKTsKKworCWlmIChzeW5jX25lZWRlZCkKKwkJd2FpdF9m b3JfY29tcGxldGlvbigmaHZjLT5pc3N1ZV9jb21wbGV0aW9uKTsKKwkvKgorCSAqIEF0IHRoZSBw b2ludCwgd2UgZXhwZWN0IHRoYXQgYWxsIHJlbWFpbmluZyBkZXNjcmlwdG9ycyBpbiB0aGUgcmlu ZworCSAqIGZvciB0aGUgY2hhbm5lbCBzaG91bGQgYmUgYWxsIHByb2Nlc3NpbmcgZG9uZS4KKwkg Ki8KKwlXQVJOX09OQ0UoIWxpc3RfZW1wdHkoJmh2Yy0+ZGVzY19od19wcm9jZXNzaW5nKSwKKwkJ ICAiRGVzYyBwZW5kaW5nIHN0aWxsIGluIGxpc3QgZGVzY19od19wcm9jZXNzaW5nXG4iKTsKKwor CS8qIEZyZWUgYWxsIGRlc2NyaXB0b3JzIGluIGxpc3QgZGVzY19jb21wbGV0ZWQgKi8KKwl2Y2hh bl9zeW5jaHJvbml6ZSgmaHZjLT52Yyk7CisKKwlXQVJOX09OQ0UoIWxpc3RfZW1wdHkoJmh2Yy0+ dmMuZGVzY19jb21wbGV0ZWQpLAorCQkgICJEZXNjIHBlbmRpbmcgc3RpbGwgaW4gbGlzdCBkZXNj X2NvbXBsZXRlZFxuIik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hzZG1hX2FsbG9jX2NoYW5fcmVz b3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqYykKK3sKKwlzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSAq aHNkbWEgPSB0b19oc2RtYV9kZXYoYyk7CisJaW50IGVycjsKKworCS8qCisJICogU2luY2UgSFNE TUEgaGFzIG9ubHkgb25lIFBDLCB0aGUgcmVzb3VyY2UgZm9yIFBDIGlzIGJlaW5nIGFsbG9jYXRl ZAorCSAqIHdoZW4gdGhlIGZpcnN0IFZDIGlzIGJlaW5nIGNyZWF0ZWQgYW5kIHRoZSBvdGhlciBW Q3Mgd291bGQgcnVuIG9uCisJICogdGhlIHNhbWUgUEMuCisJICovCisJaWYgKCFyZWZjb3VudF9y ZWFkKCZoc2RtYS0+cGNfcmVmY250KSkgeworCQllcnIgPSBtdGtfaHNkbWFfYWxsb2NfcGNoYW4o aHNkbWEsIGhzZG1hLT5wYyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQkvKgorCQkg KiByZWZjb3VudF9pbmMgd291bGQgY29tcGxhaW4gaW5jcmVtZW50IG9uIDA7IHVzZS1hZnRlci1m cmVlLgorCQkgKiBUaHVzLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGl0IGFzIDEgaW5pdGlh bGx5LgorCQkgKi8KKwkJcmVmY291bnRfc2V0KCZoc2RtYS0+cGNfcmVmY250LCAxKTsKKwl9IGVs c2UgeworCQlyZWZjb3VudF9pbmMoJmhzZG1hLT5wY19yZWZjbnQpOworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBtdGtfaHNkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3Qg ZG1hX2NoYW4gKmMpCit7CisJc3RydWN0IG10a19oc2RtYV9kZXZpY2UgKmhzZG1hID0gdG9faHNk bWFfZGV2KGMpOworCisJLyogVGhlIHJlc291cmNlIGZvciBQQyBpcyBub3QgZnJlZWQgdW50aWwg YWxsIHRoZSBWQ3MgYXJlIGRlc3Ryb3llZCAqLworCWlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0 KCZoc2RtYS0+cGNfcmVmY250KSkKKwkJcmV0dXJuOworCisJbXRrX2hzZG1hX2ZyZWVfaW5hY3Rp dmVfZGVzYyhjLCB0cnVlKTsKKwltdGtfaHNkbWFfc3luY2hyb25pemUoYyk7CisKKwltdGtfaHNk bWFfZnJlZV9wY2hhbihoc2RtYSwgaHNkbWEtPnBjKTsKK30KKworc3RhdGljIGludCBtdGtfaHNk bWFfaHdfaW5pdChzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSAqaHNkbWEpCit7CisJaW50IGVycjsK KworCXBtX3J1bnRpbWVfZW5hYmxlKGhzZG1hMmRldihoc2RtYSkpOworCXBtX3J1bnRpbWVfZ2V0 X3N5bmMoaHNkbWEyZGV2KGhzZG1hKSk7CisKKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoaHNk bWEtPmNsayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW10a19kbWFfd3JpdGUoaHNk bWEsIE1US19IU0RNQV9JTlRfRU5BQkxFLCAwKTsKKwltdGtfZG1hX3dyaXRlKGhzZG1hLCBNVEtf SFNETUFfR0xPLCBNVEtfSFNETUFfR0xPX0RFRkFVTFQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgbXRrX2hzZG1hX2h3X2RlaW5pdChzdHJ1Y3QgbXRrX2hzZG1hX2RldmljZSAqaHNk bWEpCit7CisJbXRrX2RtYV93cml0ZShoc2RtYSwgTVRLX0hTRE1BX0dMTywgMCk7CisKKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoaHNkbWEtPmNsayk7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGhz ZG1hMmRldihoc2RtYSkpOworCXBtX3J1bnRpbWVfZGlzYWJsZShoc2RtYTJkZXYoaHNkbWEpKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19oc2RtYV9zb2MgbXQ3 NjIzX3NvYyA9IHsKKwkuZGRvbmUgPSBCSVQoMzEpLAorCS5sczAgPSBCSVQoMzApLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfaHNkbWFfc29jIG10NzYyMl9zb2MgPSB7CisJLmRkb25l ID0gQklUKDE1KSwKKwkubHMwID0gQklUKDE0KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIG10a19oc2RtYV9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVk aWF0ZWssbXQ3NjIzLWhzZG1hIiwgLmRhdGEgPSAmbXQ3NjIzX3NvY30sCisJeyAuY29tcGF0aWJs ZSA9ICJtZWRpYXRlayxtdDc2MjItaHNkbWEiLCAuZGF0YSA9ICZtdDc2MjJfc29jfSwKKwl7IC8q IHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfaHNkbWFfbWF0 Y2gpOworCitzdGF0aWMgaW50IG10a19oc2RtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBtdGtfaHNkbWFfZGV2aWNlICpoc2RtYTsKKwlzdHJ1Y3QgbXRr X2hzZG1hX3ZjaGFuICp2YzsKKwlzdHJ1Y3QgZG1hX2RldmljZSAqZGQ7CisJc3RydWN0IHJlc291 cmNlICpyZXM7CisJaW50IGksIGVycjsKKworCWhzZG1hID0gZGV2bV9remFsbG9jKCZwZGV2LT5k ZXYsIHNpemVvZigqaHNkbWEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhzZG1hKQorCQlyZXR1cm4g LUVOT01FTTsKKworCWRkID0gJmhzZG1hLT5kZGV2OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloc2RtYS0+YmFzZSA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoaHNkbWEtPmJhc2Up KQorCQlyZXR1cm4gUFRSX0VSUihoc2RtYS0+YmFzZSk7CisKKwloc2RtYS0+c29jID0gb2ZfZGV2 aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOworCWlmICghaHNkbWEtPnNvYykgeworCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJObyBkZXZpY2UgbWF0Y2ggZm91bmRcbiIpOworCQlyZXR1cm4g LUVOT0RFVjsKKwl9CisKKwloc2RtYS0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJo c2RtYSIpOworCWlmIChJU19FUlIoaHNkbWEtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiTm8gY2xvY2sgZm9yICVzXG4iLAorCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCQlyZXR1 cm4gUFRSX0VSUihoc2RtYS0+Y2xrKTsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBk ZXYtPmRldiwgIk5vIGlycSByZXNvdXJjZSBmb3IgJXNcbiIsCisJCQlkZXZfbmFtZSgmcGRldi0+ ZGV2KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwloc2RtYS0+aXJxID0gcmVzLT5zdGFydDsK KworCXJlZmNvdW50X3NldCgmaHNkbWEtPnBjX3JlZmNudCwgMCk7CisJc3Bpbl9sb2NrX2luaXQo JmhzZG1hLT5sb2NrKTsKKworCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGRkLT5jYXBfbWFzayk7 CisKKwlkZC0+Y29weV9hbGlnbiA9IE1US19IU0RNQV9BTElHTl9TSVpFOworCWRkLT5kZXZpY2Vf YWxsb2NfY2hhbl9yZXNvdXJjZXMgPSBtdGtfaHNkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJ ZGQtPmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0gbXRrX2hzZG1hX2ZyZWVfY2hhbl9yZXNv dXJjZXM7CisJZGQtPmRldmljZV90eF9zdGF0dXMgPSBtdGtfaHNkbWFfdHhfc3RhdHVzOworCWRk LT5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IG10a19oc2RtYV9pc3N1ZV9wZW5kaW5nOworCWRkLT5k ZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gbXRrX2hzZG1hX3ByZXBfZG1hX21lbWNweTsKKwlkZC0+ ZGV2aWNlX3Rlcm1pbmF0ZV9hbGwgPSBtdGtfaHNkbWFfdGVybWluYXRlX2FsbDsKKwlkZC0+ZGV2 aWNlX3N5bmNocm9uaXplID0gbXRrX2hzZG1hX3N5bmNocm9uaXplOworCWRkLT5zcmNfYWRkcl93 aWR0aHMgPSBNVEtfSFNETUFfRE1BX0JVU1dJRFRIUzsKKwlkZC0+ZHN0X2FkZHJfd2lkdGhzID0g TVRLX0hTRE1BX0RNQV9CVVNXSURUSFM7CisJZGQtPmRpcmVjdGlvbnMgPSBCSVQoRE1BX01FTV9U T19NRU0pOworCWRkLT5yZXNpZHVlX2dyYW51bGFyaXR5ID0gRE1BX1JFU0lEVUVfR1JBTlVMQVJJ VFlfU0VHTUVOVDsKKwlkZC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlJTklUX0xJU1RfSEVBRCgmZGQt PmNoYW5uZWxzKTsKKworCWhzZG1hLT5kbWFfcmVxdWVzdHMgPSBNVEtfSFNETUFfTlJfVkNIQU5T OworCWlmIChwZGV2LT5kZXYub2Zfbm9kZSAmJiBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5k ZXYub2Zfbm9kZSwKKwkJCQkJCSAgICAgICJkbWEtcmVxdWVzdHMiLAorCQkJCQkJICAgICAgJmhz ZG1hLT5kbWFfcmVxdWVzdHMpKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkgIlVzaW5n ICV1IGFzIG1pc3NpbmcgZG1hLXJlcXVlc3RzIHByb3BlcnR5XG4iLAorCQkJIE1US19IU0RNQV9O Ul9WQ0hBTlMpOworCX0KKworCWhzZG1hLT5wYyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LCBN VEtfSFNETUFfTlJfTUFYX1BDSEFOUywKKwkJCQkgc2l6ZW9mKCpoc2RtYS0+cGMpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWhzZG1hLT5wYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloc2RtYS0+dmMg PSBkZXZtX2tjYWxsb2MoJnBkZXYtPmRldiwgaHNkbWEtPmRtYV9yZXF1ZXN0cywKKwkJCQkgc2l6 ZW9mKCpoc2RtYS0+dmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhzZG1hLT52YykKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgaHNkbWEtPmRtYV9yZXF1ZXN0czsgaSsrKSB7 CisJCXZjID0gJmhzZG1hLT52Y1tpXTsKKwkJdmMtPnZjLmRlc2NfZnJlZSA9IG10a19oc2RtYV92 ZGVzY19mcmVlOworCQl2Y2hhbl9pbml0KCZ2Yy0+dmMsIGRkKTsKKwkJaW5pdF9jb21wbGV0aW9u KCZ2Yy0+aXNzdWVfY29tcGxldGlvbik7CisJCUlOSVRfTElTVF9IRUFEKCZ2Yy0+ZGVzY19od19w cm9jZXNzaW5nKTsKKwl9CisKKwllcnIgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKGRkKTsK KwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gb2ZfZG1hX2NvbnRyb2xsZXJfcmVn aXN0ZXIocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCSBvZl9kbWFfeGxhdGVfYnlfY2hhbl9pZCwg aHNkbWEpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIk1lZGlhVGVr IEhTRE1BIE9GIHJlZ2lzdHJhdGlvbiBmYWlsZWQgJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX3Vu cmVnaXN0ZXI7CisJfQorCisJbXRrX2hzZG1hX2h3X2luaXQoaHNkbWEpOworCisJZXJyID0gZGV2 bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBoc2RtYS0+aXJxLAorCQkJICAgICAgIG10a19oc2Rt YV9pcnEsIDAsCisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIGhzZG1hKTsKKwlpZiAo ZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJyZXF1ZXN0X2lycSBmYWlsZWQgd2l0 aCBlcnIgJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisJfQorCisJcGxhdGZv cm1fc2V0X2RydmRhdGEocGRldiwgaHNkbWEpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1l ZGlhVGVrIEhTRE1BIGRyaXZlciByZWdpc3RlcmVkXG4iKTsKKworCXJldHVybiAwOworCitlcnJf dW5yZWdpc3RlcjoKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoZGQpOworCisJcmV0dXJu IGVycjsKK30KKworc3RhdGljIGludCBtdGtfaHNkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19oc2RtYV9kZXZpY2UgKmhzZG1hID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG10a19oc2RtYV92Y2hhbiAqdmM7CisJaW50 IGk7CisKKwkvKiBLaWxsIFZDIHRhc2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHNkbWEtPmRtYV9y ZXF1ZXN0czsgaSsrKSB7CisJCXZjID0gJmhzZG1hLT52Y1tpXTsKKworCQlsaXN0X2RlbCgmdmMt PnZjLmNoYW4uZGV2aWNlX25vZGUpOworCQl0YXNrbGV0X2tpbGwoJnZjLT52Yy50YXNrKTsKKwl9 CisKKwkvKiBEaXNhYmxlIERNQSBpbnRlcnJ1cHQgKi8KKwltdGtfZG1hX3dyaXRlKGhzZG1hLCBN VEtfSFNETUFfSU5UX0VOQUJMRSwgMCk7CisKKwkvKiBXYWl0cyBmb3IgYW55IHBlbmRpbmcgSVJR IGhhbmRsZXJzIHRvIGNvbXBsZXRlICovCisJc3luY2hyb25pemVfaXJxKGhzZG1hLT5pcnEpOwor CisJLyogRGlzYWJsZSBoYXJkd2FyZSAqLworCW10a19oc2RtYV9od19kZWluaXQoaHNkbWEpOwor CisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZoc2RtYS0+ZGRldik7CisJb2ZfZG1hX2Nv bnRyb2xsZXJfZnJlZShwZGV2LT5kZXYub2Zfbm9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hzZG1hX2RyaXZlciA9IHsKKwkucHJvYmUJ CT0gbXRrX2hzZG1hX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2hzZG1hX3JlbW92ZSwKKwkuZHJp dmVyID0geworCQkubmFtZQkJPSBNVEtfRE1BX0RFViwKKwkJLm9mX21hdGNoX3RhYmxlCT0gbXRr X2hzZG1hX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdGtfaHNkbWFf ZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYVRlayBIaWdoLVNwZWVkIERNQSBD b250cm9sbGVyIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiU2VhbiBXYW5nIDxzZWFuLndhbmdA bWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo=