From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v2] mtd/spi-nor: Add SPI memory controllers for Aspeed SoCs Date: Wed, 9 Nov 2016 11:42:29 +0100 Message-ID: <1478688149-4554-1-git-send-email-clg@kaod.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+gldm-linux-mtd-36=gmane.org@lists.infradead.org To: linux-mtd@lists.infradead.org Cc: Mark Rutland , Boris Brezillon , devicetree@vger.kernel.org, Richard Weinberger , Marek Vasut , Rob Herring , Joel Stanley , Cyrille Pitchen , Brian Norris , David Woodhouse , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= List-Id: devicetree@vger.kernel.org VGhpcyBkcml2ZXIgYWRkcyBtdGQgc3VwcG9ydCBmb3Igc3BpLW5vciBhdHRhY2hlZCB0byBlaXRo ZXIgb3IgYm90aCBvZgp0aGUgRmlybXdhcmUgTWVtb3J5IENvbnRyb2xsZXIgb3IgdGhlIFNQSSBG bGFzaCBDb250cm9sbGVyIChBU1QyNDAwCm9ubHkpLgoKVGhlIFNNQyBjb250cm9sbGVycyBvbiB0 aGUgQXNwZWVkIEFTVDI1MDAgU29DIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlCm9uZXMgZm91bmQg b24gdGhlIEFTVDI0MDAuIFRoZSBkaWZmZXJlbmNlcyBhcmUgb24gdGhlIG51bWJlciBvZgpzdXBw b3J0ZWQgZmxhc2ggbW9kdWxlcyBhbmQgdGhlaXIgZGVmYXVsdCBtYXBwaW5ncyBpbiB0aGUgU29D IGFkZHJlc3MKc3BhY2UuCgpUaGUgQXNwZWVkIEFTVDI1MDAgaGFzIG9uZSBTUEkgY29udHJvbGxl ciBmb3IgdGhlIEJNQyBmaXJtd2FyZSBhbmQgdHdvCmZvciB0aGUgaG9zdCBmaXJtd2FyZS4gQWxs IGNvbnRyb2xsZXJzIGhhdmUgbm93IHRoZSBzYW1lIHNldCBvZgpyZWdpc3RlcnMgY29tcGF0aWJs ZSB3aXRoIHRoZSBBU1QyNDAwIEZNQyBjb250cm9sbGVyIGFuZCB0aGUgbGVnYWN5CidTTUMnIGNv bnRyb2xsZXIgaXMgZnVsbHkgZ29uZS4KCkVhY2ggY29udHJvbGxlciBoYXMgYSBtZW1vcnkgcmFu Z2Ugb24gd2hpY2ggaXQgbWFwcyBpdHMgZmxhc2ggbW9kdWxlCnNsYXZlcy4gRWFjaCBzbGF2ZSBp cyBhc3NpZ25lZCBhIG1lbW9yeSB3aW5kb3cgZm9yIGl0cyBtYXBwaW5nIHRoYXQKY2FuIGJlIGNo YW5nZWQgYXQgYm9vdGltZSB3aXRoIHRoZSBTZWdtZW50IEFkZHJlc3MgUmVnaXN0ZXIuCgpFYWNo IFNQSSBmbGFzaCBzbGF2ZSBjYW4gdGhlbiBiZSBhY2Nlc3NlZCBpbiB0d28gbW9kZXM6IENvbW1h bmQgYW5kClVzZXIuIFdoZW4gaW4gVXNlciBtb2RlLCBhY2Nlc3NlcyB0byB0aGUgbWVtb3J5IHNl Z21lbnQgb2YgdGhlIHNsYXZlcwphcmUgdHJhbnNsYXRlZCBpbiBTUEkgdHJhbnNmZXJzLiBXaGVu IGluIENvbW1hbmQgbW9kZSwgdGhlIEhXCmdlbmVyYXRlcyB0aGUgU1BJIGNvbW1hbmRzIGF1dG9t YXRpY2FsbHkgYW5kIHRoZSBtZW1vcnkgc2VnbWVudCBpcwphY2Nlc3NlZCBhcyBpZiBkb2luZyBh IE1NSU8uCgpDdXJyZW50bHksIG9ubHkgdGhlIFVzZXIgbW9kZSBpcyBzdXBwb3J0ZWQuIENvbW1h bmQgbW9kZSBuZWVkcyBhCmxpdHRsZSBtb3JlIHdvcmsgdG8gY2hlY2sgdGhhdCB0aGUgbWVtb3J5 IHdpbmRvdyBvbiB0aGUgQUhCIGJ1cyBmaXRzCnRoZSBtb2R1bGUgc2l6ZS4KCkJhc2VkIG9uIHBy ZXZpb3VzIHdvcmsgZnJvbSBNaWx0b24gRC4gTWlsbGVyIElJIDxtaWx0b25tQHVzLmlibS5jb20+ CgpTaWduZWQtb2ZmLWJ5OiBDw6lkcmljIExlIEdvYXRlciA8Y2xnQGthb2Qub3JnPgotLS0KIFRl c3RlZCBvbjoKCiAqIE9wZW5QT1dFUiBQYWxtZXR0byAoQVNUMjQwMCkgd2l0aAogCUZNQyBjb250 cm9sbGVyIDogbjI1cTI1NmEKCVNQSSBjb250cm9sbGVyIDogbXgyNWwyNTYzNWUgYW5kIG4yNXE1 MTJheDMKCiAqIEV2YWx1YXRpb24gYm9hcmQgKEFTVDI1MDApIHdpdGgKIAlGTUMgY29udHJvbGxl ciA6IHcyNXEyNTYgCglTUEkgY29udHJvbGxlciA6IHcyNXEyNTYKCiAqIE9wZW5QT1dFUiBXaXRo ZXJzcG9vbiAoQVNUMjUwMCkgd2l0aAogCUZNQyBjb250cm9sbGVyIDogbXgyNWwyNTYzNWUgKiAy CglTUEkgY29udHJvbGxlciA6IG14NjZsMWc0NWcKCiBDaGFuZ2VzIHNpbmNlIHYyOgoKIC0gYWRk ZWQgYSBzZXQ0YiBvcHMgdG8gaGFuZGxlIGRpZmZlcmVuY2UgaW4gdGhlIGNvbnRyb2xsZXJzCiAt IHNpbXBsaWZpZWQgdGhlIElPIHJvdXRpbmVzCiAtIHByZXBhcmVkIGZvciBmYXN0IHJlYWQgdXNp bmcgZHVtbXkgY3ljbGVzCgogV29yayBpbiBwcm9ncmVzczoKCiAtIHJlYWQgb3B0aW1pemF0aW9u IHVzaW5nIGhpZ2hlciBTUEkgY2xvY2sgZnJlcXVlbmNpZXMKIC0gY29tbWFuZCBtb2RlIHRvIGRp cmVjdCByZWFkcyBmcm9tIEFIQgogLSBETUEgc3VwcG9ydAoKIC4uLi9kZXZpY2V0cmVlL2JpbmRp bmdzL210ZC9hc3BlZWQtc21jLnR4dCAgICAgICAgIHwgIDcyICsrCiBkcml2ZXJzL210ZC9zcGkt bm9yL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArCiBkcml2ZXJzL210ZC9z cGktbm9yL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL210 ZC9zcGktbm9yL2FzcGVlZC1zbWMuYyAgICAgICAgICAgICAgICAgICB8IDc4MyArKysrKysrKysr KysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgODY4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2FzcGVlZC1z bWMudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQvc3BpLW5vci9hc3BlZWQtc21j LmMKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2Fz cGVlZC1zbWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9hc3Bl ZWQtc21jLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjc1MTZi MGMwMWZjZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5k aW5ncy9tdGQvYXNwZWVkLXNtYy50eHQKQEAgLTAsMCArMSw3MiBAQAorKiBBc3BlZWQgU3RhdGlj IE1lbW9yeSBjb250cm9sbGVyCisqIEFzcGVlZCBTUEkgRmxhc2ggQ29udHJvbGxlcgorCitUaGUg U3RhdGljIG1lbW9yeSBjb250cm9sbGVyIGluIHRoZSBhc3QyNDAwIHN1cHBvcnRzIDUgY2hpcCBz ZWxlY3RzCitlYWNoIGNhbiBiZSBhdHRhY2hlZCB0byBOQU5ELCBwYXJhbGxlbCBOT1IsIG9yIFNQ SSBOT1IgYXR0YWNoZWQgZmxhc2guCitUaGUgRmlybXdhcmUgTWVtb3J5IENvbnRyb2xsZXIgaW4g dGhlIGFzdDI1MDAgc3VwcG9ydHMgMyBjaGlwIHNlbGVjdHMsCit0d28gb2Ygd2hpY2ggYXJlIGFs d2F5cyBpbiBTUEktTk9SIG1vZGUgYW5kIHRoZSB0aGlyZCBjYW4gYmUgU1BJLU5PUgorb3IgcGFy YWxsZWwgZmxhc2guIFRoZSBTUEkgZmxhc2ggY29udHJvbGxlciBpbiB0aGUgYXN0MjQwMCBzdXBw b3J0cworb25lIG9mIDIgY2hpcCBzZWxlY3RzIHNlbGVjdGVkIGJ5IHBpbm11eC4gVGhlIHR3byBT UEkgZmxhc2gKK2NvbnRyb2xsZXJzIGluIHRoZSBhc3QyNTAwIGVhY2ggc3VwcG9ydCB0d28gY2hp cCBzZWxlY3RzLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAtIGNvbXBhdGlibGUgOiBTaG91 bGQgYmUgb25lIG9mCisJImFzcGVlZCxhc3QyNDAwLWZtYyIgZm9yIHRoZSBBU1QyNDAwIFN0YXRp YyBNZW1vcnkgQ29udHJvbGxlcgorCSJhc3BlZWQsYXN0MjQwMC1zbWMiIGZvciB0aGUgQVNUMjQw MCBTUEkgRmxhc2ggQ29udHJvbGxlcgorCSJhc3BlZWQsYXN0MjUwMC1mbWMiIGZvciB0aGUgQVNU MjUwMCBGaXJtd2FyZSBTUEkgTWVtb3J5IENvbnRyb2xsZXIKKwkiYXNwZWVkLGFzdDI1MDAtc21j IiBmb3IgdGhlIEFTVDI1MDAgU1BJIEZsYXNoIENvbnRyb2xsZXJzCisgIC0gcmVnIDogdGhlIGZp cnN0IGNvbnRhaW5zIHRoZSBjb250cm9sIHJlZ2lzdGVyIGxvY2F0aW9uIGFuZCBsZW5ndGgsCisg ICAgICAgICAgdGhlIHNlY29uZCBjb250YWlucyB0aGUgbWVtb3J5IHdpbmRvdyBtYXBwaW5nIGFk ZHJlc3MgYW5kIGxlbmd0aAorICAtICNhZGRyZXNzLWNlbGxzIDogbXVzdCBiZSAxIGNvcnJlc3Bv bmRpbmcgdG8gY2hpcCBzZWxlY3QgY2hpbGQgYmluZGluZworICAtICNzaXplLWNlbGxzIDogbXVz dCBiZSAwIGNvcnJlc3BvbmRpbmcgdG8gY2hpcCBzZWxlY3QgY2hpbGQgYmluZGluZworCitPcHRp b25hbCBwcm9wZXJ0aWVzOgorICAtIGludGVycnVwdHMgOiBTaG91bGQgY29udGFpbiB0aGUgaW50 ZXJydXB0IGZvciB0aGUgZG1hIGRldmljZSBpZiBhbiBmbWMKKworVGhlIGNoaWxkIG5vZGVzIGFy ZSB0aGUgU1BJIEZsYXNoIG1vZHVsZXMgd2hpY2ggbXVzdCBoYXZlIGEgY29tcGF0aWJsZQorcHJv cGVydHkgYXMgc3BlY2lmaWVkIGluIGJpbmRpbmdzL210ZC9qZWRlYyxzcGktbm9yLnR4dAorCitP cHRpb25hbGx5LCB0aGUgY2hpbGQgbm9kZSBjYW4gY29udGFpbiBwcm9wZXJ0aWVzIGZvciBTUEkg bW9kZSAobWF5IGJlCitpZ25vcmVkKToKKyAgLSBzcGktbWF4LWZyZXF1ZW5jeSAtIChvcHRpb25h bCkgbWF4IGZyZXF1ZW5jeSBvZiBzcGkgYnVzCisKKworRXhhbXBsZToKK2ZtYzogZm1jQDFlNjIw MDAwIHsKKwljb21wYXRpYmxlID0gImFzcGVlZCxhc3QyNDAwLWZtYyI7CisJcmVnID0gPCAweDFl NjIwMDAwIDB4OTQKKwkJMHgyMDAwMDAwMCAweDAyMDAwMDAwCisJCTB4MjIwMDAwMDAgMHgwMjAw MDAwMCA+OworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCWlu dGVycnVwdHMgPSA8MTk+OworCWZsYXNoQDAgeworCQlyZWcgPSA8IDAgPjsKKwkJY29tcGF0aWJs ZSA9ICJqZWRlYyxzcGktbm9yIiA7CisJCS8qIHNwaS1tYXgtZnJlcXVlbmN5ID0gPD47ICovCisJ CS8qIG0yNXAsZmFzdC1yZWFkOyAqLworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUt Y2VsbHMgPSA8MT47CisJCXBhcnRpdGlvbnMgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0 aXRpb25zIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47 CisJCQlib290QDAgeworCQkJCWxhYmVsID0gImJvb3QtbG9hZGVyIjsKKwkJCQlyZWcgPSA8IDAg MHg4MDAwID47CisJCQl9OworCQkJaW1hZ2VAODAwMCB7CisJCQkJbGFiZWwgPSAia2VybmVsLWlt YWdlIjsKKwkJCQlyZWcgPSA8IDB4ODAwMCAweDFmODAwMCA+OworCQkJfTsKKwkJfTsKKwl9Owor CWZsYXNoQDEgeworCQlyZWcgPSA8IDEgPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9y IiA7CisJCWxhYmVsID0gImFsdCI7CisJCS8qIHNwaS1tYXgtZnJlcXVlbmN5ID0gPD47ICovCisJ CXN0YXR1cyA9ICJmYWlsIjsKKwkJLyogbTI1cCxmYXN0LXJlYWQ7ICovCisJfTsKK307CmRpZmYg LS1naXQgYS9kcml2ZXJzL210ZC9zcGktbm9yL0tjb25maWcgYi9kcml2ZXJzL210ZC9zcGktbm9y L0tjb25maWcKaW5kZXggNGE2ODJlZTBmNjMyLi45NjE0ODYwMGZkYWIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9zcGktbm9yL0tjb25m aWcKQEAgLTc2LDQgKzc2LDE2IEBAIGNvbmZpZyBTUElfTlhQX1NQSUZJCiAJICBGbGFzaC4gRW5h YmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgZGV2aWNlIHdpdGggYSBTUElGSQogCSAgY29u dHJvbGxlciBhbmQgd2FudCB0byBhY2Nlc3MgdGhlIEZsYXNoIGFzIGEgbXRkIGRldmljZS4KIAor Y29uZmlnIEFTUEVFRF9GTEFTSF9TUEkKKwl0cmlzdGF0ZSAiQXNwZWVkIGZsYXNoIGNvbnRyb2xs ZXJzIGluIFNQSSBtb2RlIgorCWRlcGVuZHMgb24gSEFTX0lPTUVNICYmIE9GCisJZGVwZW5kcyBv biBBUkNIX0FTUEVFRCB8fCBDT01QSUxFX1RFU1QKKwkjIElPX1NQQUNFX0xJTUlUIG11c3QgYmUg ZXF1aXZhbGVudCB0byAofjBVTCkKKwlkZXBlbmRzIG9uICFORUVEX01BQ0hfSU9fSAorCWhlbHAK KwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTmV3IFN0YXRpYyBNZW1vcnkgQ29udHJv bGxlcgorCSAgKEZNQykgaW4gdGhlIEFzcGVlZCBTb0NzIChBU1QyNDAwIGFuZCBBU1QyNTAwKSB3 aGVuIGF0dGFjaGVkCisJICB0byBTUEkgbm9yIGNoaXBzLCBhbmQgc3VwcG9ydCBmb3IgdGhlIFNQ SSBNZW1vcnkgY29udHJvbGxlcgorCSAgKFNQSSkgZm9yIHRoZSBCSU9TLgorCiBlbmRpZiAjIE1U RF9TUElfTk9SCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9zcGktbm9yL01ha2VmaWxlIGIvZHJp dmVycy9tdGQvc3BpLW5vci9NYWtlZmlsZQppbmRleCAxMjE2OTVlODM1NDIuLmMzMTc0ZWJjNDVj MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvc3BpLW5vci9NYWtlZmlsZQorKysgYi9kcml2ZXJz L210ZC9zcGktbm9yL01ha2VmaWxlCkBAIC00LDQgKzQsNSBAQCBvYmotJChDT05GSUdfU1BJX0NB REVOQ0VfUVVBRFNQSSkJKz0gY2FkZW5jZS1xdWFkc3BpLm8KIG9iai0kKENPTkZJR19TUElfRlNM X1FVQURTUEkpCSs9IGZzbC1xdWFkc3BpLm8KIG9iai0kKENPTkZJR19TUElfSElTSV9TRkMpCSs9 IGhpc2ktc2ZjLm8KIG9iai0kKENPTkZJR19NVERfTVQ4MXh4X05PUikgICAgKz0gbXRrLXF1YWRz cGkubworb2JqLSQoQ09ORklHX0FTUEVFRF9GTEFTSF9TUEkpCSs9IGFzcGVlZC1zbWMubwogb2Jq LSQoQ09ORklHX1NQSV9OWFBfU1BJRkkpCSs9IG54cC1zcGlmaS5vCmRpZmYgLS1naXQgYS9kcml2 ZXJzL210ZC9zcGktbm9yL2FzcGVlZC1zbWMuYyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvYXNwZWVk LXNtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzA2NjJkYWY4 OWNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvc3BpLW5vci9hc3BlZWQtc21jLmMK QEAgLTAsMCArMSw3ODMgQEAKKy8qCisgKiBBU1BFRUQgU3RhdGljIE1lbW9yeSBDb250cm9sbGVy IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBJQk0gQ29ycG9yYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgv YnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2lu Y2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5o PgorI2luY2x1ZGUgPGxpbnV4L210ZC9zcGktbm9yLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+ CisKKyNkZWZpbmUgREVWSUNFX05BTUUJImFzcGVlZC1zbWMiCisKKy8qCisgKiBJbiB1c2VyIG1v ZGUgYWxsIGRhdGEgYnl0ZXMgcmVhZCBvciB3cml0dGVuIHRvIHRoZSBjaGlwIGRlY29kZSBhZGRy ZXNzCisgKiByYW5nZSBhcmUgdHJhbnNmZXJyZWQgdG8gb3IgZnJvbSB0aGUgU1BJIGJ1cy4gVGhl IHJhbmdlIGlzIHRyZWF0ZWQgYXMgYQorICogZmlmbyBvZiBhcmJpdHJhdHJ5IDEsIDIsIG9yIDQg Ynl0ZSB3aWR0aCBidXQgZWFjaCB3cml0ZSBoYXMgdG8gYmUgYWxpZ25lZAorICogdG8gaXRzIHNp emUuICBUaGUgYWRkcmVzcyB3aXRoaW4gdGhlIG11bHRpcGxlIDhrQiByYW5nZSBpcyBpZ25vcmVk IHdoZW4KKyAqIHNlbmRpbmcgYnl0ZXMgdG8gdGhlIFNQSSBidXMuCisgKgorICogT24gdGhlIGFy bSBhcmNoaXRlY3R1cmUsIGFzIG9mIExpbnV4IHZlcnNpb24gNC4zLCBtZW1jcHlfZnJvbWlvIGFu ZAorICogbWVtY3B5X3RvaW8gb24gbGl0dGxlIGVuZGlhbiB0YXJnZXRzIHVzZSB0aGUgb3B0aW1p emVkIG1lbWNweSByb3V0aW5lcworICogdGhhdCB3ZXJlIGRlc2lnbmVkIGZvciB3ZWxsIGJlaGF2 aWVkIG1lbW9yeSBzdG9yYWdlLiAgVGhlc2Ugcm91dGluZXMKKyAqIGhhdmUgYSBzdHV0dGVyIGlm IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBub3QgYm90aCB3b3JkIGFsaWduZWQsCisg KiBvbmNlIHdpdGggYSBkdXBsaWNhdGUgYWNjZXNzIHRvIHRoZSBzb3VyY2UgYWZ0ZXIgYWxpZ25p bmcgdG8gdGhlCisgKiBkZXN0aW5hdGlvbiB0byBhIHdvcmQgYm91bmRhcnksIGFuZCBhZ2FpbiB3 aXRoIGEgZHVwbGljYXRlIGFjY2VzcyB0bworICogdGhlIHNvdXJjZSB3aGVuIHRoZSBmaW5hbCBi eXRlIGNvdW50IGlzIG5vdCB3b3JkIGFsaWduZWQuCisgKgorICogV2hlbiB3cml0aW5nIG9yIHJl YWRpbmcgdGhlIGZpZm8gdGhpcyBzdHV0dGVyIGRpc2NhcmRzIGRhdGEgb3Igc2VuZHMKKyAqIHRv byBtdWNoIGRhdGEgdG8gdGhlIGZpZm8gYW5kIGNhbiBub3QgYmUgdXNlZCBieSB0aGlzIGRyaXZl ci4KKyAqCisgKiBXaGlsZSB0aGUgbG93IGxldmVsIGlvIHN0cmluZyByb3V0aW5lcyB0aGF0IGlt cGxlbWVudCB0aGUgaW5zbCBmYW1pbHkgZG8KKyAqIHRoZSBkZXNpcmVkIGFjY2Vzc2VzIGFuZCBt ZW1vcnkgaW5jcmVtZW50cywgdGhlIGNyb3NzIGFyY2hpdGVjdHVyZSBpbworICogbWFjcm9zIG1h a2UgdGhlbSBlc3NlbnRpYWxseSBpbXBvc3NpYmxlIHRvIHVzZSBvbiBhIG1lbW9yeSBtYXBwZWQg YWRkcmVzcworICogaW5zdGVhZCBvZiBhIGEgdG9rZW4gZnJvbSB0aGUgY2FsbCB0byBpb21hcCBv ZiBhbiBpbyBwb3J0LgorICoKKyAqIFRoZXNlIGZpZm8gcm91dGluZXMgdXNlIHJlYWRsIGFuZCBm cmllbmRzIHRvIGEgY29uc3RhbnQgaW8gcG9ydCBhbmQgdXBkYXRlCisgKiB0aGUgbWVtb3J5IGJ1 ZmZlciBwb2ludGVyIGFuZCBjb3VudCB2aWEgZXhwbGljaXQgY29kZS4gVGhlIGZpbmFsIHVwZGF0 ZXMKKyAqIHRvIGxlbiBhcmUgb3B0aW1pc3RpY2FsbHkgc3VwcHJlc3NlZC4KKyAqLworc3RhdGlj IGludCBhc3BlZWRfc21jX3JlYWRfZnJvbV9haGIodm9pZCAqYnVmLCBjb25zdCB2b2lkIF9faW9t ZW0gKnNyYywKKwkJCQkgICAgc2l6ZV90IGxlbikKK3sKKwlpZiAoKCgodW5zaWduZWQgbG9uZylz cmMgfCAodW5zaWduZWQgbG9uZylidWYgfCBsZW4pICYgMykgPT0gMCkgeworCQl3aGlsZSAobGVu ID4gMykgeworCQkJKih1MzIgKilidWYgPSByZWFkbChzcmMpOworCQkJYnVmICs9IDQ7CisJCQlz cmMgKz0gNDsKKwkJCWxlbiAtPSA0OworCQl9CisJfQorCisJd2hpbGUgKGxlbi0tKSB7CisJCSoo dTggKilidWYgPSByZWFkYihzcmMpOworCQlidWYgKz0gMTsKKwkJc3JjICs9IDE7CisJfQorCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGFzcGVlZF9zbWNfd3JpdGVfdG9fYWhiKHZvaWQgX19p b21lbSAqZHN0LCBjb25zdCB2b2lkICpidWYsCisJCQkJICAgc2l6ZV90IGxlbikKK3sKKwlpZiAo KCgodW5zaWduZWQgbG9uZylkc3QgfCAodW5zaWduZWQgbG9uZylidWYgfCBsZW4pICYgMykgPT0g MCkgeworCQl3aGlsZSAobGVuID4gMykgeworCQkJdTMyIHZhbCA9ICoodTMyICopYnVmOworCisJ CQl3cml0ZWwodmFsLCBkc3QpOworCQkJYnVmICs9IDQ7CisJCQlkc3QgKz0gNDsKKwkJCWxlbiAt PSA0OworCQl9CisJfQorCisJd2hpbGUgKGxlbi0tKSB7CisJCXU4IHZhbCA9ICoodTggKilidWY7 CisKKwkJd3JpdGViKHZhbCwgZHN0KTsKKwkJYnVmICs9IDE7CisJCWRzdCArPSAxOworCX0KKwly ZXR1cm4gMDsKK30KKworZW51bSBzbWNfZmxhc2hfdHlwZSB7CisJc21jX3R5cGVfbm9yID0gMCwJ LyogY29udHJvbGxlciBjb25uZWN0ZWQgdG8gbm9yIGZsYXNoICovCisJc21jX3R5cGVfbmFuZCA9 IDEsCS8qIGNvbnRyb2xsZXIgY29ubmVjdGVkIHRvIG5hbmQgZmxhc2ggKi8KKwlzbWNfdHlwZV9z cGkgPSAyLAkvKiBjb250cm9sbGVyIGNvbm5lY3RlZCB0byBzcGkgZmxhc2ggKi8KK307CisKK3N0 cnVjdCBhc3BlZWRfc21jX2NoaXA7CisKK3N0cnVjdCBhc3BlZWRfc21jX2luZm8geworCXUzMiBt YXhzaXplOwkJLyogbWF4aW11bSBzaXplIG9mIDEgY2hpcCB3aW5kb3cgKi8KKwl1OCBuY2U7CQkJ LyogbnVtYmVyIG9mIGNoaXAgZW5hYmxlcyAqLworCXU4IG1heHdpZHRoOwkJLyogbWF4IHdpZHRo IG9mIHNwaSBidXMgKi8KKwlib29sIGhhc3R5cGU7CQkvKiBmbGFzaCB0eXBlIGZpZWxkIGV4aXN0 cyBpbiBjZmcgcmVnICovCisJdTggd2UwOwkJCS8qIHNoaWZ0IGZvciB3cml0ZSBlbmFibGUgYml0 IGZvciBjZSAwICovCisJdTggY3RsMDsJCS8qIG9mZnNldCBpbiByZWdzIG9mIGN0bCBmb3IgY2Ug MCAqLworCXU4IHRpbWU7CQkvKiBvZmZzZXQgaW4gcmVncyBvZiB0aW1pbmcgKi8KKwl1OCBtaXNj OwkJLyogb2Zmc2V0IGluIHJlZ3Mgb2YgbWlzYyBzZXR0aW5ncyAqLworCisJdm9pZCAoKnNldF80 Yikoc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCk7Cit9OworCitzdGF0aWMgdm9pZCBhc3Bl ZWRfc21jX2NoaXBfc2V0XzRiX3NtY18yNDAwKHN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXAp Oworc3RhdGljIHZvaWQgYXNwZWVkX3NtY19jaGlwX3NldF80YihzdHJ1Y3QgYXNwZWVkX3NtY19j aGlwICpjaGlwKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhc3BlZWRfc21jX2luZm8gZm1jXzI0 MDBfaW5mbyA9IHsKKwkubWF4c2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQsCisJLm5jZSA9IDUsCisJ Lm1heHdpZHRoID0gNCwKKwkuaGFzdHlwZSA9IHRydWUsCisJLndlMCA9IDE2LAorCS5jdGwwID0g MHgxMCwKKwkudGltZSA9IDB4OTQsCisJLm1pc2MgPSAweDU0LAorCS5zZXRfNGIgPSBhc3BlZWRf c21jX2NoaXBfc2V0XzRiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhc3BlZWRfc21jX2lu Zm8gc21jXzI0MDBfaW5mbyA9IHsKKwkubWF4c2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQsCisJLm5j ZSA9IDEsCisJLm1heHdpZHRoID0gMiwKKwkuaGFzdHlwZSA9IGZhbHNlLAorCS53ZTAgPSAwLAor CS5jdGwwID0gMHgwNCwKKwkudGltZSA9IDB4MTQsCisJLm1pc2MgPSAweDEwLAorCS5zZXRfNGIg PSBhc3BlZWRfc21jX2NoaXBfc2V0XzRiX3NtY18yNDAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBhc3BlZWRfc21jX2luZm8gZm1jXzI1MDBfaW5mbyA9IHsKKwkubWF4c2l6ZSA9IDI1NiAq IDEwMjQgKiAxMDI0LAorCS5uY2UgPSAzLAorCS5tYXh3aWR0aCA9IDIsCisJLmhhc3R5cGUgPSB0 cnVlLAorCS53ZTAgPSAxNiwKKwkuY3RsMCA9IDB4MTAsCisJLnRpbWUgPSAweDk0LAorCS5taXNj ID0gMHg1NCwKKwkuc2V0XzRiID0gYXNwZWVkX3NtY19jaGlwX3NldF80YiwKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NtY19pbmZvIHNtY18yNTAwX2luZm8gPSB7CisJLm1heHNp emUgPSAxMjggKiAxMDI0ICogMTAyNCwKKwkubmNlID0gMiwKKwkubWF4d2lkdGggPSAyLAorCS5o YXN0eXBlID0gZmFsc2UsCisJLndlMCA9IDE2LAorCS5jdGwwID0gMHgxMCwKKwkudGltZSA9IDB4 OTQsCisJLm1pc2MgPSAweDU0LAorCS5zZXRfNGIgPSBhc3BlZWRfc21jX2NoaXBfc2V0XzRiLAor fTsKKworZW51bSBzbWNfY3RsX3JlZ192YWx1ZSB7CisJc21jX2Jhc2UsCQkvKiBiYXNlIHZhbHVl IHdpdGhvdXQgbW9kZSBmb3Igb3RoZXIgY29tbWFuZHMgKi8KKwlzbWNfcmVhZCwJCS8qIGNvbW1h bmQgcmVnIGZvciAobWF5YmUgZmFzdCkgcmVhZHMgKi8KKwlzbWNfd3JpdGUsCQkvKiBjb21tYW5k IHJlZyBmb3Igd3JpdGVzIHdpdGggdGltaW5ncyAqLworCXNtY19udW1fY3RsX3JlZ192YWx1ZXMJ LyogbGFzdCB2YWx1ZSB0byBnZXQgY291bnQgb2YgY29tbWFuZHMgKi8KK307CisKK3N0cnVjdCBh c3BlZWRfc21jX2NvbnRyb2xsZXI7CisKK3N0cnVjdCBhc3BlZWRfc21jX2NoaXAgeworCWludCBj czsKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpjb250cm9sbGVyOworCV9fbGUzMiBf X2lvbWVtICpjdGw7CQkJLyogY29udHJvbCByZWdpc3RlciAqLworCXZvaWQgX19pb21lbSAqYmFz ZTsJCQkvKiBiYXNlIG9mIGNoaXAgd2luZG93ICovCisJX19sZTMyIGN0bF92YWxbc21jX251bV9j dGxfcmVnX3ZhbHVlc107CS8qIGNvbnRyb2xzIHdpdGggdGltaW5nICovCisJZW51bSBzbWNfZmxh c2hfdHlwZSB0eXBlOwkJLyogd2hhdCB0eXBlIG9mIGZsYXNoICovCisJc3RydWN0IHNwaV9ub3Ig bm9yOworfTsKKworc3RydWN0IGFzcGVlZF9zbWNfY29udHJvbGxlciB7CisJc3RydWN0IGRldmlj ZSAqZGV2OworCisJc3RydWN0IG11dGV4IG11dGV4OwkJCS8qIGNvbnRyb2xsZXIgYWNjZXNzIG11 dGV4ICovCisJY29uc3Qgc3RydWN0IGFzcGVlZF9zbWNfaW5mbyAqaW5mbzsJLyogdHlwZSBpbmZv IG9mIGNvbnRyb2xsZXIgKi8KKwl2b2lkIF9faW9tZW0gKnJlZ3M7CQkJLyogY29udHJvbGxlciBy ZWdpc3RlcnMgKi8KKwl2b2lkIF9faW9tZW0gKndpbmRvd3M7CQkJLyogcGVyLWNoaXAgd2luZG93 cyByZXNvdXJjZSAqLworCisJc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcHNbMF07CS8qIHBv aW50ZXJzIHRvIGF0dGFjaGVkIGNoaXBzICovCit9OworCisvKgorICogU1BJIEZsYXNoIENvbmZp Z3VyYXRpb24gUmVnaXN0ZXIgKEFTVDI0MDAgU1BJKQorICovCisjZGVmaW5lIENPTkZJR19SRUcJ CQkweDAKKyNkZWZpbmUgICAgQ09ORklHX0VOQUJMRV9DRV9JTkFDVElWRQkgICAgQklUKDEpCisj ZGVmaW5lICAgIENPTkZJR19XUklURQkJCSAgICBCSVQoMCkKKworLyoKKyAqIFNQSSBGbGFzaCBD b25maWd1cmF0aW9uIFJlZ2lzdGVyIChBU1QyNTAwIFNQSSkKKyAqIFR5cGUgc2V0dGluZyBSZWdp c3RlciAoQVNUMjUwMCBGTUMgYW5kIEFTVDI0MDAgRk1DKQorICovCisjZGVmaW5lIFRZUEVfU0VU VElOR19SRUcJCTB4MAorI2RlZmluZSAgICBDT05GSUdfRElTQUJMRV9MRUdBQ1kJICAgIEJJVCgz MSkgLyogMSBvbiBBU1QyNTAwIEZNQyAqLworCisjZGVmaW5lICAgIENPTkZJR19DRTJfV1JJVEUJ CSAgICBCSVQoMTgpCisjZGVmaW5lICAgIENPTkZJR19DRTFfV1JJVEUJCSAgICBCSVQoMTcpCisj ZGVmaW5lICAgIENPTkZJR19DRTBfV1JJVEUJCSAgICBCSVQoMTYpCisKKyNkZWZpbmUgICAgQ09O RklHX0NFMl9UWVBFCQkgICAgQklUKDQpIC8qIEZNQyBvbmx5ICovCisjZGVmaW5lICAgIENPTkZJ R19DRTFfVFlQRQkJICAgIEJJVCgyKSAvKiBGTUMgb25seSAqLworI2RlZmluZSAgICBDT05GSUdf Q0UwX1RZUEUJCSAgICBCSVQoMCkgLyogRk1DIG9ubHkgKi8KKworLyoKKyAqIENFIENvbnRyb2wg UmVnaXN0ZXIgKEFTVDI1MDAgU1BJLEZNQyBhbmQgQVNUMjQwMCBGTUMpCisgKi8KKyNkZWZpbmUg Q0VfQ09OVFJPTF9SRUcJCQkweDQKKyNkZWZpbmUgICAgQ0UyX0VOQUJMRV9DRV9JTkFDVElWRSAg ICAgICAgICAgQklUKDEwKQorI2RlZmluZSAgICBDRTFfRU5BQkxFX0NFX0lOQUNUSVZFICAgICAg ICAgICBCSVQoOSkKKyNkZWZpbmUgICAgQ0UwX0VOQUJMRV9DRV9JTkFDVElWRSAgICAgICAgICAg QklUKDgpCisjZGVmaW5lICAgIENFMl9DT05UUk9MX0VYVEVOREVECQkgICAgQklUKDIpCisjZGVm aW5lICAgIENFMV9DT05UUk9MX0VYVEVOREVECQkgICAgQklUKDEpCisjZGVmaW5lICAgIENFMF9D T05UUk9MX0VYVEVOREVECQkgICAgQklUKDApCisKKy8qIENFMCBDb250cm9sIFJlZ2lzdGVyIChk ZXBlbmRzIG9uIHRoZSBjb250cm9sbGVyIHR5cGUpICovCisjZGVmaW5lIENPTlRST0xfU1BJX0FB Rl9NT0RFIEJJVCgzMSkKKyNkZWZpbmUgQ09OVFJPTF9TUElfSU9fTU9ERV9NQVNLIEdFTk1BU0so MzAsIDI4KQorI2RlZmluZSBDT05UUk9MX1NQSV9JT19EVUFMX0RBVEEgQklUKDI5KQorI2RlZmlu ZSBDT05UUk9MX1NQSV9JT19EVUFMX0FERFJfREFUQSAoQklUKDI5KSB8IEJJVCgyOCkpCisjZGVm aW5lIENPTlRST0xfU1BJX0lPX1FVQURfREFUQSBCSVQoMzApCisjZGVmaW5lIENPTlRST0xfU1BJ X0lPX1FVQURfQUREUl9EQVRBIChCSVQoMzApIHwgQklUKDI4KSkKKyNkZWZpbmUgQ09OVFJPTF9T UElfQ0VfSU5BQ1RJVkVfU0hJRlQgMjQKKyNkZWZpbmUgQ09OVFJPTF9TUElfQ0VfSU5BQ1RJVkVf TUFTSyBHRU5NQVNLKDI3LCBDT05UUk9MX1NQSV9DRV9JTkFDVElWRV9TSElGVCkKKy8qIDAgPSAx NlQgLi4uIDE1ID0gMVQgICBUPUhDTEsgKi8KKyNkZWZpbmUgQ09OVFJPTF9TUElfQ09NTUFORF9T SElGVCAxNgorI2RlZmluZSBDT05UUk9MX1NQSV9EVU1NWV9DWUNMRV9DT01NQU5EX09VVFBVVCBC SVQoMTUpCisjZGVmaW5lIENPTlRST0xfU1BJX0lPX0RVTU1ZX0NZQ0xFU19ISSBCSVQoMTQpCisj ZGVmaW5lIENPTlRST0xfU1BJX0lPX0RVTU1ZX0NZQ0xFU19ISV9TSElGVCAxNAorI2RlZmluZSBD T05UUk9MX1NQSV9JT19BRERSRVNTXzRCIEJJVCgxMykgLyogQVNUMjQwMCBTUEkgKi8KKyNkZWZp bmUgQ09OVFJPTF9TUElfQ0xLX0RJVjQgQklUKDEzKSAvKiBvdGhlcnMgKi8KKyNkZWZpbmUgQ09O VFJPTF9TUElfUldfTUVSR0UgQklUKDEyKQorI2RlZmluZSBDT05UUk9MX1NQSV9JT19EVU1NWV9D WUNMRVNfTE9fU0hJRlQgNgorI2RlZmluZSBDT05UUk9MX1NQSV9JT19EVU1NWV9DWUNMRVNfTE8g R0VOTUFTSyg3LCBcCisJCQkJICAgICAgIENPTlRST0xfU1BJX0lPX0RVTU1ZX0NZQ0xFU19MT19T SElGVCkKKyNkZWZpbmUgQ09OVFJPTF9TUElfSU9fRFVNTVlfQ1lDTEVTX01BU0sgKENPTlRST0xf U1BJX0lPX0RVTU1ZX0NZQ0xFU19ISSB8IFwKKwkJCQkJICBDT05UUk9MX1NQSV9JT19EVU1NWV9D WUNMRVNfTE8pCisjZGVmaW5lIENPTlRST0xfU1BJX0lPX0RVTU1ZX0NZQ0xFU19TRVQoZHVtbXkp CQkJCVwKKwkoKCgoKGR1bW15KSA+PiAyKSAmIDB4MSkgPDwgQ09OVFJPTF9TUElfSU9fRFVNTVlf Q1lDTEVTX0hJX1NISUZUKSB8IFwKKwkoKChkdW1teSkgJiAweDMpIDw8IENPTlRST0xfU1BJX0lP X0RVTU1ZX0NZQ0xFU19MT19TSElGVCkpCisKKyNkZWZpbmUgQ09OVFJPTF9TUElfQ0xPQ0tfRlJF UV9TRUxfU0hJRlQgOAorI2RlZmluZSBDT05UUk9MX1NQSV9DTE9DS19GUkVRX1NFTF9NQVNLIEdF Tk1BU0soMTEsIFwKKwkJCQkJQ09OVFJPTF9TUElfQ0xPQ0tfRlJFUV9TRUxfU0hJRlQpCisjZGVm aW5lIENPTlRST0xfU1BJX0xTQl9GSVJTVCBCSVQoNSkKKyNkZWZpbmUgQ09OVFJPTF9TUElfQ0xP Q0tfTU9ERV8zIEJJVCg0KQorI2RlZmluZSBDT05UUk9MX1NQSV9JTl9EVUFMX0RBVEEgQklUKDMp CisjZGVmaW5lIENPTlRST0xfU1BJX0NFX1NUT1BfQUNUSVZFX0NPTlRST0wgQklUKDIpCisjZGVm aW5lIENPTlRST0xfU1BJX0NPTU1BTkRfTU9ERV9NQVNLIEdFTk1BU0soMSwgMCkKKyNkZWZpbmUg Q09OVFJPTF9TUElfQ09NTUFORF9NT0RFX05PUk1BTCAoMCkKKyNkZWZpbmUgQ09OVFJPTF9TUElf Q09NTUFORF9NT0RFX0ZSRUFEICgxKQorI2RlZmluZSBDT05UUk9MX1NQSV9DT01NQU5EX01PREVf V1JJVEUgKDIpCisjZGVmaW5lIENPTlRST0xfU1BJX0NPTU1BTkRfTU9ERV9VU0VSICgzKQorCisj ZGVmaW5lIENPTlRST0xfU1BJX0tFRVBfTUFTSyAoQ09OVFJPTF9TUElfQUFGX01PREUgfCBcCisJ Q09OVFJPTF9TUElfQ0VfSU5BQ1RJVkVfTUFTSyB8IENPTlRST0xfU1BJX0NMS19ESVY0IHwgXAor CUNPTlRST0xfU1BJX0lPX0RVTU1ZX0NZQ0xFU19NQVNLIHwgQ09OVFJPTF9TUElfQ0xPQ0tfRlJF UV9TRUxfTUFTSyB8IFwKKwlDT05UUk9MX1NQSV9MU0JfRklSU1QgfCBDT05UUk9MX1NQSV9DTE9D S19NT0RFXzMpCisKKy8qIFNlZ21lbnQgQWRkcmVzcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0VH TUVOVF9BRERSX1JFRzAJCTB4MzAKKyNkZWZpbmUgICAgIFNFR01FTlRfQUREUl9TVEFSVChfcikJ ICAgICgoKChfcikgPj4gMTYpICYgMHhGRikgPDwgMjMpCisjZGVmaW5lICAgICBTRUdNRU5UX0FE RFJfRU5EKF9yKQkgICAgKCgoKF9yKSA+PiAyNCkgJiAweEZGKSA8PCAyMykKKworc3RhdGljIHUz MiBzcGlfY29udHJvbF9maWxsX29wY29kZSh1OCBvcGNvZGUpCit7CisJcmV0dXJuICgodTMyKShv cGNvZGUpKSA8PCBDT05UUk9MX1NQSV9DT01NQU5EX1NISUZUOworfQorCitzdGF0aWMgaW5saW5l IHUzMiBhc3BlZWRfc21jX2NoaXBfd3JpdGVfYml0KHN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNo aXApCit7CisJcmV0dXJuICgodTMyKTEgPDwgKGNoaXAtPmNvbnRyb2xsZXItPmluZm8tPndlMCAr IGNoaXAtPmNzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFzcGVlZF9zbWNfY2hpcF9jaGVja19jb25m aWcoc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19j b250cm9sbGVyICpjb250cm9sbGVyID0gY2hpcC0+Y29udHJvbGxlcjsKKwl1MzIgcmVnOworCisJ cmVnID0gcmVhZGwoY29udHJvbGxlci0+cmVncyArIENPTkZJR19SRUcpOworCisJaWYgKCEocmVn ICYgYXNwZWVkX3NtY19jaGlwX3dyaXRlX2JpdChjaGlwKSkpIHsKKwkJZGV2X2RiZyhjb250cm9s bGVyLT5kZXYsCisJCQkiY29uZmlnIHdyaXRlIGlzIG5vdCBzZXQgISBAJXA6IDB4JTA4eFxuIiwK KwkJCWNvbnRyb2xsZXItPnJlZ3MgKyBDT05GSUdfUkVHLCByZWcpOworCQlyZWcgfD0gYXNwZWVk X3NtY19jaGlwX3dyaXRlX2JpdChjaGlwKTsKKwkJd3JpdGVsKHJlZywgY29udHJvbGxlci0+cmVn cyArIENPTkZJR19SRUcpOworCX0KK30KKworc3RhdGljIHZvaWQgYXNwZWVkX3NtY19zdGFydF91 c2VyKHN0cnVjdCBzcGlfbm9yICpub3IpCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hp cCA9IG5vci0+cHJpdjsKKwl1MzIgY3RsID0gY2hpcC0+Y3RsX3ZhbFtzbWNfYmFzZV07CisKKwkv KgorCSAqIFdoZW4gdGhlIGNoaXAgaXMgY29udHJvbGxlZCBpbiB1c2VyIG1vZGUsIHdlIG5lZWQg d3JpdGUKKwkgKiBhY2Nlc3MgdG8gc2VuZCB0aGUgb3Bjb2RlcyB0byBpdC4gU28gY2hlY2sgdGhl IGNvbmZpZy4KKwkgKi8KKwlhc3BlZWRfc21jX2NoaXBfY2hlY2tfY29uZmlnKGNoaXApOworCisJ Y3RsIHw9IENPTlRST0xfU1BJX0NPTU1BTkRfTU9ERV9VU0VSIHwKKwkJQ09OVFJPTF9TUElfQ0Vf U1RPUF9BQ1RJVkVfQ09OVFJPTDsKKwl3cml0ZWwoY3RsLCBjaGlwLT5jdGwpOworCisJY3RsICY9 IH5DT05UUk9MX1NQSV9DRV9TVE9QX0FDVElWRV9DT05UUk9MOworCXdyaXRlbChjdGwsIGNoaXAt PmN0bCk7Cit9CisKK3N0YXRpYyB2b2lkIGFzcGVlZF9zbWNfc3RvcF91c2VyKHN0cnVjdCBzcGlf bm9yICpub3IpCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCA9IG5vci0+cHJpdjsK KworCXUzMiBjdGwgPSBjaGlwLT5jdGxfdmFsW3NtY19yZWFkXTsKKwl1MzIgY3RsMiA9IGN0bCB8 IENPTlRST0xfU1BJX0NPTU1BTkRfTU9ERV9VU0VSIHwKKwkJQ09OVFJPTF9TUElfQ0VfU1RPUF9B Q1RJVkVfQ09OVFJPTDsKKworCXdyaXRlbChjdGwyLCBjaGlwLT5jdGwpOwkvKiBzdG9wIHVzZXIg Q0UgY29udHJvbCAqLworCXdyaXRlbChjdGwsIGNoaXAtPmN0bCk7CQkvKiBkZWZhdWx0IHRvIGZy ZWFkIG9yIHJlYWQgKi8KK30KKworc3RhdGljIGludCBhc3BlZWRfc21jX3JlYWRfcmVnKHN0cnVj dCBzcGlfbm9yICpub3IsIHU4IG9wY29kZSwgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qg YXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9yLT5wcml2OworCisJbXV0ZXhfbG9jaygmY2hpcC0+ Y29udHJvbGxlci0+bXV0ZXgpOworCisJYXNwZWVkX3NtY19zdGFydF91c2VyKG5vcik7CisJYXNw ZWVkX3NtY193cml0ZV90b19haGIoY2hpcC0+YmFzZSwgJm9wY29kZSwgMSk7CisJYXNwZWVkX3Nt Y19yZWFkX2Zyb21fYWhiKGJ1ZiwgY2hpcC0+YmFzZSwgbGVuKTsKKwlhc3BlZWRfc21jX3N0b3Bf dXNlcihub3IpOworCisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5jb250cm9sbGVyLT5tdXRleCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhc3BlZWRfc21jX3dyaXRlX3JlZyhzdHJ1Y3Qg c3BpX25vciAqbm9yLCB1OCBvcGNvZGUsIHU4ICpidWYsCisJCQkJaW50IGxlbikKK3sKKwlzdHJ1 Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9yLT5wcml2OworCisJbXV0ZXhfbG9jaygmY2hp cC0+Y29udHJvbGxlci0+bXV0ZXgpOworCisJYXNwZWVkX3NtY19zdGFydF91c2VyKG5vcik7CisJ YXNwZWVkX3NtY193cml0ZV90b19haGIoY2hpcC0+YmFzZSwgJm9wY29kZSwgMSk7CisJYXNwZWVk X3NtY193cml0ZV90b19haGIoY2hpcC0+YmFzZSwgYnVmLCBsZW4pOworCWFzcGVlZF9zbWNfc3Rv cF91c2VyKG5vcik7CisKKwltdXRleF91bmxvY2soJmNoaXAtPmNvbnRyb2xsZXItPm11dGV4KTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhc3BlZWRfc21jX3NlbmRfY21kX2FkZHIo c3RydWN0IHNwaV9ub3IgKm5vciwgdTggY21kLCB1MzIgYWRkcikKK3sKKwlzdHJ1Y3QgYXNwZWVk X3NtY19jaGlwICpjaGlwID0gbm9yLT5wcml2OworCV9fYmUzMiB0ZW1wOworCXUzMiBjbWRhZGRy OworCisJc3dpdGNoIChub3ItPmFkZHJfd2lkdGgpIHsKKwlkZWZhdWx0OgorCQlXQVJOX09OQ0Uo MSwgIlVuZXhwZWN0ZWQgYWRkcmVzcyB3aWR0aCAldSwgZGVmYXVsdGluZyB0byAzXG4iLAorCQkJ ICBub3ItPmFkZHJfd2lkdGgpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgMzoKKwkJY21k YWRkciA9IGFkZHIgJiAweEZGRkZGRjsKKworCQljbWRhZGRyIHw9ICh1MzIpY21kIDw8IDI0Owor CisJCXRlbXAgPSBjcHVfdG9fYmUzMihjbWRhZGRyKTsKKwkJYXNwZWVkX3NtY193cml0ZV90b19h aGIoY2hpcC0+YmFzZSwgJnRlbXAsIDQpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRlbXAgPSBj cHVfdG9fYmUzMihhZGRyKTsKKwkJYXNwZWVkX3NtY193cml0ZV90b19haGIoY2hpcC0+YmFzZSwg JmNtZCwgMSk7CisJCWFzcGVlZF9zbWNfd3JpdGVfdG9fYWhiKGNoaXAtPmJhc2UsICZ0ZW1wLCA0 KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBhc3BlZWRfc21jX3JlYWRfdXNl cihzdHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3QgZnJvbSwKKwkJCQkgICAgc2l6ZV90IGxlbiwg dV9jaGFyICpyZWFkX2J1ZikKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9y LT5wcml2OworCisJbXV0ZXhfbG9jaygmY2hpcC0+Y29udHJvbGxlci0+bXV0ZXgpOworCisJYXNw ZWVkX3NtY19zdGFydF91c2VyKG5vcik7CisJYXNwZWVkX3NtY19zZW5kX2NtZF9hZGRyKG5vciwg bm9yLT5yZWFkX29wY29kZSwgZnJvbSk7CisJYXNwZWVkX3NtY19yZWFkX2Zyb21fYWhiKHJlYWRf YnVmLCBjaGlwLT5iYXNlLCBsZW4pOworCWFzcGVlZF9zbWNfc3RvcF91c2VyKG5vcik7CisKKwlt dXRleF91bmxvY2soJmNoaXAtPmNvbnRyb2xsZXItPm11dGV4KTsKKworCXJldHVybiBsZW47Cit9 CisKK3N0YXRpYyBzc2l6ZV90IGFzcGVlZF9zbWNfd3JpdGVfdXNlcihzdHJ1Y3Qgc3BpX25vciAq bm9yLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCisJCQkJICAgICBjb25zdCB1X2NoYXIgKndyaXRl X2J1ZikKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9yLT5wcml2OworCisJ bXV0ZXhfbG9jaygmY2hpcC0+Y29udHJvbGxlci0+bXV0ZXgpOworCisJYXNwZWVkX3NtY19zdGFy dF91c2VyKG5vcik7CisJYXNwZWVkX3NtY19zZW5kX2NtZF9hZGRyKG5vciwgbm9yLT5wcm9ncmFt X29wY29kZSwgdG8pOworCWFzcGVlZF9zbWNfd3JpdGVfdG9fYWhiKGNoaXAtPmJhc2UsIHdyaXRl X2J1ZiwgbGVuKTsKKwlhc3BlZWRfc21jX3N0b3BfdXNlcihub3IpOworCisJbXV0ZXhfdW5sb2Nr KCZjaGlwLT5jb250cm9sbGVyLT5tdXRleCk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMg aW50IGFzcGVlZF9zbWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwOworCXN0cnVjdCBhc3BlZWRfc21jX2NvbnRyb2xs ZXIgKmNvbnRyb2xsZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBuOworCisJ Zm9yIChuID0gMDsgbiA8IGNvbnRyb2xsZXItPmluZm8tPm5jZTsgbisrKSB7CisJCWNoaXAgPSBj b250cm9sbGVyLT5jaGlwc1tuXTsKKwkJaWYgKGNoaXApCisJCQltdGRfZGV2aWNlX3VucmVnaXN0 ZXIoJmNoaXAtPm5vci5tdGQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBhc3BlZWRfc21jX21hdGNoZXNbXSA9IHsKKwl7IC5jb21wYXRp YmxlID0gImFzcGVlZCxhc3QyNDAwLWZtYyIsIC5kYXRhID0gJmZtY18yNDAwX2luZm8gfSwKKwl7 IC5jb21wYXRpYmxlID0gImFzcGVlZCxhc3QyNDAwLXNtYyIsIC5kYXRhID0gJnNtY18yNDAwX2lu Zm8gfSwKKwl7IC5jb21wYXRpYmxlID0gImFzcGVlZCxhc3QyNTAwLWZtYyIsIC5kYXRhID0gJmZt Y18yNTAwX2luZm8gfSwKKwl7IC5jb21wYXRpYmxlID0gImFzcGVlZCxhc3QyNTAwLXNtYyIsIC5k YXRhID0gJnNtY18yNTAwX2luZm8gfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9m LCBhc3BlZWRfc21jX21hdGNoZXMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAq CitvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlX29yX2ZpbmQoc3RydWN0IGRldmljZV9ub2RlICpj aGlsZCwKKwkJCQkgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpjZGV2OworCisJY2RldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUoY2hpbGQs IE5VTEwsIHBhcmVudCk7CisJaWYgKCFjZGV2KQorCQljZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlf bm9kZShjaGlsZCk7CisJcmV0dXJuIGNkZXY7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKndp bmRvd19zdGFydChzdHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpjb250cm9sbGVyLAorCQkJ CSAgc3RydWN0IHJlc291cmNlICpyLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1MzIgb2Zmc2V0ID0g MDsKKwl1MzIgcmVnOworCisJaWYgKGNvbnRyb2xsZXItPmluZm8tPm5jZSA+IDEpIHsKKwkJcmVn ID0gcmVhZGwoY29udHJvbGxlci0+cmVncyArIFNFR01FTlRfQUREUl9SRUcwICsgbiAqIDQpOwor CisJCWlmIChTRUdNRU5UX0FERFJfU1RBUlQocmVnKSA+PSBTRUdNRU5UX0FERFJfRU5EKHJlZykp CisJCQlyZXR1cm4gTlVMTDsKKworCQlvZmZzZXQgPSBTRUdNRU5UX0FERFJfU1RBUlQocmVnKSAt IHItPnN0YXJ0OworCX0KKworCXJldHVybiBjb250cm9sbGVyLT53aW5kb3dzICsgb2Zmc2V0Owor fQorCitzdGF0aWMgdm9pZCBhc3BlZWRfc21jX2NoaXBfZW5hYmxlX3dyaXRlKHN0cnVjdCBhc3Bl ZWRfc21jX2NoaXAgKmNoaXApCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY29udHJvbGxlciAqY29u dHJvbGxlciA9IGNoaXAtPmNvbnRyb2xsZXI7CisJdTMyIHJlZzsKKworCXJlZyA9IHJlYWRsKGNv bnRyb2xsZXItPnJlZ3MgKyBDT05GSUdfUkVHKTsKKworCXJlZyB8PSBhc3BlZWRfc21jX2NoaXBf d3JpdGVfYml0KGNoaXApOworCXdyaXRlbChyZWcsIGNvbnRyb2xsZXItPnJlZ3MgKyBDT05GSUdf UkVHKTsKK30KKworc3RhdGljIHZvaWQgYXNwZWVkX3NtY19jaGlwX3NldF90eXBlKHN0cnVjdCBh c3BlZWRfc21jX2NoaXAgKmNoaXAsIGludCB0eXBlKQoreworCXN0cnVjdCBhc3BlZWRfc21jX2Nv bnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBjaGlwLT5jb250cm9sbGVyOworCXUzMiByZWc7CisKKwly ZWcgPSByZWFkbChjb250cm9sbGVyLT5yZWdzICsgQ09ORklHX1JFRyk7CisKKwljaGlwLT50eXBl ID0gdHlwZTsKKworCXJlZyAmPSB+KDMgPDwgKGNoaXAtPmNzICogMikpOworCXJlZyB8PSBjaGlw LT50eXBlIDw8IChjaGlwLT5jcyAqIDIpOworCXdyaXRlbChyZWcsIGNvbnRyb2xsZXItPnJlZ3Mg KyBDT05GSUdfUkVHKTsKK30KKworLyoKKyAqIFRoZSBBU1QyNTAwIEZNQyBhbmQgQVNUMjQwMCBG TUMgZmxhc2ggY29udHJvbGxlcnMgc2hvdWxkIGJlCisgKiBzdHJhcHBlZCBieSBoYXJkd2FyZSwg b3IgYXV0b2RldGVjdGVkLCBidXQgdGhlIEFTVDI1MDAgU1BJIGZsYXNoCisgKiBuZWVkcyB0byBi ZSBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGFzcGVlZF9zbWNfY2hpcF9zZXRfNGIoc3RydWN0IGFz cGVlZF9zbWNfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpj b250cm9sbGVyID0gY2hpcC0+Y29udHJvbGxlcjsKKwl1MzIgcmVnOworCisJaWYgKGNoaXAtPmNv bnRyb2xsZXItPmluZm8gPT0gJnNtY18yNTAwX2luZm8pIHsKKwkJcmVnID0gcmVhZGwoY29udHJv bGxlci0+cmVncyArIENFX0NPTlRST0xfUkVHKTsKKwkJcmVnIHw9IDEgPDwgY2hpcC0+Y3M7CisJ CXdyaXRlbChyZWcsIGNvbnRyb2xsZXItPnJlZ3MgKyBDRV9DT05UUk9MX1JFRyk7CisJfQorfQor CisvKgorICogVGhlIEFTVDI0MDAgU1BJIGZsYXNoIGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSBh IENFIENvbnRyb2wKKyAqIHJlZ2lzdGVyLiBJdCB1c2VzIHRoZSBDRTAgY29udHJvbCByZWdpc3Rl ciB0byBzZXQgNEJ5dGUgbW9kZSBhdCB0aGUKKyAqIGNvbnRyb2xsZXIgbGV2ZWwuCisgKi8KK3N0 YXRpYyB2b2lkIGFzcGVlZF9zbWNfY2hpcF9zZXRfNGJfc21jXzI0MDAoc3RydWN0IGFzcGVlZF9z bWNfY2hpcCAqY2hpcCkKK3sKKwljaGlwLT5jdGxfdmFsW3NtY19iYXNlXSB8PSBDT05UUk9MX1NQ SV9JT19BRERSRVNTXzRCOworCWNoaXAtPmN0bF92YWxbc21jX3JlYWRdIHw9IENPTlRST0xfU1BJ X0lPX0FERFJFU1NfNEI7Cit9CisKK3N0YXRpYyBpbnQgYXNwZWVkX3NtY19jaGlwX3NldHVwX2lu aXQoc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCwKKwkJCQkgICAgICBzdHJ1Y3QgcmVzb3Vy Y2UgKnIpCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY29udHJvbGxlciAqY29udHJvbGxlciA9IGNo aXAtPmNvbnRyb2xsZXI7CisJY29uc3Qgc3RydWN0IGFzcGVlZF9zbWNfaW5mbyAqaW5mbyA9IGNv bnRyb2xsZXItPmluZm87CisJdTMyIHJlZywgYmFzZV9yZWc7CisKKwkvKgorCSAqIEFsd2F5cyB0 dXJuIG9uIHRoZSB3cml0ZSBlbmFibGUgYml0IHRvIGFsbG93IG9wY29kZXMgdG8gYmUKKwkgKiBz ZW50IGluIHVzZXIgbW9kZS4KKwkgKi8KKwlhc3BlZWRfc21jX2NoaXBfZW5hYmxlX3dyaXRlKGNo aXApOworCisJLyogVGhlIGRyaXZlciBvbmx5IHN1cHBvcnRzIFNQSSB0eXBlIGZsYXNoIGZvciB0 aGUgbW9tZW50ICovCisJaWYgKGluZm8tPmhhc3R5cGUpCisJCWFzcGVlZF9zbWNfY2hpcF9zZXRf dHlwZShjaGlwLCBzbWNfdHlwZV9zcGkpOworCisJLyoKKwkgKiBDb25maWd1cmUgY2hpcCBiYXNl IGFkZHJlc3MgaW4gbWVtb3J5CisJICovCisJY2hpcC0+YmFzZSA9IHdpbmRvd19zdGFydChjb250 cm9sbGVyLCByLCBjaGlwLT5jcyk7CisJaWYgKCFjaGlwLT5iYXNlKSB7CisJCWRldl93YXJuKGNo aXAtPm5vci5kZXYsICJDRSBzZWdtZW50IHdpbmRvdyBjbG9zZWQuXG4iKTsKKwkJcmV0dXJuIC0x OworCX0KKworCS8qCisJICogUmVhZCB0aGUgZXhpc3RpbmcgY29udHJvbCByZWdpc3RlciB0byBn ZXQgYmFzaWMgdmFsdWVzLgorCSAqCisJICogWFhYIFRoaXMgcmVnaXN0ZXIgcHJvYmFibHkgbmVl ZHMgbW9yZSBzYW5pdGF0aW9uLgorCSAqCisJICogRG8gd2UgbmVlZCBzdXBwb3J0IGZvciBtb2Rl IDMgdnMgbW9kZSAwIGNsb2NrIHBoYXNpbmc/CisJICovCisJcmVnID0gcmVhZGwoY2hpcC0+Y3Rs KTsKKwlkZXZfZGJnKGNvbnRyb2xsZXItPmRldiwgImNvbnRyb2wgcmVnaXN0ZXI6ICUwOHhcbiIs IHJlZyk7CisKKwliYXNlX3JlZyA9IHJlZyAmIENPTlRST0xfU1BJX0tFRVBfTUFTSzsKKwlpZiAo YmFzZV9yZWcgIT0gcmVnKSB7CisJCWRldl9pbmZvKGNvbnRyb2xsZXItPmRldiwKKwkJCSAiY29u dHJvbCByZWdpc3RlciBjaGFuZ2VkIHRvOiAlMDh4XG4iLAorCQkJIGJhc2VfcmVnKTsKKwl9CisJ Y2hpcC0+Y3RsX3ZhbFtzbWNfYmFzZV0gPSBiYXNlX3JlZzsKKworCS8qCisJICogUmV0YWluIHRo ZSBwcmlvciB2YWx1ZSBvZiB0aGUgY29udHJvbCByZWdpc3RlciBhcyB0aGUKKwkgKiBkZWZhdWx0 IGlmIGl0IHdhcyBub3JtYWwgYWNjZXNzIG1vZGUuIE90aGVyd2lzZSBzdGFydCB3aXRoCisJICog dGhlIHNhbml0aXplZCBiYXNlIHZhbHVlIHNldCB0byByZWFkIG1vZGUuCisJICovCisJaWYgKChy ZWcgJiBDT05UUk9MX1NQSV9DT01NQU5EX01PREVfTUFTSykgPT0KKwkgICAgQ09OVFJPTF9TUElf Q09NTUFORF9NT0RFX05PUk1BTCkKKwkJY2hpcC0+Y3RsX3ZhbFtzbWNfcmVhZF0gPSByZWc7CisJ ZWxzZQorCQljaGlwLT5jdGxfdmFsW3NtY19yZWFkXSA9IGNoaXAtPmN0bF92YWxbc21jX2Jhc2Vd IHwKKwkJCUNPTlRST0xfU1BJX0NPTU1BTkRfTU9ERV9OT1JNQUw7CisKKwlkZXZfZGJnKGNvbnRy b2xsZXItPmRldiwgImRlZmF1bHQgY29udHJvbCByZWdpc3RlcjogJTA4eFxuIiwKKwkJY2hpcC0+ Y3RsX3ZhbFtzbWNfcmVhZF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFzcGVlZF9z bWNfY2hpcF9zZXR1cF9maW5pc2goc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCkKK3sKKwlz dHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpjb250cm9sbGVyID0gY2hpcC0+Y29udHJvbGxl cjsKKwljb25zdCBzdHJ1Y3QgYXNwZWVkX3NtY19pbmZvICppbmZvID0gY29udHJvbGxlci0+aW5m bzsKKwl1MzIgY21kOworCisJaWYgKGNoaXAtPm5vci5hZGRyX3dpZHRoID09IDQgJiYgaW5mby0+ c2V0XzRiKQorCQlpbmZvLT5zZXRfNGIoY2hpcCk7CisKKwkvKgorCSAqIGJhc2UgbW9kZSBoYXMg bm90IGJlZW4gb3B0aW1pemVkIHlldC4gdXNlIGl0IGZvciB3cml0ZXMuCisJICovCisJY2hpcC0+ Y3RsX3ZhbFtzbWNfd3JpdGVdID0gY2hpcC0+Y3RsX3ZhbFtzbWNfYmFzZV0gfAorCQlzcGlfY29u dHJvbF9maWxsX29wY29kZShjaGlwLT5ub3IucHJvZ3JhbV9vcGNvZGUpIHwKKwkJQ09OVFJPTF9T UElfQ09NTUFORF9NT0RFX1dSSVRFOworCisJZGV2X2RiZyhjb250cm9sbGVyLT5kZXYsICJ3cml0 ZSBjb250cm9sIHJlZ2lzdGVyOiAlMDh4XG4iLAorCQljaGlwLT5jdGxfdmFsW3NtY193cml0ZV0p OworCisJLyoKKwkgKiBYWFggVE9ETworCSAqIEFkanVzdCBjbG9ja3MgaWYgZmFzdCByZWFkIGFu ZCB3cml0ZSBhcmUgc3VwcG9ydGVkLgorCSAqIEludGVycHJldCBzcGktbm9yIGZsYWdzIHRvIGFk anVzdCBjb250cm9sbGVyIHNldHRpbmdzLgorCSAqIENoZWNrIGlmIHJlc291cmNlIHNpemUgYmln IGVub3VnaCBmb3IgZGV0ZWN0ZWQgY2hpcCBhbmQKKwkgKiBhZGQgc3VwcG9ydCBhc3Npc3RlZCAo bm9ybWFsIG9yIGZhc3QtKSByZWFkIGFuZCBkbWEuCisJICovCisJc3dpdGNoIChjaGlwLT5ub3Iu Zmxhc2hfcmVhZCkgeworCWNhc2UgU1BJX05PUl9OT1JNQUw6CisJCWNtZCA9IENPTlRST0xfU1BJ X0NPTU1BTkRfTU9ERV9OT1JNQUw7CisJCWJyZWFrOworCWNhc2UgU1BJX05PUl9GQVNUOgorCQlj bWQgPSBDT05UUk9MX1NQSV9DT01NQU5EX01PREVfRlJFQUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCWRldl9lcnIoY2hpcC0+bm9yLmRldiwgInVuc3VwcG9ydGVkIFNQSSByZWFkIG1vZGVcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGlwLT5jdGxfdmFsW3NtY19yZWFkXSB8PSBj bWQgfAorCQlDT05UUk9MX1NQSV9JT19EVU1NWV9DWUNMRVNfU0VUKGNoaXAtPm5vci5yZWFkX2R1 bW15IC8gOCk7CisKKwlkZXZfZGJnKGNvbnRyb2xsZXItPmRldiwgImJhc2UgY29udHJvbCByZWdp c3RlcjogJTA4eFxuIiwKKwkJY2hpcC0+Y3RsX3ZhbFtzbWNfcmVhZF0pOworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGFzcGVlZF9zbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpjb250cm9sbGVyOworCWNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCWNvbnN0IHN0cnVjdCBhc3BlZWRfc21j X2luZm8gKmluZm87CisJc3RydWN0IHJlc291cmNlICpyOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq Y2hpbGQ7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IG47CisKKwltYXRjaCA9IG9mX21h dGNoX2RldmljZShhc3BlZWRfc21jX21hdGNoZXMsICZwZGV2LT5kZXYpOworCWlmICghbWF0Y2gg fHwgIW1hdGNoLT5kYXRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpbmZvID0gbWF0Y2gtPmRhdGE7 CisKKwljb250cm9sbGVyID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqY29udHJv bGxlcikgKworCQlpbmZvLT5uY2UgKiBzaXplb2YoY29udHJvbGxlci0+Y2hpcHNbMF0pLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWNvbnRyb2xsZXIpCisJCXJldHVybiAtRU5PTUVNOworCWNvbnRyb2xs ZXItPmluZm8gPSBpbmZvOworCisJbXV0ZXhfaW5pdCgmY29udHJvbGxlci0+bXV0ZXgpOworCXBs YXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvbnRyb2xsZXIpOworCisJciA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJY29udHJvbGxlci0+cmVncyA9 IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByKTsKKwlpZiAoSVNfRVJSKGNvbnRy b2xsZXItPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihjb250cm9sbGVyLT5yZWdzKTsKKworCXIg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWNvbnRy b2xsZXItPndpbmRvd3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcik7CisJ aWYgKElTX0VSUihjb250cm9sbGVyLT53aW5kb3dzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY29udHJv bGxlci0+d2luZG93cyk7CisKKwljb250cm9sbGVyLT5kZXYgPSAmcGRldi0+ZGV2OworCisJLyog VGhlIHBpbm11eCBvciBib290bG9hZGVyIHdpbGwgZGlzYWJsZSB0aGUgbGVnYWN5IG1vZGUgY29u dHJvbGxlciAqLworCisJLyoKKwkgKiBYWFggTmVlZCB0byBhZGQgYXJiaXRyYXRpb24gdG8gdGhl IFNNQyAoQklPUykgY29udHJvbGxlciBpZiBhY2Nlc3MKKwkgKiBpcyBzaGFyZWQgYnkgdGhlIGhv c3QuCisJICovCisJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUoY29udHJvbGxlci0+ ZGV2LT5vZl9ub2RlLCBjaGlsZCkgeworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjZGV2Owor CQlzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwOworCisJCS8qIFRoaXMgdmVyc2lvbiBkb2Vz IG5vdCBzdXBwb3J0IG5hbmQgb3Igbm9yIGZsYXNoIGRldmljZXMuICovCisJCWlmICghb2ZfZGV2 aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsICJqZWRlYyxzcGktbm9yIikpCisJCQljb250aW51ZTsK KworCQkvKgorCQkgKiBjcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2UgZnJvbSB0aGUgb2Ygbm9kZS4g IElmIHRoZSBkZXZpY2UKKwkJICogYWxyZWFkeSB3YXMgY3JlYXRlZCAoZWcgZnJvbSBhIHByaW9y IGJpbmQvdW5iaW5kIGN5Y2xlKQorCQkgKiByZXVzZSBpdC4KKwkJICoKKwkJICogVGhlIGNyZWF0 aW5nIHRoZSBkZXZpY2Ugbm9kZSBmb3IgdGhlIGNoaWxkIGhlcmUgYWxsb3dzIGl0cworCQkgKiB1 c2UgZm9yIGVycm9yIHJlcG9ydGluZyB2aWEgZGV2X2VyciBiZWxvdy4KKwkJICovCisJCWNkZXYg PSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlX29yX2ZpbmQoY2hpbGQsCisJCQkJCQkJIGNvbnRy b2xsZXItPmRldik7CisJCWlmICghY2RldikKKwkJCWNvbnRpbnVlOworCisJCWVyciA9IG9mX3By b3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAicmVnIiwgJm4pOworCQlpZiAoZXJyID09IC1FSU5WQUwg JiYgaW5mby0+bmNlID09IDEpCisJCQluID0gMDsKKwkJZWxzZSBpZiAoZXJyIHx8IG4gPj0gaW5m by0+bmNlKQorCQkJY29udGludWU7CisJCWlmIChjb250cm9sbGVyLT5jaGlwc1tuXSkgeworCQkJ ZGV2X2VycigmY2Rldi0+ZGV2LAorCQkJCSJjaGlwLWlkICV1IGFscmVhZHkgaW4gdXNlIGluIHVz ZSBieSAlc1xuIiwKKwkJCQluLCBkZXZfbmFtZShjb250cm9sbGVyLT5jaGlwc1tuXS0+bm9yLmRl dikpOworCQkJY29udGludWU7CisJCX0KKworCQljaGlwID0gZGV2bV9remFsbG9jKGNvbnRyb2xs ZXItPmRldiwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2hpcCkKKwkJCWNv bnRpbnVlOworCQljaGlwLT5jb250cm9sbGVyID0gY29udHJvbGxlcjsKKwkJY2hpcC0+Y3RsID0g Y29udHJvbGxlci0+cmVncyArIGluZm8tPmN0bDAgKyBuICogNDsKKwkJY2hpcC0+Y3MgPSBuOwor CisJCWNoaXAtPm5vci5kZXYgPSAmY2Rldi0+ZGV2OworCQljaGlwLT5ub3IucHJpdiA9IGNoaXA7 CisJCXNwaV9ub3Jfc2V0X2ZsYXNoX25vZGUoJmNoaXAtPm5vciwgY2hpbGQpOworCQljaGlwLT5u b3IubXRkLm5hbWUgPSBvZl9nZXRfcHJvcGVydHkoY2hpbGQsICJsYWJlbCIsIE5VTEwpOworCQlj aGlwLT5ub3IucmVhZCA9IGFzcGVlZF9zbWNfcmVhZF91c2VyOworCQljaGlwLT5ub3Iud3JpdGUg PSBhc3BlZWRfc21jX3dyaXRlX3VzZXI7CisJCWNoaXAtPm5vci5yZWFkX3JlZyA9IGFzcGVlZF9z bWNfcmVhZF9yZWc7CisJCWNoaXAtPm5vci53cml0ZV9yZWcgPSBhc3BlZWRfc21jX3dyaXRlX3Jl ZzsKKworCQllcnIgPSBhc3BlZWRfc21jX2NoaXBfc2V0dXBfaW5pdChjaGlwLCByKTsKKwkJaWYg KGVycikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFhYWCBBZGQgc3VwcG9ydCBmb3IgU1BJ X05PUl9RVUFEIGFuZCBTUElfTk9SX0RVQUwgYXR0YWNoCisJCSAqIHdoZW4gYm9hcmQgc3VwcG9y dCBpcyBwcmVzZW50IGFzIGRldGVybWluZWQgYnkgb2YgcHJvcGVydHkuCisJCSAqLworCQllcnIg PSBzcGlfbm9yX3NjYW4oJmNoaXAtPm5vciwgTlVMTCwgU1BJX05PUl9OT1JNQUwpOworCQlpZiAo ZXJyKQorCQkJY29udGludWU7CisKKwkJZXJyID0gYXNwZWVkX3NtY19jaGlwX3NldHVwX2Zpbmlz aChjaGlwKTsKKwkJaWYgKGVycikKKwkJCWNvbnRpbnVlOworCisJCWVyciA9IG10ZF9kZXZpY2Vf cmVnaXN0ZXIoJmNoaXAtPm5vci5tdGQsIE5VTEwsIDApOworCQlpZiAoZXJyKQorCQkJY29udGlu dWU7CisJCWNvbnRyb2xsZXItPmNoaXBzW25dID0gY2hpcDsKKwl9CisKKwkvKiBXZXJlIGFueSBj aGlsZHJlbiByZWdpc3RlcmVkPyAqLworCWZvciAobiA9IDA7IG4gPCBpbmZvLT5uY2U7IG4rKykK KwkJaWYgKGNvbnRyb2xsZXItPmNoaXBzW25dKQorCQkJYnJlYWs7CisKKwlpZiAobiA9PSBpbmZv LT5uY2UpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGFzcGVlZF9zbWNfZHJpdmVyID0geworCS5wcm9iZSA9IGFzcGVl ZF9zbWNfcHJvYmUsCisJLnJlbW92ZSA9IGFzcGVlZF9zbWNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7 CisJCS5uYW1lID0gREVWSUNFX05BTUUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGFzcGVlZF9zbWNf bWF0Y2hlcywKKwl9Cit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFzcGVlZF9zbWNfZHJp dmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU1BFRUQgU3RhdGljIE1lbW9yeSBDb250cm9s bGVyIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWlsdG9uIE1pbGxlciIpOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCB2MiIpOwotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBs aXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRk Lwo=