From mboxrd@z Thu Jan 1 00:00:00 1970 From: Suraj Jitindar Singh Subject: [PATCH V5 3/3] powerpc/drivers: Add driver for operator panel on FSP machines Date: Wed, 29 Jun 2016 13:38:39 +1000 Message-ID: <1467171519-19882-3-git-send-email-sjitindarsingh@gmail.com> References: <1467171519-19882-1-git-send-email-sjitindarsingh@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1467171519-19882-1-git-send-email-sjitindarsingh@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: linuxppc-dev@lists.ozlabs.org, mpe@ellerman.id.au Cc: robh@kernel.org, arnd@arndb.de, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, paulus@samba.org, sjitindarsingh@gmail.com List-Id: devicetree@vger.kernel.org SW1wbGVtZW50IG5ldyBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciB0byBhbGxvdyBhY2Nlc3MgZnJv bSB1c2VyIHNwYWNlCnRvIHRoZSBvcGVyYXRvciBwYW5lbCBkaXNwbGF5IHByZXNlbnQgb24gSUJN IFBvd2VyIFN5c3RlbXMgbWFjaGluZXMKd2l0aCBGU1BzLgoKVGhpcyB3aWxsIGFsbG93IHN0YXR1 cyBpbmZvcm1hdGlvbiB0byBiZSBwcmVzZW50ZWQgb24gdGhlIGRpc3BsYXkgd2hpY2gKaXMgdmlz aWJsZSB0byBhIHVzZXIuCgpUaGUgZHJpdmVyIGltcGxlbWVudHMgYSBjaGFyYWN0ZXIgYnVmZmVy IHdoaWNoIGEgdXNlciBjYW4gcmVhZC93cml0ZQpieSBhY2Nlc3NpbmcgdGhlIGRldmljZSAoL2Rl di9vcF9wYW5lbCkuIFRoaXMgYnVmZmVyIGlzIHRoZW4gZGlzcGxheWVkIG9uCnRoZSBvcGVyYXRv ciBwYW5lbCBkaXNwbGF5LiBBbnkgYXR0ZW1wdCB0byB3cml0ZSBwYXN0IHRoZSBsYXN0IGNoYXJh Y3Rlcgpwb3NpdGlvbiB3aWxsIGhhdmUgbm8gZWZmZWN0IGFuZCBhdHRlbXB0cyB0byB3cml0ZSBt b3JlIGNoYXJhY3RlcnMgdGhhbgp0aGUgc2l6ZSBvZiB0aGUgZGlzcGxheSB3aWxsIGJlIHRydW5j YXRlZC4gVGhlIGRldmljZSBtYXkgb25seSBiZSBhY2Nlc3NlZApieSBhIHNpbmdsZSBwcm9jZXNz IGF0IGEgdGltZS4KClNpZ25lZC1vZmYtYnk6IFN1cmFqIEppdGluZGFyIFNpbmdoIDxzaml0aW5k YXJzaW5naEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBBbmRyZXcgRG9ubmVsbGFuIDxhbmRyZXcu ZG9ubmVsbGFuQGF1MS5pYm0uY29tPgoKLS0tCgpDaGFuZ2UgTG9nOgoKVjEgLT4gVjI6CgktIFJl cGxhY2UgIklCTSBwU2VyaWVzIG1hY2hpbmVzIiB3aXRoICJJQk0gUG93ZXIgU3lzdGVtcyBtYWNo aW5lcwoJd2l0aCBGU1BzIiBmb3IgaW1wcm92ZWQgY2xhcml0eQoJLSBCYXNpYyB3b3JkaW5nL2dy YW1tYXIgZml4ZXMKVjIgLT4gVjM6CgktIE5vdGhpbmcKVjMgLT4gVjQ6CgktIFZhcmlvdXMgc3R5 bGUgY2hhbmdlcyBhbmQgbm9uLWZ1bmN0aW9uYWwgY29kZSB1cGRhdGVzClY0IC0+IFY1OgoJLSBO b3RoaW5nCi0tLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgNiArCiBhcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZyAgICAgICAg IHwgICAxICsKIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9vcGFsLmggICAgICAgICAgICAgICAg fCAgIDIgKwogYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtd3JhcHBlcnMuUyB8 ICAgMSArCiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jICAgICAgICAgIHwg ICA1ICsKIGRyaXZlcnMvY2hhci9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg MTQgKysKIGRyaXZlcnMvY2hhci9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogZHJpdmVycy9jaGFyL3Bvd2VybnYtb3AtcGFuZWwuYyAgICAgICAgICAgICAgICB8IDIy MyArKysrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDI1MyBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jaGFyL3Bvd2VybnYtb3AtcGFuZWwu YwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggOTUyZmQyYS4u NDJhY2UzOCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTkw OTQsNiArOTA5NCwxMiBAQCBGOglkcml2ZXJzL2Zpcm13YXJlL3BzY2kuYwogRjoJaW5jbHVkZS9s aW51eC9wc2NpLmgKIEY6CWluY2x1ZGUvdWFwaS9saW51eC9wc2NpLmgKIAorUE9XRVJOViBPUEVS QVRPUiBQQU5FTCBMQ0QgRElTUExBWSBEUklWRVIKK006CVN1cmFqIEppdGluZGFyIFNpbmdoIDxz aml0aW5kYXJzaW5naEBnbWFpbC5jb20+CitMOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9y ZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9jaGFyL3Bvd2VybnYtb3AtcGFuZWwuYworCiBQ TlAgU1VQUE9SVAogTToJIlJhZmFlbCBKLiBXeXNvY2tpIiA8cmFmYWVsLmoud3lzb2NraUBpbnRl bC5jb20+CiBTOglNYWludGFpbmVkCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9w b3dlcm52X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmln CmluZGV4IDA0NTAzMTAuLjk1OWQzMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdz L3Bvd2VybnZfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVm Y29uZmlnCkBAIC0xODEsNiArMTgxLDcgQEAgQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19T RVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfSlNNPW0KIENPTkZJR19WSVJUSU9f Q09OU09MRT1tCitDT05GSUdfUE9XRVJOVl9PUF9QQU5FTD1tCiBDT05GSUdfSVBNSV9IQU5ETEVS PXkKIENPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9eQogQ09ORklHX0lQTUlfUE9XRVJOVj15 CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb3BhbC5oIGIvYXJjaC9wb3dl cnBjL2luY2x1ZGUvYXNtL29wYWwuaAppbmRleCAwZDRlNjkwLi5lYTllN2Y0IDEwMDY0NAotLS0g YS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb3BhbC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNs dWRlL2FzbS9vcGFsLmgKQEAgLTE3OCw2ICsxNzgsOCBAQCBpbnQ2NF90IG9wYWxfZHVtcF9hY2so dWludDMyX3QgZHVtcF9pZCk7CiBpbnQ2NF90IG9wYWxfZHVtcF9yZXNlbmRfbm90aWZpY2F0aW9u KHZvaWQpOwogCiBpbnQ2NF90IG9wYWxfZ2V0X21zZyh1aW50NjRfdCBidWZmZXIsIHVpbnQ2NF90 IHNpemUpOworaW50NjRfdCBvcGFsX3dyaXRlX29wcGFuZWxfYXN5bmModWludDY0X3QgdG9rZW4s IG9wcGFuZWxfbGluZV90ICpsaW5lcywKKwkJCQkJdWludDY0X3QgbnVtX2xpbmVzKTsKIGludDY0 X3Qgb3BhbF9jaGVja19jb21wbGV0aW9uKHVpbnQ2NF90IGJ1ZmZlciwgdWludDY0X3Qgc2l6ZSwg dWludDY0X3QgdG9rZW4pOwogaW50NjRfdCBvcGFsX3N5bmNfaG9zdF9yZWJvb3Qodm9pZCk7CiBp bnQ2NF90IG9wYWxfZ2V0X3BhcmFtKHVpbnQ2NF90IHRva2VuLCB1aW50MzJfdCBwYXJhbV9pZCwg dWludDY0X3QgYnVmZmVyLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dl cm52L29wYWwtd3JhcHBlcnMuUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFs LXdyYXBwZXJzLlMKaW5kZXggZTQ1Yjg4YS4uZGRiYThiZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dl cnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtd3JhcHBlcnMuUworKysgYi9hcmNoL3Bvd2VycGMv cGxhdGZvcm1zL3Bvd2VybnYvb3BhbC13cmFwcGVycy5TCkBAIC0yNzgsNiArMjc4LDcgQEAgT1BB TF9DQUxMKG9wYWxfZHVtcF9pbmZvMiwJCQlPUEFMX0RVTVBfSU5GTzIpOwogT1BBTF9DQUxMKG9w YWxfZHVtcF9yZWFkLAkJCU9QQUxfRFVNUF9SRUFEKTsKIE9QQUxfQ0FMTChvcGFsX2R1bXBfYWNr LAkJCU9QQUxfRFVNUF9BQ0spOwogT1BBTF9DQUxMKG9wYWxfZ2V0X21zZywJCQkJT1BBTF9HRVRf TVNHKTsKK09QQUxfQ0FMTChvcGFsX3dyaXRlX29wcGFuZWxfYXN5bmMsCQlPUEFMX1dSSVRFX09Q UEFORUxfQVNZTkMpOwogT1BBTF9DQUxMKG9wYWxfY2hlY2tfY29tcGxldGlvbiwJCU9QQUxfQ0hF Q0tfQVNZTkNfQ09NUExFVElPTik7CiBPUEFMX0NBTEwob3BhbF9kdW1wX3Jlc2VuZF9ub3RpZmlj YXRpb24sCU9QQUxfRFVNUF9SRVNFTkQpOwogT1BBTF9DQUxMKG9wYWxfc3luY19ob3N0X3JlYm9v dCwJCU9QQUxfU1lOQ19IT1NUX1JFQk9PVCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxh dGZvcm1zL3Bvd2VybnYvb3BhbC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29w YWwuYwppbmRleCAwMjU2ZDA3Li4yMjg3NTFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxh dGZvcm1zL3Bvd2VybnYvb3BhbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJu di9vcGFsLmMKQEAgLTc1MSw2ICs3NTEsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBvcGFsX2luaXQo dm9pZCkKIAlvcGFsX3BkZXZfaW5pdChvcGFsX25vZGUsICJpYm0sb3BhbC1mbGFzaCIpOwogCW9w YWxfcGRldl9pbml0KG9wYWxfbm9kZSwgImlibSxvcGFsLXByZCIpOwogCisJLyogSW5pdGlhbGlz ZSBwbGF0Zm9ybSBkZXZpY2U6IG9wcGFuZWwgaW50ZXJmYWNlICovCisJb3BhbF9wZGV2X2luaXQo b3BhbF9ub2RlLCAiaWJtLG9wYWwtb3BwYW5lbCIpOworCiAJLyogSW5pdGlhbGlzZSBPUEFMIGtt c2cgZHVtcGVyIGZvciBmbHVzaGluZyBjb25zb2xlIG9uIHBhbmljICovCiAJb3BhbF9rbXNnX2lu aXQoKTsKIApAQCAtODg1LDMgKzg4OCw1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG9wYWxfaTJjX3Jl cXVlc3QpOwogLyogRXhwb3J0IHRoZXNlIHN5bWJvbHMgZm9yIFBvd2VyTlYgTEVEIGNsYXNzIGRy aXZlciAqLwogRVhQT1JUX1NZTUJPTF9HUEwob3BhbF9sZWRzX2dldF9pbmQpOwogRVhQT1JUX1NZ TUJPTF9HUEwob3BhbF9sZWRzX3NldF9pbmQpOworLyogRXhwb3J0IHRoaXMgc3ltYm9sIGZvciBQ b3dlck5WIE9wZXJhdG9yIFBhbmVsIGNsYXNzIGRyaXZlciAqLworRVhQT1JUX1NZTUJPTF9HUEwo b3BhbF93cml0ZV9vcHBhbmVsX2FzeW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29u ZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggNjAxZjY0Zi4uZmRiOGYzZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAg LTE3OCw2ICsxNzgsMjAgQEAgY29uZmlnIElCTV9CU1IKIAkgIG9mIHRocmVhZHMgYWNyb3NzIGEg bGFyZ2Ugc3lzdGVtIHdoaWNoIGF2b2lkcyBib3VuY2luZyBhIGNhY2hlbGluZQogCSAgYmV0d2Vl biBzZXZlcmFsIGNvcmVzIG9uIGEgc3lzdGVtCiAKK2NvbmZpZyBQT1dFUk5WX09QX1BBTkVMCisJ dHJpc3RhdGUgIklCTSBQT1dFUk5WIE9wZXJhdG9yIFBhbmVsIERpc3BsYXkgc3VwcG9ydCIKKwlk ZXBlbmRzIG9uIFBQQ19QT1dFUk5WCisJZGVmYXVsdCBtCisJaGVscAorCSAgSWYgeW91IHNheSBZ IGhlcmUsIGEgc3BlY2lhbCBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUsIC9kZXYvb3BfcGFuZWwsCisJ ICB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggZXhwb3NlcyB0aGUgb3BlcmF0b3IgcGFuZWwgZGlzcGxh eSBvbiBJQk0KKwkgIFBvd2VyIFN5c3RlbXMgbWFjaGluZXMgd2l0aCBGU1BzLgorCisJICBJZiB5 b3UgZG9uJ3QgcmVxdWlyZSBhY2Nlc3MgdG8gdGhlIG9wZXJhdG9yIHBhbmVsIGRpc3BsYXkgZnJv bSB1c2VyCisJICBzcGFjZSwgc2F5IE4uCisKKwkgIElmIHVuc3VyZSwgc2F5IE0gaGVyZSB0byBi dWlsZCBpdCBhcyBhIG1vZHVsZSBjYWxsZWQgcG93ZXJudi1vcC1wYW5lbC4KKwogc291cmNlICJk cml2ZXJzL2NoYXIvaXBtaS9LY29uZmlnIgogCiBjb25maWcgRFMxNjIwCmRpZmYgLS1naXQgYS9k cml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggZDhhNzU3 OS4uNTVkMTZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvY2hhci9NYWtlZmlsZQpAQCAtNjAsMyArNjAsNCBAQCBqcy1ydGMteSA9IHJ0Yy5vCiAKIG9i ai0kKENPTkZJR19USUxFX1NST00pCQkrPSB0aWxlLXNyb20ubwogb2JqLSQoQ09ORklHX1hJTExZ QlVTKQkJKz0geGlsbHlidXMvCitvYmotJChDT05GSUdfUE9XRVJOVl9PUF9QQU5FTCkJKz0gcG93 ZXJudi1vcC1wYW5lbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcG93ZXJudi1vcC1wYW5l bC5jIGIvZHJpdmVycy9jaGFyL3Bvd2VybnYtb3AtcGFuZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5hNDVkYWJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFy L3Bvd2VybnYtb3AtcGFuZWwuYwpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIE9QQUwgT3BlcmF0 b3IgUGFuZWwgRGlzcGxheSBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxNiwgU3VyYWogSml0 aW5kYXIgU2luZ2gsIElCTSBDb3Jwb3JhdGlvbi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQp IEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVk ZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvb2Yu aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL29w YWwuaD4KKworLyoKKyAqIFRoaXMgZHJpdmVyIGNyZWF0ZXMgYSBjaGFyYWN0ZXIgZGV2aWNlICgv ZGV2L29wX3BhbmVsKSB3aGljaCBleHBvc2VzIHRoZQorICogb3BlcmF0b3IgcGFuZWwgKGNoYXJh Y3RlciBMQ0QgZGlzcGxheSkgb24gSUJNIFBvd2VyIFN5c3RlbXMgbWFjaGluZXMKKyAqIHdpdGgg RlNQcy4KKyAqIEEgY2hhcmFjdGVyIGJ1ZmZlciB3cml0dGVuIHRvIHRoZSBkZXZpY2Ugd2lsbCBi ZSBkaXNwbGF5ZWQgb24gdGhlCisgKiBvcGVyYXRvciBwYW5lbC4KKyAqLworCitzdGF0aWMgREVG SU5FX01VVEVYKG9wcGFuZWxfbXV0ZXgpOworCitzdGF0aWMgdTMyCQludW1fbGluZXMsIG9wcGFu ZWxfc2l6ZTsKK3N0YXRpYyBvcHBhbmVsX2xpbmVfdAkqb3BwYW5lbF9saW5lczsKK3N0YXRpYyBj aGFyCQkqb3BwYW5lbF9kYXRhOworCitzdGF0aWMgbG9mZl90IG9wcGFuZWxfbGxzZWVrKHN0cnVj dCBmaWxlICpmaWxwLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQoreworCXJldHVybiBmaXhl ZF9zaXplX2xsc2VlayhmaWxwLCBvZmZzZXQsIHdoZW5jZSwgb3BwYW5lbF9zaXplKTsKK30KKwor c3RhdGljIHNzaXplX3Qgb3BwYW5lbF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNl ciAqdXNlcmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCSAgICBsb2ZmX3QgKmZfcG9zKQoreworCXJldHVy biBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBsZW4sIGZfcG9zLCBvcHBhbmVsX2Rh dGEsCisJCQlvcHBhbmVsX3NpemUpOworfQorCitzdGF0aWMgaW50IF9fb3BfcGFuZWxfdXBkYXRl X2Rpc3BsYXkodm9pZCkKK3sKKwlzdHJ1Y3Qgb3BhbF9tc2cgbXNnOworCWludCByYywgdG9rZW47 CisKKwl0b2tlbiA9IG9wYWxfYXN5bmNfZ2V0X3Rva2VuX2ludGVycnVwdGlibGUoKTsKKwlpZiAo dG9rZW4gPCAwKSB7CisJCWlmICh0b2tlbiAhPSAtRVJFU1RBUlRTWVMpCisJCQlwcl9kZWJ1Zygi Q291bGRuJ3QgZ2V0IE9QQUwgYXN5bmMgdG9rZW4gW3Rva2VuPSVkXVxuIiwKKwkJCQl0b2tlbik7 CisJCXJldHVybiB0b2tlbjsKKwl9CisKKwlyYyA9IG9wYWxfd3JpdGVfb3BwYW5lbF9hc3luYyh0 b2tlbiwgb3BwYW5lbF9saW5lcywgbnVtX2xpbmVzKTsKKwlzd2l0Y2ggKHJjKSB7CisJY2FzZSBP UEFMX0FTWU5DX0NPTVBMRVRJT046CisJCXJjID0gb3BhbF9hc3luY193YWl0X3Jlc3BvbnNlKHRv a2VuLCAmbXNnKTsKKwkJaWYgKHJjKSB7CisJCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHdhaXQgZm9y IGFzeW5jIHJlc3BvbnNlIFtyYz0lZF1cbiIsCisJCQkJcmMpOworCQkJYnJlYWs7CisJCX0KKwkJ cmMgPSBvcGFsX2dldF9hc3luY19yYyhtc2cpOworCQlpZiAocmMgIT0gT1BBTF9TVUNDRVNTKSB7 CisJCQlwcl9kZWJ1ZygiT1BBTCBhc3luYyBjYWxsIHJldHVybmVkIGZhaWxlZCBbcmM9JWRdXG4i LAorCQkJCXJjKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBPUEFMX1NVQ0NFU1M6CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJPUEFMIHdyaXRlIG9wLXBhbmVsIGNhbGwgZmFpbGVk IFtyYz0lZF1cbiIsIHJjKTsKKwl9CisKKwlvcGFsX2FzeW5jX3JlbGVhc2VfdG9rZW4odG9rZW4p OworCXJldHVybiByYzsKK30KKworc3RhdGljIHNzaXplX3Qgb3BwYW5lbF93cml0ZShzdHJ1Y3Qg ZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkgICAgIHNpemVfdCBs ZW4sIGxvZmZfdCAqZl9wb3MpCit7CisJbG9mZl90IGZfcG9zX3ByZXYgPSAqZl9wb3M7CisJc3Np emVfdCByZXQ7CisJaW50IHJjOworCisJaWYgKCEqZl9wb3MpCisJCW1lbXNldChvcHBhbmVsX2Rh dGEsICcgJywgb3BwYW5lbF9zaXplKTsKKwllbHNlIGlmICgqZl9wb3MgPj0gb3BwYW5lbF9zaXpl KQorCQlyZXR1cm4gLUVGQklHOworCisJcmV0ID0gc2ltcGxlX3dyaXRlX3RvX2J1ZmZlcihvcHBh bmVsX2RhdGEsIG9wcGFuZWxfc2l6ZSwgZl9wb3MsIHVzZXJidWYsCisJCQlsZW4pOworCWlmIChy ZXQgPiAwKSB7CisJCXJjID0gX19vcF9wYW5lbF91cGRhdGVfZGlzcGxheSgpOworCQlpZiAocmMg IT0gT1BBTF9TVUNDRVNTKSB7CisJCQlwcl9lcnJfcmF0ZWxpbWl0ZWQoIk9QQUwgY2FsbCBmYWls ZWQgdG8gd3JpdGUgdG8gb3AgcGFuZWwgZGlzcGxheSBbcmM9JWRdXG4iLAorCQkJCXJjKTsKKwkJ CSpmX3BvcyA9IGZfcG9zX3ByZXY7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IG9wcGFuZWxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBz dHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpZiAoIW11dGV4X3RyeWxvY2soJm9wcGFuZWxfbXV0ZXgp KSB7CisJCXByX2RlYnVnKCJEZXZpY2UgQnVzeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wcGFuZWxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwltdXRleF91bmxvY2soJm9wcGFuZWxfbXV0 ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9u cyBvcHBhbmVsX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0g b3BwYW5lbF9sbHNlZWssCisJLnJlYWQJCT0gb3BwYW5lbF9yZWFkLAorCS53cml0ZQkJPSBvcHBh bmVsX3dyaXRlLAorCS5vcGVuCQk9IG9wcGFuZWxfb3BlbiwKKwkucmVsZWFzZQk9IG9wcGFuZWxf cmVsZWFzZQorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG9wcGFuZWxfZGV2ID0gewor CS5taW5vcgkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCisJLm5hbWUJCT0gIm9wX3BhbmVsIiwKKwku Zm9wcwkJPSAmb3BwYW5lbF9mb3BzCit9OworCitzdGF0aWMgaW50IG9wcGFuZWxfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0g cGRldi0+ZGV2Lm9mX25vZGU7CisJdTMyIGxpbmVfbGVuOworCWludCByYywgaTsKKworCXJjID0g b2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICIjbGVuZ3RoIiwgJmxpbmVfbGVuKTsKKwlpZiAocmMp IHsKKwkJcHJfZXJyX3JhdGVsaW1pdGVkKCJPcGVyYXRvciBwYW5lbCBsZW5ndGggcHJvcGVydHkg bm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyKG5wLCAiI2xpbmVzIiwgJm51bV9saW5lcyk7CisJaWYgKHJjKSB7CisJCXByX2Vycl9yYXRl bGltaXRlZCgiT3BlcmF0b3IgcGFuZWwgbGluZXMgcHJvcGVydHkgbm90IGZvdW5kXG4iKTsKKwkJ cmV0dXJuIHJjOworCX0KKwlvcHBhbmVsX3NpemUgPSBsaW5lX2xlbiAqIG51bV9saW5lczsKKwor CXByX2RldmVsKCJPcGVyYXRvciBwYW5lbCBvZiBzaXplICV1IGZvdW5kIHdpdGggJXUgbGluZXMg b2YgbGVuZ3RoICV1XG4iLAorCQkJb3BwYW5lbF9zaXplLCBudW1fbGluZXMsIGxpbmVfbGVuKTsK KworCW9wcGFuZWxfZGF0YSA9IGtjYWxsb2Mob3BwYW5lbF9zaXplLCBzaXplb2YoKm9wcGFuZWxf ZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghb3BwYW5lbF9kYXRhKQorCQlyZXR1cm4gLUVOT01F TTsKKworCW9wcGFuZWxfbGluZXMgPSBrY2FsbG9jKG51bV9saW5lcywgc2l6ZW9mKG9wcGFuZWxf bGluZV90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvcHBhbmVsX2xpbmVzKSB7CisJCXJjID0gLUVO T01FTTsKKwkJZ290byBmcmVlX29wcGFuZWxfZGF0YTsKKwl9CisKKwltZW1zZXQob3BwYW5lbF9k YXRhLCAnICcsIG9wcGFuZWxfc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IG51bV9saW5lczsgaSsr KSB7CisJCW9wcGFuZWxfbGluZXNbaV0ubGluZV9sZW4gPSBjcHVfdG9fYmU2NChsaW5lX2xlbik7 CisJCW9wcGFuZWxfbGluZXNbaV0ubGluZSA9IGNwdV90b19iZTY0KF9fcGEoJm9wcGFuZWxfZGF0 YVtpICoKKwkJCQkJCWxpbmVfbGVuXSkpOworCX0KKworCXJjID0gbWlzY19yZWdpc3Rlcigmb3Bw YW5lbF9kZXYpOworCWlmIChyYykgeworCQlwcl9lcnJfcmF0ZWxpbWl0ZWQoIkZhaWxlZCB0byBy ZWdpc3RlciBhcyBtaXNjIGRldmljZVxuIik7CisJCWdvdG8gZnJlZV9vcHBhbmVsOworCX0KKwor CXJldHVybiAwOworCitmcmVlX29wcGFuZWw6CisJa2ZyZWUob3BwYW5lbF9saW5lcyk7CitmcmVl X29wcGFuZWxfZGF0YToKKwlrZnJlZShvcHBhbmVsX2RhdGEpOworCXJldHVybiByYzsKK30KKwor c3RhdGljIGludCBvcHBhbmVsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor eworCW1pc2NfZGVyZWdpc3Rlcigmb3BwYW5lbF9kZXYpOworCWtmcmVlKG9wcGFuZWxfbGluZXMp OworCWtmcmVlKG9wcGFuZWxfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9wcGFuZWxfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0g ImlibSxvcGFsLW9wcGFuZWwiIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgb3BwYW5lbF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJCT0gInBv d2VybnYtb3AtcGFuZWwiLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBvcHBhbmVsX21hdGNoLAorCX0s CisJLnByb2JlCT0gb3BwYW5lbF9wcm9iZSwKKwkucmVtb3ZlCT0gb3BwYW5lbF9yZW1vdmUsCit9 OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG9wcGFuZWxfZHJpdmVyKTsKKworTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgb3BwYW5lbF9tYXRjaCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7 CitNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyTlYgT3BlcmF0b3IgUGFuZWwgTENEIERpc3BsYXkg RHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTdXJhaiBKaXRpbmRhciBTaW5naCA8c2ppdGluZGFy c2luZ2hAZ21haWwuY29tPiIpOwotLSAKMi41LjUKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkxpbnV4cHBjLWRldiBtYWlsaW5nIGxpc3QKTGludXhwcGMt ZGV2QGxpc3RzLm96bGFicy5vcmcKaHR0cHM6Ly9saXN0cy5vemxhYnMub3JnL2xpc3RpbmZvL2xp bnV4cHBjLWRldg==