From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH V5 3/3] ASoC: AMD: add AMD ASoC ACP-I2S driver Date: Thu, 20 Aug 2015 17:36:34 -0400 Message-ID: <1440106594-29564-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-f171.google.com (mail-qk0-f171.google.com [209.85.220.171]) by gabe.freedesktop.org (Postfix) with ESMTPS id AD0E36E0F1 for ; Thu, 20 Aug 2015 14:36:41 -0700 (PDT) Received: by qkep139 with SMTP id p139so22780702qke.3 for ; Thu, 20 Aug 2015 14:36:40 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: broonie@kernel.org, airlied@gmail.com, dri-devel@lists.freedesktop.org, alsa-devel@alsa-project.org, maruthi.bayyavarapu@amd.com Cc: Alex Deucher , Maruthi Srinivas Bayyavarapu , lgirdwood@gmail.com, perex@perex.cz List-Id: dri-devel@lists.freedesktop.org RnJvbTogTWFydXRoaSBTcmluaXZhcyBCYXl5YXZhcmFwdSA8TWFydXRoaS5CYXl5YXZhcmFwdUBh bWQuY29tPgoKQUNQIElQIGJsb2NrIGNvbnNpc3RzIG9mIGRlZGljYXRlZCBETUEgYW5kIEkyUyBi bG9ja3MuIFRoZSBQQ00gZHJpdmVyCnByb3ZpZGVzIHRoZSBETUEgYW5kIENQVSBEQUkgY29tcG9u ZW50cyB0byBBTFNBIGNvcmUuCgpTaWduZWQtb2ZmLWJ5OiBNYXJ1dGhpIEJheXlhdmFyYXB1IDxt YXJ1dGhpLmJheXlhdmFyYXB1QGFtZC5jb20+ClJldmlld2VkLWJ5OiBBbGV4IERldWNoZXIgPGFs ZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+ClJldmlld2VkLWJ5OiBNdXJhbGkgS3Jpc2huYSBWZW11 cmkgPG11cmFsaS1rcmlzaG5hLnZlbXVyaUBhbWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBBbGV4IERl dWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+Ci0tLQoKdjI6IHNxdWFzaCBpbiBLY29u ZmlnIGZpeAp2Mzogc3F1YXNoIGFkZGl0aW9uYWwgY29tbWl0cywgY29udmVydCB0byBtZmQsIGRy b3AgcnQyODYgY2hhbmdlcwp2NDogc3F1YXNoIGluIG5hbWluZyBmaXhlcwp2NTogbW92ZSBwYXRj aCB2ZXJzaW9uaW5nIG91dCBvZiBjb21taXQgbWVzc2FnZQoKVGhlIG1vZHVsZSBsaWNlbnNpbmcg Zm9sbG93cyB0aGUgbW9kZWwgdXNlZCBpbiB0aGUgZHJtIGRyaXZlcnMuCgogc291bmQvc29jL0tj b25maWcgICAgICAgICAgIHwgICAxICsKIHNvdW5kL3NvYy9NYWtlZmlsZSAgICAgICAgICB8ICAg MSArCiBzb3VuZC9zb2MvYW1kL0tjb25maWcgICAgICAgfCAgIDUgKwogc291bmQvc29jL2FtZC9N YWtlZmlsZSAgICAgIHwgICAzICsKIHNvdW5kL3NvYy9hbWQvYWNwLXBjbS1kbWEuYyB8IDY3NiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFu Z2VkLCA2ODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3NvYy9hbWQv S2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3NvYy9hbWQvTWFrZWZpbGUKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvYW1kL2FjcC1wY20tZG1hLmMKCmRpZmYgLS1naXQgYS9z b3VuZC9zb2MvS2NvbmZpZyBiL3NvdW5kL3NvYy9LY29uZmlnCmluZGV4IDJhZTk2MTkuLjFiOWNl MzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9LY29uZmln CkBAIC0zMiw2ICszMiw3IEBAIGNvbmZpZyBTTkRfU09DX0dFTkVSSUNfRE1BRU5HSU5FX1BDTQog CiAjIEFsbCB0aGUgc3VwcG9ydGVkIFNvQ3MKIHNvdXJjZSAic291bmQvc29jL2FkaS9LY29uZmln Igorc291cmNlICJzb3VuZC9zb2MvYW1kL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9hdG1l bC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvYXUxeC9LY29uZmlnIgogc291cmNlICJzb3Vu ZC9zb2MvYmNtL0tjb25maWciCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvTWFrZWZpbGUgYi9zb3Vu ZC9zb2MvTWFrZWZpbGUKaW5kZXggZTE4OTkwMy4uYTZjYmI5OSAxMDA2NDQKLS0tIGEvc291bmQv c29jL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQCBv YmotJChDT05GSUdfU05EX1NPQykJKz0gc25kLXNvYy1jb3JlLm8KIG9iai0kKENPTkZJR19TTkRf U09DKQkrPSBjb2RlY3MvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gZ2VuZXJpYy8KIG9iai0k KENPTkZJR19TTkRfU09DKQkrPSBhZGkvCitvYmotJChDT05GSUdfU05EX1NPQykJKz0gYW1kLwog b2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGF0bWVsLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9 IGF1MXgvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gYmNtLwpkaWZmIC0tZ2l0IGEvc291bmQv c29jL2FtZC9LY29uZmlnIGIvc291bmQvc29jL2FtZC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmNlMzk5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mv YW1kL0tjb25maWcKQEAgLTAsMCArMSw1IEBACitjb25maWcgU05EX1NPQ19BTURfQUNQCisJdHJp c3RhdGUgIkFNRCBBdWRpbyBDb3Byb2Nlc3NvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gTUZEX0NP UkUKKwloZWxwCisJIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNQIHN1cHBvcnQgKERNQSxJMlMpIG9u IEFNRCBwbGF0Zm9ybXMuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL01ha2VmaWxlIGIvc291 bmQvc29jL2FtZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x YTY2ZWMwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2FtZC9NYWtlZmlsZQpAQCAtMCww ICsxLDMgQEAKK3NuZC1zb2MtYWNwLXBjbS1vYmpzCTo9IGFjcC1wY20tZG1hLm8KKworb2JqLSQo Q09ORklHX1NORF9TT0NfQU1EX0FDUCkgKz0gc25kLXNvYy1hY3AtcGNtLm8KZGlmZiAtLWdpdCBh L3NvdW5kL3NvYy9hbWQvYWNwLXBjbS1kbWEuYyBiL3NvdW5kL3NvYy9hbWQvYWNwLXBjbS1kbWEu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGNjNjBjCi0tLSAvZGV2L251 bGwKKysrIGIvc291bmQvc29jL2FtZC9hY3AtcGNtLWRtYS5jCkBAIC0wLDAgKzEsNjc2IEBACisv KgorICogQU1EIEFMU0EgU29DIFBDTSBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxNC0yMDE1 IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKgorICov CisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9l cnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYW1kX2FjcC5o PgorCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5o PgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjZGVmaW5lIFBMQVlCQUNLX01JTl9OVU1fUEVS SU9EUyAgICAyCisjZGVmaW5lIFBMQVlCQUNLX01BWF9OVU1fUEVSSU9EUyAgICAyCisjZGVmaW5l IFBMQVlCQUNLX01BWF9QRVJJT0RfU0laRSAgICAxNjM4NAorI2RlZmluZSBQTEFZQkFDS19NSU5f UEVSSU9EX1NJWkUgICAgMTAyNAorI2RlZmluZSBDQVBUVVJFX01JTl9OVU1fUEVSSU9EUyAgICAg MgorI2RlZmluZSBDQVBUVVJFX01BWF9OVU1fUEVSSU9EUyAgICAgMgorI2RlZmluZSBDQVBUVVJF X01BWF9QRVJJT0RfU0laRSAgICAgMTYzODQKKyNkZWZpbmUgQ0FQVFVSRV9NSU5fUEVSSU9EX1NJ WkUgICAgIDEwMjQKKworI2RlZmluZSBOVU1fRFNDUlNfUEVSX0NIQU5ORUwgMgorCisjZGVmaW5l IE1BWF9CVUZGRVIgKFBMQVlCQUNLX01BWF9QRVJJT0RfU0laRSAqIFBMQVlCQUNLX01BWF9OVU1f UEVSSU9EUykKKyNkZWZpbmUgTUlOX0JVRkZFUiBNQVhfQlVGRkVSCisKKyNkZWZpbmUgVFdPX0NI QU5ORUxfU1VQUE9SVCAgICAgMgkvKiB1cCB0byAyLjAgKi8KKyNkZWZpbmUgRk9VUl9DSEFOTkVM X1NVUFBPUlQgICAgNAkvKiB1cCB0byAzLjEgKi8KKyNkZWZpbmUgU0lYX0NIQU5ORUxfU1VQUE9S VCAgICAgNgkvKiB1cCB0byA1LjEgKi8KKyNkZWZpbmUgRUlHSFRfQ0hBTk5FTF9TVVBQT1JUICAg OAkvKiB1cCB0byA3LjEgKi8KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdh cmUgYWNwX3BjbV9oYXJkd2FyZV9wbGF5YmFjayA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZP X0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfCBTTkRSVl9Q Q01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8IFNORFJWX1BDTV9J TkZPX0JBVENIIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19SRVNV TUUsCisJLyogZm9ybWF0cyxyYXRlcyxjaGFubmVscyAgYmFzZWQgb24gaTJzIGRvYy4gKi8KKwku Zm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJU05EUlZfUENNX0ZNVEJJVF9T MjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwku Y2hhbm5lbHNfbWF4ID0gOCwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAor CS5yYXRlX21pbiA9IDgwMDAsCisJLnJhdGVfbWF4ID0gOTYwMDAsCisJLmJ1ZmZlcl9ieXRlc19t YXggPSBQTEFZQkFDS19NQVhfTlVNX1BFUklPRFMgKiBQTEFZQkFDS19NQVhfUEVSSU9EX1NJWkUs CisJLnBlcmlvZF9ieXRlc19taW4gPSBQTEFZQkFDS19NSU5fUEVSSU9EX1NJWkUsCisJLnBlcmlv ZF9ieXRlc19tYXggPSBQTEFZQkFDS19NQVhfUEVSSU9EX1NJWkUsCisJLnBlcmlvZHNfbWluID0g UExBWUJBQ0tfTUlOX05VTV9QRVJJT0RTLAorCS5wZXJpb2RzX21heCA9IFBMQVlCQUNLX01BWF9O VU1fUEVSSU9EUywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBh Y3BfcGNtX2hhcmR3YXJlX2NhcHR1cmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRF UkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwgU05EUlZfUENNX0lO Rk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfCBTTkRSVl9QQ01fSU5GT19C QVRDSCB8CisJICAgIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwgU05EUlZfUENNX0lORk9fUkVTVU1F LAorCS8qIGZvcm1hdHMscmF0ZXMsY2hhbm5lbHMgIGJhc2VkIG9uIGkycyBkb2MuICovCisJLmZv cm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCVNORFJWX1BDTV9GTVRCSVRfUzI0 X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNo YW5uZWxzX21heCA9IDIsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwku cmF0ZV9taW4gPSA4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorCS5idWZmZXJfYnl0ZXNfbWF4 ID0gQ0FQVFVSRV9NQVhfTlVNX1BFUklPRFMgKiBDQVBUVVJFX01BWF9QRVJJT0RfU0laRSwKKwku cGVyaW9kX2J5dGVzX21pbiA9IENBUFRVUkVfTUlOX1BFUklPRF9TSVpFLAorCS5wZXJpb2RfYnl0 ZXNfbWF4ID0gQ0FQVFVSRV9NQVhfUEVSSU9EX1NJWkUsCisJLnBlcmlvZHNfbWluID0gQ0FQVFVS RV9NSU5fTlVNX1BFUklPRFMsCisJLnBlcmlvZHNfbWF4ID0gQ0FQVFVSRV9NQVhfTlVNX1BFUklP RFMsCit9OworCitzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEgeworCXN0cnVjdCBzbmRfcGNtX3N1YnN0 cmVhbSAqcGxheV9zdHJlYW07CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpjYXB0dXJlX3N0 cmVhbTsKKwlzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXY7CisJc3RydWN0IGFjcF9pcnFf cHJ2ICppcHJ2OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudF9k cml2ZXIgZHdfaTJzX2NvbXBvbmVudCA9IHsKKwkubmFtZSA9ICJkdy1pMnMiLAorfTsKKworc3Rh dGljIHZvaWQgYWNwX3BjbV9wZXJpb2RfZWxhcHNlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUxNiBw bGF5X2ludHIsCisJCQkJCQkJdTE2IGNhcHR1cmVfaW50cikKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9z dWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEgKmlycV9kYXRhID0g ZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBJbmZvcm0gQUxTQSBhYm91dCB0aGUgcGVyaW9k IGVsYXBzZWQgKG9uZSBvdXQgb2YgdHdvIHBlcmlvZHMpICovCisJaWYgKHBsYXlfaW50cikKKwkJ c3Vic3RyZWFtID0gaXJxX2RhdGEtPnBsYXlfc3RyZWFtOworCWVsc2UKKwkJc3Vic3RyZWFtID0g aXJxX2RhdGEtPmNhcHR1cmVfc3RyZWFtOworCisJaWYgKHN1YnN0cmVhbS0+cnVudGltZSAmJiBz bmRfcGNtX3J1bm5pbmcoc3Vic3RyZWFtKSkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJz dHJlYW0pOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJz dHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50 aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9y dW50aW1lICpwcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1ZGlvX2Ry dl9kYXRhICppbnRyX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEocHJ0ZC0+cGxhdGZvcm0tPmRldik7 CisKKwlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKmFkYXRhID0KKwkJa3phbGxvYyhzaXpl b2Yoc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFkYXRh ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09 IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXJ1bnRpbWUtPmh3ID0gYWNwX3BjbV9oYXJk d2FyZV9wbGF5YmFjazsKKwllbHNlCisJCXJ1bnRpbWUtPmh3ID0gYWNwX3BjbV9oYXJkd2FyZV9j YXB0dXJlOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwK KwkJCQkJICAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAocmV0IDwgMCkgewor CQlkZXZfZXJyKHBydGQtPnBsYXRmb3JtLT5kZXYsICJzZXQgaW50ZWdlciBjb25zdHJhaW50IGZh aWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJYWRhdGEtPmFjcF9kZXYgPSBpbnRyX2Rh dGEtPmFjcF9kZXY7CisJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gYWRhdGE7CisKKwlpZiAoc3Vi c3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJaW50cl9kYXRh LT5wbGF5X3N0cmVhbSA9IHN1YnN0cmVhbTsKKwllbHNlCisJCWludHJfZGF0YS0+Y2FwdHVyZV9z dHJlYW0gPSBzdWJzdHJlYW07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3BfZG1h X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAg c3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJaW50IHN0YXR1czsKKwl1aW50 NjRfdCBzaXplOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hX2J1ZmZlcjsKKwlzdHJ1Y3Qg cGFnZSAqcGc7CisJdTE2IG51bV9vZl9wYWdlczsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpy dW50aW1lOworCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqcnRkOworCXN0cnVjdCBhbWRf YWNwX2RldmljZSAqYWNwX2RldjsKKworCWRtYV9idWZmZXIgPSAmc3Vic3RyZWFtLT5kbWFfYnVm ZmVyOworCisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlydGQgPSBydW50aW1lLT5w cml2YXRlX2RhdGE7CisKKwlpZiAoV0FSTl9PTighcnRkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJ YWNwX2RldiA9IHJ0ZC0+YWNwX2RldjsKKworCXNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBh cmFtcyk7CisJc3RhdHVzID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwgc2l6 ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwltZW1zZXQoc3Vic3Ry ZWFtLT5ydW50aW1lLT5kbWFfYXJlYSwgMCwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsK KwlwZyA9IHZpcnRfdG9fcGFnZShzdWJzdHJlYW0tPmRtYV9idWZmZXIuYXJlYSk7CisKKwlpZiAo TlVMTCAhPSBwZykgeworCQkvKiBTYXZlIGZvciBydW50aW1lIHByaXZhdGUgZGF0YSAqLworCQly dGQtPnBnID0gcGc7CisJCXJ0ZC0+b3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwkJLyogTGV0 IEFDUCBrbm93IHRoZSBBbGxvY2F0ZWQgbWVtb3J5ICovCisJCW51bV9vZl9wYWdlcyA9IFBBR0Vf QUxJR04oc2l6ZSkgPj4gUEFHRV9TSElGVDsKKworCQkvKiBGaWxsIHRoZSBwYWdlIHRhYmxlIGVu dHJpZXMgaW4gQUNQIFNSQU0gKi8KKwkJcnRkLT5wZyA9IHBnOworCQlydGQtPnNpemUgPSBzaXpl OworCQlydGQtPm51bV9vZl9wYWdlcyA9IG51bV9vZl9wYWdlczsKKwkJcnRkLT5kaXJlY3Rpb24g PSBzdWJzdHJlYW0tPnN0cmVhbTsKKworCQlhY3BfZGV2LT5jb25maWdfZG1hKGFjcF9kZXYsIHJ0 ZCk7CisJCXN0YXR1cyA9IDA7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisJ cmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBhY3BfZG1hX2h3X2ZyZWUoc3RydWN0IHNu ZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVf cGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IGFjcF9kbWFf cG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwl1MzIgcG9z ID0gMDsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50 aW1lOworCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqcnRkID0gcnVudGltZS0+cHJpdmF0 ZV9kYXRhOworCXN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiA9IHJ0ZC0+YWNwX2RldjsK KworCXBvcyA9IGFjcF9kZXYtPnVwZGF0ZV9kbWFfcG9pbnRlcihhY3BfZGV2LCBzdWJzdHJlYW0t PnN0cmVhbSwKKwkJCQlmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3Np emUpKTsKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIHBvcyk7CisKK30KKworc3Rh dGljIGludCBhY3BfZG1hX21tYXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0s CisJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gc25kX3BjbV9saWJf ZGVmYXVsdF9tbWFwKHN1YnN0cmVhbSwgdm1hKTsKK30KKworc3RhdGljIGludCBhY3BfZG1hX3By ZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IHJldDsK KwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwor CXN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRh OworCXN0cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiA9IHJ0ZC0+YWNwX2RldjsKKworCWlm IChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisKKwkJ YWNwX2Rldi0+Y29uZmlnX2RtYV9jaGFubmVsKGFjcF9kZXYsIFNZU1JBTV9UT19BQ1BfQ0hfTlVN LAorCQkJCQlQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMiwKKwkJCQkJTlVNX0RTQ1JTX1BF Ul9DSEFOTkVMLCAwKTsKKwkJYWNwX2Rldi0+Y29uZmlnX2RtYV9jaGFubmVsKGFjcF9kZXYsIEFD UF9UT19JMlNfRE1BX0NIX05VTSwKKwkJCQkJUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTMs CisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5FTCwgMCk7CisJCS8qIEZpbGwgQUNQIFNSQU0gKDIg cGVyaW9kcykgd2l0aCB6ZXJvcyBmcm9tIFN5c3RlbSBSQU0KKwkJICogd2hpY2ggaXMgemVyby1l ZCBpbiBod19wYXJhbXMgKi8KKwkJcmV0ID0gYWNwX2Rldi0+ZG1hX3N0YXJ0KHJ0ZC0+YWNwX2Rl diwKKwkJCQkJCVNZU1JBTV9UT19BQ1BfQ0hfTlVNLCBmYWxzZSk7CisJCWlmIChyZXQgPCAwKQor CQkJcmV0ID0gLUVGQVVMVDsKKworCQkvKiBOb3cgY29uZmlndXJlIERNQSB0byB0cmFuc2ZlciBv bmx5IGZpcnN0IGhhbGYgb2YgU3lzdGVtIFJBTQorCQkgKiBidWZmZXIgYmVmb3JlIHBsYXliYWNr IGlzIHRyaWdnZXJlZC4gVGhpcyB3aWxsIG92ZXJ3cml0ZQorCQkgKiB6ZXJvLWVkIHNlY29uZCBo YWxmIG9mIFNSQU0gYnVmZmVyICovCisJCWFjcF9kZXYtPmNvbmZpZ19kbWFfY2hhbm5lbChhY3Bf ZGV2LCBTWVNSQU1fVE9fQUNQX0NIX05VTSwKKwkJCQkJUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NS X0NIMTIsCisJCQkJCTEsIDApOworCX0gZWxzZSB7CisJCWFjcF9kZXYtPmNvbmZpZ19kbWFfY2hh bm5lbChhY3BfZGV2LCBBQ1BfVE9fU1lTUkFNX0NIX05VTSwKKwkJCQkJQ0FQVFVSRV9TVEFSVF9E TUFfREVTQ1JfQ0gxNCwKKwkJCQkJTlVNX0RTQ1JTX1BFUl9DSEFOTkVMLCAwKTsKKwkJYWNwX2Rl di0+Y29uZmlnX2RtYV9jaGFubmVsKGFjcF9kZXYsIEkyU19UT19BQ1BfRE1BX0NIX05VTSwKKwkJ CQkJQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNSwKKwkJCQkJTlVNX0RTQ1JTX1BFUl9DSEFO TkVMLCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2RtYV90cmlnZ2Vy KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVj dCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0 IGF1ZGlvX3N1YnN0cmVhbV9kYXRhICpydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3Ry dWN0IGFtZF9hY3BfZGV2aWNlICphY3BfZGV2ID0gcnRkLT5hY3BfZGV2OworCWludCByZXQ7CisK KwlpZiAoIXJ0ZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNO RFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgor CWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJaWYgKHN1YnN0cmVhbS0+ c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCXJldCA9IGFjcF9kZXYt PmRtYV9zdGFydChydGQtPmFjcF9kZXYsCisJCQkJCQlTWVNSQU1fVE9fQUNQX0NIX05VTSwgZmFs c2UpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlhY3BfZGV2LT5w cmVidWZmZXJfYXVkaW8ocnRkLT5hY3BfZGV2KTsKKworCQkJcmV0ID0gYWNwX2Rldi0+ZG1hX3N0 YXJ0KGFjcF9kZXYsCisJCQkJCSAgICBBQ1BfVE9fSTJTX0RNQV9DSF9OVU0sIHRydWUpOworCQl9 IGVsc2UgeworCQkJcmV0ID0gYWNwX2Rldi0+ZG1hX3N0YXJ0KGFjcF9kZXYsCisJCQkJCSAgICBJ MlNfVE9fQUNQX0RNQV9DSF9OVU0sIHRydWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EUlZf UENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2Fz ZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0g PT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQkJcmV0ID0gYWNwX2Rldi0+ZG1hX3N0 b3AoYWNwX2RldiwgU1lTUkFNX1RPX0FDUF9DSF9OVU0pOworCQkJaWYgKDAgPT0gcmV0KQorCQkJ CXJldCA9IGFjcF9kZXYtPmRtYV9zdG9wKGFjcF9kZXYsCisJCQkJCQkgICBBQ1BfVE9fSTJTX0RN QV9DSF9OVU0pOworCQl9IGVsc2UgeworCQkJcmV0ID0gYWNwX2Rldi0+ZG1hX3N0b3AoYWNwX2Rl diwgSTJTX1RPX0FDUF9ETUFfQ0hfTlVNKTsKKwkJCWlmICgwID09IHJldCkKKwkJCQlyZXQgPSBh Y3BfZGV2LT5kbWFfc3RvcChhY3BfZGV2LAorCQkJCQkJQUNQX1RPX1NZU1JBTV9DSF9OVU0pOwor CQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisKKwl9CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludCBhY3BfZG1hX25ldyhzdHJ1Y3Qgc25kX3NvY19wY21fcnVu dGltZSAqcnRkKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKworCXBjbSA9 IHJ0ZC0+cGNtOworCXJldCA9IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwo cGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkJCU5VTEwsIE1JTl9CVUZGRVIsIE1BWF9CVUZG RVIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2RtYV9jbG9zZShzdHJ1Y3Qg c25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1l ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1f ZGF0YSAqcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX3BjbV9y dW50aW1lICpwcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlrZnJlZShydGQpOwor CisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShwcnRkLT5wbGF0Zm9ybS0+ZGV2KTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBhY3BfZGFpX2kyc19od3BhcmFtcyhzdHJ1Y3Qgc25kX3Bj bV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBh cmFtcywKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9y dW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3Bj bV9ydW50aW1lICpwcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1ZGlv X3N1YnN0cmVhbV9kYXRhICpydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFt ZF9hY3BfZGV2aWNlICphY3BfZGV2ID0gcnRkLT5hY3BfZGV2OworCXN0cnVjdCBkZXZpY2UgKmRl diA9IHBydGQtPnBsYXRmb3JtLT5kZXY7CisJdTMyIGNoYW5fbnI7CisKKwlzd2l0Y2ggKHBhcmFt c19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXJ0 ZC0+eGZlcl9yZXNvbHV0aW9uID0gMHgwMjsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9G T1JNQVRfUzI0X0xFOgorCQlydGQtPnhmZXJfcmVzb2x1dGlvbiA9IDB4MDQ7CisJCWJyZWFrOwor CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJcnRkLT54ZmVyX3Jlc29sdXRpb24g PSAweDA1OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAidW5zdXBwdGVk IFBDTSBmbXQgOiAlZFxuIiwgcGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJY2hhbl9uciA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCisJc3dpdGNo IChjaGFuX25yKSB7CisJY2FzZSBFSUdIVF9DSEFOTkVMX1NVUFBPUlQ6CisJCXJ0ZC0+Y2hfcmVn ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBTSVhfQ0hBTk5FTF9TVVBQT1JUOgorCQlydGQtPmNoX3Jl ZyA9IDI7CisJCWJyZWFrOworCWNhc2UgRk9VUl9DSEFOTkVMX1NVUFBPUlQ6CisJCXJ0ZC0+Y2hf cmVnID0gMTsKKwkJYnJlYWs7CisJY2FzZSBUV09fQ0hBTk5FTF9TVVBQT1JUOgorCQlydGQtPmNo X3JlZyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiY2hhbm5lbCBu b3Qgc3VwcG9ydGVkIDogJWRcbiIsIGNoYW5fbnIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlydGQtPmRpcmVjdGlvbiA9IHN1YnN0cmVhbS0+c3RyZWFtOworCisJYWNwX2Rldi0+Y29uZmln X2kycyhhY3BfZGV2LCBydGQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2Rh aV9pMnNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAg ICAgICBpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3Bj bV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBhdWRpb19z dWJzdHJlYW1fZGF0YSAqcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhbWRf YWNwX2RldmljZSAqYWNwX2RldiA9IHJ0ZC0+YWNwX2RldjsKKwlpbnQgcmV0OworCisJc3dpdGNo IChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENN X1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToK KwkJYWNwX2Rldi0+aTJzX3N0YXJ0KGFjcF9kZXYsIHN1YnN0cmVhbS0+c3RyZWFtKTsKKwkJcmV0 ID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBT TkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0Vf UFVTSDoKKwkJYWNwX2Rldi0+aTJzX3N0b3AoYWNwX2Rldiwgc3Vic3RyZWFtLT5zdHJlYW0pOwor CQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVh azsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFjcF9kYWlfaTJzX3ByZXBh cmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICAgc3RydWN0 IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9 IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKnJ0ZCA9 IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYg PSBydGQtPmFjcF9kZXY7CisKKwlhY3BfZGV2LT5pMnNfcmVzZXQoYWNwX2Rldiwgc3Vic3RyZWFt LT5zdHJlYW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGFj cF9kbWFfb3BzID0geworCS5vcGVuID0gYWNwX2RtYV9vcGVuLAorCS5jbG9zZSA9IGFjcF9kbWFf Y2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IGFjcF9k bWFfaHdfcGFyYW1zLAorCS5od19mcmVlID0gYWNwX2RtYV9od19mcmVlLAorCS50cmlnZ2VyID0g YWNwX2RtYV90cmlnZ2VyLAorCS5wb2ludGVyID0gYWNwX2RtYV9wb2ludGVyLAorCS5tbWFwID0g YWNwX2RtYV9tbWFwLAorCS5wcmVwYXJlID0gYWNwX2RtYV9wcmVwYXJlLAorfTsKKworc3RhdGlj IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWNwX2RhaV9pMnNfb3BzID0geworCS5wcmVwYXJlID0g YWNwX2RhaV9pMnNfcHJlcGFyZSwKKwkuaHdfcGFyYW1zID0gYWNwX2RhaV9pMnNfaHdwYXJhbXMs CisJLnRyaWdnZXIgPSBhY3BfZGFpX2kyc190cmlnZ2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBz bmRfc29jX2RhaV9kcml2ZXIgaTJzX2RhaV9kcml2ZXIgPSB7CisJLnBsYXliYWNrID0geworCQkg ICAgIC5zdHJlYW1fbmFtZSA9ICJJMlMgUGxheWJhY2siLAorCQkgICAgIC5jaGFubmVsc19taW4g PSAyLAorCQkgICAgIC5jaGFubmVsc19tYXggPSAyLAorCQkgICAgIC5yYXRlcyA9IFNORFJWX1BD TV9SQVRFXzgwMDBfOTYwMDAsCisJCSAgICAgLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1My NF9MRSB8CisJCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisKKwkJICAgICAucmF0ZV9taW4g PSA4MDAwLAorCQkgICAgIC5yYXRlX21heCA9IDk2MDAwLAorCQkgICAgIH0sCisJLmNhcHR1cmUg PSB7CisJCSAgICAuc3RyZWFtX25hbWUgPSAiSTJTIENhcHR1cmUiLAorCQkgICAgLmNoYW5uZWxz X21pbiA9IDIsCisJCSAgICAuY2hhbm5lbHNfbWF4ID0gMiwKKwkJICAgIC5yYXRlcyA9IFNORFJW X1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCSAgICAuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRf UzI0X0xFIHwKKwkJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkJICAgIC5yYXRlX21pbiA9 IDgwMDAsCisJCSAgICAucmF0ZV9tYXggPSA0ODAwMCwKKwkJICAgIH0sCisJLm9wcyA9ICZhY3Bf ZGFpX2kyc19vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJpdmVy IGFjcF9hc29jX3BsYXRmb3JtID0geworCS5vcHMgPSAmYWNwX2RtYV9vcHMsCisJLnBjbV9uZXcg PSBhY3BfZG1hX25ldywKK307CisKK3N0YXRpYyBpbnQgYWNwX2Fsc2FfcmVnaXN0ZXIoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYsCisJCQkJc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gc25k X3NvY19yZWdpc3Rlcl9wbGF0Zm9ybShkZXYsICZhY3BfYXNvY19wbGF0Zm9ybSk7CisJaWYgKDAg IT0gc3RhdHVzKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIEFMU0EgcGxh dGZvcm0gZGV2aWNlXG4iKTsKKwkJZ290byBleGl0X3BsYXRmb3JtOworCX0gZWxzZSB7CisJCXN0 YXR1cyA9IHNuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KGRldiwKKwkJCQkJJmR3X2kyc19jb21w b25lbnQsCisJCQkJCSZpMnNfZGFpX2RyaXZlciwgMSk7CisKKwkJaWYgKDAgIT0gc3RhdHVzKSB7 CisJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZWdpc3RlciBpMnMgZGFpXG4iKTsKKwkJCWdv dG8gZXhpdF9kYWk7CisJCX0gZWxzZSB7CisJCQlkZXZfaW5mbyhkZXYsICJBQ1AgZGV2aWNlIHJl Z2lzdGVyZWQgd2l0aCBBTFNBXG4iKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwl9CisKK2V4 aXRfZGFpOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybShkZXYpOworZXhpdF9wbGF0Zm9y bToKKwlhY3BfZGV2LT5maW5pKGFjcF9kZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRp YyBpbnQgYWNwX2F1ZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ aW50IHN0YXR1czsKKwlzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEgKmF1ZGlvX2Rydl9kYXRhOworCXN0 cnVjdCBhbWRfYWNwX2RldmljZSAqYWNwX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRl dik7CisKKwlhdWRpb19kcnZfZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yo c3RydWN0IGF1ZGlvX2Rydl9kYXRhKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKGF1ZGlvX2Ry dl9kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYXVkaW9fZHJ2X2RhdGEtPmlw cnYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgYWNwX2ly cV9wcnYpLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKGF1ZGlvX2Rydl9kYXRhLT5pcHJ2ID09 IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogVGhlIGZvbGxvd2luZyBtZW1iZXJzIGdl dHMgcG9wdWxhdGVkIGluIGRldmljZSAnb3BlbicKKwkgKiBmdW5jdGlvbi4gVGlsbCB0aGVuIGlu dGVycnVwdHMgYXJlIGRpc2FibGVkIGluICdhY3BfaHdfaW5pdCcKKwkgKiBhbmQgZGV2aWNlIGRv ZXNuJ3QgZ2VuZXJhdGUgYW55IGludGVycnVwdHMuCisJICovCisKKwlhdWRpb19kcnZfZGF0YS0+ cGxheV9zdHJlYW0gPSBOVUxMOworCWF1ZGlvX2Rydl9kYXRhLT5jYXB0dXJlX3N0cmVhbSA9IE5V TEw7CisJYXVkaW9fZHJ2X2RhdGEtPmFjcF9kZXYgPSBhY3BfZGV2OworCisJYXVkaW9fZHJ2X2Rh dGEtPmlwcnYtPmRldiA9ICZwZGV2LT5kZXY7CisJYXVkaW9fZHJ2X2RhdGEtPmlwcnYtPmFjcF9k ZXYgPSBhY3BfZGV2OworCWF1ZGlvX2Rydl9kYXRhLT5pcHJ2LT5zZXRfZWxhcHNlZCA9IGFjcF9w Y21fcGVyaW9kX2VsYXBzZWQ7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgYXVkaW9f ZHJ2X2RhdGEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgQUNQICovCisJc3RhdHVzID0gYWNwX2Rl di0+aW5pdChhY3BfZGV2LCBhdWRpb19kcnZfZGF0YS0+aXBydik7CisKKwlpZiAoMCA9PSBzdGF0 dXMpCisJCXN0YXR1cyA9IGFjcF9hbHNhX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIGFjcF9kZXYsIHBk ZXYpOworCWVsc2UKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQUNQIGluaXRpYWxpemF0aW9uIEZh aWxlZFxuIik7CisKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmcGRldi0+ZGV2 LCAxMDAwMCk7CisJcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoJnBkZXYtPmRldik7CisJcG1f cnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0 aWMgaW50IGFjcF9hdWRpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgYW1kX2FjcF9kZXZpY2UgKmFjcF9kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2 LT5kZXYpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2NvbXBvbmVudCgmcGRldi0+ZGV2KTsKKwlz bmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7CisKKwlhY3BfZGV2LT5maW5p KGFjcF9kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGFjcF9wY21fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7 CisJYm9vbCBwbV9ydHM7CisJc3RydWN0IGF1ZGlvX2Rydl9kYXRhICphZGF0YSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCisJcG1fcnRzID0gcG1fcnVudGltZV9zdGF0dXNfc3VzcGVuZGVkKGRl dik7CisJaWYgKHBtX3J0cyA9PSBmYWxzZSkKKwkJYWRhdGEtPmFjcF9kZXYtPmZpbmkoYWRhdGEt PmFjcF9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwX3BjbV9yZXN1bWUo c3RydWN0IGRldmljZSAqZGV2KQoreworCWJvb2wgcG1fcnRzOworCXN0cnVjdCBzbmRfcGNtX3N1 YnN0cmVhbSAqcHN0cmVhbSwgKmNzdHJlYW07CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcHJ0 ZCwgKmNydGQ7CisJc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhICpydGQ7CisJc3RydWN0IGF1 ZGlvX2Rydl9kYXRhICphZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcG1fcnRzID0g cG1fcnVudGltZV9zdGF0dXNfc3VzcGVuZGVkKGRldik7CisJaWYgKHBtX3J0cyA9PSB0cnVlKSB7 CisJCS8qIFJlc3VtZWQgZnJvbSBzeXN0ZW0gd2lkZSBzdXNwZW5kIGFuZCB0aGVyZSBpcworCQkg KiBubyBwZW5kaW5nIGF1ZGlvIGFjdGl2aXR5IHRvIHJlc3VtZS4gKi8KKwkJcG1fcnVudGltZV9k aXNhYmxlKGRldik7CisJCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOworCQlwbV9ydW50aW1l X2VuYWJsZShkZXYpOworCisJCWdvdG8gb3V0OworCX0KKworCXBzdHJlYW0gPSBhZGF0YS0+cGxh eV9zdHJlYW07CisJcHJ0ZCA9IHBzdHJlYW0gPyBwc3RyZWFtLT5ydW50aW1lIDogTlVMTDsKKwlp ZiAocHJ0ZCAhPSBOVUxMKSB7CisJCS8qIFJlc3VtZSBwbGF5YmFjayBzdHJlYW0gZnJvbSBhIHN1 c3BlbmRlZCBzdGF0ZSAqLworCQlydGQgPSBwcnRkLT5wcml2YXRlX2RhdGE7CisKKwkJYWRhdGEt PmFjcF9kZXYtPmNvbmZpZ19kbWEoYWRhdGEtPmFjcF9kZXYsIHJ0ZCk7CisJCWFkYXRhLT5hY3Bf ZGV2LT5jb25maWdfaTJzKGFkYXRhLT5hY3BfZGV2LCBydGQpOworCX0KKworCWNzdHJlYW0gPSBh ZGF0YS0+Y2FwdHVyZV9zdHJlYW07CisJY3J0ZCA9ICBjc3RyZWFtID8gY3N0cmVhbS0+cnVudGlt ZSA6IE5VTEw7CisJaWYgKGNydGQgIT0gTlVMTCkgeworCQkvKiBSZXN1bWUgY2FwdHVyZSBzdHJl YW0gZnJvbSBhIHN1c3BlbmRlZCBzdGF0ZSAqLworCQlydGQgPSBjcnRkLT5wcml2YXRlX2RhdGE7 CisKKwkJYWRhdGEtPmFjcF9kZXYtPmNvbmZpZ19kbWEoYWRhdGEtPmFjcF9kZXYsIHJ0ZCk7CisJ CWFkYXRhLT5hY3BfZGV2LT5jb25maWdfaTJzKGFkYXRhLT5hY3BfZGV2LCBydGQpOworCX0KK291 dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3BfcGNtX3J1bnRpbWVfc3VzcGVuZChz dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1ZGlvX2Rydl9kYXRhICphZGF0YSA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCisJYWRhdGEtPmFjcF9kZXYtPmFjcF9zdXNwZW5kKGFkYXRh LT5hY3BfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3BfcGNtX3J1bnRpbWVf cmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEgKmFk YXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlhZGF0YS0+YWNwX2Rldi0+YWNwX3Jlc3Vt ZShhZGF0YS0+YWNwX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZGV2X3BtX29wcyBhY3BfcG1fb3BzID0geworCS5zdXNwZW5kID0gYWNwX3BjbV9zdXNwZW5kLAor CS5yZXN1bWUgPSBhY3BfcGNtX3Jlc3VtZSwKKwkucnVudGltZV9zdXNwZW5kID0gYWNwX3BjbV9y dW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0gYWNwX3BjbV9ydW50aW1lX3Jlc3Vt ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFjcF9kbWFfZHJpdmVyID0g eworCS5wcm9iZSA9IGFjcF9hdWRpb19wcm9iZSwKKwkucmVtb3ZlID0gYWNwX2F1ZGlvX3JlbW92 ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhY3AtaTJzLWF1ZGlvIiwKKwkJLnBtID0gJmFj cF9wbV9vcHMsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWNwX2RtYV9kcml2 ZXIpOworCitNT0RVTEVfQVVUSE9SKCJNYXJ1dGhpLkJheXlhdmFyYXB1QGFtZC5jb20iKTsKK01P RFVMRV9ERVNDUklQVElPTigiQU1EIEFDUCBQQ00gRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgi R1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphY3At aTJzLWF1ZGlvIik7Ci0tIAoxLjguMy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo=