From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [04/31] usb: usbssp: Added USBSSP platform driver From: Pawel Laszczak Message-Id: <1531374448-26532-5-git-send-email-pawell@cadence.com> Date: Thu, 12 Jul 2018 06:47:01 +0100 Cc: Greg Kroah-Hartman , linux-usb@vger.kernel.org, Felipe Balbi , linux-kernel@vger.kernel.org, ltyrala@cadence.com, adouglas@cadence.com, pawell@cadence.com List-ID: VGhpcyBwYXRjaCBhZGRzIHBsYXRmb3JtIGRyaXZlciB0aGF0IGlzIGVudHJ5IHBvaW50IGZvciBs b2FkaW5nIGFuZAp1bmxvYWRpbmcgdXNic3NwLmtvIG1vZHVsZXMuCkl0IGFsc28gYWRkcyBpbmZv cm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlciB0byBkcml2ZXJzL3VzYi9LY29uZmlnCmFuZCBkcml2 ZXJzL3VzYi9NYWtlZmlsZSBmaWxlcyBhbmQgY3JlYXRlIEtjb25maWcgYW5kIE1ha2VmaWxlCmZp bGVzIGluIGRyaXZlcnMvdXNiL3VzYnNzcCBkaXJlY3RvcnkuCgpQYXRjaCBhbHNvIGFkZHMgdGVt cGxhdGUgZm9yIHNvbWUgZnVuY3Rpb24gaXZva2tlZCBmcm9tCnVzYnNzcF9wbGF0LmMgZmlsZS4g VGhlc2UgZnVuY3Rpb24gd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBuZXh0IHBhdGNoZXMuCgpUaGlz IHBhdGNoIGFsc28gaW50cm9kdWNlIHVzYnNzcF90cmJfdmlydF90b19kbWEgdGhhdCBjb252ZXJ0 cwp2aXJ0dWFsIGFkZHJlc3Mgb2YgVFJCJ3MgdG8gRE1BIGFkZHJlc3MuIEluIHRoaXMgbW9tZW50 IHRoaXMKZnVuY3Rpb24gaXMgdXNlZCBvbmx5IGluIGdhZGdldC10cmFjZS5oLgoKRnJvbSB0aGlz IG1vbWVudCB0aGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZC4KClNpZ25lZC1vZmYtYnk6IFBhd2Vs IExhc3pjemFrIDxwYXdlbGxAY2FkZW5jZS5jb20+Ci0tLQogZHJpdmVycy91c2IvS2NvbmZpZyAg ICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy91c2IvTWFrZWZpbGUgICAgICAgICAgICAgfCAg IDIgKwogZHJpdmVycy91c2IvdXNic3NwL0tjb25maWcgICAgICAgfCAgMjEgKysrKwogZHJpdmVy cy91c2IvdXNic3NwL01ha2VmaWxlICAgICAgfCAgMTEgKysKIGRyaXZlcnMvdXNiL3VzYnNzcC9n YWRnZXQtcmluZy5jIHwgIDQ4ICsrKysrKysrCiBkcml2ZXJzL3VzYi91c2Jzc3AvZ2FkZ2V0LmMg ICAgICB8ICA2NCArKysrKysrKysrKwogZHJpdmVycy91c2IvdXNic3NwL2dhZGdldC5oICAgICAg fCAgMTYgKystCiBkcml2ZXJzL3VzYi91c2Jzc3AvdXNic3NwLXBsYXQuYyB8IDE4NiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDM0OSBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdXNic3Nw L0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi91c2Jzc3AvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi91c2Jzc3AvZ2FkZ2V0LXJpbmcuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL3VzYnNzcC9nYWRnZXQuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvdXNiL3VzYnNzcC91c2Jzc3AtcGxhdC5jCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL0tjb25maWcKaW5kZXggZjY5OWFiYWIxNzg3 Li5kYzA1ZjM4NGMzNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcKKysrIGIvZHJp dmVycy91c2IvS2NvbmZpZwpAQCAtMTEwLDYgKzExMCw4IEBAIHNvdXJjZSAiZHJpdmVycy91c2Iv bXR1My9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvdXNiL211c2IvS2NvbmZpZyIKIAorc291 cmNlICJkcml2ZXJzL3VzYi91c2Jzc3AvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL3VzYi9k d2MzL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy91c2IvZHdjMi9LY29uZmlnIgpkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQppbmRleCAw NjA2NDNhMWI1YzguLmIxY2Q1ZjgzZDQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvTWFrZWZp bGUKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTgsNiArOCw4IEBACiBvYmotJChDT05G SUdfVVNCKQkJKz0gY29yZS8KIG9iai0kKENPTkZJR19VU0JfU1VQUE9SVCkJKz0gcGh5LwogCitv YmotJChDT05GSUdfVVNCX1VTQlNTUCkJKz0gdXNic3NwLworCiBvYmotJChDT05GSUdfVVNCX0RX QzMpCQkrPSBkd2MzLwogb2JqLSQoQ09ORklHX1VTQl9EV0MyKQkJKz0gZHdjMi8KIG9iai0kKENP TkZJR19VU0JfSVNQMTc2MCkJKz0gaXNwMTc2MC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3Vz YnNzcC9LY29uZmlnIGIvZHJpdmVycy91c2IvdXNic3NwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lZTIwYjAxNzUzZGMKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL3VzYi91c2Jzc3AvS2NvbmZpZwpAQCAtMCwwICsxLDIxIEBACitjb25maWcgVVNC X1VTQlNTUAorCXRyaXN0YXRlICJDYWRlbmNlIFVTQlNTUCBEUkQgQ29udHJvbGxlciIKKwlkZXBl bmRzIG9uIChVU0IgfHwgVVNCX0dBREdFVCkgJiYgSEFTX0RNQQorCXNlbGVjdCBVU0JfVVNCU1NQ X0dBREdFVAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91ciBzeXN0ZW0gaGFzIGEgY2FkZW5j ZSBVU0JTU1AgZHVhbC1yb2xlIGNvbnRyb2xsZXIuCisJICBJdCBzdXBwb3J0czogZHVhbC1yb2xl IHN3aXRjaCBIb3N0LW9ubHksIGFuZCBQZXJpcGhlcmFsLW9ubHkuCisKKwkgIElmIHlvdSBjaG9v c2UgdG8gYnVpbGQgdGhpcyBkcml2ZXIgaXMgYSBkeW5hbWljYWxseSBsaW5rZWQKKwkgIG1vZHVs ZSwgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2Jzc3Aua28uCisKK2lmIFVTQl9VU0JTU1AK KworY29uZmlnIFVTQl9VU0JTU1BfR0FER0VUCisJdHJpc3RhdGUgIkdhZGdldCBvbmx5IG1vZGUi CisJZGVmYXVsdCBVU0JfVVNCU1NQCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUPXkgfHwgVVNCX0dB REdFVD1VU0JfVVNCU1NQCisJaGVscAorCSAgU2VsZWN0IHRoaXMgd2hlbiB5b3Ugd2FudCB0byB1 c2UgVVNCU1NQIGluIGdhZGdldCBtb2RlIG9ubHksCitlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3VzYi91c2Jzc3AvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi91c2Jzc3AvTWFrZWZpbGUKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xYjYyNjEwNjhmZDkKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi91c2Jzc3AvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBA QAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIyBkZWZpbmVfdHJhY2UuaCBu ZWVkcyB0byBrbm93IGhvdyB0byBmaW5kIG91ciBoZWFkZXIKK0NGTEFHU19nYWRnZXQtdHJhY2Uu byA6PSAtSSQoc3JjKQorCitvYmotJChDT05GSUdfVVNCX1VTQlNTUF9HQURHRVQpICs9IHVzYnNz cC5vCit1c2Jzc3AteSAJCQk6PSAgdXNic3NwLXBsYXQubyBnYWRnZXQtcmluZy5vIFwKKwkJCQkg ICAgZ2FkZ2V0Lm8KKworaWZuZXEgKCQoQ09ORklHX1RSQUNJTkcpLCkKKwl1c2Jzc3AteQkJKz0g Z2FkZ2V0LXRyYWNlLm8KK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2Jzc3AvZ2Fk Z2V0LXJpbmcuYyBiL2RyaXZlcnMvdXNiL3VzYnNzcC9nYWRnZXQtcmluZy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDFkYTU5MzA2ZDAyCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy91c2IvdXNic3NwL2dhZGdldC1yaW5nLmMKQEAgLTAsMCArMSw0OCBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBVU0JTU1AgZGV2aWNl IGNvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuCisg KgorICogQXV0aG9yOiBQYXdlbCBMYXN6Y3phaworICoKKyAqIEEgbG90IG9mIGNvZGUgYmFzZWQg b24gTGludXggWEhDSSBkcml2ZXIuCisgKiBPcmlnaW46IENvcHlyaWdodCAoQykgMjAwOCBJbnRl bCBDb3JwCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8 bGludXgvaXJxLmg+CisjaW5jbHVkZSAiZ2FkZ2V0LXRyYWNlLmgiCisjaW5jbHVkZSAiZ2FkZ2V0 LmgiCisKKy8qCisgKiBSZXR1cm5zIHplcm8gaWYgdGhlIFRSQiBpc24ndCBpbiB0aGlzIHNlZ21l bnQsIG90aGVyd2lzZSBpdCByZXR1cm5zIHRoZSBETUEKKyAqIGFkZHJlc3Mgb2YgdGhlIFRSQi4K KyAqLworZG1hX2FkZHJfdCB1c2Jzc3BfdHJiX3ZpcnRfdG9fZG1hKHN0cnVjdCB1c2Jzc3Bfc2Vn bWVudCAqc2VnLAorCQkJCSAgdW5pb24gdXNic3NwX3RyYiAqdHJiKQoreworCXVuc2lnbmVkIGxv bmcgc2VnbWVudF9vZmZzZXQ7CisKKwlpZiAoIXNlZyB8fCAhdHJiIHx8IHRyYiA8IHNlZy0+dHJi cykKKwkJcmV0dXJuIDA7CisJLyogb2Zmc2V0IGluIFRSQnMgKi8KKwlzZWdtZW50X29mZnNldCA9 IHRyYiAtIHNlZy0+dHJiczsKKwlpZiAoc2VnbWVudF9vZmZzZXQgPj0gVFJCU19QRVJfU0VHTUVO VCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNlZy0+ZG1hICsgKHNlZ21lbnRfb2Zmc2V0ICogc2l6 ZW9mKCp0cmIpKTsKK30KKworaXJxcmV0dXJuX3QgdXNic3NwX2lycShpbnQgaXJxLCB2b2lkICpw cml2KQoreworCXN0cnVjdCB1c2Jzc3BfdWRjICp1c2Jzc3BfZGF0YSA9IChzdHJ1Y3QgdXNic3Nw X3VkYyAqKXByaXY7CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2Jzc3BfZGF0YS0+bG9jaywgZmxhZ3Mp OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNic3NwX2RhdGEtPmxvY2ssIGZsYWdzKTsK KwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNic3NwL2dhZGdldC5j IGIvZHJpdmVycy91c2IvdXNic3NwL2dhZGdldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uMmY2MGQ3ZGQxZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91 c2IvdXNic3NwL2dhZGdldC5jCkBAIC0wLDAgKzEsNjQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCisvKgorICogVVNCU1NQIGRldmljZSBjb250cm9sbGVyIGRyaXZlcgor ICoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLgorICoKKyAqIEF1dGhvcjogUGF3ZWwg TGFzemN6YWsKKyAqCisgKiBBIGxvdCBvZiBjb2RlIGJhc2VkIG9uIExpbnV4IFhIQ0kgZHJpdmVy LgorICogT3JpZ2luOiBDb3B5cmlnaHQgKEMpIDIwMDggSW50ZWwgQ29ycAorICovCisKKyNpbmNs dWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51 eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1p Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPgorCisjaW5jbHVkZSAiZ2FkZ2V0LXRyYWNlLmgiCisjaW5jbHVkZSAiZ2FkZ2V0LmgiCisK KyNpZmRlZiBDT05GSUdfUE0KKy8qCisgKiBTdG9wIERDIChub3QgYnVzLXNwZWNpZmljKQorICoK KyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIG1hY2hpbmUgdHJhbnNpdGlvbiBpbnRvIFMzL1M0 IG1vZGUuCisgKgorICovCitpbnQgdXNic3NwX3N1c3BlbmQoc3RydWN0IHVzYnNzcF91ZGMgKnVz YnNzcF9kYXRhLCBib29sIGRvX3dha2V1cCkKK3sKKwkvKlRPRE8qLworCXJldHVybiAtRU5PU1lT OworfQorCisvKgorICogc3RhcnQgREMgKG5vdCBidXMtc3BlY2lmaWMpCisgKgorICogVGhpcyBp cyBjYWxsZWQgd2hlbiB0aGUgbWFjaGluZSB0cmFuc2l0aW9uIGZyb20gUzMvUzQgbW9kZS4KKyAq CisgKi8KK2ludCB1c2Jzc3BfcmVzdW1lKHN0cnVjdCB1c2Jzc3BfdWRjICp1c2Jzc3BfZGF0YSwg Ym9vbCBoaWJlcm5hdGVkKQoreworCS8qVE9ETyovCisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKyNl bmRpZgkvKiBDT05GSUdfUE0gKi8KKworaW50IHVzYnNzcF9nYWRnZXRfaW5pdChzdHJ1Y3QgdXNi c3NwX3VkYyAqdXNic3NwX2RhdGEpCit7CisJaW50IHJldDsKKwlyZXR1cm4gcmV0OworfQorCitp bnQgdXNic3NwX2dhZGdldF9leGl0KHN0cnVjdCB1c2Jzc3BfdWRjICp1c2Jzc3BfZGF0YSkKK3sK KwlpbnQgcmV0ID0gMDsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vz Yi91c2Jzc3AvZ2FkZ2V0LmggYi9kcml2ZXJzL3VzYi91c2Jzc3AvZ2FkZ2V0LmgKaW5kZXggNmI2 MzRkYzYzZDllLi4yZjllZTM1NDM5MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3VzYnNzcC9n YWRnZXQuaAorKysgYi9kcml2ZXJzL3VzYi91c2Jzc3AvZ2FkZ2V0LmgKQEAgLTksNyArOSw2IEBA CiAgKiBBIGxvdCBvZiBjb2RlIGJhc2VkIG9uIExpbnV4IFhIQ0kgZHJpdmVyLgogICogT3JpZ2lu OiBDb3B5cmlnaHQgKEMpIDIwMDggSW50ZWwgQ29ycC4KICAqLwotCiAjaWZuZGVmIF9fTElOVVhf VVNCU1NQX0dBREdFVF9ICiAjZGVmaW5lIF9fTElOVVhfVVNCU1NQX0dBREdFVF9ICiAKQEAgLTE2 NzEsNiArMTY3MCwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXNic3NwX3dyaXRlXzY0KHN0cnVj dCB1c2Jzc3BfdWRjICp1c2Jzc3BfZGF0YSwKIHsKIAlsb19oaV93cml0ZXEodmFsLCByZWdzKTsK IH0KKworLyogVVNCU1NQIERldmljZSBjb250cm9sbGVyIGdsdWUgKi8KK2ludCB1c2Jzc3Bfc3Vz cGVuZChzdHJ1Y3QgdXNic3NwX3VkYyAqdXNic3NwX2RhdGEsIGJvb2wgZG9fd2FrZXVwKTsKK2lu dCB1c2Jzc3BfcmVzdW1lKHN0cnVjdCB1c2Jzc3BfdWRjICp1c2Jzc3BfZGF0YSwgYm9vbCBoaWJl cm5hdGVkKTsKKworaXJxcmV0dXJuX3QgdXNic3NwX2lycShpbnQgaXJxLCB2b2lkICpwcml2KTsK KworLyogVVNCU1NQIHJpbmcsIHNlZ21lbnQsIFRSQiwgYW5kIFREIGZ1bmN0aW9ucyAqLworZG1h X2FkZHJfdCB1c2Jzc3BfdHJiX3ZpcnRfdG9fZG1hKHN0cnVjdCB1c2Jzc3Bfc2VnbWVudCAqc2Vn LAorCQl1bmlvbiB1c2Jzc3BfdHJiICp0cmIpOworCisvKiBVU0JTU1AgZ2FkZ2V0IGludGVyZmFj ZSovCitpbnQgdXNic3NwX2dhZGdldF9pbml0KHN0cnVjdCB1c2Jzc3BfdWRjICp1c2Jzc3BfZGF0 YSk7CitpbnQgIHVzYnNzcF9nYWRnZXRfZXhpdChzdHJ1Y3QgdXNic3NwX3VkYyAqdXNic3NwX2Rh dGEpOworCiBzdGF0aWMgaW5saW5lIGNoYXIgKnVzYnNzcF9zbG90X3N0YXRlX3N0cmluZyh1MzIg c3RhdGUpCiB7CiAJc3dpdGNoIChzdGF0ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNi c3NwL3VzYnNzcC1wbGF0LmMgYi9kcml2ZXJzL3VzYi91c2Jzc3AvdXNic3NwLXBsYXQuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRmYjNhMmRjNGU4YwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3VzYnNzcC91c2Jzc3AtcGxhdC5jCkBAIC0wLDAgKzEs MTg2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIFVTQlNT UCBkZXZpY2UgY29udHJvbGxlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQ2Fk ZW5jZS4KKyAqCisgKiBBdXRob3I6IFBhd2VsIExhc3pjemFrCisgKgorICovCisKKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4 L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3BoeS5oPgorI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisKKyNpbmNsdWRlICJnYWRnZXQu aCIKKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJQYXdlbCBMYXN6Y3phayIKKyNkZWZpbmUgRFJJ VkVSX0RFU0MgIlVTQlNTUCBEZXZpY2UgQ29udHJvbGxlciAoVVNCU1NQKSBEcml2ZXIiCisKKyNp ZmRlZiBDT05GSUdfT0YKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdXNic3Nw X2Rldl9vZl9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAiQ2FkZW5jZSwgdXNic3Nw LWRldiIsCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB1c2Jzc3BfZGV2 X29mX21hdGNoKTsKKyNlbmRpZgorCitpbnQgdXNic3NwX2lzX3BsYXRmb3JtKHZvaWQpCit7CisJ cmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdXNic3NwX3BsYXRfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owor CXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCB1c2Jzc3BfdWRjICp1c2Jzc3BfZGF0YTsK KwlpbnQgcmV0ID0gMDsKKwlpbnQgaXJxOworCXN0cnVjdCBkZXZpY2UgKnN5c2RldjsKKworCWly cSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiSW5jb3JyZWN0IElSUSBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT0RF VjsKKwl9CisKKwl1c2Jzc3BfZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqdXNic3Nw X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzYnNzcF9kYXRhKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWZvciAoc3lzZGV2ID0gJnBkZXYtPmRldjsgc3lzZGV2OyBzeXNkZXYgPSBzeXNkZXYt PnBhcmVudCkgeworCQlpZiAoaXNfb2Zfbm9kZShzeXNkZXYtPmZ3bm9kZSkgfHwKKwkJICAgIGlz X2FjcGlfZGV2aWNlX25vZGUoc3lzZGV2LT5md25vZGUpKQorCQkJYnJlYWs7CisjaWZkZWYgQ09O RklHX1BDSQorCQllbHNlIGlmIChzeXNkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQorCQkJYnJl YWs7CisjZW5kaWYKKwl9CisKKwlpZiAoIXN5c2RldikKKwkJc3lzZGV2ID0gJnBkZXYtPmRldjsK KworCS8qIFRyeSB0byBzZXQgNjQtYml0IERNQSBmaXJzdCAqLworCWlmIChXQVJOX09OKCFkZXYt PmRtYV9tYXNrKSkKKwkJLyogUGxhdGZvcm0gZGlkIG5vdCBpbml0aWFsaXplIGRtYV9tYXNrICov CisJCXJldCA9IGRtYV9jb2VyY2VfbWFza19hbmRfY29oZXJlbnQoZGV2LAorCQkJCURNQV9CSVRf TUFTSyg2NCkpOworCWVsc2UKKwkJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYs IERNQV9CSVRfTUFTSyg2NCkpOworCisJLyogSWYgc2V0aW5nIDY0LWJpdCBETUEgbWFzayBmYWls cywgZmFsbCBiYWNrIHRvIDMyLWJpdCBETUEgbWFzayAqLworCWlmIChyZXQpIHsKKwkJcmV0ID0g ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSygzMikpOworCQlpZiAo cmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uo cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXVzYnNzcF9kYXRhLT5yZWdzID0gZGV2bV9pb3Jl bWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKworCWlmIChJU19FUlIodXNic3NwX2RhdGEtPnJlZ3Mp KSB7CisJCXJldCA9IFBUUl9FUlIodXNic3NwX2RhdGEtPnJlZ3MpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXVzYnNzcF9kYXRhLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKKwl1c2Jzc3BfZGF0 YS0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwlyZXQgPSBkZXZtX3JlcXVlc3Rf aXJxKGRldiwgaXJxLCB1c2Jzc3BfaXJxLCBJUlFGX1NIQVJFRCwKKwkJCWRldl9uYW1lKGRldiks IHVzYnNzcF9kYXRhKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJdXNic3Nw X2RhdGEtPmlycSA9IGlycTsKKwl1c2Jzc3BfZGF0YS0+ZGV2ID0gZGV2OworCXBsYXRmb3JtX3Nl dF9kcnZkYXRhKHBkZXYsIHVzYnNzcF9kYXRhKTsKKwlyZXQgPSB1c2Jzc3BfZ2FkZ2V0X2luaXQo dXNic3NwX2RhdGEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1c2Jzc3BfcGxh dF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsK KwlzdHJ1Y3QgdXNic3NwX3VkYyAqdXNic3NwX2RhdGE7CisKKwl1c2Jzc3BfZGF0YSA9IChzdHJ1 Y3QgdXNic3NwX3VkYyAqKXBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXJldCA9IHVzYnNz cF9nYWRnZXRfZXhpdCh1c2Jzc3BfZGF0YSk7CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMg aW50IF9fbWF5YmVfdW51c2VkIHVzYnNzcF9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2 KQoreworCXN0cnVjdCB1c2Jzc3BfdWRjICp1c2Jzc3BfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCisJcmV0dXJuIHVzYnNzcF9zdXNwZW5kKHVzYnNzcF9kYXRhLCBkZXZpY2VfbWF5X3dh a2V1cChkZXYpKTsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCB1c2Jzc3BfcGxhdF9y ZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2Jzc3BfdWRjICp1c2Jzc3Bf ZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHVzYnNzcF9yZXN1bWUodXNi c3NwX2RhdGEsIDApOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHVzYnNzcF9wbGF0 X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYnNzcF91 ZGMgKnVzYnNzcF9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gdXNic3Nw X3N1c3BlbmQodXNic3NwX2RhdGEsIHRydWUpOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51 c2VkIHVzYnNzcF9wbGF0X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgdXNic3NwX3VkYyAqdXNic3NwX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwor CXJldHVybiB1c2Jzc3BfcmVzdW1lKHVzYnNzcF9kYXRhLCAwKTsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkZXZfcG1fb3BzIHVzYnNzcF9wbGF0X3BtX29wcyA9IHsKKwlTRVRfU1lTVEVNX1NM RUVQX1BNX09QUyh1c2Jzc3BfcGxhdF9zdXNwZW5kLCB1c2Jzc3BfcGxhdF9yZXN1bWUpCisKKwlT RVRfUlVOVElNRV9QTV9PUFModXNic3NwX3BsYXRfcnVudGltZV9zdXNwZW5kLAorCQkJdXNic3Nw X3BsYXRfcnVudGltZV9yZXN1bWUsCisJCQlOVUxMKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgdXNic3NwX2RyaXZlciA9IHsKKwkucHJvYmUJPSB1c2Jzc3BfcGxhdF9wcm9i ZSwKKwkucmVtb3ZlCT0gdXNic3NwX3BsYXRfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1l ID0gInVzYnNzcC1kZXYiLAorCQkucG0gPSAmdXNic3NwX3BsYXRfcG1fb3BzLAorCQkub2ZfbWF0 Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIodXNic3NwX2Rldl9vZl9tYXRjaCksCisJfSwKK307CisK K3N0YXRpYyBpbnQgX19pbml0IHVzYnNzcF9wbGF0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxh dGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1c2Jzc3BfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHVz YnNzcF9wbGF0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNic3NwX3BsYXRfZXhpdCh2 b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1c2Jzc3BfZHJpdmVyKTsKK30K K21vZHVsZV9leGl0KHVzYnNzcF9wbGF0X2V4aXQpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3Jt OnVzYnNzLWdhZGdldCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0JTU1AnIERldmljZSBDb250 cm9sbGVyIChVU0JTU1ApIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo=