[PATCH v6 15/17] mtd: spinand: negotiate optimal controller operating point before dirmap creation
Santhosh Kumar K <[email protected]> Thu, 23 Jul 2026 16:32:17 +0530
| Newsgroups | org.infradead.lists.linux-mtd,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-spi |
|---|---|
| Message-ID | <[email protected]> |
RGlybWFwIGRlc2NyaXB0b3JzIGVuY29kZSB0aGUgb3AgdGVtcGxhdGUgaW5jbHVkaW5nIHRoZSBv cGVyYXRpbmcKZnJlcXVlbmN5IGF0IGNyZWF0aW9uIHRpbWUsIHNvIGNvbnRyb2xsZXIgb3B0aW1p emF0aW9uIG11c3QgY29tcGxldGUKYmVmb3JlIGRpcm1hcHMgYXJlIGNyZWF0ZWQgdG8gZW5zdXJl IHRoZSB2YWxpZGF0ZWQgZnJlcXVlbmN5IGlzCmVtYmVkZGVkIGluIHRoZSBkZXNjcmlwdG9ycyBm cm9tIHRoZSBzdGFydC4KCk1vdmUgZGlybWFwIGNyZWF0aW9uIGZyb20gc3BpbmFuZF9pbml0KCkg dG8gc3BpbmFuZF9wcm9iZSgpLCBhZnRlciBhCm5ldyBzcGluYW5kX29wdGltaXplX2NvbnRyb2xs ZXIoKSBjYWxsIHRoYXQgbmVnb3RpYXRlcyB0aGUgYmVzdAphdmFpbGFibGUgb3BlcmF0aW5nIHBv aW50LiBzcGluYW5kX29wdGltaXplX2NvbnRyb2xsZXIoKSB0cmllcyB0aGUKcHJlLXNlbGVjdGVk IHZhcmlhbnQgZmlyc3QuIElmIHRoZSBjb250cm9sbGVyIHNpZ25hbHMgdGhhdCBvcHRpbWl6YXRp b24KaXMgbm90IGFwcGxpY2FibGUgZm9yIHRoYXQgb3AsIHNwaW5hbmRfdHJ5X3JhbmtlZF92YXJp YW50KCkgaXRlcmF0ZXMKcmVtYWluaW5nIHZhcmlhbnRzIGluIHBlcmZvcm1hbmNlIG9yZGVyIOKA lCBPRFRSIHZhcmlhbnRzIGZpcnN0LCB0aGVuClNTRFIgdmFyaWFudHMgYWZ0ZXIgc3dpdGNoaW5n IHRoZSBidXMgaW50ZXJmYWNlIGlmIG5lZWRlZC4gT24gZnVsbApmYWlsdXJlIHRoZSBkZXZpY2Ug ZmFsbHMgYmFjayB0byB0aGUgYmVzdCBhdmFpbGFibGUgbm9uLW9wdGltaXplZCBtb2RlLgoKQWRk IHNwaW5hbmRfcmVzZXRfbWF4X2ZyZXFfb3BzKCkgdG8gY29weSBvcCB0ZW1wbGF0ZXMgd2l0aCBt YXhfZnJlcQp6ZXJvZWQgYmVmb3JlIGVhY2ggZXhlY3V0ZV90dW5pbmcgY2FsbCwgZW5mb3JjaW5n IHRoZSBpbnZhcmlhbnQgdGhhdCBhCm5vbi16ZXJvIG1heF9mcmVxIG9ubHkgcmVzdWx0cyBmcm9t IGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uCgpPcHRpbWl6YXRpb24gZmFpbHVyZSBpcyBuZXZlciBm YXRhbDsgdGhlIGRldmljZSBvcGVyYXRlcyBhdCB0aGUKY29uc2VydmF0aXZlIGJhc2UgcmF0ZS4K ClNpZ25lZC1vZmYtYnk6IFNhbnRob3NoIEt1bWFyIEsgPHMtazZAdGkuY29tPgotLS0KIGRyaXZl cnMvbXRkL25hbmQvc3BpL2NvcmUuYyB8IDIwNiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0KIGluY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaCB8ICAxMSArKwogMiBmaWxlcyBj aGFuZ2VkLCAyMDggaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9k cml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMK aW5kZXggN2MzMzQxZjFmY2EwLi5iNzlkMDZkOWRkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRk L25hbmQvc3BpL2NvcmUuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMKQEAgLTEy ODQsNiArMTI4NCw3IEBAIHN0YXRpYyBpbnQgc3BpbmFuZF9jcmVhdGVfZGlybWFwKHN0cnVjdCBz cGluYW5kX2RldmljZSAqc3BpbmFuZCwKIAlpbmZvLmxlbmd0aCA9IG5hbmRkZXZfcGFnZV9zaXpl KG5hbmQpICsgbmFuZGRldl9wZXJfcGFnZV9vb2JzaXplKG5hbmQpOwogCWluZm8ucHJpbWFyeV9v cF90bXBsID0gKnNwaW5hbmQtPm9wX3RlbXBsYXRlcy0+dXBkYXRlX2NhY2hlOwogCWluZm8ucHJp bWFyeV9vcF90bXBsLmRhdGEuZWNjID0gZW5hYmxlX2VjYzsKKwlpbmZvLnByaW1hcnlfb3BfdG1w bC5tYXhfZnJlcSA9IHNwaW5hbmQtPm1heF93cml0ZV9vcC5tYXhfZnJlcTsKIAlkZXNjID0gZGV2 bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUoJnNwaW5hbmQtPnNwaW1lbS0+c3BpLT5kZXYsCiAJCQkJ CSAgc3BpbmFuZC0+c3BpbWVtLCAmaW5mbyk7CiAJaWYgKElTX0VSUihkZXNjKSkKQEAgLTEyOTQs OSArMTI5NSwxMSBAQCBzdGF0aWMgaW50IHNwaW5hbmRfY3JlYXRlX2Rpcm1hcChzdHJ1Y3Qgc3Bp bmFuZF9kZXZpY2UgKnNwaW5hbmQsCiAJLyogUmVhZCBkZXNjcmlwdG9yICovCiAJaW5mby5wcmlt YXJ5X29wX3RtcGwgPSAqc3BpbmFuZC0+b3BfdGVtcGxhdGVzLT5yZWFkX2NhY2hlOwogCWluZm8u cHJpbWFyeV9vcF90bXBsLmRhdGEuZWNjID0gZW5hYmxlX2VjYzsKKwlpbmZvLnByaW1hcnlfb3Bf dG1wbC5tYXhfZnJlcSA9IHNwaW5hbmQtPm1heF9yZWFkX29wLm1heF9mcmVxOwogCWlmIChzZWNv bmRhcnlfb3ApIHsKIAkJaW5mby5zZWNvbmRhcnlfb3BfdG1wbCA9ICpzcGluYW5kLT5vcF90ZW1w bGF0ZXMtPmNvbnRfcmVhZF9jYWNoZTsKIAkJaW5mby5zZWNvbmRhcnlfb3BfdG1wbC5kYXRhLmVj YyA9IGVuYWJsZV9lY2M7CisJCWluZm8uc2Vjb25kYXJ5X29wX3RtcGwubWF4X2ZyZXEgPSBzcGlu YW5kLT5tYXhfcmVhZF9vcC5tYXhfZnJlcTsKIAl9CiAJZGVzYyA9IHNwaW5hbmRfY3JlYXRlX3Jk ZXNjKHNwaW5hbmQsICZpbmZvKTsKIAlpZiAoSVNfRVJSKGRlc2MpKQpAQCAtMTc0NSw2ICsxNzQ4 LDE3IEBAIGludCBzcGluYW5kX21hdGNoX2FuZF9pbml0KHN0cnVjdCBzcGluYW5kX2RldmljZSAq c3BpbmFuZCwKIAkJCQlzcGluYW5kLT5jb250X3JlYWRfcG9zc2libGUgPSBmYWxzZTsKIAkJfQog CisJCS8qCisJCSAqIFNhdmUgdGhlIGZ1bGwgcmVhZCB2YXJpYW50IGxpc3QgKE9EVFIgYW5kIFNT RFIgb3BzKSBmb3IKKwkJICogcmFua2VkIGNvbnRyb2xsZXIgb3B0aW1pemF0aW9uLiBPbmx5IHNh dmVkIHdoZW4gYWxsIE9EVFIKKwkJICogdGVtcGxhdGVzIGFyZSB2YWxpZDsgc3BpbmFuZF9vcHRp bWl6ZV9jb250cm9sbGVyKCkgdXNlcyB0aGlzCisJCSAqIHRvIGZhbGwgYmFjayB0byB0aGUgbmV4 dC1iZXN0IHZhcmlhbnQgd2hlbiBuZWVkZWQuCisJCSAqLworCQlpZiAoc3BpbmFuZC0+b2R0cl9v cF90ZW1wbGF0ZXMucmVhZF9jYWNoZSAmJgorCQkgICAgc3BpbmFuZC0+b2R0cl9vcF90ZW1wbGF0 ZXMud3JpdGVfY2FjaGUgJiYKKwkJICAgIHNwaW5hbmQtPm9kdHJfb3BfdGVtcGxhdGVzLnVwZGF0 ZV9jYWNoZSkKKwkJCXNwaW5hbmQtPmFsbF9yZWFkX3ZhcmlhbnRzID0gaW5mby0+b3BfdmFyaWFu dHMucmVhZF9jYWNoZTsKKwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE5MjMsNyArMTkzNyw2IEBA IHN0YXRpYyBpbnQgc3BpbmFuZF9tdGRfc3VzcGVuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIAog c3RhdGljIGludCBzcGluYW5kX2luaXQoc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kKQog ewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzcGluYW5kLT5zcGltZW0tPnNwaS0+ZGV2OwogCXN0 cnVjdCBtdGRfaW5mbyAqbXRkID0gc3BpbmFuZF90b19tdGQoc3BpbmFuZCk7CiAJc3RydWN0IG5h bmRfZGV2aWNlICpuYW5kID0gbXRkX3RvX25hbmRkZXYobXRkKTsKIAlpbnQgcmV0OwpAQCAtMjAx NSwxNCArMjAyOCw2IEBAIHN0YXRpYyBpbnQgc3BpbmFuZF9pbml0KHN0cnVjdCBzcGluYW5kX2Rl dmljZSAqc3BpbmFuZCkKIAltdGQtPmVjY19zdGVwX3NpemUgPSBuYW5kZGV2X2dldF9lY2NfY29u ZihuYW5kKS0+c3RlcF9zaXplOwogCW10ZC0+Yml0ZmxpcF90aHJlc2hvbGQgPSBESVZfUk9VTkRf VVAobXRkLT5lY2Nfc3RyZW5ndGggKiAzLCA0KTsKIAotCXJldCA9IHNwaW5hbmRfY3JlYXRlX2Rp cm1hcHMoc3BpbmFuZCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwKLQkJCSJGYWlsZWQg dG8gY3JlYXRlIGRpcmVjdCBtYXBwaW5ncyBmb3IgcmVhZC93cml0ZSBvcGVyYXRpb25zIChlcnIg PSAlZClcbiIsCi0JCQlyZXQpOwotCQlnb3RvIGVycl9jbGVhbnVwX2VjY19lbmdpbmU7Ci0JfQot CiAJcmV0dXJuIDA7CiAKIGVycl9jbGVhbnVwX2VjY19lbmdpbmU6CkBAIC0yMDUxLDYgKzIwNTYs MTc1IEBAIHN0YXRpYyB2b2lkIHNwaW5hbmRfY2xlYW51cChzdHJ1Y3Qgc3BpbmFuZF9kZXZpY2Ug KnNwaW5hbmQpCiAJa2ZyZWUoc3BpbmFuZC0+c2NyYXRjaGJ1Zik7CiB9CiAKKy8qCisgKiBzcGlu YW5kX3RyeV9yYW5rZWRfdmFyaWFudCgpIC0gVHJ5IGNvbnRyb2xsZXIgb3B0aW1pemF0aW9uIG9u IHZhcmlhbnRzIGluCisgKgkJCQkgIHBlcmZvcm1hbmNlIG9yZGVyLgorICogQHNwaW5hbmQ6ICAg IFNQSSBOQU5EIGRldmljZQorICogQG1lbTogICAgICAgIFNQSSBtZW1vcnkgZGV2aWNlCisgKiBA aWZhY2U6ICAgICAgYnVzIGludGVyZmFjZSB0byBpdGVyYXRlIChPRFRSIG9yIFNTRFIpCisgKiBA dHJpZWRfbWFzazogYml0bWFzayBvZiBhbHJlYWR5LXRyaWVkIHZhcmlhbnQgaW5kaWNlczsgdXBk YXRlZCBvbiBlYWNoIHRyeQorICoKKyAqIEl0ZXJhdGVzIHRoZSBmdWxsIHJlYWQgdmFyaWFudCBs aXN0IGluIGRlc2NlbmRpbmcgcGVyZm9ybWFuY2Ugb3JkZXIsCisgKiBza2lwcGluZyB2YXJpYW50 cyBpbiBAdHJpZWRfbWFzaywgYW5kIGNhbGxzIGV4ZWN1dGVfdHVuaW5nIG9uIGVhY2ggdW50aWwK KyAqIG9uZSBzdWNjZWVkcy4gUmFua2VkIGl0ZXJhdGlvbiBmaW5kcyB0aGUgYmVzdCBhdmFpbGFi bGUgdmFyaWFudCB3aXRob3V0CisgKiByZS10cnlpbmcgYWxyZWFkeS1hdHRlbXB0ZWQgb25lcy4K KyAqCisgKiBPbiBzdWNjZXNzLCBzZXRzIHNwaW5hbmQtPm1heF9yZWFkX29wIGFuZCB1cGRhdGVz IHRoZSBtYXRjaGluZworICogb2R0cl9vcF90ZW1wbGF0ZXMucmVhZF9jYWNoZSBvciBzc2RyX29w X3RlbXBsYXRlcy5yZWFkX2NhY2hlLgorICovCitzdGF0aWMgYm9vbCBzcGluYW5kX3RyeV9yYW5r ZWRfdmFyaWFudChzdHJ1Y3Qgc3BpbmFuZF9kZXZpY2UgKnNwaW5hbmQsCisJCQkJICAgICAgIHN0 cnVjdCBzcGlfbWVtICptZW0sCisJCQkJICAgICAgIGVudW0gc3BpbmFuZF9idXNfaW50ZXJmYWNl IGlmYWNlLAorCQkJCSAgICAgICB1MzIgKnRyaWVkX21hc2spCit7CisJY29uc3Qgc3RydWN0IHNw aW5hbmRfb3BfdmFyaWFudHMgKnZhcmlhbnRzID0gc3BpbmFuZC0+YWxsX3JlYWRfdmFyaWFudHM7 CisJY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKmJlc3Q7CisJaW50IHJldDsKKworCWlmICghdmFy aWFudHMpCisJCXJldHVybiBmYWxzZTsKKworCXdoaWxlICgoYmVzdCA9IHNwaW5hbmRfb3BfZmlu ZF9iZXN0X3ZhcmlhbnQoc3BpbmFuZCwgdmFyaWFudHMsIGlmYWNlLAorCQkJCQkJICAgICp0cmll ZF9tYXNrKSkpIHsKKwkJKnRyaWVkX21hc2sgfD0gQklUKGJlc3QgLSB2YXJpYW50cy0+b3BzKTsK KwkJc3BpbmFuZC0+bWF4X3JlYWRfb3AgPSAqYmVzdDsKKwkJc3BpbmFuZC0+bWF4X3JlYWRfb3Au bWF4X2ZyZXEgPSAwOworCQlyZXQgPSBzcGlfbWVtX2V4ZWN1dGVfdHVuaW5nKG1lbSwgJnNwaW5h bmQtPm1heF9yZWFkX29wLAorCQkJCQkgICAgICZzcGluYW5kLT5tYXhfd3JpdGVfb3ApOworCQlp ZiAocmV0ICYmIHJldCAhPSAtRU9QTk9UU1VQUCkKKwkJCWRldl9kYmcoJm1lbS0+c3BpLT5kZXYs ICIlcyBvcHRpbWl6YXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCQlpZmFjZSA9PSBPRFRSID8gIk9E VFIiIDogIlNTRFIiLCByZXQpOworCQlpZiAoIXJldCAmJiBzcGluYW5kLT5tYXhfcmVhZF9vcC5t YXhfZnJlcSkgeworCQkJaWYgKGlmYWNlID09IE9EVFIpCisJCQkJc3BpbmFuZC0+b2R0cl9vcF90 ZW1wbGF0ZXMucmVhZF9jYWNoZSA9IGJlc3Q7CisJCQllbHNlCisJCQkJc3BpbmFuZC0+c3Nkcl9v cF90ZW1wbGF0ZXMucmVhZF9jYWNoZSA9IGJlc3Q7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0K KwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBzcGluYW5kX3Jlc2V0X21heF9mcmVxX29wcygp IC0gQ29weSBvcCB0ZW1wbGF0ZXMgYW5kIHplcm8gbWF4X2ZyZXEgb24gYm90aC4KKyAqIEBzcGlu YW5kOiAgICBTUEkgTkFORCBkZXZpY2UKKyAqIEB0ZW1wbGF0ZXM6ICBvcCB0ZW1wbGF0ZSBzZXQg dG8gY29weSBmcm9tCisgKgorICogQ2FsbGVkIGJlZm9yZSBleGVjdXRlX3R1bmluZyBzbyBtYXhf ZnJlcSBzdGFydHMgYXQgemVybzsgZXhlY3V0ZV90dW5pbmcgc2V0cworICogaXQgdG8gdGhlIHZh bGlkYXRlZCBjbG9jayByYXRlIG9ubHkgb24gc3VjY2Vzcy4gQSBub24temVybyBtYXhfZnJlcSBt ZWFucworICogY29udHJvbGxlci1vcHRpbWl6ZWQ7IHplcm8gbWVhbnMgdGhlIGJhc2UgcmF0ZSBh cHBsaWVzLgorICovCitzdGF0aWMgdm9pZCBzcGluYW5kX3Jlc2V0X21heF9mcmVxX29wcyhzdHJ1 Y3Qgc3BpbmFuZF9kZXZpY2UgKnNwaW5hbmQsCisJCQkJICAgICAgIHN0cnVjdCBzcGluYW5kX21l bV9vcHMgKnRlbXBsYXRlcykKK3sKKwlzcGluYW5kLT5tYXhfcmVhZF9vcCA9ICp0ZW1wbGF0ZXMt PnJlYWRfY2FjaGU7CisJc3BpbmFuZC0+bWF4X3JlYWRfb3AubWF4X2ZyZXEgPSAwOworCXNwaW5h bmQtPm1heF93cml0ZV9vcCA9ICp0ZW1wbGF0ZXMtPndyaXRlX2NhY2hlOworCXNwaW5hbmQtPm1h eF93cml0ZV9vcC5tYXhfZnJlcSA9IDA7Cit9CisKKy8qCisgKiBzcGluYW5kX29wdGltaXplX2Nv bnRyb2xsZXIoKSAtIE5lZ290aWF0ZSB0aGUgb3B0aW1hbCBjb250cm9sbGVyIG9wZXJhdGluZwor ICoJCQkJICAgcG9pbnQgZm9yIHRoZSBTUEkgTkFORCBkZXZpY2UuCisgKiBAc3BpbmFuZDogICAg U1BJIE5BTkQgZGV2aWNlCisgKiBAbWVtOiAgICAgICAgU1BJIG1lbW9yeSBkZXZpY2UKKyAqCisg KiBUcmllcyB0aGUgcHJlLXNlbGVjdGVkIHZhcmlhbnQgZmlyc3QuICBJZiB0aGUgY29udHJvbGxl ciBzaWduYWxzIHRoYXQKKyAqIG9wdGltaXphdGlvbiBpcyBub3QgYXBwbGljYWJsZSBmb3IgdGhh dCBzcGVjaWZpYyBvcCwgaXRlcmF0ZXMgYWxsIHJlbWFpbmluZworICogdmFyaWFudHMgaW4gcGVy Zm9ybWFuY2Ugb3JkZXIuICBGb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgYm90aCBEVFIgYW5kIFNE UgorICogaW50ZXJmYWNlcywgRFRSIHZhcmlhbnRzIGFyZSB0cmllZCBmaXJzdDsgaWYgYWxsIGZh aWwgdGhlIGRldmljZSBpcworICogc3dpdGNoZWQgdG8gU0RSIG1vZGUgYW5kIFNEUiB2YXJpYW50 cyBhcmUgdHJpZWQuICBPbiBmdWxsIGZhaWx1cmUgdGhlCisgKiBkZXZpY2UgZmFsbHMgYmFjayB0 byB0aGUgYmVzdCBhdmFpbGFibGUgbm9uLW9wdGltaXplZCBtb2RlLiAgRGV2aWNlcyB0aGF0Cisg KiBzdXBwb3J0IG9ubHkgU0RSIHNraXAgdGhlIERUUiByYW5rZWQgcGFzcyBlbnRpcmVseS4KKyAq CisgKiBPcHRpbWl6YXRpb24gZmFpbHVyZSBpcyBuZXZlciBmYXRhbC4KKyAqCisgKiBOb3RlOiB0 cmllZF9tYXNrIGlzIHUzMiwgc3VwcG9ydGluZyB1cCB0byAzMiB2YXJpYW50cyB0b3RhbCBhY3Jv c3MgYm90aAorICogT0RUUiBhbmQgU1NEUi4gRmxhc2ggZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAz MiByZWFkIHZhcmlhbnRzIGFyZSBub3QKKyAqIHN1cHBvcnRlZC4KKyAqLworc3RhdGljIHZvaWQg c3BpbmFuZF9vcHRpbWl6ZV9jb250cm9sbGVyKHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFu ZCwKKwkJCQkJc3RydWN0IHNwaV9tZW0gKm1lbSkKK3sKKwl1MzIgdHJpZWRfbWFzazsKKwlpbnQg cmV0OworCisJLyogU2tpcCBlbnRpcmVseSB3aGVuIG5vIHBvc3QtY29uZmlnIHRhcmdldCBpcyBj b25maWd1cmVkLiAqLworCWlmICghbWVtLT5zcGktPnBvc3RfY29uZmlnX21heF9zcGVlZF9oeikK KwkJcmV0dXJuOworCisJc3BpbmFuZF9yZXNldF9tYXhfZnJlcV9vcHMoc3BpbmFuZCwgc3BpbmFu ZC0+b3BfdGVtcGxhdGVzKTsKKworCXJldCA9IHNwaV9tZW1fZXhlY3V0ZV90dW5pbmcobWVtLCAm c3BpbmFuZC0+bWF4X3JlYWRfb3AsCisJCQkJICAgICAmc3BpbmFuZC0+bWF4X3dyaXRlX29wKTsK KwlpZiAocmV0ICYmIHJldCAhPSAtRU9QTk9UU1VQUCkKKwkJZGV2X2RiZygmbWVtLT5zcGktPmRl diwgIkNvbnRyb2xsZXIgb3B0aW1pemF0aW9uIGZhaWxlZDogJWRcbiIsCisJCQlyZXQpOworCisJ LyoKKwkgKiBBbnkgbm9uLXplcm8gcmV0dXJuIG9yIGEgc2V0IG1heF9mcmVxIG1lYW5zIHdlIGFy ZSBkb25lIChlcnJvciwKKwkgKiB1bnN1cHBvcnRlZCwgb3Igc3VjY2VzcykuIEZhbGxiYWNrIG9u bHkgZm9yIHRoZSBvcC1zcGVjaWZpYyAic2tpcCIKKwkgKiBzaWduYWw6IHJldCA9PSAwIHdpdGgg bWF4X2ZyZXEgc3RpbGwgMC4KKwkgKi8KKwlpZiAocmV0IHx8IHNwaW5hbmQtPm1heF9yZWFkX29w Lm1heF9mcmVxKQorCQlyZXR1cm47CisKKwkvKiBTU0RSLW9ubHkgZGV2aWNlcyBoYXZlIG5vIHJh bmtlZCBPRFRSIGZhbGxiYWNrIGF2YWlsYWJsZS4gKi8KKwlpZiAoc3BpbmFuZC0+YnVzX2lmYWNl ID09IFNTRFIgfHwgIXNwaW5hbmQtPmFsbF9yZWFkX3ZhcmlhbnRzKQorCQlyZXR1cm47CisKKwlp ZiAoV0FSTl9PTihzcGluYW5kLT5hbGxfcmVhZF92YXJpYW50cy0+bm9wcyA+IDMyKSkKKwkJcmV0 dXJuOworCisJLyogTWFyayB0aGUgcHJlLXNlbGVjdGVkIE9EVFIgdmFyaWFudCBhcyBhbHJlYWR5 IHRyaWVkLiAqLworCXRyaWVkX21hc2sgPSBCSVQoc3BpbmFuZC0+b2R0cl9vcF90ZW1wbGF0ZXMu cmVhZF9jYWNoZSAtCisJCQkgc3BpbmFuZC0+YWxsX3JlYWRfdmFyaWFudHMtPm9wcyk7CisKKwlk ZXZfZGJnKCZtZW0tPnNwaS0+ZGV2LAorCQkiT3B0aW1pemF0aW9uIHNraXBwZWQgZm9yIGN1cnJl bnQgb3A7IHNlYXJjaGluZyBmb3IgYmVzdCB2YXJpYW50XG4iKTsKKworCS8qIFBhc3MgMTogdHJ5 IGFsbCByZW1haW5pbmcgT0RUUiB2YXJpYW50cyBpbiBwZXJmb3JtYW5jZSBvcmRlci4gKi8KKwlp ZiAoc3BpbmFuZF90cnlfcmFua2VkX3ZhcmlhbnQoc3BpbmFuZCwgbWVtLCBPRFRSLCAmdHJpZWRf bWFzaykpCisJCXJldHVybjsKKworCS8qCisJICogUGFzcyAyOiBzd2l0Y2ggdG8gU1NEUiBhbmQg dHJ5IGFsbCBTU0RSIHZhcmlhbnRzIGluIHBlcmZvcm1hbmNlCisJICogb3JkZXIuIGNvbmZpZ3Vy ZV9jaGlwIGlzIGd1YXJhbnRlZWQgbm9uLU5VTEwgaGVyZTogcmVhY2hpbmcgT0RUUgorCSAqIG1v ZGUgcmVxdWlyZXMgaXQuCisJICovCisJaWYgKFdBUk5fT04oIXNwaW5hbmQtPmNvbmZpZ3VyZV9j aGlwKSkKKwkJZ290byB1c2Vfb2R0cl9mYWxsYmFjazsKKworCWlmIChzcGluYW5kLT5jb25maWd1 cmVfY2hpcChzcGluYW5kLCBTU0RSKSkKKwkJZ290byB1c2Vfb2R0cl9mYWxsYmFjazsKKworCXNw aW5hbmQtPm9wX3RlbXBsYXRlcyA9ICZzcGluYW5kLT5zc2RyX29wX3RlbXBsYXRlczsKKwlzcGlu YW5kLT5idXNfaWZhY2UgPSBTU0RSOworCXNwaW5hbmQtPm1heF93cml0ZV9vcCA9ICpzcGluYW5k LT5zc2RyX29wX3RlbXBsYXRlcy53cml0ZV9jYWNoZTsKKwlzcGluYW5kLT5tYXhfd3JpdGVfb3Au bWF4X2ZyZXEgPSAwOworCisJLyogT25seSBPRFRSIHZhcmlhbnRzIHdlcmUgY2FuZGlkYXRlcyBp biBQYXNzIDE7IFNTRFIgYml0cyBhcmUgY2xlYXIuICovCisJaWYgKHNwaW5hbmRfdHJ5X3Jhbmtl ZF92YXJpYW50KHNwaW5hbmQsIG1lbSwgU1NEUiwgJnRyaWVkX21hc2spKQorCQlyZXR1cm47CisK KwkvKgorCSAqIEFsbCBhdHRlbXB0cyBleGhhdXN0ZWQuICBSZXZlcnQgdG8gT0RUUiBmb3Igbm9u LW9wdGltaXplZCBEVFIKKwkgKiBvcGVyYXRpb24uICBJZiByZXZlcnQgZmFpbHMsIHN0YXkgaW4g U1NEUiDigJQgYSBtb2RlIG1pc21hdGNoCisJICogKE9EVFIgb3AgdGVtcGxhdGVzIG9uIFNTRFIt bW9kZSBkZXZpY2UpIHdvdWxkIGNvcnJ1cHQgZGF0YS4KKwkgKi8KKwlpZiAoc3BpbmFuZC0+Y29u ZmlndXJlX2NoaXAoc3BpbmFuZCwgT0RUUikpIHsKKwkJZGV2X3dhcm4oJm1lbS0+c3BpLT5kZXYs CisJCQkgIkZhaWxlZCB0byByZXZlcnQgdG8gT0RUUiwgc3RheWluZyBpbiBTU0RSXG4iKTsKKwkJ c3BpbmFuZF9yZXNldF9tYXhfZnJlcV9vcHMoc3BpbmFuZCwgJnNwaW5hbmQtPnNzZHJfb3BfdGVt cGxhdGVzKTsKKwkJcmV0dXJuOworCX0KKwordXNlX29kdHJfZmFsbGJhY2s6CisJc3BpbmFuZC0+ b3BfdGVtcGxhdGVzID0gJnNwaW5hbmQtPm9kdHJfb3BfdGVtcGxhdGVzOworCXNwaW5hbmQtPmJ1 c19pZmFjZSA9IE9EVFI7CisJc3BpbmFuZF9yZXNldF9tYXhfZnJlcV9vcHMoc3BpbmFuZCwgJnNw aW5hbmQtPm9kdHJfb3BfdGVtcGxhdGVzKTsKK30KKwogc3RhdGljIGludCBzcGluYW5kX3Byb2Jl KHN0cnVjdCBzcGlfbWVtICptZW0pCiB7CiAJc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5k OwpAQCAtMjA3Myw2ICsyMjQ3LDIwIEBAIHN0YXRpYyBpbnQgc3BpbmFuZF9wcm9iZShzdHJ1Y3Qg c3BpX21lbSAqbWVtKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKgorCSAqIE5lZ290 aWF0ZSB0aGUgYmVzdCBjb250cm9sbGVyIG9wZXJhdGluZyBwb2ludCBiZWZvcmUgY3JlYXRpbmcg ZGlybWFwcworCSAqIHNvIHRoZSB2YWxpZGF0ZWQgZnJlcXVlbmN5IGlzIGF2YWlsYWJsZSBhdCBk aXJtYXAgY29uc3RydWN0aW9uIHRpbWUuCisJICovCisJc3BpbmFuZF9vcHRpbWl6ZV9jb250cm9s bGVyKHNwaW5hbmQsIG1lbSk7CisKKwlyZXQgPSBzcGluYW5kX2NyZWF0ZV9kaXJtYXBzKHNwaW5h bmQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmbWVtLT5zcGktPmRldiwKKwkJCSJGYWlsZWQg dG8gY3JlYXRlIGRpcmVjdCBtYXBwaW5ncyBmb3IgcmVhZC93cml0ZSBvcGVyYXRpb25zIChlcnIg PSAlZClcbiIsCisJCQlyZXQpOworCQlnb3RvIGVycl9zcGluYW5kX2NsZWFudXA7CisJfQorCiAJ cmV0ID0gbXRkX2RldmljZV9yZWdpc3RlcihtdGQsIE5VTEwsIDApOwogCWlmIChyZXQpCiAJCWdv dG8gZXJyX3NwaW5hbmRfY2xlYW51cDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3Nw aW5hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaAppbmRleCA1ZjRjMDBhZTcyYTcu LjdlYWNkYTk0OTcxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5oCisr KyBiL2luY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaApAQCAtNzkyLDggKzc5MiwxOSBAQCBzdHJ1 Y3Qgc3BpbmFuZF9kZXZpY2UgewogCXN0cnVjdCBzcGluYW5kX21lbV9vcHMgKm9wX3RlbXBsYXRl czsKIAllbnVtIHNwaW5hbmRfYnVzX2ludGVyZmFjZSBidXNfaWZhY2U7CiAKKwkvKgorCSAqIEZ1 bGwgcmVhZCB2YXJpYW50IGxpc3QgKE9EVFIgYW5kIFNTRFIgb3BzIHRvZ2V0aGVyKSwgc2F2ZWQg d2hlbiBPRFRSCisJICogdGVtcGxhdGVzIGFyZSB2YWxpZC4gVXNlZCBieSBzcGluYW5kX29wdGlt aXplX2NvbnRyb2xsZXIoKSBmb3IgcmFua2VkCisJICogZmFsbGJhY2sgd2hlbiB0aGUgcHJlLXNl bGVjdGVkIHZhcmlhbnQgY2Fubm90IGJlIGNvbnRyb2xsZXItb3B0aW1pemVkLgorCSAqLworCWNv bnN0IHN0cnVjdCBzcGluYW5kX29wX3ZhcmlhbnRzICphbGxfcmVhZF92YXJpYW50czsKKwogCXN0 cnVjdCBzcGluYW5kX2Rpcm1hcCAqZGlybWFwczsKIAorCS8qIFBlcnNpc3RlbnQgb3AgdGVtcGxh dGVzIHVwZGF0ZWQgYnkgZXhlY3V0ZV90dW5pbmcgd2l0aCB2YWxpZGF0ZWQgc3BlZWQuICovCisJ c3RydWN0IHNwaV9tZW1fb3AgbWF4X3JlYWRfb3A7CisJc3RydWN0IHNwaV9tZW1fb3AgbWF4X3dy aXRlX29wOworCiAJaW50ICgqc2VsZWN0X3RhcmdldCkoc3RydWN0IHNwaW5hbmRfZGV2aWNlICpz cGluYW5kLAogCQkJICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0KTsKIAl1bnNpZ25lZCBpbnQgY3Vy X3RhcmdldDsKLS0gCjIuMzQuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==