From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shravan Ramani Subject: RE: [PATCH v1 1/1] gpio: add driver for Mellanox BlueField GPIO controller Date: Tue, 19 Feb 2019 20:54:49 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org To: Bartosz Golaszewski Cc: Linus Walleij , linux-gpio , LKML List-Id: linux-gpio@vger.kernel.org VGhhbmsgeW91IGZvciB0aGUgZmVlZGJhY2suIFJlZ2FyZGluZyB0aGUgc3VnZ2VzdGVkIHVzZSBv ZiByZWdtYXAgbW1pbywgYWxsIG9mIHRoZSByZWdpc3RlcnMgYmVpbmcgYWNjZXNzZWQgaGVyZSBh cmUgNjQtYml0IGFuZCB0aGUgcmVnbWFwX3VwZGF0ZV9iaXRzL3JlZ21hcF9yZWFkL3JlZ21hcF93 cml0ZSBjYWxscyBhcmVuJ3QgdmVyeSBjb252ZW5pZW50IHRvIHVzZSBpbiB0aGlzIGNhc2UuIEFs bCBvdGhlciBjb21tZW50cyBoYXZlIGJlZW4gYWRkcmVzc2VkIGluIHYyLg0KDQpSZWdhcmRzLA0K U2hyYXZhbiBLdW1hciBSYW1hbmkNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206 IEJhcnRvc3ogR29sYXN6ZXdza2kgPGJnb2xhc3pld3NraUBiYXlsaWJyZS5jb20+IA0KU2VudDog RnJpZGF5LCBGZWJydWFyeSAxNSwgMjAxOSAzOjQ4IEFNDQpUbzogU2hyYXZhbiBSYW1hbmkgPHNy YW1hbmlAbWVsbGFub3guY29tPg0KQ2M6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGlu YXJvLm9yZz47IGxpbnV4LWdwaW8gPGxpbnV4LWdwaW9Admdlci5rZXJuZWwub3JnPjsgTEtNTCA8 bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz4NClN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEgMS8x XSBncGlvOiBhZGQgZHJpdmVyIGZvciBNZWxsYW5veCBCbHVlRmllbGQgR1BJTyBjb250cm9sbGVy DQoNCmN6dy4sIDE0IGx1dCAyMDE5IG8gMjI6MzAgU2hyYXZhbiBLdW1hciBSYW1hbmkgPHNyYW1h bmlAbWVsbGFub3guY29tPg0KbmFwaXNhxYIoYSk6DQo+DQo+IFRoaXMgcGF0Y2ggYWRkcyBzdXBw b3J0IGZvciB0aGUgR1BJTyBjb250cm9sbGVyIHVzZWQgYnkgTWVsbGFub3ggDQo+IEJsdWVGaWVs ZCBTT0NzLg0KPg0KPiBSZXZpZXdlZC1ieTogRGF2aWQgV29vZHMgPGR3b29kc0BtZWxsYW5veC5j b20+DQo+IFNpZ25lZC1vZmYtYnk6IFNocmF2YW4gS3VtYXIgUmFtYW5pIDxzcmFtYW5pQG1lbGxh bm94LmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJzL2dwaW8vS2NvbmZpZyAgICAgIHwgICA3ICsrDQo+ ICBkcml2ZXJzL2dwaW8vTWFrZWZpbGUgICAgIHwgICAxICsNCj4gIGRyaXZlcnMvZ3Bpby9ncGlv LW1seGJmLmMgfCAyODcgDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysNCj4gIDMgZmlsZXMgY2hhbmdlZCwgMjk1IGluc2VydGlvbnMoKykNCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwaW8vZ3Bpby1tbHhiZi5jDQo+DQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGluZGV4IA0KPiBi NWEyODQ1Li4yYmViZTkyIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwaW8vS2NvbmZpZw0KPiAr KysgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZw0KPiBAQCAtMTI5Miw2ICsxMjkyLDEzIEBAIGNvbmZp ZyBHUElPX01FUlJJRklFTEQNCj4gICAgICAgICBoZWxwDQo+ICAgICAgICAgICBTYXkgWSBoZXJl IHRvIHN1cHBvcnQgSW50ZWwgTWVycmlmaWVsZCBHUElPLg0KPg0KPiArY29uZmlnIEdQSU9fTUxY QkYNCj4gKyAgICAgICB0cmlzdGF0ZSAiTWVsbGFub3ggQmx1ZUZpZWxkIFNvQyBHUElPIg0KPiAr ICAgICAgIGRlcGVuZHMgb24gKE1FTExBTk9YX1BMQVRGT1JNICYmIEFSTTY0ICYmIEFDUEkpIHx8 IENPTVBJTEVfVEVTVA0KPiArICAgICAgIHNlbGVjdCBHUElPX0dFTkVSSUMNCg0KWW91J3JlIG5v dCByZWFsbHkgZGVwZW5kaW5nIG9uIGl0Lg0KDQo+ICsgICAgICAgaGVscA0KPiArICAgICAgICAg U2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBHUElPIHN1cHBvcnQgb24gTWVsbGFub3ggQmx1ZUZpZWxk IFNvQy4NCj4gKw0KPiAgY29uZmlnIEdQSU9fTUxfSU9IDQo+ICAgICAgICAgdHJpc3RhdGUgIk9L SSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0ggR1BJTyBzdXBwb3J0Ig0KPiAgICAgICAgIGRlcGVu ZHMgb24gWDg2IHx8IENPTVBJTEVfVEVTVCBkaWZmIC0tZ2l0IA0KPiBhL2RyaXZlcnMvZ3Bpby9N YWtlZmlsZSBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZSBpbmRleCAzNzYyOGY4Li44ZDU0Mjc5IA0K PiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncGlvL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMv Z3Bpby9NYWtlZmlsZQ0KPiBAQCAtODMsNiArODMsNyBAQCBvYmotJChDT05GSUdfR1BJT19NRU5a MTI3KSAgICArPSBncGlvLW1lbnoxMjcubw0KPiAgb2JqLSQoQ09ORklHX0dQSU9fTUVSUklGSUVM RCkgICs9IGdwaW8tbWVycmlmaWVsZC5vDQo+ICBvYmotJChDT05GSUdfR1BJT19NQzMzODgwKSAg ICAgKz0gZ3Bpby1tYzMzODgwLm8NCj4gIG9iai0kKENPTkZJR19HUElPX01DOVMwOERaNjApICAr PSBncGlvLW1jOXMwOGR6NjAubw0KPiArb2JqLSQoQ09ORklHX0dQSU9fTUxYQkYpICAgICAgICs9 IGdwaW8tbWx4YmYubw0KPiAgb2JqLSQoQ09ORklHX0dQSU9fTUxfSU9IKSAgICAgICs9IGdwaW8t bWwtaW9oLm8NCj4gIG9iai0kKENPTkZJR19HUElPX01NX0xBTlRJUSkgICArPSBncGlvLW1tLWxh bnRpcS5vDQo+ICBvYmotJChDT05GSUdfR1BJT19NT0NLVVApICAgICAgKz0gZ3Bpby1tb2NrdXAu bw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tbWx4YmYuYyBiL2RyaXZlcnMvZ3Bp by9ncGlvLW1seGJmLmMgbmV3IA0KPiBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAuLmU1 YzUwZGINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tbHhiZi5j DQo+IEBAIC0wLDAgKzEsMjg3IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvYWNwaS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L2JpdG9wcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L2dwaW8vZHJpdmVyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9pb3BvcnQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPg0K PiArI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvY29uc3VtZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbS5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L3Jlc291cmNlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCj4g KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4N Cj4gKw0KPiArLyogTnVtYmVyIG9mIHBpbnMgb24gQmx1ZUZpZWxkICovDQo+ICsjZGVmaW5lIE1M WEJGX0dQSU9fTlIgNTQNCj4gKw0KPiArLyogUGFkIEVsZWN0cmljYWwgQ29udHJvbHMuICovDQo+ ICsjZGVmaW5lIEdQSU9fUEFEX0NPTlRST0xfX0ZJUlNUX1dPUkQgMHgwNzAwICNkZWZpbmUgDQo+ ICtHUElPX1BBRF9DT05UUk9MXzFfX0ZJUlNUX1dPUkQgMHgwNzA4ICNkZWZpbmUgDQo+ICtHUElP X1BBRF9DT05UUk9MXzJfX0ZJUlNUX1dPUkQgMHgwNzEwICNkZWZpbmUgDQo+ICtHUElPX1BBRF9D T05UUk9MXzNfX0ZJUlNUX1dPUkQgMHgwNzE4DQo+ICsNCj4gKyNkZWZpbmUgR1BJT19QSU5fRElS X0kgMHgxMDQwDQo+ICsjZGVmaW5lIEdQSU9fUElOX0RJUl9PIDB4MTA0OA0KPiArI2RlZmluZSBH UElPX1BJTl9TVEFURSAweDEwMDANCj4gKyNkZWZpbmUgR1BJT19TQ1JBVENIUEFEIDB4MjANCj4g Kw0KPiArI2lmZGVmIENPTkZJR19QTQ0KPiArc3RydWN0IGJsdWVmaWVsZF9jb250ZXh0X3NhdmVf cmVncyB7DQo+ICsgICAgICAgdTY0IGdwaW9fc2NyYXRjaHBhZDsNCj4gKyAgICAgICB1NjQgZ3Bp b19wYWRfY29udHJvbFtNTFhCRl9HUElPX05SXTsNCj4gKyAgICAgICB1NjQgZ3Bpb19waW5fZGly X2k7DQo+ICsgICAgICAgdTY0IGdwaW9fcGluX2Rpcl9vOw0KPiArfTsNCj4gKyNlbmRpZg0KPiAr DQo+ICsvKiBEZXZpY2Ugc3RhdGUgc3RydWN0dXJlLiAqLw0KPiArc3RydWN0IGdwaW9fc3RhdGUg ew0KPiArICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsNCg0KV2h5IGRvIHlvdSBuZWVkIHRo YXQ/IFlvdSdyZSBub3QgdXNpbmcgaXQgYW55d2hlcmUgQUZBSUNULg0KDQo+ICsgICAgICAgc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsNCg0KWW91J3JlIG5vdCB1c2luZyB0aGlzIGVpdGhl ci4NCg0KPiArDQo+ICsgICAgICAgc3RydWN0IGdwaW9fY2hpcCBnYzsNCj4gKw0KPiArICAgICAg IC8qIE11c3QgaG9sZCB0aGlzIGxvY2sgdG8gbW9kaWZ5IHNoYXJlZCBkYXRhLiAqLw0KPiArICAg ICAgIHNwaW5sb2NrX3QgbG9jazsNCj4gKw0KPiArICAgICAgIC8qIE1lbW9yeSBBZGRyZXNzICov DQo+ICsgICAgICAgdm9pZCBfX2lvbWVtICpkY19iYXNlOw0KPiArDQo+ICsjaWZkZWYgQ09ORklH X1BNDQo+ICsgICAgICAgc3RydWN0IGJsdWVmaWVsZF9jb250ZXh0X3NhdmVfcmVncyBjc2F2ZV9y ZWdzOyAjZW5kaWYgfTsNCj4gKw0KPiArLyogR1BJTyBkcml2ZXIgc2V0IGlucHV0IHBpbnMgKi8N Cj4gK3N0YXRpYyBpbnQgZ3Bpb19iZl9zZXRfaW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwg dW5zaWduZWQgaW50IA0KPiArb2Zmc2V0KSB7DQo+ICsgICAgICAgc3RydWN0IGdwaW9fc3RhdGUg KmdzID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoY2hpcCk7DQo+ICsgICAgICAgdTY0IGluOw0KPiArICAg ICAgIHU2NCBvdXQ7DQo+ICsNCj4gKyAgICAgICBpZiAob2Zmc2V0ID4gTUxYQkZfR1BJT19OUiAt IDEpIHsNCj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoY2hpcC0+cGFyZW50LCAiZ3BpbyBpbnB1 dCBwaW5zOiBJbnZhbGlkIG9mZnNldCAlZFxuIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg b2Zmc2V0KTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiArICAgICAgIH0N Cg0KWW91IGRvbid0IG5lZWQgdGhhdCwgdGhlIHN1YnN5c3RlbSBtYWtlcyBzdXJlIHRoaXMgZG9l c24ndCBoYXBwZW4uDQpTYW1lIGVsc2V3aGVyZS4NCg0KPiArDQo+ICsgICAgICAgb3V0ID0gcmVh ZHEoZ3MtPmRjX2Jhc2UgKyBHUElPX1BJTl9ESVJfTyk7DQo+ICsgICAgICAgaW4gPSByZWFkcShn cy0+ZGNfYmFzZSArIEdQSU9fUElOX0RJUl9JKTsNCj4gKw0KPiArICAgICAgIHdyaXRlcShvdXQg JiB+QklUKG9mZnNldCksIGdzLT5kY19iYXNlICsgR1BJT19QSU5fRElSX08pOw0KPiArICAgICAg IHdyaXRlcShpbiB8IEJJVChvZmZzZXQpLCBncy0+ZGNfYmFzZSArIEdQSU9fUElOX0RJUl9JKTsN Cj4gKw0KDQpJZiB5b3UgdXNlZCB0aGUgbW1pbyByZWdtYXAgaW4gdGhpcyBkcml2ZXIgeW91IGNv dWxkIGF2b2lkIGJvdGggdGhlIGxvY2tpbmcgKHJlZ21hcCB1c2VzIGEgc3BpbmxvY2sgaWYgZmFz dF9pbyBpcyBzZXQgdG8gdHJ1ZSkgYW5kIG1hbnVhbCBiaXQgdXBkYXRpbmcgaGVyZS4gWW91IHdv dWxkIGRvIHNvbWV0aGluZyBsaWtlOg0KcmVnbWFwX3VwZGF0ZV9iaXRzKG1hcCwgZ3MtPmRjX2Jh c2UgKyBHUElPX1BJTl9ESVJfTywgb3V0ICYgQklUKG9mZnNldCksIH5CSVQob2Zmc2V0KSkuDQoN Cj4gKyAgICAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyogR1BJTyBkcml2ZXIgc2V0IG91 dHB1dCBwaW5zICovDQo+ICtzdGF0aWMgaW50IGdwaW9fYmZfc2V0X291dHB1dChzdHJ1Y3QgZ3Bp b19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgDQo+ICtvZmZzZXQpIHsNCj4gKyAgICAgICBzdHJ1 Y3QgZ3Bpb19zdGF0ZSAqZ3MgPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTsNCj4gKyAgICAgICB1 NjQgaW47DQo+ICsgICAgICAgdTY0IG91dDsNCj4gKw0KPiArICAgICAgIGlmIChvZmZzZXQgPiBN TFhCRl9HUElPX05SIC0gMSkgew0KPiArICAgICAgICAgICAgICAgZGV2X2VycihjaGlwLT5wYXJl bnQsICJncGlvIG91dHB1dCBwaW5zOiBJbnZhbGlkIG9mZnNldCAlZFxuIiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgb2Zmc2V0KTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM Ow0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIG91dCA9IHJlYWRxKGdzLT5kY19iYXNlICsg R1BJT19QSU5fRElSX08pOw0KPiArICAgICAgIGluID0gcmVhZHEoZ3MtPmRjX2Jhc2UgKyBHUElP X1BJTl9ESVJfSSk7DQo+ICsNCj4gKyAgICAgICB3cml0ZXEob3V0IHwgQklUKG9mZnNldCksIGdz LT5kY19iYXNlICsgR1BJT19QSU5fRElSX08pOw0KPiArICAgICAgIHdyaXRlcShpbiAmIH5CSVQo b2Zmc2V0KSwgZ3MtPmRjX2Jhc2UgKyBHUElPX1BJTl9ESVJfSSk7DQo+ICsNCj4gKyAgICAgICBy ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyogR1BJTyBkcml2ZXIgb3V0cHV0IGRpcmVjdGlvbiAq Lw0KPiArc3RhdGljIGludCBncGlvX2JmX3NldF9vdXRwdXRfbG9jayhzdHJ1Y3QgZ3Bpb19jaGlw ICpjaGlwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBvZmZzZXQsIGludCB2YWx1ZSkgew0KPiArICAgICAgIHN0cnVjdCBncGlvX3N0YXRlICpncyA9 IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApOw0KPiArDQo+ICsgICAgICAgc3Bpbl9sb2NrKCZncy0+ bG9jayk7DQo+ICsgICAgICAgZ3Bpb19iZl9zZXRfb3V0cHV0KGNoaXAsIG9mZnNldCk7DQo+ICsg ICAgICAgc3Bpbl91bmxvY2soJmdzLT5sb2NrKTsNCj4gKw0KPiArICAgICAgIHJldHVybiAwOw0K PiArfQ0KPiArDQo+ICsvKiBHUElPIGRyaXZlciBpbnB1dCBkaXJlY3Rpb24gKi8NCj4gK3N0YXRp YyBpbnQgZ3Bpb19iZl9zZXRfaW5wdXRfbG9jayhzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNp Z25lZCANCj4gK2ludCBvZmZzZXQpIHsNCj4gKyAgICAgICBzdHJ1Y3QgZ3Bpb19zdGF0ZSAqZ3Mg PSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTsNCj4gKw0KPiArICAgICAgIHNwaW5fbG9jaygmZ3Mt PmxvY2spOw0KPiArICAgICAgIGdwaW9fYmZfc2V0X2lucHV0KGNoaXAsIG9mZnNldCk7DQo+ICsg ICAgICAgc3Bpbl91bmxvY2soJmdzLT5sb2NrKTsNCj4gKw0KPiArICAgICAgIHJldHVybiAwOw0K PiArfQ0KPiArDQo+ICsvKiBHUElPIGRyaXZlciByZWFkIHJvdXRpbmUuICovDQo+ICtzdGF0aWMg aW50IGdwaW9fYmZfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZz ZXQpIHsNCj4gKyAgICAgICB1NjQgdmFsdWU7DQo+ICsgICAgICAgc3RydWN0IGdwaW9fc3RhdGUg KmdzID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoY2hpcCk7DQo+ICsNCj4gKyAgICAgICB2YWx1ZSA9IHJl YWRxKGdzLT5kY19iYXNlICsgR1BJT19QSU5fU1RBVEUpOw0KPiArDQo+ICsgICAgICAgcmV0dXJu ICh2YWx1ZSA+PiBvZmZzZXQpICYgMTsNCj4gK30NCj4gKw0KPiArLyogR1BJTyBkcml2ZXIgd3Jp dGUgcm91dGluZS4gKi8NCj4gK3N0YXRpYyB2b2lkIGdwaW9fYmZfc2V0KHN0cnVjdCBncGlvX2No aXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQsIA0KPiAraW50IHZhbHVlKSB7DQo+ICsgICAg ICAgdTY0IGRhdGE7DQo+ICsgICAgICAgc3RydWN0IGdwaW9fc3RhdGUgKmdzID0gZ3Bpb2NoaXBf Z2V0X2RhdGEoY2hpcCk7DQo+ICsNCj4gKyAgICAgICBzcGluX2xvY2soJmdzLT5sb2NrKTsNCj4g KyAgICAgICBkYXRhID0gcmVhZHEoZ3MtPmRjX2Jhc2UgKyBHUElPX1BJTl9TVEFURSk7DQo+ICsN Cj4gKyAgICAgICBpZiAodmFsdWUpDQo+ICsgICAgICAgICAgICAgICBkYXRhIHw9IEJJVChvZmZz ZXQpOw0KPiArICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgIGRhdGEgJj0gfkJJVChvZmZz ZXQpOw0KPiArICAgICAgIHdyaXRlcShkYXRhLCBncy0+ZGNfYmFzZSArIEdQSU9fUElOX1NUQVRF KTsNCj4gKyAgICAgICBzcGluX3VubG9jaygmZ3MtPmxvY2spOw0KPiArfQ0KPiArDQo+ICsvKiBH UElPIGRyaXZlciBpbml0aWFsaXphdGlvbiByb3V0aW5lLiAqLw0KDQpUaGVzZSBjb21tZW50cyBh cmUgb2Jzb2xldGUgdG8gbWUuIEV2ZXJ5b25lIGtub3dzIHRoYXQgcHJvYmUsIHNldCwgZ2V0LCBv dXRwdXQgYW5kIGlucHV0IGZ1bmN0aW9ucyBkby4gSXQncyBjbGVhciBmcm9tIHRoZWlyIG5hbWVz Lg0KDQo+ICtzdGF0aWMgaW50IGdwaW9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikgew0KPiArICAgICAgIHN0cnVjdCBncGlvX3N0YXRlICpnczsNCj4gKyAgICAgICBzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiArICAgICAgIHN0cnVjdCBncGlvX2NoaXAg KmdjOw0KPiArICAgICAgIHN0cnVjdCByZXNvdXJjZSAqZGNfcmVzOw0KPiArICAgICAgIGludCBy ZXQ7DQo+ICsNCj4gKyAgICAgICBkY19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwg SU9SRVNPVVJDRV9NRU0sIDApOw0KPiArICAgICAgIGlmICghZGNfcmVzKQ0KPiArICAgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKyAgICAgICBpZiAoZGV2bV9yZXF1ZXN0X21l bV9yZWdpb24oJnBkZXYtPmRldiwgZGNfcmVzLT5zdGFydCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6ZShkY19yZXMpLCAiZ3Bpb2RydiIpID09IE5V TEwpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOw0KPiArDQoNClBsZWFzZSB1c2Ug ZGV2bV9pb3JlbWFwX3Jlc291cmNlKCkgaGVyZSB0byBzYXZlIHNvbWUgY29kZS4NCg0KPiArICAg ICAgIGdzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZ3Bpb19zdGF0 ZSksIEdGUF9LRVJORUwpOw0KPiArICAgICAgIGlmICghZ3MpDQo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArICAgICAgIGdzLT5kY19iYXNlID0gZGV2bV9pb3JlbWFw KCZwZGV2LT5kZXYsIGRjX3Jlcy0+c3RhcnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVzb3VyY2Vfc2l6ZShkY19yZXMpKTsNCj4gKyAgICAgICBpZiAoIWdzLT5kY19i YXNlKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKyAgICAgICBn YyA9ICZncy0+Z2M7DQo+ICsgICAgICAgZ2MtPmRpcmVjdGlvbl9pbnB1dCA9IGdwaW9fYmZfc2V0 X2lucHV0X2xvY2s7DQo+ICsgICAgICAgZ2MtPmdldCA9IGdwaW9fYmZfZ2V0Ow0KPiArICAgICAg IGdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gZ3Bpb19iZl9zZXRfb3V0cHV0X2xvY2s7DQo+ICsgICAg ICAgZ2MtPnNldCA9IGdwaW9fYmZfc2V0Ow0KPiArICAgICAgIGdjLT5sYWJlbCA9IGRldl9uYW1l KGRldik7DQo+ICsgICAgICAgZ2MtPnBhcmVudCA9ICZwZGV2LT5kZXY7DQo+ICsgICAgICAgZ2Mt Pm93bmVyID0gVEhJU19NT0RVTEU7DQo+ICsgICAgICAgZ2MtPmJhc2UgPSAwOw0KPiArICAgICAg IGdjLT5uZ3BpbyA9IE1MWEJGX0dQSU9fTlI7DQo+ICsNCj4gKyAgICAgICByZXQgPSBncGlvY2hp cF9hZGRfZGF0YSgmZ3MtPmdjLCBncyk7DQoNCldoeSBub3QgdGhlIHJlc291cmNlIG1hbmFnZWQg dmVyc2lvbj8NCg0KPiArICAgICAgIGlmIChyZXQpIHsNCj4gKyAgICAgICAgICAgICAgIGRldl9l cnIoJnBkZXYtPmRldiwgIkZhaWxlZCBhZGRpbmcgbWVtb3J5IG1hcHBlZCBncGlvY2hpcFxuIik7 DQo+ICsgICAgICAgICAgICAgICBnb3RvIGVycjsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAg ICBzcGluX2xvY2tfaW5pdCgmZ3MtPmxvY2spOw0KPiArICAgICAgIHBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIGdzKTsNCj4gKyAgICAgICBkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVnaXN0ZXJl ZCBNZWxsYW5veCBCbHVlRmllbGQgR1BJTyIpOw0KPiArICAgICAgIHJldHVybiAwOw0KPiArDQo+ ICtlcnI6DQo+ICsgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiUHJvYmUsIEZhaWxlZFxuIik7 DQo+ICsgICAgICAgcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArI2lmZGVmIENPTkZJR19QTQ0K PiArLyogR1BJTyBkcml2ZXIgc3VzcGVuZCByb3V0aW5lLiAqLw0KPiArc3RhdGljIGludCBncGlv ZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IA0K PiArc3RhdGUpIHsNCj4gKyAgICAgICBzdHJ1Y3QgZ3Bpb19zdGF0ZSAqZ3MgPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsNCj4gKw0KPiArICAgICAgIGdzLT5jc2F2ZV9yZWdzLmdwaW9fc2Ny YXRjaHBhZCA9IHJlYWRxKGdzLT5kY19iYXNlICsgR1BJT19TQ1JBVENIUEFEKTsNCj4gKyAgICAg ICBncy0+Y3NhdmVfcmVncy5ncGlvX3BhZF9jb250cm9sWzBdID0NCj4gKyAgICAgICAgICAgICAg IHJlYWRxKGdzLT5kY19iYXNlICsgR1BJT19QQURfQ09OVFJPTF9fRklSU1RfV09SRCk7DQo+ICsg ICAgICAgZ3MtPmNzYXZlX3JlZ3MuZ3Bpb19wYWRfY29udHJvbFsxXSA9DQo+ICsgICAgICAgICAg ICAgICByZWFkcShncy0+ZGNfYmFzZSArIEdQSU9fUEFEX0NPTlRST0xfMV9fRklSU1RfV09SRCk7 DQo+ICsgICAgICAgZ3MtPmNzYXZlX3JlZ3MuZ3Bpb19wYWRfY29udHJvbFsyXSA9DQo+ICsgICAg ICAgICAgICAgICByZWFkcShncy0+ZGNfYmFzZSArIEdQSU9fUEFEX0NPTlRST0xfMl9fRklSU1Rf V09SRCk7DQo+ICsgICAgICAgZ3MtPmNzYXZlX3JlZ3MuZ3Bpb19wYWRfY29udHJvbFszXSA9DQo+ ICsgICAgICAgICAgICAgICByZWFkcShncy0+ZGNfYmFzZSArIEdQSU9fUEFEX0NPTlRST0xfM19f RklSU1RfV09SRCk7DQo+ICsgICAgICAgZ3MtPmNzYXZlX3JlZ3MuZ3Bpb19waW5fZGlyX2kgPSBy ZWFkcShncy0+ZGNfYmFzZSArIEdQSU9fUElOX0RJUl9JKTsNCj4gKyAgICAgICBncy0+Y3NhdmVf cmVncy5ncGlvX3Bpbl9kaXJfbyA9IHJlYWRxKGdzLT5kY19iYXNlICsgDQo+ICsgR1BJT19QSU5f RElSX08pOw0KPiArDQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qIEdQSU8g ZHJpdmVyIHJlc3VtZSByb3V0aW5lLiAqLw0KPiArc3RhdGljIGludCBncGlvZHJ2X3Jlc3VtZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KSB7DQo+ICsgICAgICAgc3RydWN0IGdwaW9fc3Rh dGUgKmdzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ICsNCj4gKyAgICAgICB3cml0 ZXEoZ3MtPmNzYXZlX3JlZ3MuZ3Bpb19zY3JhdGNocGFkLCBncy0+ZGNfYmFzZSArIEdQSU9fU0NS QVRDSFBBRCk7DQo+ICsgICAgICAgd3JpdGVxKGdzLT5jc2F2ZV9yZWdzLmdwaW9fcGFkX2NvbnRy b2xbMF0sIGdzLT5kY19iYXNlICsNCj4gKyAgICAgICAgICAgICAgR1BJT19QQURfQ09OVFJPTF9f RklSU1RfV09SRCk7DQo+ICsgICAgICAgd3JpdGVxKGdzLT5jc2F2ZV9yZWdzLmdwaW9fcGFkX2Nv bnRyb2xbMV0sIGdzLT5kY19iYXNlICsNCj4gKyAgICAgICAgICAgICAgR1BJT19QQURfQ09OVFJP TF8xX19GSVJTVF9XT1JEKTsNCj4gKyAgICAgICB3cml0ZXEoZ3MtPmNzYXZlX3JlZ3MuZ3Bpb19w YWRfY29udHJvbFsyXSwgZ3MtPmRjX2Jhc2UgKw0KPiArICAgICAgICAgICAgICBHUElPX1BBRF9D T05UUk9MXzJfX0ZJUlNUX1dPUkQpOw0KPiArICAgICAgIHdyaXRlcShncy0+Y3NhdmVfcmVncy5n cGlvX3BhZF9jb250cm9sWzNdLCBncy0+ZGNfYmFzZSArDQo+ICsgICAgICAgICAgICAgIEdQSU9f UEFEX0NPTlRST0xfM19fRklSU1RfV09SRCk7DQo+ICsgICAgICAgd3JpdGVxKGdzLT5jc2F2ZV9y ZWdzLmdwaW9fcGluX2Rpcl9pLCBncy0+ZGNfYmFzZSArIEdQSU9fUElOX0RJUl9JKTsNCj4gKyAg ICAgICB3cml0ZXEoZ3MtPmNzYXZlX3JlZ3MuZ3Bpb19waW5fZGlyX28sIGdzLT5kY19iYXNlICsg DQo+ICsgR1BJT19QSU5fRElSX08pOw0KPiArDQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ ICsjZW5kaWYNCj4gKw0KPiArLyogR1BJTyBkcml2ZXIgZXhpdCByb3V0aW5lLiAqLw0KPiArc3Rh dGljIGludCBncGlvZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KSB7DQo+ ICsgICAgICAgc3RydWN0IGdwaW9fc3RhdGUgKmdzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7DQo+ICsNCj4gKyAgICAgICBncGlvY2hpcF9yZW1vdmUoJmdzLT5nYyk7DQo+ICsgICAgICAg aW91bm1hcChncy0+ZGNfYmFzZSk7DQo+ICsNCj4gKyAgICAgICByZXR1cm4gMDsNCj4gK30NCg0K VGhlIGVudGlyZSBmdW5jdGlvbiBpcyB1bm5lY2Vzc2FyeSAtIHVzZSBkZXZtXyB3aGVyZSBwb3Nz aWJsZTogYm90aCB3aGVuIG1hcHBpbmcgbWVtb3J5IGFuZCBhZGRpbmcgdGhlIGdwaW8gY2hpcC4N Cg0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGdwaW9kcnZfYWNw aV9tYXRjaFtdID0gew0KPiArICAgICAgIHsgIk1MTlhCRjAyIiwgMCB9LA0KPiArICAgICAgIHt9 DQo+ICt9Ow0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBncGlvZHJ2X2FjcGlfbWF0Y2gp Ow0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBncGlvZHJ2X2dwaW9fZHJp dmVyID0gew0KPiArICAgICAgIC5kcml2ZXIgPSB7DQo+ICsgICAgICAgICAgICAgICAubmFtZSA9 ICJncGlvZHJ2IiwNCj4gKyAgICAgICAgICAgICAgIC5hY3BpX21hdGNoX3RhYmxlID0gQUNQSV9Q VFIoZ3Bpb2Rydl9hY3BpX21hdGNoKSwNCj4gKyAgICAgICB9LA0KPiArICAgICAgIC5wcm9iZSAg ICA9IGdwaW9kcnZfcHJvYmUsDQo+ICsgICAgICAgLnJlbW92ZSAgID0gZ3Bpb2Rydl9yZW1vdmUs DQo+ICsjaWZkZWYgQ09ORklHX1BNDQo+ICsgICAgICAgLnN1c3BlbmQgID0gZ3Bpb2Rydl9zdXNw ZW5kLA0KPiArICAgICAgIC5yZXN1bWUgICA9IGdwaW9kcnZfcmVzdW1lLA0KPiArI2VuZGlmDQo+ ICt9Ow0KPiArDQo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGdwaW9kcnZfZ3Bpb19kcml2ZXIp Ow0KPiArDQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1lbGxhbm94IEJsdWVGaWVsZCBHUElPIERy aXZlciIpOyANCj4gK01PRFVMRV9BVVRIT1IoIk1lbGxhbm94IFRlY2hub2xvZ2llcyIpOyBNT0RV TEVfTElDRU5TRSgiR1BMIik7DQo+IC0tDQo+IDIuMS4yDQo+DQoNCkJlc3QgcmVnYXJkcywNCkJh cnRvc3ogR29sYXN6ZXdza2kNCg==