From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Z.q. Hou" Subject: [PATCHv6 4/6] PCI: mobiveil: Add PCIe Gen4 RC driver for NXP Layerscape SoCs Date: Tue, 28 May 2019 06:50:26 +0000 Message-ID: <20190528065129.8769-5-Zhiqiang.Hou@nxp.com> References: <20190528065129.8769-1-Zhiqiang.Hou@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190528065129.8769-1-Zhiqiang.Hou@nxp.com> Content-Language: en-US Content-ID: Sender: linux-kernel-owner@vger.kernel.org To: "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "bhelgaas@google.com" , "robh+dt@kernel.org" , "arnd@arndb.de" , "mark.rutland@arm.com" , "l.subrahmanya@mobiveil.co.in" , "shawnguo@kernel.org" , "m.karthikeyan@mobiveil.co.in" , Leo Li , "lorenzo.pieralisi@arm.com" , "catalin.marinas@arm.com" , "will.deacon@arm.com" Cc: Mingkai Hu , "M.h. Lian" , Xiaowei Bao , "Z.q. Hou" List-Id: devicetree@vger.kernel.org RnJvbTogSG91IFpoaXFpYW5nIDxaaGlxaWFuZy5Ib3VAbnhwLmNvbT4NCg0KVGhpcyBQQ0llIGNv bnRyb2xsZXIgaXMgYmFzZWQgb24gdGhlIE1vYml2ZWlsIEdQRVggSVAsIHdoaWNoIGlzDQpjb21w YXRpYmxlIHdpdGggdGhlIFBDSSBFeHByZXNz4oSiIEJhc2UgU3BlY2lmaWNhdGlvbiwgUmV2aXNp b24gNC4wLg0KDQpTaWduZWQtb2ZmLWJ5OiBIb3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhvdUBueHAu Y29tPg0KUmV2aWV3ZWQtYnk6IE1pbmdodWFuIExpYW4gPE1pbmdodWFuLkxpYW5AbnhwLmNvbT4N Ci0tLQ0KVjY6DQogLSBDaGFuZ2UgdGhlIGZpbGUgbmFtZSBwY2ktbGF5ZXJzY2FwZS1nZW40LmMg dG8gcGNpZS1sYXllcnNjYXBlLWdlbjQuYy4NCiAtIENoYW5nZSB0aGUgbWFjcm8gbmFtZSB0byBQ Q0lFX0xBWUVSU0NBUEVfR0VONC4NCiAtIENoYW5nZSB0aGUgTDAgc3RhdGUgbWFjcm8gbmFtZSB0 byBQRl9EQkdfTFRTU01fTDAuDQogLSBSb212ZSB0aGUgcHVuY3R1YXRpb24gYXQgZW5kIG9mIGVy cm9yIG1lc3NhZ2VzLg0KIC0gTW92ZSB0aGUgYWxsb2NhdGlvbiBvZiBob3N0IGJyaWRnZSBzdHJ1 Y3R1cmUgaGVyZSBhbmQgc3F1YXNoIHRoZQ0KICAgYWxsb2NhdGlvbnMuDQoNCiBkcml2ZXJzL3Bj aS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcgICAgICAgfCAgMTAgKw0KIGRyaXZlcnMvcGNp L2NvbnRyb2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUgICAgICB8ICAgMSArDQogLi4uL21vYml2ZWls L3BjaWUtbGF5ZXJzY2FwZS1nZW40LmMgICAgICAgICAgIHwgMjU1ICsrKysrKysrKysrKysrKysr Kw0KIC4uLi9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmggICB8ICAxNiAr LQ0KIDQgZmlsZXMgY2hhbmdlZCwgMjgwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1s YXllcnNjYXBlLWdlbjQuYw0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9t b2JpdmVpbC9LY29uZmlnIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9LY29uZmln DQppbmRleCA2NDM0M2MwN2JmZWQuLmM4MjNiZThkYWIxYyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9tb2JpdmVpbC9LY29uZmlnDQpAQCAtMjEsNCArMjEsMTQgQEAgY29uZmlnIFBDSUVfTU9C SVZFSUxfUExBVA0KIAkgIFNvZnQgSVAuIEl0IGhhcyB1cCB0byA4IG91dGJvdW5kIGFuZCBpbmJv dW5kIHdpbmRvd3MNCiAJICBmb3IgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgaXQgaXMgYSBQQ0ll IEdlbjQgSVAuDQogDQorY29uZmlnIFBDSUVfTEFZRVJTQ0FQRV9HRU40DQorCWJvb2wgIkZyZWVz Y2FsZSBMYXllcnNjYXBlIFBDSWUgR2VuNCBjb250cm9sbGVyIg0KKwlkZXBlbmRzIG9uIFBDSQ0K KwlkZXBlbmRzIG9uIE9GICYmIChBUk02NCB8fCBBUkNIX0xBWUVSU0NBUEUpDQorCWRlcGVuZHMg b24gUENJX01TSV9JUlFfRE9NQUlODQorCXNlbGVjdCBQQ0lFX01PQklWRUlMX0hPU1QNCisJaGVs cA0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgUENJZSBHZW40IGNvbnRyb2xsZXIgc3VwcG9y dCBvbg0KKwkgIExheWVyc2NhcGUgU29Dcy4gVGhlIFBDSWUgY29udHJvbGxlciBjYW4gd29yayBp biBSQyBvcg0KKwkgIEVQIG1vZGUgYWNjb3JkaW5nIHRvIFJDV1tIT1NUX0FHVF9QRVhdIHNldHRp bmcuDQogZW5kbWVudQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZl aWwvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL01ha2VmaWxlDQpp bmRleCA5ZmI2ZDFjNjUwNGQuLjk5ZDg3OWRlMzJkNiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNp L2NvbnRyb2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvbW9iaXZlaWwvTWFrZWZpbGUNCkBAIC0yLDMgKzIsNCBAQA0KIG9iai0kKENPTkZJR19QQ0lF X01PQklWRUlMKSArPSBwY2llLW1vYml2ZWlsLm8NCiBvYmotJChDT05GSUdfUENJRV9NT0JJVkVJ TF9IT1NUKSArPSBwY2llLW1vYml2ZWlsLWhvc3Qubw0KIG9iai0kKENPTkZJR19QQ0lFX01PQklW RUlMX1BMQVQpICs9IHBjaWUtbW9iaXZlaWwtcGxhdC5vDQorb2JqLSQoQ09ORklHX1BDSUVfTEFZ RVJTQ0FQRV9HRU40KSArPSBwY2llLWxheWVyc2NhcGUtZ2VuNC5vDQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLWxheWVyc2NhcGUtZ2VuNC5jIGIvZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLWxheWVyc2NhcGUtZ2VuNC5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi41MTU0MzU1NWM3NWQNCi0tLSAv ZGV2L251bGwNCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1sYXll cnNjYXBlLWdlbjQuYw0KQEAgLTAsMCArMSwyNTUgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMA0KKy8qDQorICogUENJZSBHZW40IGhvc3QgY29udHJvbGxlciBkcml2ZXIg Zm9yIE5YUCBMYXllcnNjYXBlIFNvQ3MNCisgKg0KKyAqIENvcHlyaWdodCAyMDE5IE5YUA0KKyAq DQorICogQXV0aG9yOiBaaGlxaWFuZyBIb3UgPFpoaXFpYW5nLkhvdUBueHAuY29tPg0KKyAqLw0K Kw0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0 Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfcGNpLmg+ DQorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX2ly cS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Bj aS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGlu dXgvcmVzb3VyY2UuaD4NCisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPg0KKyNpbmNsdWRl IDxsaW51eC9yZWdtYXAuaD4NCisNCisjaW5jbHVkZSAicGNpZS1tb2JpdmVpbC5oIg0KKw0KKy8q IExVVCBhbmQgUEYgY29udHJvbCByZWdpc3RlcnMgKi8NCisjZGVmaW5lIFBDSUVfTFVUX09GRgkJ CTB4ODAwMDANCisjZGVmaW5lIFBDSUVfUEZfT0ZGCQkJMHhjMDAwMA0KKyNkZWZpbmUgUENJRV9Q Rl9JTlRfU1RBVAkJMHgxOA0KKyNkZWZpbmUgUEZfSU5UX1NUQVRfUEFCUlNUCQlCSVQoMzEpDQor DQorI2RlZmluZSBQQ0lFX1BGX0RCRwkJCTB4N2ZjDQorI2RlZmluZSBQRl9EQkdfTFRTU01fTUFT SwkJMHgzZg0KKyNkZWZpbmUgUEZfREJHX0xUU1NNX0wwCQkJMHgyZCAvKiBMMCBzdGF0ZSAqLw0K KyNkZWZpbmUgUEZfREJHX1dFCQkJQklUKDMxKQ0KKyNkZWZpbmUgUEZfREJHX1BBQlIJCQlCSVQo MjcpDQorDQorI2RlZmluZSB0b19sc19wY2llX2c0KHgpCQlwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSgo eCktPnBkZXYpDQorDQorc3RydWN0IGxzX3BjaWVfZzQgew0KKwlzdHJ1Y3QgbW9iaXZlaWxfcGNp ZSBwY2k7DQorCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7DQorCWludCBpcnE7DQorfTsNCisN CitzdGF0aWMgaW5saW5lIHUzMiBsc19wY2llX2c0X2x1dF9yZWFkbChzdHJ1Y3QgbHNfcGNpZV9n NCAqcGNpZSwgdTMyIG9mZikNCit7DQorCXJldHVybiBpb3JlYWQzMihwY2llLT5wY2kuY3NyX2F4 aV9zbGF2ZV9iYXNlICsgUENJRV9MVVRfT0ZGICsgb2ZmKTsNCit9DQorDQorc3RhdGljIGlubGlu ZSB2b2lkIGxzX3BjaWVfZzRfbHV0X3dyaXRlbChzdHJ1Y3QgbHNfcGNpZV9nNCAqcGNpZSwNCisJ CQkJCSB1MzIgb2ZmLCB1MzIgdmFsKQ0KK3sNCisJaW93cml0ZTMyKHZhbCwgcGNpZS0+cGNpLmNz cl9heGlfc2xhdmVfYmFzZSArIFBDSUVfTFVUX09GRiArIG9mZik7DQorfQ0KKw0KK3N0YXRpYyBp bmxpbmUgdTMyIGxzX3BjaWVfZzRfcGZfcmVhZGwoc3RydWN0IGxzX3BjaWVfZzQgKnBjaWUsIHUz MiBvZmYpDQorew0KKwlyZXR1cm4gaW9yZWFkMzIocGNpZS0+cGNpLmNzcl9heGlfc2xhdmVfYmFz ZSArIFBDSUVfUEZfT0ZGICsgb2ZmKTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIGxzX3Bj aWVfZzRfcGZfd3JpdGVsKHN0cnVjdCBsc19wY2llX2c0ICpwY2llLA0KKwkJCQkJdTMyIG9mZiwg dTMyIHZhbCkNCit7DQorCWlvd3JpdGUzMih2YWwsIHBjaWUtPnBjaS5jc3JfYXhpX3NsYXZlX2Jh c2UgKyBQQ0lFX1BGX09GRiArIG9mZik7DQorfQ0KKw0KK3N0YXRpYyBib29sIGxzX3BjaWVfZzRf aXNfYnJpZGdlKHN0cnVjdCBsc19wY2llX2c0ICpwY2llKQ0KK3sNCisJc3RydWN0IG1vYml2ZWls X3BjaWUgKm12X3BjaSA9ICZwY2llLT5wY2k7DQorCXUzMiBoZWFkZXJfdHlwZTsNCisNCisJaGVh ZGVyX3R5cGUgPSBjc3JfcmVhZGIobXZfcGNpLCBQQ0lfSEVBREVSX1RZUEUpOw0KKwloZWFkZXJf dHlwZSAmPSAweDdmOw0KKw0KKwlyZXR1cm4gaGVhZGVyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBF X0JSSURHRTsNCit9DQorDQorc3RhdGljIGludCBsc19wY2llX2c0X2xpbmtfdXAoc3RydWN0IG1v Yml2ZWlsX3BjaWUgKnBjaSkNCit7DQorCXN0cnVjdCBsc19wY2llX2c0ICpwY2llID0gdG9fbHNf cGNpZV9nNChwY2kpOw0KKwl1MzIgc3RhdGU7DQorDQorCXN0YXRlID0gbHNfcGNpZV9nNF9wZl9y ZWFkbChwY2llLCBQQ0lFX1BGX0RCRyk7DQorCXN0YXRlID0Jc3RhdGUgJiBQRl9EQkdfTFRTU01f TUFTSzsNCisNCisJaWYgKHN0YXRlID09IFBGX0RCR19MVFNTTV9MMCkNCisJCXJldHVybiAxOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgbHNfcGNpZV9nNF9yZWluaXRfaHco c3RydWN0IGxzX3BjaWVfZzQgKnBjaWUpDQorew0KKwlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqbXZf cGNpID0gJnBjaWUtPnBjaTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJm12X3BjaS0+cGRldi0+ ZGV2Ow0KKwl1MzIgdmFsLCBhY3Rfc3RhdDsNCisJaW50IHRvID0gMTAwOw0KKw0KKwkvKiBQb2xs IGZvciBwYWJfY3NiX3Jlc2V0IHRvIHNldCBhbmQgUEFCIGFjdGl2aXR5IHRvIGNsZWFyICovDQor CWRvIHsNCisJCXVzbGVlcF9yYW5nZSgxMCwgMTUpOw0KKwkJdmFsID0gbHNfcGNpZV9nNF9wZl9y ZWFkbChwY2llLCBQQ0lFX1BGX0lOVF9TVEFUKTsNCisJCWFjdF9zdGF0ID0gY3NyX3JlYWRsKG12 X3BjaSwgUEFCX0FDVElWSVRZX1NUQVQpOw0KKwl9IHdoaWxlICgoKHZhbCAmIFBGX0lOVF9TVEFU X1BBQlJTVCkgPT0gMCB8fCBhY3Rfc3RhdCkgJiYgdG8tLSk7DQorCWlmICh0byA8IDApIHsNCisJ CWRldl9lcnIoZGV2LCAiUG9sbCBQQUJSU1QmUEFCQUNUIHRpbWVvdXRcbiIpOw0KKwkJcmV0dXJu Ow0KKwl9DQorDQorCS8qIGNsZWFyIFBFWF9SRVNFVCBiaXQgaW4gUEVYX1BGMF9EQkcgcmVnaXN0 ZXIgKi8NCisJdmFsID0gbHNfcGNpZV9nNF9wZl9yZWFkbChwY2llLCBQQ0lFX1BGX0RCRyk7DQor CXZhbCB8PSBQRl9EQkdfV0U7DQorCWxzX3BjaWVfZzRfcGZfd3JpdGVsKHBjaWUsIFBDSUVfUEZf REJHLCB2YWwpOw0KKw0KKwl2YWwgPSBsc19wY2llX2c0X3BmX3JlYWRsKHBjaWUsIFBDSUVfUEZf REJHKTsNCisJdmFsIHw9IFBGX0RCR19QQUJSOw0KKwlsc19wY2llX2c0X3BmX3dyaXRlbChwY2ll LCBQQ0lFX1BGX0RCRywgdmFsKTsNCisNCisJdmFsID0gbHNfcGNpZV9nNF9wZl9yZWFkbChwY2ll LCBQQ0lFX1BGX0RCRyk7DQorCXZhbCAmPSB+UEZfREJHX1dFOw0KKwlsc19wY2llX2c0X3BmX3dy aXRlbChwY2llLCBQQ0lFX1BGX0RCRywgdmFsKTsNCisNCisJbW9iaXZlaWxfaG9zdF9pbml0KG12 X3BjaSwgdHJ1ZSk7DQorDQorCXRvID0gMTAwOw0KKwl3aGlsZSAoIWxzX3BjaWVfZzRfbGlua191 cChtdl9wY2kpICYmIHRvLS0pDQorCQl1c2xlZXBfcmFuZ2UoMjAwLCAyNTApOw0KKwlpZiAodG8g PCAwKQ0KKwkJZGV2X2VycihkZXYsICJQQ0llIGxpbmsgdHJhaW5pbmcgdGltZW91dFxuIik7DQor fQ0KKw0KK3N0YXRpYyBpcnFyZXR1cm5fdCBsc19wY2llX2c0X2lzcihpbnQgaXJxLCB2b2lkICpk ZXZfaWQpDQorew0KKwlzdHJ1Y3QgbHNfcGNpZV9nNCAqcGNpZSA9IChzdHJ1Y3QgbHNfcGNpZV9n NCAqKWRldl9pZDsNCisJc3RydWN0IG1vYml2ZWlsX3BjaWUgKm12X3BjaSA9ICZwY2llLT5wY2k7 DQorCXUzMiB2YWw7DQorDQorCXZhbCA9IGNzcl9yZWFkbChtdl9wY2ksIFBBQl9JTlRQX0FNQkFf TUlTQ19TVEFUKTsNCisJaWYgKCF2YWwpDQorCQlyZXR1cm4gSVJRX05PTkU7DQorDQorCWlmICh2 YWwgJiBQQUJfSU5UUF9SRVNFVCkNCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcGNpZS0+ZHdv cmssIG1zZWNzX3RvX2ppZmZpZXMoMSkpOw0KKw0KKwljc3Jfd3JpdGVsKG12X3BjaSwgdmFsLCBQ QUJfSU5UUF9BTUJBX01JU0NfU1RBVCk7DQorDQorCXJldHVybiBJUlFfSEFORExFRDsNCit9DQor DQorc3RhdGljIGludCBsc19wY2llX2c0X2ludGVycnVwdF9pbml0KHN0cnVjdCBtb2JpdmVpbF9w Y2llICptdl9wY2kpDQorew0KKwlzdHJ1Y3QgbHNfcGNpZV9nNCAqcGNpZSA9IHRvX2xzX3BjaWVf ZzQobXZfcGNpKTsNCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IG12X3BjaS0+cGRl djsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCisJdTMyIHZhbDsNCisJaW50 IHJldDsNCisNCisJcGNpZS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImlu dHIiKTsNCisJaWYgKHBjaWUtPmlycSA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgZ2V0 ICdpbnRyJyBJUlEsIGVycm5vID0gJWRcbiIsIHBjaWUtPmlycSk7DQorCQlyZXR1cm4gcGNpZS0+ aXJxOw0KKwl9DQorCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBwY2llLT5pcnEsIGxzX3Bj aWVfZzRfaXNyLA0KKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgcGRldi0+bmFtZSwgcGNpZSk7DQor CWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVnaXN0ZXIgUENJZSBJUlEsIGVy cm5vID0gJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gIHJldDsNCisJfQ0KKw0KKwkvKiBFbmFibGUg aW50ZXJydXB0cyAqLw0KKwl2YWwgPSBQQUJfSU5UUF9JTlRYX01BU0sgfCBQQUJfSU5UUF9NU0kg fCBQQUJfSU5UUF9SRVNFVCB8DQorCSAgICAgIFBBQl9JTlRQX1BDSUVfVUUgfCBQQUJfSU5UUF9J RV9QTVJFREkgfCBQQUJfSU5UUF9JRV9FQzsNCisJY3NyX3dyaXRlbChtdl9wY2ksIHZhbCwgUEFC X0lOVFBfQU1CQV9NSVNDX0VOQik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9p ZCBsc19wY2llX2c0X3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVj dCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVk X3dvcmssDQorCQkJCQkJICB3b3JrKTsNCisJc3RydWN0IGxzX3BjaWVfZzQgKnBjaWUgPSBjb250 YWluZXJfb2YoZHdvcmssIHN0cnVjdCBsc19wY2llX2c0LCBkd29yayk7DQorCXN0cnVjdCBtb2Jp dmVpbF9wY2llICptdl9wY2kgPSAmcGNpZS0+cGNpOw0KKwl1MTYgY3RybDsNCisNCisJY3RybCA9 IGNzcl9yZWFkdyhtdl9wY2ksIFBDSV9CUklER0VfQ09OVFJPTCk7DQorCWN0cmwgJj0gflBDSV9C UklER0VfQ1RMX0JVU19SRVNFVDsNCisJY3NyX3dyaXRldyhtdl9wY2ksIGN0cmwsIFBDSV9CUklE R0VfQ09OVFJPTCk7DQorCWxzX3BjaWVfZzRfcmVpbml0X2h3KHBjaWUpOw0KK30NCisNCitzdGF0 aWMgc3RydWN0IG1vYml2ZWlsX3JwX29wcyBsc19wY2llX2c0X3JwX29wcyA9IHsNCisJLmludGVy cnVwdF9pbml0ID0gbHNfcGNpZV9nNF9pbnRlcnJ1cHRfaW5pdCwNCit9Ow0KKw0KK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbW9iaXZlaWxfcGFiX29wcyBsc19wY2llX2c0X3BhYl9vcHMgPSB7DQorCS5s aW5rX3VwID0gbHNfcGNpZV9nNF9saW5rX3VwLA0KK307DQorDQorc3RhdGljIGludCBfX2luaXQg bHNfcGNpZV9nNF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KK3sNCisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCisJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAq YnJpZGdlOw0KKwlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqbXZfcGNpOw0KKwlzdHJ1Y3QgbHNfcGNp ZV9nNCAqcGNpZTsNCisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsNCisJ aW50IHJldDsNCisNCisJaWYgKCFvZl9wYXJzZV9waGFuZGxlKG5wLCAibXNpLXBhcmVudCIsIDAp KSB7DQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIG1zaS1wYXJlbnRcbiIpOw0KKwkJ cmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJYnJpZGdlID0gZGV2bV9wY2lfYWxsb2NfaG9zdF9i cmlkZ2UoZGV2LCBzaXplb2YoKnBjaWUpKTsNCisJaWYgKCFicmlkZ2UpDQorCQlyZXR1cm4gLUVO T01FTTsNCisNCisJcGNpZSA9IHBjaV9ob3N0X2JyaWRnZV9wcml2KGJyaWRnZSk7DQorCW12X3Bj aSA9ICZwY2llLT5wY2k7DQorDQorCW12X3BjaS0+cGRldiA9IHBkZXY7DQorCW12X3BjaS0+b3Bz ID0gJmxzX3BjaWVfZzRfcGFiX29wczsNCisJbXZfcGNpLT5ycC5vcHMgPSAmbHNfcGNpZV9nNF9y cF9vcHM7DQorCW12X3BjaS0+YnJpZGdlID0gYnJpZGdlOw0KKw0KKwlwbGF0Zm9ybV9zZXRfZHJ2 ZGF0YShwZGV2LCBwY2llKTsNCisNCisJSU5JVF9ERUxBWUVEX1dPUksoJnBjaWUtPmR3b3JrLCBs c19wY2llX2c0X3Jlc2V0KTsNCisNCisJcmV0ID0gbW9iaXZlaWxfcGNpZV9ob3N0X3Byb2JlKG12 X3BjaSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiRmFpbCB0byBwcm9iZVxuIik7 DQorCQlyZXR1cm4gIHJldDsNCisJfQ0KKw0KKwlpZiAoIWxzX3BjaWVfZzRfaXNfYnJpZGdlKHBj aWUpKQ0KKwkJcmV0dXJuIC1FTk9ERVY7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBsc19wY2llX2c0X29mX21hdGNoW10gPSB7DQorCXsg LmNvbXBhdGlibGUgPSAiZnNsLGx4MjE2MGEtcGNpZSIsIH0sDQorCXsgfSwNCit9Ow0KKw0KK3N0 YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxzX3BjaWVfZzRfZHJpdmVyID0gew0KKwkuZHJp dmVyID0gew0KKwkJLm5hbWUgPSAibGF5ZXJzY2FwZS1wY2llLWdlbjQiLA0KKwkJLm9mX21hdGNo X3RhYmxlID0gbHNfcGNpZV9nNF9vZl9tYXRjaCwNCisJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0g dHJ1ZSwNCisJfSwNCit9Ow0KKw0KK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyX3Byb2JlKGxzX3Bj aWVfZzRfZHJpdmVyLCBsc19wY2llX2c0X3Byb2JlKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bj aS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwuaCBiL2RyaXZlcnMvcGNpL2NvbnRy b2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5oDQppbmRleCBhNzI5YTRmODc5ZmUuLjkyNThj ZWY1NzVjZCAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNp ZS1tb2JpdmVpbC5oDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUt bW9iaXZlaWwuaA0KQEAgLTQzLDYgKzQzLDggQEANCiAjZGVmaW5lICBQQUdFX0xPX01BU0sJCQkw eDNmZg0KICNkZWZpbmUgIFBBR0VfU0VMX09GRlNFVF9TSElGVAkJMTANCiANCisjZGVmaW5lIFBB Ql9BQ1RJVklUWV9TVEFUCQkweDgxYw0KKw0KICNkZWZpbmUgUEFCX0FYSV9QSU9fQ1RSTAkJMHgw ODQwDQogI2RlZmluZSAgQVBJT19FTl9NQVNLCQkJMHhmDQogDQpAQCAtNTEsOCArNTMsMTggQEAN CiANCiAjZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIJCTB4MGIwYw0KICNkZWZpbmUgUEFC X0lOVFBfQU1CQV9NSVNDX1NUQVQJCTB4MGIxYw0KLSNkZWZpbmUgIFBBQl9JTlRQX0lOVFhfTUFT SwkJMHgwMWUwDQotI2RlZmluZSAgUEFCX0lOVFBfTVNJX01BU0sJCTB4OA0KKyNkZWZpbmUgIFBB Ql9JTlRQX1JFU0VUCQkJQklUKDEpDQorI2RlZmluZSAgUEFCX0lOVFBfTVNJCQkJQklUKDMpDQor I2RlZmluZSAgUEFCX0lOVFBfSU5UQQkJCUJJVCg1KQ0KKyNkZWZpbmUgIFBBQl9JTlRQX0lOVEIJ CQlCSVQoNikNCisjZGVmaW5lICBQQUJfSU5UUF9JTlRDCQkJQklUKDcpDQorI2RlZmluZSAgUEFC X0lOVFBfSU5URAkJCUJJVCg4KQ0KKyNkZWZpbmUgIFBBQl9JTlRQX1BDSUVfVUUJCUJJVCg5KQ0K KyNkZWZpbmUgIFBBQl9JTlRQX0lFX1BNUkVESQkJQklUKDI5KQ0KKyNkZWZpbmUgIFBBQl9JTlRQ X0lFX0VDCQkJQklUKDMwKQ0KKyNkZWZpbmUgIFBBQl9JTlRQX01TSV9NQVNLCQlQQUJfSU5UUF9N U0kNCisjZGVmaW5lICBQQUJfSU5UUF9JTlRYX01BU0sJCShQQUJfSU5UUF9JTlRBIHwgUEFCX0lO VFBfSU5UQiB8XA0KKwkJCQkJUEFCX0lOVFBfSU5UQyB8IFBBQl9JTlRQX0lOVEQpDQogDQogI2Rl ZmluZSBQQUJfQVhJX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FERFIoMHgwYmEwLCB3aW4pDQog I2RlZmluZSAgV0lOX0VOQUJMRV9TSElGVAkJMA0KLS0gDQoyLjE3LjENCg0K