[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==