From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v3 1/5] mtd: spi-nor: add memory controllers for the Aspeed AST2500 SoC Date: Fri, 9 Dec 2016 17:49:23 +0100 Message-ID: <1481302167-28044-2-git-send-email-clg@kaod.org> References: <1481302167-28044-1-git-send-email-clg@kaod.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1481302167-28044-1-git-send-email-clg@kaod.org> 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 VGhpcyBkcml2ZXIgYWRkcyBtdGQgc3VwcG9ydCBmb3IgdGhlIEFzcGVlZCBBU1QyNTAwIFNvQyBz dGF0aWMgbWVtb3J5CmNvbnRyb2xsZXJzIDoKCiAqIEZpcm13YXJlIFNQSSBNZW1vcnkgQ29udHJv bGxlciAoRk1DKQogICAuIEJNQyBmaXJtd2FyZQogICAuIDMgY2hpcCBzZWxlY3QgcGlucyAoQ0Uw IH4gQ0UyKQogICAuIHN1cHBvcnRzIFNQSSB0eXBlIGZsYXNoIG1lbW9yeSAoQ0UwLUNFMSkKICAg LiBDRTIgY2FuIGJlIG9mIE5PUiB0eXBlIGZsYXNoIGJ1dCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQg YnkgdGhlCiAgICAgZHJpdmVyCgogKiBTUEkgRmxhc2ggQ29udHJvbGxlciAoU1BJMSBhbmQgU1BJ MikKICAgLiBob3N0IGZpcm13YXJlCiAgIC4gMiBjaGlwIHNlbGVjdCBwaW5zIChDRTAgfiBDRTEp CiAgIC4gc3VwcG9ydHMgU1BJIHR5cGUgZmxhc2ggbWVtb3J5CgpFYWNoIGNvbnRyb2xsZXIgaGFz IGEgbWVtb3J5IHJhbmdlIG9uIHdoaWNoIGl0IG1hcHMgaXRzIGZsYXNoIG1vZHVsZQpzbGF2ZXMu IEVhY2ggc2xhdmUgaXMgYXNzaWduZWQgYSBtZW1vcnkgd2luZG93IGZvciBpdHMgbWFwcGluZyB0 aGF0CmNhbiBiZSBjaGFuZ2VkIGF0IGJvb3RpbWUgd2l0aCB0aGUgU2VnbWVudCBBZGRyZXNzIFJl Z2lzdGVyLgoKRWFjaCBTUEkgZmxhc2ggc2xhdmUgY2FuIHRoZW4gYmUgYWNjZXNzZWQgaW4gdHdv IG1vZGVzOiBDb21tYW5kIGFuZApVc2VyLiBXaGVuIGluIFVzZXIgbW9kZSwgYWNjZXNzZXMgdG8g dGhlIG1lbW9yeSBzZWdtZW50IG9mIHRoZSBzbGF2ZXMKYXJlIHRyYW5zbGF0ZWQgaW4gU1BJIHRy YW5zZmVycy4gV2hlbiBpbiBDb21tYW5kIG1vZGUsIHRoZSBIVwpnZW5lcmF0ZXMgdGhlIFNQSSBj b21tYW5kcyBhdXRvbWF0aWNhbGx5IGFuZCB0aGUgbWVtb3J5IHNlZ21lbnQgaXMKYWNjZXNzZWQg YXMgaWYgZG9pbmcgYSBNTUlPLgoKQ3VycmVudGx5LCBvbmx5IHRoZSBVc2VyIG1vZGUgaXMgc3Vw cG9ydGVkLiBDb21tYW5kIG1vZGUgbmVlZHMgYQpsaXR0bGUgbW9yZSB3b3JrIHRvIGNoZWNrIHRo YXQgdGhlIG1lbW9yeSB3aW5kb3cgb24gdGhlIEFIQiBidXMgZml0cwp0aGUgbW9kdWxlIHNpemUu CgpCYXNlZCBvbiBwcmV2aW91cyB3b3JrIGZyb20gTWlsdG9uIEQuIE1pbGxlciBJSSA8bWlsdG9u bUB1cy5pYm0uY29tPgoKU2lnbmVkLW9mZi1ieTogQ8OpZHJpYyBMZSBHb2F0ZXIgPGNsZ0BrYW9k Lm9yZz4KLS0tCiBkcml2ZXJzL210ZC9zcGktbm9yL0tjb25maWcgICAgICB8ICAxMCArCiBkcml2 ZXJzL210ZC9zcGktbm9yL01ha2VmaWxlICAgICB8ICAgMSArCiBkcml2ZXJzL210ZC9zcGktbm9y L2FzcGVlZC1zbWMuYyB8IDczNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDMgZmlsZXMgY2hhbmdlZCwgNzQ2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL210ZC9zcGktbm9yL2FzcGVlZC1zbWMuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL3NwaS1ub3IvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZpZwppbmRleCA0 YTY4MmVlMGY2MzIuLjVjMGVmYmQ5ZGQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvc3BpLW5v ci9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZpZwpAQCAtMjksNiArMjks MTYgQEAgY29uZmlnIE1URF9TUElfTk9SX1VTRV80S19TRUNUT1JTCiAJICBQbGVhc2Ugbm90ZSB0 aGF0IHNvbWUgdG9vbHMvZHJpdmVycy9maWxlc3lzdGVtcyBtYXkgbm90IHdvcmsgd2l0aAogCSAg NDA5NiBCIGVyYXNlIHNpemUgKGUuZy4gVUJJRlMgcmVxdWlyZXMgMTUgS2lCIGFzIGEgbWluaW11 bSkuCiAKK2NvbmZpZyBTUElfQVNQRUVECisJdHJpc3RhdGUgIkFzcGVlZCBmbGFzaCBjb250cm9s bGVycyBpbiBTUEkgbW9kZSIKKwlkZXBlbmRzIG9uIEFSQ0hfQVNQRUVEIHx8IENPTVBJTEVfVEVT VAorCWRlcGVuZHMgb24gSEFTX0lPTUVNICYmIE9GCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1 cHBvcnQgZm9yIHRoZSBGaXJtd2FyZSBNZW1vcnkgY29udHJvbGxlciAoRk1DKQorCSAgaW4gdGhl IEFzcGVlZCBBU1QyNTAwIFNvQyB3aGVuIGF0dGFjaGVkIHRvIFNQSSBOT1IgY2hpcHMsCisJICBh bmQgc3VwcG9ydCBmb3IgdGhlIFNQSSBmbGFzaCBtZW1vcnkgY29udHJvbGxlciAoU1BJKSBmb3IK KwkgIHRoZSBob3N0IGZpcm13YXJlLiBUaGUgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBT UEkgTk9SLgorCiBjb25maWcgU1BJX0FUTUVMX1FVQURTUEkKIAl0cmlzdGF0ZSAiQXRtZWwgUXVh ZCBTUEkgQ29udHJvbGxlciIKIAlkZXBlbmRzIG9uIEFSQ0hfQVQ5MSB8fCAoQVJNICYmIENPTVBJ TEVfVEVTVCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NwaS1ub3IvTWFrZWZpbGUgYi9kcml2 ZXJzL210ZC9zcGktbm9yL01ha2VmaWxlCmluZGV4IDEyMTY5NWU4MzU0Mi4uZDczZDc3MmM2ODlj IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9zcGktbm9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMv bXRkL3NwaS1ub3IvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiBvYmotJChDT05GSUdfTVREX1NQ SV9OT1IpCSs9IHNwaS1ub3Iubworb2JqLSQoQ09ORklHX1NQSV9BU1BFRUQpCSs9IGFzcGVlZC1z bWMubwogb2JqLSQoQ09ORklHX1NQSV9BVE1FTF9RVUFEU1BJKQkrPSBhdG1lbC1xdWFkc3BpLm8K IG9iai0kKENPTkZJR19TUElfQ0FERU5DRV9RVUFEU1BJKQkrPSBjYWRlbmNlLXF1YWRzcGkubwog b2JqLSQoQ09ORklHX1NQSV9GU0xfUVVBRFNQSSkJKz0gZnNsLXF1YWRzcGkubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tdGQvc3BpLW5vci9hc3BlZWQtc21jLmMgYi9kcml2ZXJzL210ZC9zcGktbm9y L2FzcGVlZC1zbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjZm OTI0NGYwN2FlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvYXNwZWVk LXNtYy5jCkBAIC0wLDAgKzEsNzM1IEBACisvKgorICogQVNQRUVEIFN0YXRpYyBNZW1vcnkgQ29u dHJvbGxlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgSUJNIENvcnBv cmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXgu aD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRp dGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvc3BpLW5vci5oPgorI2luY2x1ZGUgPGxpbnV4 L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9z eXNmcy5oPgorCisjZGVmaW5lIERFVklDRV9OQU1FCSJhc3BlZWQtc21jIgorCisvKgorICogSW4g dXNlciBtb2RlIGFsbCBkYXRhIGJ5dGVzIHJlYWQgb3Igd3JpdHRlbiB0byB0aGUgY2hpcCBkZWNv ZGUgYWRkcmVzcworICogcmFuZ2UgYXJlIHRyYW5zZmVycmVkIHRvIG9yIGZyb20gdGhlIFNQSSBi dXMuIFRoZSByYW5nZSBpcyB0cmVhdGVkIGFzIGEKKyAqIGZpZm8gb2YgYXJiaXRyYXRyeSAxLCAy LCBvciA0IGJ5dGUgd2lkdGggYnV0IGVhY2ggd3JpdGUgaGFzIHRvIGJlIGFsaWduZWQKKyAqIHRv IGl0cyBzaXplLiBUaGUgYWRkcmVzcyB3aXRoaW4gdGhlIG11bHRpcGxlIDhrQiByYW5nZSBpcyBp Z25vcmVkIHdoZW4KKyAqIHNlbmRpbmcgYnl0ZXMgdG8gdGhlIFNQSSBidXMuCisgKgorICogT24g dGhlIGFybSBhcmNoaXRlY3R1cmUsIGFzIG9mIExpbnV4IHZlcnNpb24gNC4zLCBtZW1jcHlfZnJv bWlvIGFuZAorICogbWVtY3B5X3RvaW8gb24gbGl0dGxlIGVuZGlhbiB0YXJnZXRzIHVzZSB0aGUg b3B0aW1pemVkIG1lbWNweSByb3V0aW5lcworICogdGhhdCB3ZXJlIGRlc2lnbmVkIGZvciB3ZWxs IGJlaGF2aWVkIG1lbW9yeSBzdG9yYWdlLiBUaGVzZSByb3V0aW5lcworICogaGF2ZSBhIHN0dXR0 ZXIgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIG5vdCBib3RoIHdvcmQgYWxpZ25l ZCwKKyAqIG9uY2Ugd2l0aCBhIGR1cGxpY2F0ZSBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBhZnRlciBh bGlnbmluZyB0byB0aGUKKyAqIGRlc3RpbmF0aW9uIHRvIGEgd29yZCBib3VuZGFyeSwgYW5kIGFn YWluIHdpdGggYSBkdXBsaWNhdGUgYWNjZXNzIHRvCisgKiB0aGUgc291cmNlIHdoZW4gdGhlIGZp bmFsIGJ5dGUgY291bnQgaXMgbm90IHdvcmQgYWxpZ25lZC4KKyAqCisgKiBXaGVuIHdyaXRpbmcg b3IgcmVhZGluZyB0aGUgZmlmbyB0aGlzIHN0dXR0ZXIgZGlzY2FyZHMgZGF0YSBvciBzZW5kcwor ICogdG9vIG11Y2ggZGF0YSB0byB0aGUgZmlmbyBhbmQgY2FuIG5vdCBiZSB1c2VkIGJ5IHRoaXMg ZHJpdmVyLgorICoKKyAqIFdoaWxlIHRoZSBsb3cgbGV2ZWwgaW8gc3RyaW5nIHJvdXRpbmVzIHRo YXQgaW1wbGVtZW50IHRoZSBpbnNsIGZhbWlseSBkbworICogdGhlIGRlc2lyZWQgYWNjZXNzZXMg YW5kIG1lbW9yeSBpbmNyZW1lbnRzLCB0aGUgY3Jvc3MgYXJjaGl0ZWN0dXJlIGlvCisgKiBtYWNy b3MgbWFrZSB0aGVtIGVzc2VudGlhbGx5IGltcG9zc2libGUgdG8gdXNlIG9uIGEgbWVtb3J5IG1h cHBlZCBhZGRyZXNzCisgKiBpbnN0ZWFkIG9mIGEgYSB0b2tlbiBmcm9tIHRoZSBjYWxsIHRvIGlv bWFwIG9mIGFuIGlvIHBvcnQuCisgKgorICogVGhlc2UgZmlmbyByb3V0aW5lcyB1c2UgcmVhZGwg YW5kIGZyaWVuZHMgdG8gYSBjb25zdGFudCBpbyBwb3J0IGFuZCB1cGRhdGUKKyAqIHRoZSBtZW1v cnkgYnVmZmVyIHBvaW50ZXIgYW5kIGNvdW50IHZpYSBleHBsaWNpdCBjb2RlLiBUaGUgZmluYWwg dXBkYXRlcworICogdG8gbGVuIGFyZSBvcHRpbWlzdGljYWxseSBzdXBwcmVzc2VkLgorICovCitz dGF0aWMgaW50IGFzcGVlZF9zbWNfcmVhZF9mcm9tX2FoYih2b2lkICpidWYsIGNvbnN0IHZvaWQg X19pb21lbSAqc3JjLAorCQkJCSAgICBzaXplX3QgbGVuKQoreworCWlmIChJU19BTElHTkVEKCh1 MzIpc3JjLCBzaXplb2YodTMyKSkgJiYKKwkgICAgSVNfQUxJR05FRCgodTMyKWJ1Ziwgc2l6ZW9m KHUzMikpICYmCisJICAgIElTX0FMSUdORUQobGVuLCBzaXplb2YodTMyKSkpIHsKKwkJd2hpbGUg KGxlbiA+IDMpIHsKKwkJCSoodTMyICopYnVmID0gcmVhZGwoc3JjKTsKKwkJCWJ1ZiArPSA0Owor CQkJc3JjICs9IDQ7CisJCQlsZW4gLT0gNDsKKwkJfQorCX0KKworCXdoaWxlIChsZW4tLSkgewor CQkqKHU4ICopYnVmID0gcmVhZGIoc3JjKTsKKwkJYnVmICs9IDE7CisJCXNyYyArPSAxOworCX0K KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhc3BlZWRfc21jX3dyaXRlX3RvX2FoYih2b2lk IF9faW9tZW0gKmRzdCwgY29uc3Qgdm9pZCAqYnVmLAorCQkJCSAgIHNpemVfdCBsZW4pCit7CisJ aWYgKElTX0FMSUdORUQoKHUzMilkc3QsIHNpemVvZih1MzIpKSAmJgorCSAgICBJU19BTElHTkVE KCh1MzIpYnVmLCBzaXplb2YodTMyKSkgJiYKKwkgICAgSVNfQUxJR05FRChsZW4sIHNpemVvZih1 MzIpKSkgeworCQl3aGlsZSAobGVuID4gMykgeworCQkJdTMyIHZhbCA9ICoodTMyICopYnVmOwor CisJCQl3cml0ZWwodmFsLCBkc3QpOworCQkJYnVmICs9IDQ7CisJCQlkc3QgKz0gNDsKKwkJCWxl biAtPSA0OworCQl9CisJfQorCisJd2hpbGUgKGxlbi0tKSB7CisJCXU4IHZhbCA9ICoodTggKili dWY7CisKKwkJd3JpdGViKHZhbCwgZHN0KTsKKwkJYnVmICs9IDE7CisJCWRzdCArPSAxOworCX0K KwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBkcml2ZXIgb25seSBzdXBwb3J0IFNQSSBmbGFz aAorICovCitlbnVtIGFzcGVlZF9zbWNfZmxhc2hfdHlwZSB7CisJc21jX3R5cGVfbm9yICA9IDAs CisJc21jX3R5cGVfbmFuZCA9IDEsCisJc21jX3R5cGVfc3BpICA9IDIsCit9OworCitzdHJ1Y3Qg YXNwZWVkX3NtY19jaGlwOworCitzdHJ1Y3QgYXNwZWVkX3NtY19pbmZvIHsKKwl1MzIgbWF4c2l6 ZTsJCS8qIG1heGltdW0gc2l6ZSBvZiBjaGlwIHdpbmRvdyAqLworCXU4IG5jZTsJCQkvKiBudW1i ZXIgb2YgY2hpcCBlbmFibGVzICovCisJYm9vbCBoYXN0eXBlOwkJLyogZmxhc2ggdHlwZSBmaWVs ZCBleGlzdHMgaW4gY29uZmlnIHJlZyAqLworCXU4IHdlMDsJCQkvKiBzaGlmdCBmb3Igd3JpdGUg ZW5hYmxlIGJpdCBmb3IgQ0UwICovCisJdTggY3RsMDsJCS8qIG9mZnNldCBpbiByZWdzIG9mIGN0 bCBmb3IgQ0UwICovCisKKwl2b2lkICgqc2V0XzRiKShzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpj aGlwKTsKK307CisKK3N0YXRpYyB2b2lkIGFzcGVlZF9zbWNfY2hpcF9zZXRfNGIoc3RydWN0IGFz cGVlZF9zbWNfY2hpcCAqY2hpcCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NtY19p bmZvIGZtY18yNTAwX2luZm8gPSB7CisJLm1heHNpemUgPSAyNTYgKiAxMDI0ICogMTAyNCwKKwku bmNlID0gMywKKwkuaGFzdHlwZSA9IHRydWUsCisJLndlMCA9IDE2LAorCS5jdGwwID0gMHgxMCwK Kwkuc2V0XzRiID0gYXNwZWVkX3NtY19jaGlwX3NldF80YiwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgYXNwZWVkX3NtY19pbmZvIHNwaV8yNTAwX2luZm8gPSB7CisJLm1heHNpemUgPSAxMjgg KiAxMDI0ICogMTAyNCwKKwkubmNlID0gMiwKKwkuaGFzdHlwZSA9IGZhbHNlLAorCS53ZTAgPSAx NiwKKwkuY3RsMCA9IDB4MTAsCisJLnNldF80YiA9IGFzcGVlZF9zbWNfY2hpcF9zZXRfNGIsCit9 OworCitlbnVtIGFzcGVlZF9zbWNfY3RsX3JlZ192YWx1ZSB7CisJc21jX2Jhc2UsCQkvKiBiYXNl IHZhbHVlIHdpdGhvdXQgbW9kZSBmb3Igb3RoZXIgY29tbWFuZHMgKi8KKwlzbWNfcmVhZCwJCS8q IGNvbW1hbmQgcmVnIGZvciAobWF5YmUgZmFzdCkgcmVhZHMgKi8KKwlzbWNfd3JpdGUsCQkvKiBj b21tYW5kIHJlZyBmb3Igd3JpdGVzICovCisJc21jX21heCwKK307CisKK3N0cnVjdCBhc3BlZWRf c21jX2NvbnRyb2xsZXI7CisKK3N0cnVjdCBhc3BlZWRfc21jX2NoaXAgeworCWludCBjczsKKwlz dHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpjb250cm9sbGVyOworCXZvaWQgX19pb21lbSAq Y3RsOwkJCS8qIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwl2b2lkIF9faW9tZW0gKmFoYl9iYXNlOwkJ CS8qIGJhc2Ugb2YgY2hpcCB3aW5kb3cgKi8KKwl1MzIgY3RsX3ZhbFtzbWNfbWF4XTsJCQkvKiBj b250cm9sIHNldHRpbmdzICovCisJZW51bSBhc3BlZWRfc21jX2ZsYXNoX3R5cGUgdHlwZTsJLyog d2hhdCB0eXBlIG9mIGZsYXNoICovCisJc3RydWN0IHNwaV9ub3Igbm9yOworfTsKKworc3RydWN0 IGFzcGVlZF9zbWNfY29udHJvbGxlciB7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJc3RydWN0 IG11dGV4IG11dGV4OwkJCS8qIGNvbnRyb2xsZXIgYWNjZXNzIG11dGV4ICovCisJY29uc3Qgc3Ry dWN0IGFzcGVlZF9zbWNfaW5mbyAqaW5mbzsJLyogdHlwZSBpbmZvIG9mIGNvbnRyb2xsZXIgKi8K Kwl2b2lkIF9faW9tZW0gKnJlZ3M7CQkJLyogY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwl2b2lk IF9faW9tZW0gKmFoYl9iYXNlOwkJCS8qIHBlci1jaGlwIHdpbmRvd3MgcmVzb3VyY2UgKi8KKwor CXN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXBzWzBdOwkvKiBwb2ludGVycyB0byBhdHRhY2hl ZCBjaGlwcyAqLworfTsKKworLyoKKyAqIFNQSSBGbGFzaCBDb25maWd1cmF0aW9uIFJlZ2lzdGVy IChBU1QyNTAwIFNQSSkKKyAqICAgICBvcgorICogVHlwZSBzZXR0aW5nIFJlZ2lzdGVyIChBU1Qy NTAwIEZNQykuCisgKiBDRTAgYW5kIENFMSBjYW4gb25seSBiZSBvZiB0eXBlIFNQSS4gQ0UyIGNh biBiZSBvZiB0eXBlIE5PUiBidXQgdGhlCisgKiBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBpdC4K KyAqLworI2RlZmluZSBDT05GSUdfUkVHCQkJMHgwCisjZGVmaW5lIENPTkZJR19ESVNBQkxFX0xF R0FDWQkJQklUKDMxKSAvKiAxICovCisKKyNkZWZpbmUgQ09ORklHX0NFMl9XUklURQkJQklUKDE4 KQorI2RlZmluZSBDT05GSUdfQ0UxX1dSSVRFCQlCSVQoMTcpCisjZGVmaW5lIENPTkZJR19DRTBf V1JJVEUJCUJJVCgxNikKKworI2RlZmluZSBDT05GSUdfQ0UyX1RZUEUJCQlCSVQoNCkgLyogQVNU MjUwMCBGTUMgb25seSAqLworI2RlZmluZSBDT05GSUdfQ0UxX1RZUEUJCQlCSVQoMikgLyogQVNU MjUwMCBGTUMgb25seSAqLworI2RlZmluZSBDT05GSUdfQ0UwX1RZUEUJCQlCSVQoMCkgLyogQVNU MjUwMCBGTUMgb25seSAqLworCisvKgorICogQ0UgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVm aW5lIENFX0NPTlRST0xfUkVHCQkJMHg0CisKKy8qCisgKiBDRXggQ29udHJvbCBSZWdpc3Rlcgor ICovCisjZGVmaW5lIENPTlRST0xfQUFGX01PREUJCUJJVCgzMSkKKyNkZWZpbmUgQ09OVFJPTF9J T19NT0RFX01BU0sJCUdFTk1BU0soMzAsIDI4KQorI2RlZmluZSBDT05UUk9MX0lPX0RVQUxfREFU QQkJQklUKDI5KQorI2RlZmluZSBDT05UUk9MX0lPX0RVQUxfQUREUl9EQVRBCShCSVQoMjkpIHwg QklUKDI4KSkKKyNkZWZpbmUgQ09OVFJPTF9JT19RVUFEX0RBVEEJCUJJVCgzMCkKKyNkZWZpbmUg Q09OVFJPTF9JT19RVUFEX0FERFJfREFUQQkoQklUKDMwKSB8IEJJVCgyOCkpCisjZGVmaW5lIENP TlRST0xfQ0VfSU5BQ1RJVkVfU0hJRlQJMjQKKyNkZWZpbmUgQ09OVFJPTF9DRV9JTkFDVElWRV9N QVNLCUdFTk1BU0soMjcsIFwKKwkJCQkJQ09OVFJPTF9DRV9JTkFDVElWRV9TSElGVCkKKy8qIDAg PSAxNlQgLi4uIDE1ID0gMVQgICBUPUhDTEsgKi8KKyNkZWZpbmUgQ09OVFJPTF9DT01NQU5EX1NI SUZUCQkxNgorI2RlZmluZSBDT05UUk9MX0RVTU1ZX0NPTU1BTkRfT1VUCUJJVCgxNSkKKyNkZWZp bmUgQ09OVFJPTF9JT19EVU1NWV9ISQkJQklUKDE0KQorI2RlZmluZSBDT05UUk9MX0lPX0RVTU1Z X0hJX1NISUZUCTE0CisjZGVmaW5lIENPTlRST0xfQ0xLX0RJVjQJCUJJVCgxMykgLyogb3RoZXJz ICovCisjZGVmaW5lIENPTlRST0xfUldfTUVSR0UJCUJJVCgxMikKKyNkZWZpbmUgQ09OVFJPTF9J T19EVU1NWV9MT19TSElGVAk2CisjZGVmaW5lIENPTlRST0xfSU9fRFVNTVlfTE8JCUdFTk1BU0so NywgXAorCQkJCQkJQ09OVFJPTF9JT19EVU1NWV9MT19TSElGVCkKKyNkZWZpbmUgQ09OVFJPTF9J T19EVU1NWV9NQVNLCQkoQ09OVFJPTF9JT19EVU1NWV9ISSB8IFwKKwkJCQkJIENPTlRST0xfSU9f RFVNTVlfTE8pCisjZGVmaW5lIENPTlRST0xfSU9fRFVNTVlfU0VUKGR1bW15KQkJCQkgXAorCSgo KCgoZHVtbXkpID4+IDIpICYgMHgxKSA8PCBDT05UUk9MX0lPX0RVTU1ZX0hJX1NISUZUKSB8IFwK KwkgKCgoZHVtbXkpICYgMHgzKSA8PCBDT05UUk9MX0lPX0RVTU1ZX0xPX1NISUZUKSkKKworI2Rl ZmluZSBDT05UUk9MX0NMT0NLX0ZSRVFfU0VMX1NISUZUCTgKKyNkZWZpbmUgQ09OVFJPTF9DTE9D S19GUkVRX1NFTF9NQVNLCUdFTk1BU0soMTEsIFwKKwkJCQkJCUNPTlRST0xfQ0xPQ0tfRlJFUV9T RUxfU0hJRlQpCisjZGVmaW5lIENPTlRST0xfTFNCX0ZJUlNUCQlCSVQoNSkKKyNkZWZpbmUgQ09O VFJPTF9DTE9DS19NT0RFXzMJCUJJVCg0KQorI2RlZmluZSBDT05UUk9MX0lOX0RVQUxfREFUQQkJ QklUKDMpCisjZGVmaW5lIENPTlRST0xfQ0VfU1RPUF9BQ1RJVkVfQ09OVFJPTAlCSVQoMikKKyNk ZWZpbmUgQ09OVFJPTF9DT01NQU5EX01PREVfTUFTSwlHRU5NQVNLKDEsIDApCisjZGVmaW5lIENP TlRST0xfQ09NTUFORF9NT0RFX05PUk1BTAkoMCkKKyNkZWZpbmUgQ09OVFJPTF9DT01NQU5EX01P REVfRlJFQUQJKDEpCisjZGVmaW5lIENPTlRST0xfQ09NTUFORF9NT0RFX1dSSVRFCSgyKQorI2Rl ZmluZSBDT05UUk9MX0NPTU1BTkRfTU9ERV9VU0VSCSgzKQorCisjZGVmaW5lIENPTlRST0xfS0VF UF9NQVNLCQkJCQkJXAorCShDT05UUk9MX0FBRl9NT0RFIHwgQ09OVFJPTF9DRV9JTkFDVElWRV9N QVNLIHwgQ09OVFJPTF9DTEtfRElWNCB8IFwKKwkgQ09OVFJPTF9JT19EVU1NWV9NQVNLIHwgQ09O VFJPTF9DTE9DS19GUkVRX1NFTF9NQVNLIHwJCVwKKwkgQ09OVFJPTF9MU0JfRklSU1QgfCBDT05U Uk9MX0NMT0NLX01PREVfMykKKworLyoKKyAqIFNlZ21lbnQgQWRkcmVzcyBSZWdpc3RlcnMuIFN0 YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSBlbmNvZGVkCisgKiB1c2luZyA4TUIgdW5pdHMKKyAq LworI2RlZmluZSBTRUdNRU5UX0FERFJfUkVHMAkJMHgzMAorI2RlZmluZSBTRUdNRU5UX0FERFJf U1RBUlQoX3IpCQkoKCgoX3IpID4+IDE2KSAmIDB4RkYpIDw8IDIzKQorI2RlZmluZSBTRUdNRU5U X0FERFJfRU5EKF9yKQkJKCgoKF9yKSA+PiAyNCkgJiAweEZGKSA8PCAyMykKKworc3RhdGljIGlu bGluZSB1MzIgYXNwZWVkX3NtY19jaGlwX3dyaXRlX2JpdChzdHJ1Y3QgYXNwZWVkX3NtY19jaGlw ICpjaGlwKQoreworCXJldHVybiBCSVQoY2hpcC0+Y29udHJvbGxlci0+aW5mby0+d2UwICsgY2hp cC0+Y3MpOworfQorCitzdGF0aWMgdm9pZCBhc3BlZWRfc21jX2NoaXBfY2hlY2tfY29uZmlnKHN0 cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXApCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY29udHJv bGxlciAqY29udHJvbGxlciA9IGNoaXAtPmNvbnRyb2xsZXI7CisJdTMyIHJlZzsKKworCXJlZyA9 IHJlYWRsKGNvbnRyb2xsZXItPnJlZ3MgKyBDT05GSUdfUkVHKTsKKworCWlmIChyZWcgJiBhc3Bl ZWRfc21jX2NoaXBfd3JpdGVfYml0KGNoaXApKQorCQlyZXR1cm47CisKKwlkZXZfZGJnKGNvbnRy b2xsZXItPmRldiwgImNvbmZpZyB3cml0ZSBpcyBub3Qgc2V0ICEgQCVwOiAweCUwOHhcbiIsCisJ CWNvbnRyb2xsZXItPnJlZ3MgKyBDT05GSUdfUkVHLCByZWcpOworCXJlZyB8PSBhc3BlZWRfc21j X2NoaXBfd3JpdGVfYml0KGNoaXApOworCXdyaXRlbChyZWcsIGNvbnRyb2xsZXItPnJlZ3MgKyBD T05GSUdfUkVHKTsKK30KKworc3RhdGljIHZvaWQgYXNwZWVkX3NtY19zdGFydF91c2VyKHN0cnVj dCBzcGlfbm9yICpub3IpCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCA9IG5vci0+ cHJpdjsKKwl1MzIgY3RsID0gY2hpcC0+Y3RsX3ZhbFtzbWNfYmFzZV07CisKKwkvKgorCSAqIFdo ZW4gdGhlIGNoaXAgaXMgY29udHJvbGxlZCBpbiB1c2VyIG1vZGUsIHdlIG5lZWQgd3JpdGUKKwkg KiBhY2Nlc3MgdG8gc2VuZCB0aGUgb3Bjb2RlcyB0byBpdC4gU28gY2hlY2sgdGhlIGNvbmZpZy4K KwkgKi8KKwlhc3BlZWRfc21jX2NoaXBfY2hlY2tfY29uZmlnKGNoaXApOworCisJY3RsIHw9IENP TlRST0xfQ09NTUFORF9NT0RFX1VTRVIgfAorCQlDT05UUk9MX0NFX1NUT1BfQUNUSVZFX0NPTlRS T0w7CisJd3JpdGVsKGN0bCwgY2hpcC0+Y3RsKTsKKworCWN0bCAmPSB+Q09OVFJPTF9DRV9TVE9Q X0FDVElWRV9DT05UUk9MOworCXdyaXRlbChjdGwsIGNoaXAtPmN0bCk7Cit9CisKK3N0YXRpYyB2 b2lkIGFzcGVlZF9zbWNfc3RvcF91c2VyKHN0cnVjdCBzcGlfbm9yICpub3IpCit7CisJc3RydWN0 IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCA9IG5vci0+cHJpdjsKKworCXUzMiBjdGwgPSBjaGlwLT5j dGxfdmFsW3NtY19yZWFkXTsKKwl1MzIgY3RsMiA9IGN0bCB8IENPTlRST0xfQ09NTUFORF9NT0RF X1VTRVIgfAorCQlDT05UUk9MX0NFX1NUT1BfQUNUSVZFX0NPTlRST0w7CisKKwl3cml0ZWwoY3Rs MiwgY2hpcC0+Y3RsKTsJLyogc3RvcCB1c2VyIENFIGNvbnRyb2wgKi8KKwl3cml0ZWwoY3RsLCBj aGlwLT5jdGwpOwkJLyogZGVmYXVsdCB0byBmcmVhZCBvciByZWFkIG1vZGUgKi8KK30KKworc3Rh dGljIGludCBhc3BlZWRfc21jX3ByZXAoc3RydWN0IHNwaV9ub3IgKm5vciwgZW51bSBzcGlfbm9y X29wcyBvcHMpCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCA9IG5vci0+cHJpdjsK KworCW11dGV4X2xvY2soJmNoaXAtPmNvbnRyb2xsZXItPm11dGV4KTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgYXNwZWVkX3NtY191bnByZXAoc3RydWN0IHNwaV9ub3IgKm5vciwgZW51 bSBzcGlfbm9yX29wcyBvcHMpCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCA9IG5v ci0+cHJpdjsKKworCW11dGV4X3VubG9jaygmY2hpcC0+Y29udHJvbGxlci0+bXV0ZXgpOworfQor CitzdGF0aWMgaW50IGFzcGVlZF9zbWNfcmVhZF9yZWcoc3RydWN0IHNwaV9ub3IgKm5vciwgdTgg b3Bjb2RlLCB1OCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNo aXAgPSBub3ItPnByaXY7CisKKwlhc3BlZWRfc21jX3N0YXJ0X3VzZXIobm9yKTsKKwlhc3BlZWRf c21jX3dyaXRlX3RvX2FoYihjaGlwLT5haGJfYmFzZSwgJm9wY29kZSwgMSk7CisJYXNwZWVkX3Nt Y19yZWFkX2Zyb21fYWhiKGJ1ZiwgY2hpcC0+YWhiX2Jhc2UsIGxlbik7CisJYXNwZWVkX3NtY19z dG9wX3VzZXIobm9yKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhc3BlZWRfc21jX3dy aXRlX3JlZyhzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCBvcGNvZGUsIHU4ICpidWYsCisJCQkJaW50 IGxlbikKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9yLT5wcml2OworCisJ YXNwZWVkX3NtY19zdGFydF91c2VyKG5vcik7CisJYXNwZWVkX3NtY193cml0ZV90b19haGIoY2hp cC0+YWhiX2Jhc2UsICZvcGNvZGUsIDEpOworCWFzcGVlZF9zbWNfd3JpdGVfdG9fYWhiKGNoaXAt PmFoYl9iYXNlLCBidWYsIGxlbik7CisJYXNwZWVkX3NtY19zdG9wX3VzZXIobm9yKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXNwZWVkX3NtY19zZW5kX2NtZF9hZGRyKHN0cnVjdCBz cGlfbm9yICpub3IsIHU4IGNtZCwgdTMyIGFkZHIpCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY2hp cCAqY2hpcCA9IG5vci0+cHJpdjsKKwlfX2JlMzIgdGVtcDsKKwl1MzIgY21kYWRkcjsKKworCXN3 aXRjaCAobm9yLT5hZGRyX3dpZHRoKSB7CisJZGVmYXVsdDoKKwkJV0FSTl9PTkNFKDEsICJVbmV4 cGVjdGVkIGFkZHJlc3Mgd2lkdGggJXUsIGRlZmF1bHRpbmcgdG8gM1xuIiwKKwkJCSAgbm9yLT5h ZGRyX3dpZHRoKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIDM6CisJCWNtZGFkZHIgPSBh ZGRyICYgMHhGRkZGRkY7CisJCWNtZGFkZHIgfD0gY21kIDw8IDI0OworCisJCXRlbXAgPSBjcHVf dG9fYmUzMihjbWRhZGRyKTsKKwkJYXNwZWVkX3NtY193cml0ZV90b19haGIoY2hpcC0+YWhiX2Jh c2UsICZ0ZW1wLCA0KTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0ZW1wID0gY3B1X3RvX2JlMzIo YWRkcik7CisJCWFzcGVlZF9zbWNfd3JpdGVfdG9fYWhiKGNoaXAtPmFoYl9iYXNlLCAmY21kLCAx KTsKKwkJYXNwZWVkX3NtY193cml0ZV90b19haGIoY2hpcC0+YWhiX2Jhc2UsICZ0ZW1wLCA0KTsK KwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBhc3BlZWRfc21jX3JlYWRfdXNlcihz dHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3QgZnJvbSwKKwkJCQkgICAgc2l6ZV90IGxlbiwgdV9j aGFyICpyZWFkX2J1ZikKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9yLT5w cml2OworCisJYXNwZWVkX3NtY19zdGFydF91c2VyKG5vcik7CisJYXNwZWVkX3NtY19zZW5kX2Nt ZF9hZGRyKG5vciwgbm9yLT5yZWFkX29wY29kZSwgZnJvbSk7CisJYXNwZWVkX3NtY19yZWFkX2Zy b21fYWhiKHJlYWRfYnVmLCBjaGlwLT5haGJfYmFzZSwgbGVuKTsKKwlhc3BlZWRfc21jX3N0b3Bf dXNlcihub3IpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFzcGVlZF9zbWNf d3JpdGVfdXNlcihzdHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3QgdG8sCisJCQkJICAgICBzaXpl X3QgbGVuLCBjb25zdCB1X2NoYXIgKndyaXRlX2J1ZikKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19j aGlwICpjaGlwID0gbm9yLT5wcml2OworCisJYXNwZWVkX3NtY19zdGFydF91c2VyKG5vcik7CisJ YXNwZWVkX3NtY19zZW5kX2NtZF9hZGRyKG5vciwgbm9yLT5wcm9ncmFtX29wY29kZSwgdG8pOwor CWFzcGVlZF9zbWNfd3JpdGVfdG9fYWhiKGNoaXAtPmFoYl9iYXNlLCB3cml0ZV9idWYsIGxlbik7 CisJYXNwZWVkX3NtY19zdG9wX3VzZXIobm9yKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMg aW50IGFzcGVlZF9zbWNfdW5yZWdpc3RlcihzdHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpj b250cm9sbGVyKQoreworCXN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXA7CisJaW50IG47CisK Kwlmb3IgKG4gPSAwOyBuIDwgY29udHJvbGxlci0+aW5mby0+bmNlOyBuKyspIHsKKwkJY2hpcCA9 IGNvbnRyb2xsZXItPmNoaXBzW25dOworCQlpZiAoY2hpcCkKKwkJCW10ZF9kZXZpY2VfdW5yZWdp c3RlcigmY2hpcC0+bm9yLm10ZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg YXNwZWVkX3NtY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVy biBhc3BlZWRfc21jX3VucmVnaXN0ZXIocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSk7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFzcGVlZF9zbWNfbWF0Y2hlc1tdID0g eworCXsgLmNvbXBhdGlibGUgPSAiYXNwZWVkLGFzdDI1MDAtZm1jIiwgLmRhdGEgPSAmZm1jXzI1 MDBfaW5mbyB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXNwZWVkLGFzdDI1MDAtc3BpIiwgLmRhdGEg PSAmc3BpXzI1MDBfaW5mbyB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFz cGVlZF9zbWNfbWF0Y2hlcyk7CisKKy8qCisgKiBFYWNoIGNoaXAgaGFzIGEgbWFwcGluZyB3aW5k b3cgZGVmaW5lZCBieSBhIHNlZ21lbnQgYWRkcmVzcworICogcmVnaXN0ZXIgZGVmaW5pbmcgYSBz dGFydCBhbmQgYW4gZW5kIGFkZHJlc3Mgb24gdGhlIEFIQiBidXMuIFRoZXNlCisgKiBhZGRyZXNz ZXMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZml0IHRoZSBjaGlwIHNpemUgYW5kIG9mZmVyIGEKKyAq IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbiBhY3Jvc3MgY2hpcHMuIEZvciB0aGUgbW9tZW50LCB3 ZSBvbmx5CisgKiBjaGVjayB0aGF0IGVhY2ggY2hpcCBzZWdtZW50IGlzIHZhbGlkLgorICovCitz dGF0aWMgdm9pZCBfX2lvbWVtICphc3BlZWRfc21jX2NoaXBfYmFzZShzdHJ1Y3QgYXNwZWVkX3Nt Y19jaGlwICpjaGlwLAorCQkJCQkgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCBh c3BlZWRfc21jX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBjaGlwLT5jb250cm9sbGVyOworCXUz MiBvZmZzZXQgPSAwOworCXUzMiByZWc7CisKKwlpZiAoY29udHJvbGxlci0+aW5mby0+bmNlID4g MSkgeworCQlyZWcgPSByZWFkbChjb250cm9sbGVyLT5yZWdzICsgU0VHTUVOVF9BRERSX1JFRzAg KworCQkJICAgIGNoaXAtPmNzICogNCk7CisKKwkJaWYgKFNFR01FTlRfQUREUl9TVEFSVChyZWcp ID49IFNFR01FTlRfQUREUl9FTkQocmVnKSkKKwkJCXJldHVybiBOVUxMOworCisJCW9mZnNldCA9 IFNFR01FTlRfQUREUl9TVEFSVChyZWcpIC0gcmVzLT5zdGFydDsKKwl9CisKKwlyZXR1cm4gY29u dHJvbGxlci0+YWhiX2Jhc2UgKyBvZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFzcGVlZF9zbWNf Y2hpcF9lbmFibGVfd3JpdGUoc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1 Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpjb250cm9sbGVyID0gY2hpcC0+Y29udHJvbGxlcjsK Kwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwoY29udHJvbGxlci0+cmVncyArIENPTkZJR19SRUcp OworCisJcmVnIHw9IGFzcGVlZF9zbWNfY2hpcF93cml0ZV9iaXQoY2hpcCk7CisJd3JpdGVsKHJl ZywgY29udHJvbGxlci0+cmVncyArIENPTkZJR19SRUcpOworfQorCitzdGF0aWMgdm9pZCBhc3Bl ZWRfc21jX2NoaXBfc2V0X3R5cGUoc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCwgaW50IHR5 cGUpCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY29udHJvbGxlciAqY29udHJvbGxlciA9IGNoaXAt PmNvbnRyb2xsZXI7CisJdTMyIHJlZzsKKworCWNoaXAtPnR5cGUgPSB0eXBlOworCisJcmVnID0g cmVhZGwoY29udHJvbGxlci0+cmVncyArIENPTkZJR19SRUcpOworCXJlZyAmPSB+KDMgPDwgKGNo aXAtPmNzICogMikpOworCXJlZyB8PSBjaGlwLT50eXBlIDw8IChjaGlwLT5jcyAqIDIpOworCXdy aXRlbChyZWcsIGNvbnRyb2xsZXItPnJlZ3MgKyBDT05GSUdfUkVHKTsKK30KKworLyoKKyAqIFRo ZSBBU1QyNTAwIEZNQyBmbGFzaCBjb250cm9sbGVyIHNob3VsZCBiZSBzdHJhcHBlZCBieSBoYXJk d2FyZSwgb3IKKyAqIGF1dG9kZXRlY3RlZCwgYnV0IHRoZSBBU1QyNTAwIFNQSSBmbGFzaCBuZWVk cyB0byBiZSBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGFzcGVlZF9zbWNfY2hpcF9zZXRfNGIoc3Ry dWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jb250cm9s bGVyICpjb250cm9sbGVyID0gY2hpcC0+Y29udHJvbGxlcjsKKwl1MzIgcmVnOworCisJaWYgKGNo aXAtPmNvbnRyb2xsZXItPmluZm8gPT0gJnNwaV8yNTAwX2luZm8pIHsKKwkJcmVnID0gcmVhZGwo Y29udHJvbGxlci0+cmVncyArIENFX0NPTlRST0xfUkVHKTsKKwkJcmVnIHw9IDEgPDwgY2hpcC0+ Y3M7CisJCXdyaXRlbChyZWcsIGNvbnRyb2xsZXItPnJlZ3MgKyBDRV9DT05UUk9MX1JFRyk7CisJ fQorfQorCitzdGF0aWMgaW50IGFzcGVlZF9zbWNfY2hpcF9zZXR1cF9pbml0KHN0cnVjdCBhc3Bl ZWRfc21jX2NoaXAgKmNoaXAsCisJCQkJICAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJ c3RydWN0IGFzcGVlZF9zbWNfY29udHJvbGxlciAqY29udHJvbGxlciA9IGNoaXAtPmNvbnRyb2xs ZXI7CisJY29uc3Qgc3RydWN0IGFzcGVlZF9zbWNfaW5mbyAqaW5mbyA9IGNvbnRyb2xsZXItPmlu Zm87CisJdTMyIHJlZywgYmFzZV9yZWc7CisKKwkvKgorCSAqIEFsd2F5cyB0dXJuIG9uIHRoZSB3 cml0ZSBlbmFibGUgYml0IHRvIGFsbG93IG9wY29kZXMgdG8gYmUKKwkgKiBzZW50IGluIHVzZXIg bW9kZS4KKwkgKi8KKwlhc3BlZWRfc21jX2NoaXBfZW5hYmxlX3dyaXRlKGNoaXApOworCisJLyog VGhlIGRyaXZlciBvbmx5IHN1cHBvcnRzIFNQSSB0eXBlIGZsYXNoICovCisJaWYgKGluZm8tPmhh c3R5cGUpCisJCWFzcGVlZF9zbWNfY2hpcF9zZXRfdHlwZShjaGlwLCBzbWNfdHlwZV9zcGkpOwor CisJLyoKKwkgKiBDb25maWd1cmUgY2hpcCBiYXNlIGFkZHJlc3MgaW4gbWVtb3J5CisJICovCisJ Y2hpcC0+YWhiX2Jhc2UgPSBhc3BlZWRfc21jX2NoaXBfYmFzZShjaGlwLCByZXMpOworCWlmICgh Y2hpcC0+YWhiX2Jhc2UpIHsKKwkJZGV2X3dhcm4oY2hpcC0+bm9yLmRldiwgIkNFIHNlZ21lbnQg d2luZG93IGNsb3NlZC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBHZXQgdmFs dWUgb2YgdGhlIGluaGVyaXRlZCBjb250cm9sIHJlZ2lzdGVyLiBVLUJvb3QgdXN1YWxseQorCSAq IGRvZXMgc29tZSB0aW1pbmcgY2FsaWJyYXRpb24gb24gdGhlIEZNQyBjaGlwLCBzbyBpdCdzIGdv b2QKKwkgKiB0byBrZWVwIHRoZW0uIEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBoYW5kbGUgY2Fs aWJyYXRpb24KKwkgKiBmcm9tIExpbnV4LgorCSAqLworCXJlZyA9IHJlYWRsKGNoaXAtPmN0bCk7 CisJZGV2X2RiZyhjb250cm9sbGVyLT5kZXYsICJjb250cm9sIHJlZ2lzdGVyOiAlMDh4XG4iLCBy ZWcpOworCisJYmFzZV9yZWcgPSByZWcgJiBDT05UUk9MX0tFRVBfTUFTSzsKKwlpZiAoYmFzZV9y ZWcgIT0gcmVnKSB7CisJCWRldl9pbmZvKGNvbnRyb2xsZXItPmRldiwKKwkJCSAiY29udHJvbCBy ZWdpc3RlciBjaGFuZ2VkIHRvOiAlMDh4XG4iLAorCQkJIGJhc2VfcmVnKTsKKwl9CisJY2hpcC0+ Y3RsX3ZhbFtzbWNfYmFzZV0gPSBiYXNlX3JlZzsKKworCS8qCisJICogUmV0YWluIHRoZSBwcmlv ciB2YWx1ZSBvZiB0aGUgY29udHJvbCByZWdpc3RlciBhcyB0aGUKKwkgKiBkZWZhdWx0IGlmIGl0 IHdhcyBub3JtYWwgYWNjZXNzIG1vZGUuIE90aGVyd2lzZSBzdGFydCB3aXRoCisJICogdGhlIHNh bml0aXplZCBiYXNlIHZhbHVlIHNldCB0byByZWFkIG1vZGUuCisJICovCisJaWYgKChyZWcgJiBD T05UUk9MX0NPTU1BTkRfTU9ERV9NQVNLKSA9PQorCSAgICBDT05UUk9MX0NPTU1BTkRfTU9ERV9O T1JNQUwpCisJCWNoaXAtPmN0bF92YWxbc21jX3JlYWRdID0gcmVnOworCWVsc2UKKwkJY2hpcC0+ Y3RsX3ZhbFtzbWNfcmVhZF0gPSBjaGlwLT5jdGxfdmFsW3NtY19iYXNlXSB8CisJCQlDT05UUk9M X0NPTU1BTkRfTU9ERV9OT1JNQUw7CisKKwlkZXZfZGJnKGNvbnRyb2xsZXItPmRldiwgImRlZmF1 bHQgY29udHJvbCByZWdpc3RlcjogJTA4eFxuIiwKKwkJY2hpcC0+Y3RsX3ZhbFtzbWNfcmVhZF0p OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFzcGVlZF9zbWNfY2hpcF9zZXR1cF9maW5p c2goc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19j b250cm9sbGVyICpjb250cm9sbGVyID0gY2hpcC0+Y29udHJvbGxlcjsKKwljb25zdCBzdHJ1Y3Qg YXNwZWVkX3NtY19pbmZvICppbmZvID0gY29udHJvbGxlci0+aW5mbzsKKwl1MzIgY21kOworCisJ aWYgKGNoaXAtPm5vci5hZGRyX3dpZHRoID09IDQgJiYgaW5mby0+c2V0XzRiKQorCQlpbmZvLT5z ZXRfNGIoY2hpcCk7CisKKwkvKgorCSAqIGJhc2UgbW9kZSBoYXMgbm90IGJlZW4gb3B0aW1pemVk IHlldC4gdXNlIGl0IGZvciB3cml0ZXMuCisJICovCisJY2hpcC0+Y3RsX3ZhbFtzbWNfd3JpdGVd ID0gY2hpcC0+Y3RsX3ZhbFtzbWNfYmFzZV0gfAorCQljaGlwLT5ub3IucHJvZ3JhbV9vcGNvZGUg PDwgQ09OVFJPTF9DT01NQU5EX1NISUZUIHwKKwkJQ09OVFJPTF9DT01NQU5EX01PREVfV1JJVEU7 CisKKwlkZXZfZGJnKGNvbnRyb2xsZXItPmRldiwgIndyaXRlIGNvbnRyb2wgcmVnaXN0ZXI6ICUw OHhcbiIsCisJCWNoaXAtPmN0bF92YWxbc21jX3dyaXRlXSk7CisKKwkvKgorCSAqIFRPRE86IEFk anVzdCBjbG9ja3MgaWYgZmFzdCByZWFkIGlzIHN1cHBvcnRlZCBhbmQgaW50ZXJwcmV0CisJICog U1BJLU5PUiBmbGFncyB0byBhZGp1c3QgY29udHJvbGxlciBzZXR0aW5ncy4KKwkgKi8KKwlzd2l0 Y2ggKGNoaXAtPm5vci5mbGFzaF9yZWFkKSB7CisJY2FzZSBTUElfTk9SX05PUk1BTDoKKwkJY21k ID0gQ09OVFJPTF9DT01NQU5EX01PREVfTk9STUFMOworCQlicmVhazsKKwljYXNlIFNQSV9OT1Jf RkFTVDoKKwkJY21kID0gQ09OVFJPTF9DT01NQU5EX01PREVfRlJFQUQ7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCWRldl9lcnIoY2hpcC0+bm9yLmRldiwgInVuc3VwcG9ydGVkIFNQSSByZWFkIG1v ZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGlwLT5jdGxfdmFsW3NtY19yZWFk XSB8PSBjbWQgfAorCQlDT05UUk9MX0lPX0RVTU1ZX1NFVChjaGlwLT5ub3IucmVhZF9kdW1teSAv IDgpOworCisJZGV2X2RiZyhjb250cm9sbGVyLT5kZXYsICJiYXNlIGNvbnRyb2wgcmVnaXN0ZXI6 ICUwOHhcbiIsCisJCWNoaXAtPmN0bF92YWxbc21jX3JlYWRdKTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBhc3BlZWRfc21jX3NldHVwX2ZsYXNoKHN0cnVjdCBhc3BlZWRfc21jX2NvbnRy b2xsZXIgKmNvbnRyb2xsZXIsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3Qg cmVzb3VyY2UgKnIpCit7CisJY29uc3Qgc3RydWN0IGFzcGVlZF9zbWNfaW5mbyAqaW5mbyA9IGNv bnRyb2xsZXItPmluZm87CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udHJvbGxlci0+ZGV2Owor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CisJdW5zaWduZWQgaW50IGNzOworCWludCByZXQg PSAtRU5PREVWOworCisJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxk KSB7CisJCXN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXA7CisJCXN0cnVjdCBzcGlfbm9yICpu b3I7CisJCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCisJCS8qIFRoaXMgZHJpdmVyIGRvZXMgbm90 IHN1cHBvcnQgTkFORCBvciBOT1IgZmxhc2ggZGV2aWNlcy4gKi8KKwkJaWYgKCFvZl9kZXZpY2Vf aXNfY29tcGF0aWJsZShjaGlsZCwgImplZGVjLHNwaS1ub3IiKSkKKwkJCWNvbnRpbnVlOworCisJ CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAicmVnIiwgJmNzKTsKKwkJaWYgKHJl dCkgeworCQkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBub3QgcmVhZCBjaGlwIHNlbGVjdC5cbiIp OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoY3MgPj0gaW5mby0+bmNlKSB7CisJCQlkZXZfZXJy KGRldiwgIkNoaXAgc2VsZWN0ICVkIG91dCBvZiByYW5nZS5cbiIsCisJCQkJY3MpOworCQkJcmV0 ID0gLUVSQU5HRTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNvbnRyb2xsZXItPmNoaXBzW2Nz XSkgeworCQkJZGV2X2VycihkZXYsICJDaGlwIHNlbGVjdCAlZCBhbHJlYWR5IGluIHVzZSBieSAl c1xuIiwKKwkJCQljcywgZGV2X25hbWUoY29udHJvbGxlci0+Y2hpcHNbY3NdLT5ub3IuZGV2KSk7 CisJCQlyZXQgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfQorCisJCWNoaXAgPSBkZXZtX2t6YWxs b2MoY29udHJvbGxlci0+ZGV2LCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFj aGlwKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKworCQljaGlwLT5jb250 cm9sbGVyID0gY29udHJvbGxlcjsKKwkJY2hpcC0+Y3RsID0gY29udHJvbGxlci0+cmVncyArIGlu Zm8tPmN0bDAgKyBjcyAqIDQ7CisJCWNoaXAtPmNzID0gY3M7CisKKwkJbm9yID0gJmNoaXAtPm5v cjsKKwkJbXRkID0gJm5vci0+bXRkOworCisJCW5vci0+ZGV2ID0gZGV2OworCQlub3ItPnByaXYg PSBjaGlwOworCQlzcGlfbm9yX3NldF9mbGFzaF9ub2RlKG5vciwgY2hpbGQpOworCQlub3ItPnJl YWQgPSBhc3BlZWRfc21jX3JlYWRfdXNlcjsKKwkJbm9yLT53cml0ZSA9IGFzcGVlZF9zbWNfd3Jp dGVfdXNlcjsKKwkJbm9yLT5yZWFkX3JlZyA9IGFzcGVlZF9zbWNfcmVhZF9yZWc7CisJCW5vci0+ d3JpdGVfcmVnID0gYXNwZWVkX3NtY193cml0ZV9yZWc7CisJCW5vci0+cHJlcGFyZSA9IGFzcGVl ZF9zbWNfcHJlcDsKKwkJbm9yLT51bnByZXBhcmUgPSBhc3BlZWRfc21jX3VucHJlcDsKKworCQly ZXQgPSBhc3BlZWRfc21jX2NoaXBfc2V0dXBfaW5pdChjaGlwLCByKTsKKwkJaWYgKHJldCkKKwkJ CWJyZWFrOworCisJCS8qCisJCSAqIFRPRE86IEFkZCBzdXBwb3J0IGZvciBTUElfTk9SX1FVQUQg YW5kIFNQSV9OT1JfRFVBTAorCQkgKiBhdHRhY2ggd2hlbiBib2FyZCBzdXBwb3J0IGlzIHByZXNl bnQgYXMgZGV0ZXJtaW5lZAorCQkgKiBieSBvZiBwcm9wZXJ0eS4KKwkJICovCisJCXJldCA9IHNw aV9ub3Jfc2Nhbihub3IsIE5VTEwsIFNQSV9OT1JfTk9STUFMKTsKKwkJaWYgKHJldCkKKwkJCWJy ZWFrOworCisJCXJldCA9IGFzcGVlZF9zbWNfY2hpcF9zZXR1cF9maW5pc2goY2hpcCk7CisJCWlm IChyZXQpCisJCQlicmVhazsKKworCQlyZXQgPSBtdGRfZGV2aWNlX3JlZ2lzdGVyKG10ZCwgTlVM TCwgMCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQljb250cm9sbGVyLT5jaGlwc1tjc10g PSBjaGlwOworCX0KKworCWlmIChyZXQpCisJCWFzcGVlZF9zbWNfdW5yZWdpc3Rlcihjb250cm9s bGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXNwZWVkX3NtY19wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAg PSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owor CXN0cnVjdCBhc3BlZWRfc21jX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CisJY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJY29uc3Qgc3RydWN0IGFzcGVlZF9zbWNfaW5mbyAqaW5m bzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJbWF0Y2ggPSBvZl9tYXRj aF9kZXZpY2UoYXNwZWVkX3NtY19tYXRjaGVzLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoIHx8 ICFtYXRjaC0+ZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaW5mbyA9IG1hdGNoLT5kYXRhOwor CisJY29udHJvbGxlciA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmNvbnRyb2xs ZXIpICsKKwkJaW5mby0+bmNlICogc2l6ZW9mKGNvbnRyb2xsZXItPmNoaXBzWzBdKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFjb250cm9sbGVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwljb250cm9sbGVy LT5pbmZvID0gaW5mbzsKKwljb250cm9sbGVyLT5kZXYgPSBkZXY7CisKKwltdXRleF9pbml0KCZj b250cm9sbGVyLT5tdXRleCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29udHJvbGxl cik7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0s IDApOworCWNvbnRyb2xsZXItPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMp OworCWlmIChJU19FUlIoY29udHJvbGxlci0+cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJDYW5u b3QgcmVtYXAgY29udHJvbGxlciBhZGRyZXNzLlxuIik7CisJCXJldHVybiBQVFJfRVJSKGNvbnRy b2xsZXItPnJlZ3MpOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgMSk7CisJY29udHJvbGxlci0+YWhiX2Jhc2UgPSBkZXZtX2lvcmVtYXBf cmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoY29udHJvbGxlci0+YWhiX2Jhc2UpKSB7 CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHJlbWFwIGNvbnRyb2xsZXIgYWRkcmVzcy5cbiIpOwor CQlyZXR1cm4gUFRSX0VSUihjb250cm9sbGVyLT5haGJfYmFzZSk7CisJfQorCisJcmV0ID0gYXNw ZWVkX3NtY19zZXR1cF9mbGFzaChjb250cm9sbGVyLCBucCwgcmVzKTsKKwlpZiAocmV0KQorCQlk ZXZfZXJyKGRldiwgIkFzcGVlZCBTTUMgcHJvYmUgZmFpbGVkICVkXG4iLCByZXQpOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXNwZWVkX3NtY19k cml2ZXIgPSB7CisJLnByb2JlID0gYXNwZWVkX3NtY19wcm9iZSwKKwkucmVtb3ZlID0gYXNwZWVk X3NtY19yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBERVZJQ0VfTkFNRSwKKwkJLm9m X21hdGNoX3RhYmxlID0gYXNwZWVkX3NtY19tYXRjaGVzLAorCX0KK307CisKK21vZHVsZV9wbGF0 Zm9ybV9kcml2ZXIoYXNwZWVkX3NtY19kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFT UEVFRCBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJN aWx0b24gTWlsbGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIAoyLjcuNAoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51 eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==