From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrey Smirnov Subject: [PATCH v4] soc/imx: Add GPCv2 power gating driver Date: Tue, 28 Feb 2017 16:09:16 -0800 Message-ID: <20170301000916.32412-1-andrew.smirnov@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Shawn Guo Cc: Mark Rutland , devicetree@vger.kernel.org, Andrey Smirnov , linux-kernel@vger.kernel.org, Rob Herring , Fabio Estevam , yurovsky@gmail.com, linux-arm-kernel@lists.infradead.org, Lucas Stach List-Id: devicetree@vger.kernel.org QWRkIGNvZGUgYWxsb3dpbmcgZm9yIGNvbnRyb2wgb2YgdmFyaW91cyBwb3dlciBkb21haW5zIG1h bmFnZWQgYnkgR1BDdjIKSVAgYmxvY2sgZm91bmQgaW4gaS5NWDcgc2VyaWVzIG9mIFNvQ3MuIFBv d2VyIGRvbWFpbnMgY292ZXJlZCBieSB0aGlzCnBhdGNoIGFyZToKCiAgICAtIFBDSUUgUEhZCiAg ICAtIE1JUEkgUEhZCiAgICAtIFVTQiBIU0lDIFBIWQogICAgLSBVU0IgT1RHMS8yIFBIWQoKU3Vw cG9ydCBmb3IgYW55IG90aGVyIHBvd2VyIGRvbWFpbiBjb250cm9sbGVkIGJ5IEdQQyBpcyBub3Qg cHJlc2VudCwgYW5kCmNhbiBiZSBhZGRlZCBhdCBzb21lIGxhdGVyIHBvaW50LgoKVGVzdGluZyBv ZiB0aGlzIGNvZGUgd2FzIGRvbmUgYWdhaW5zdCBhIFBDSWUgZHJpdmVyLgoKQ2M6IHl1cm92c2t5 QGdtYWlsLmNvbQpDYzogTHVjYXMgU3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU+CkNjOiBS b2IgSGVycmluZyA8cm9iaCtkdEBrZXJuZWwub3JnPgpDYzogTWFyayBSdXRsYW5kIDxtYXJrLnJ1 dGxhbmRAYXJtLmNvbT4KQ2M6IEZhYmlvIEVzdGV2YW0gPGZhYmlvLmVzdGV2YW1AbnhwLmNvbT4K Q2M6IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKQWNrZWQtYnk6 IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IEFuZHJleSBTbWly bm92IDxhbmRyZXcuc21pcm5vdkBnbWFpbC5jb20+Ci0tLQoKQ2hhbmdlcyBzaW5jZSB2MyAoc2Vl IFt2M10pOgoKCS0gTWlub3IgZGV2aWNlIHRyZWUgYmluZGluZ3MgZG9jdW1lbnRhdGlvbiBmaXhl cyBhcyBwZXIKICAgICAgICAgIGZlZWRiYWNrIGZyb20gUm9iIEhlcnJpbmcKCS0gQ29sbGVjdCBB Y2tlZC1ieSBmcm9tIFJvYgoKQ2hhbmdlcyBzaW5jZSB2MiAoc2VlIFt2Ml0pOgoKCS0gRml4IGEg Y3JpdGljYWwgYnVnIHdoZXJlIGluY29ycmVjdCBzdGF0ZSBvZiBhIGJpdCB3YXMKICAgICAgICAg IGV4cGVjdGVkIGluIGEgYnVzeSB3YWl0IGxvb3AgKGJpdCBzZXQgaW5zdGVhZCBvZiBiaXQKICAg ICAgICAgIGNsZWFyZWQpIGlteDdfZ3BjX3B1X3BnY19zd19weHhfcmVxKCkKCgktIEFkZCBtaXNz aW5nIHN0ZXAgKHNldHRpbmcgb2YgUENSIGluIEdQQ19QR0NfbkNUUkwpIGluIHBvd2VyCiAgICAg ICAgICBkb3duIHByb2NlZHVyZQoKQ2hhbmdlcyBzaW5jZSB2MSAoc2VlIFt2MV0pOgoKCS0gVmFy aW91cyBzbWFsbCBEVCBiaW5kaW5ncyBkZXNjcmlwdGlvbiBmaXhlcyBhcyBwZXIgZmVlZGJhY2sK ICAgICAgICAgIGZyb20gUm9iIEhlcnJpbmcKCgpbdjFdIGh0dHBzOi8vbGttbC5vcmcvbGttbC8y MDE3LzIvNi81NTQKW3YyXSBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxNy8yLzEzLzQ4OQpbdjNd IGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE3LzIvMjAvMzM4CgogLi4uL2RldmljZXRyZWUvYmlu ZGluZ3MvcG93ZXIvZnNsLGlteC1ncGN2Mi50eHQgICAgfCAgNzEgKysrKwogZHJpdmVycy9zb2Mv aW14L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMv c29jL2lteC9ncGN2Mi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzk3ICsrKysrKysr KysrKysrKysrKysrKwogaW5jbHVkZS9kdC1iaW5kaW5ncy9wb3dlci9pbXg3LXBvd2VyLmggICAg ICAgICAgICAgfCAgMTggKwogNCBmaWxlcyBjaGFuZ2VkLCA0ODcgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9i aW5kaW5ncy9wb3dlci9mc2wsaW14LWdwY3YyLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc29jL2lteC9ncGN2Mi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kdC1iaW5kaW5n cy9wb3dlci9pbXg3LXBvd2VyLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRy ZWUvYmluZGluZ3MvcG93ZXIvZnNsLGlteC1ncGN2Mi50eHQgYi9Eb2N1bWVudGF0aW9uL2Rldmlj ZXRyZWUvYmluZGluZ3MvcG93ZXIvZnNsLGlteC1ncGN2Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMDJmNDVjNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlci9mc2wsaW14LWdwY3YyLnR4dApAQCAtMCwwICsx LDcxIEBACitGcmVlc2NhbGUgaS5NWCBHZW5lcmFsIFBvd2VyIENvbnRyb2xsZXIgdjIKKz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaS5NWDdTL0QgR2Vu ZXJhbCBQb3dlciBDb250cm9sIChHUEMpIGJsb2NrIGNvbnRhaW5zIFBvd2VyIEdhdGluZworQ29u dHJvbCAoUEdDKSBmb3IgdmFyaW91cyBwb3dlciBkb21haW5zLgorCitSZXF1aXJlZCBwcm9wZXJ0 aWVzOgorCistIGNvbXBhdGlibGU6IFNob3VsZCBiZSAiZnNsLGlteDdkLWdwYyIKKworLSByZWc6 IHNob3VsZCBiZSByZWdpc3RlciBiYXNlIGFuZCBsZW5ndGggYXMgZG9jdW1lbnRlZCBpbiB0aGUK KyAgZGF0YXNoZWV0CisKKy0gaW50ZXJydXB0czogU2hvdWxkIGNvbnRhaW4gR1BDIGludGVycnVw dCByZXF1ZXN0IDEKKworUG93ZXIgZG9tYWlucyBjb250YWluZWQgd2l0aGluIEdQQyBub2RlIGFy ZSBnZW5lcmljIHBvd2VyIGRvbWFpbgorcHJvdmlkZXJzLCBkb2N1bWVudGVkIGluCitEb2N1bWVu dGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXIvcG93ZXJfZG9tYWluLnR4dCwgd2hpY2gg YXJlCitkZXNjcmliZWQgYXMgc3Vibm9kZXMgb2YgdGhlIHBvd2VyIGdhdGluZyBjb250cm9sbGVy ICdwZ2MnIG5vZGUsCit3aGljaCwgaW4gdHVybiwgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiB0aGUg Zm9sbG93aW5nOgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCistIHJlZzogUG93ZXIgZG9tYWlu IGluZGV4LiBWYWxpZCB2YWx1ZXMgYXJlIGRlZmluZWQgaW4KKyAgaW5jbHVkZS9kdC1iaW5kaW5n cy9wb3dlci9pbXg3LXBvd2VyLmgKKworLSAjcG93ZXItZG9tYWluLWNlbGxzOiBTaG91bGQgYmUg MAorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorCistIHBvd2VyLXN1cHBseTogUG93ZXIgc3VwcGx5 IHVzZWQgdG8gcG93ZXIgdGhlIGRvbWFpbgorCitFeGFtcGxlOgorCisJZ3BjOiBncGNAMzAzYTAw MDAgeworCQljb21wYXRpYmxlID0gImZzbCxpbXg3ZC1ncGMiOworCQlyZWcgPSA8MHgzMDNhMDAw MCAweDEwMDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJaW50ZXJydXB0cyA9IDxHSUNf U1BJIDg3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+Owor CQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKKworCQlwZ2MgeworCQkJI2FkZHJlc3MtY2Vs bHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcGdjX3BjaWVfcGh5OiBwb3dl ci1kb21haW5AMyB7CisJCQkJI3Bvd2VyLWRvbWFpbi1jZWxscyA9IDwwPjsKKworCQkJCXJlZyA9 IDxJTVg3X1BPV0VSX0RPTUFJTl9QQ0lFX1BIWT47CisJCQkJcG93ZXItc3VwcGx5ID0gPCZyZWdf MXAwZD47CisJCQl9OworCQl9OworCX07CisKKworU3BlY2lmeWluZyBwb3dlciBkb21haW4gZm9y IElQIG1vZHVsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lQ IGNvcmVzIGJlbG9uZ2luZyB0byBhIHBvd2VyIGRvbWFpbiBzaG91bGQgY29udGFpbiBhICdwb3dl ci1kb21haW5zJworcHJvcGVydHkgdGhhdCBpcyBhIHBoYW5kbGUgZm9yIFBHQyBub2RlIHJlcHJl c2VudGluZyB0aGUgZG9tYWluLgorCitFeGFtcGxlIG9mIGEgZGV2aWNlIHRoYXQgaXMgcGFydCBv ZiB0aGUgUENJRV9QSFkgcG93ZXIgZG9tYWluOgorCisJcGNpZTogcGNpZUAzMzgwMDAwMCB7CisJ ICAgICAgcmVnID0gPDB4MzM4MDAwMDAgMHg0MDAwPiwKKwkgICAgICAgICAgICA8MHg0ZmYwMDAw MCAweDgwMDAwPjsKKwkJLyogLi4uICovCisJCXBvd2VyLWRvbWFpbnMgPSA8JnBnY19wY2llX3Bo eT47CisJCS8qIC4uLiAqLworCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9pbXgvTWFrZWZp bGUgYi9kcml2ZXJzL3NvYy9pbXgvTWFrZWZpbGUKaW5kZXggMzU4NjFmNS4uN2JjYzkzMyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9zb2MvaW14L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc29jL2lteC9N YWtlZmlsZQpAQCAtMSArMSBAQAotb2JqLXkgKz0gZ3BjLm8KK29iai15ICs9IGdwYy5vIGdwY3Yy Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2lteC9ncGN2Mi5jIGIvZHJpdmVycy9zb2MvaW14 L2dwY3YyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmMDUxNQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc29jL2lteC9ncGN2Mi5jCkBAIC0wLDAgKzEsMzk3IEBA CisvKgorICogQ29weXJpZ2h0IDIwMTcgSW1waW5qLCBJbmMKKyAqIEF1dGhvcjogQW5kcmV5IFNt aXJub3YgPGFuZHJldy5zbWlybm92QGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgY29k ZSBvZiBhbmFsb2d1cyBkcml2ZXI6CisgKgorICogQ29weXJpZ2h0IDIwMTUtMjAxNyBQZW5ndXRy b25peCwgTHVjYXMgU3RhY2ggPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGUgY29k ZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxv Y2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1s aWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICov CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fZG9tYWluLmg+ CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2Nv bnN1bWVyLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcG93ZXIvaW14Ny1wb3dlci5oPgorCisj ZGVmaW5lIEdQQ19QR0NfQ1BVX01BUFBJTkcJMHhlYworI2RlZmluZSBVU0JfSFNJQ19QSFlfQTdf RE9NQUlOCUJJVCg2KQorI2RlZmluZSBVU0JfT1RHMl9QSFlfQTdfRE9NQUlOCUJJVCg1KQorI2Rl ZmluZSBVU0JfT1RHMV9QSFlfQTdfRE9NQUlOCUJJVCg0KQorI2RlZmluZSBQQ0lFX1BIWV9BN19E T01BSU4JQklUKDMpCisjZGVmaW5lIE1JUElfUEhZX0E3X0RPTUFJTglCSVQoMikKKworI2RlZmlu ZSBHUENfUFVfUEdDX1NXX1BVUF9SRVEJMHhmOAorI2RlZmluZSBHUENfUFVfUEdDX1NXX1BETl9S RVEJMHgxMDQKKyNkZWZpbmUgVVNCX0hTSUNfUEhZX1NXX1B4eF9SRVEJQklUKDQpCisjZGVmaW5l IFVTQl9PVEcyX1BIWV9TV19QeHhfUkVRCUJJVCgzKQorI2RlZmluZSBVU0JfT1RHMV9QSFlfU1df UHh4X1JFUQlCSVQoMikKKyNkZWZpbmUgUENJRV9QSFlfU1dfUHh4X1JFUQlCSVQoMSkKKyNkZWZp bmUgTUlQSV9QSFlfU1dfUHh4X1JFUQlCSVQoMCkKKworI2RlZmluZSBHUENfTUFYX1JFR0lTVEVS CTB4MTAwMAorCisjZGVmaW5lIEdQQ19QR0NfbkNUUkxfUENSCUJJVCgwKQorCitzdHJ1Y3QgaW14 N19wZ2NfZG9tYWluIHsKKwlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gZ2VucGQ7CisJc3RydWN0 IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcjsKKworCXVuc2ln bmVkIGludCBwZ2NfbmN0cmw7CisKKwljb25zdCBzdHJ1Y3QgeworCQl1MzIgcHh4OworCQl1MzIg bWFwOworCX0gYml0czsKKworCWNvbnN0IGludCB2b2x0YWdlOworCXN0cnVjdCBkZXZpY2UgKmRl djsKK307CisKK3N0YXRpYyBpbnQgaW14N19ncGNfcHVfcGdjX3N3X3B4eF9yZXEoc3RydWN0IGdl bmVyaWNfcG1fZG9tYWluICpnZW5wZCwKKwkJCQkgICAgICBib29sIG9uKQoreworCWludCByZXQg PSAwOworCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7CisJc3RydWN0IGlteDdfcGdjX2RvbWFpbiAq ZG9tYWluID0gY29udGFpbmVyX29mKGdlbnBkLAorCQkJCQkJICAgICAgc3RydWN0IGlteDdfcGdj X2RvbWFpbiwKKwkJCQkJCSAgICAgIGdlbnBkKTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gKG9u KSA/CisJCUdQQ19QVV9QR0NfU1dfUFVQX1JFUSA6IEdQQ19QVV9QR0NfU1dfUEROX1JFUTsKKwor CWNvbnN0IGJvb2wgaGFzX3JlZ3VsYXRvciA9ICFJU19FUlIoZG9tYWluLT5yZWd1bGF0b3IpOwor CWNvbnN0IGJvb2wgZW5hYmxlX3Bvd2VyX2NvbnRyb2wgPSBkb21haW4tPnBnY19uY3RybCAmJiAh b247CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZG9tYWluLT5yZWdtYXAsIEdQQ19QR0NfQ1BVX01B UFBJTkcsCisJCQkgICBkb21haW4tPmJpdHMubWFwLCBkb21haW4tPmJpdHMubWFwKTsKKwlpZiAo aGFzX3JlZ3VsYXRvciAmJiBvbikgeworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGRvbWFpbi0+ cmVndWxhdG9yKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycihkb21haW4tPmRldiwgImZhaWxl ZCB0byBlbmFibGUgcmVndWxhdG9yXG4iKTsKKwkJCWdvdG8gdW5tYXA7CisJCX0KKwl9CisKKwlp ZiAoZW5hYmxlX3Bvd2VyX2NvbnRyb2wpCisJCXJlZ21hcF91cGRhdGVfYml0cyhkb21haW4tPnJl Z21hcCwgZG9tYWluLT5wZ2NfbmN0cmwsCisJCQkJICAgR1BDX1BHQ19uQ1RSTF9QQ1IsIEdQQ19Q R0NfbkNUUkxfUENSKTsKKworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRvbWFpbi0+cmVnbWFwLCBv ZmZzZXQsCisJCQkgICBkb21haW4tPmJpdHMucHh4LCBkb21haW4tPmJpdHMucHh4KTsKKwkvKgor CSAqIEFzIHBlciAiNS41LjkuNCBFeGFtcGxlIENvZGUgNCIgaW4gSU1YN0RSTS5wZGYgd2FpdAor CSAqIGZvciBQVVBfUkVRL1BETl9SRVEgYml0IHRvIGJlIGNsZWFyZWQKKwkgKi8KKwlkZWFkbGlu ZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEpOworCXdoaWxlICh0cnVlKSB7CisJCXUz MiBweHhfcmVxOworCisJCXJlZ21hcF9yZWFkKGRvbWFpbi0+cmVnbWFwLCBvZmZzZXQsICZweHhf cmVxKTsKKworCQlpZiAoIShweHhfcmVxICYgZG9tYWluLT5iaXRzLnB4eCkpCisJCQlicmVhazsK KworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkZWFkbGluZSkpIHsKKwkJCWRldl9lcnIoZG9t YWluLT5kZXYsICJmYWxpZWQgdG8gY29tbWFuZCBQR0NcbiIpOworCQkJcmV0ID0gLUVUSU1FRE9V VDsKKwkJCS8qCisJCQkgKiBJZiB3ZSB3ZXJlIGluIGEgcHJvY2VzcyBvZiBlbmFibGluZyBhCisJ CQkgKiBkb21haW4gYW5kIGZhaWxlZCB3ZSBtaWdodCBhcyB3ZWxsIGRpc2FibGUKKwkJCSAqIHRo ZSByZWd1bGF0b3Igd2UganVzdCBlbmFibGVkLiBBbmQgaWYgaXQKKwkJCSAqIHdhcyB0aGUgb3Bw b3NpdGUgc2l0dWF0aW9uIGFuZCB3ZSBmYWlsZWQgdG8KKwkJCSAqIHBvd2VyIGRvd24gLS0ga2Vl cCB0aGUgcmVndWxhdG9yIG9uCisJCQkgKi8KKwkJCW9uICA9ICFvbjsKKwkJCWJyZWFrOworCQl9 CisKKwkJY3B1X3JlbGF4KCk7CisJfQorCisJaWYgKGVuYWJsZV9wb3dlcl9jb250cm9sKQorCQly ZWdtYXBfdXBkYXRlX2JpdHMoZG9tYWluLT5yZWdtYXAsIGRvbWFpbi0+cGdjX25jdHJsLAorCQkJ CSAgIEdQQ19QR0NfbkNUUkxfUENSLCAwKTsKKworCWlmIChoYXNfcmVndWxhdG9yICYmICFvbikg eworCQlpbnQgZXJyOworCisJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKGRvbWFpbi0+cmVndWxh dG9yKTsKKwkJaWYgKGVycikKKwkJCWRldl9lcnIoZG9tYWluLT5kZXYsCisJCQkJImZhaWxlZCB0 byBkaXNhYmxlIHJlZ3VsYXRvcjogJWRcbiIsIHJldCk7CisJCS8qCisJCSAqIFByZXNlcnZlIGVh cmxpZXIgZXJyb3IgY29kZQorCQkgKi8KKwkJcmV0ID0gcmV0ID86IGVycjsKKwl9Cit1bm1hcDoK KwlyZWdtYXBfdXBkYXRlX2JpdHMoZG9tYWluLT5yZWdtYXAsIEdQQ19QR0NfQ1BVX01BUFBJTkcs CisJCQkgICBkb21haW4tPmJpdHMubWFwLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IGlteDdfZ3BjX3B1X3BnY19zd19wdXBfcmVxKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAq Z2VucGQpCit7CisJcmV0dXJuIGlteDdfZ3BjX3B1X3BnY19zd19weHhfcmVxKGdlbnBkLCB0cnVl KTsKK30KKworc3RhdGljIGludCBpbXg3X2dwY19wdV9wZ2Nfc3dfcGRuX3JlcShzdHJ1Y3QgZ2Vu ZXJpY19wbV9kb21haW4gKmdlbnBkKQoreworCXJldHVybiBpbXg3X2dwY19wdV9wZ2Nfc3dfcHh4 X3JlcShnZW5wZCwgZmFsc2UpOworfQorCitzdGF0aWMgc3RydWN0IGlteDdfcGdjX2RvbWFpbiBp bXg3X3BnY19kb21haW5zW10gPSB7CisJW0lNWDdfUE9XRVJfRE9NQUlOX1VTQl9IU0lDX1BIWV0g PSB7CisJCS5nZW5wZCA9IHsKKwkJCS5uYW1lICAgICAgPSAidXNiLWhzaWMtcGh5IiwKKwkJCS5w b3dlcl9vbiAgPSBpbXg3X2dwY19wdV9wZ2Nfc3dfcHVwX3JlcSwKKwkJCS5wb3dlcl9vZmYgPSBp bXg3X2dwY19wdV9wZ2Nfc3dfcGRuX3JlcSwKKwkJfSwKKwkJLmJpdHMgID0geworCQkJLnB4eCA9 IFVTQl9IU0lDX1BIWV9TV19QeHhfUkVRLAorCQkJLm1hcCA9IFVTQl9IU0lDX1BIWV9BN19ET01B SU4sCisJCX0sCisJCS52b2x0YWdlICAgPSAxMjAwMDAwLAorCQkucGdjX25jdHJsID0gMHgwZDAw LAorCX0sCisKKwlbSU1YN19QT1dFUl9ET01BSU5fVVNCX09URzJfUEhZXSA9IHsKKwkJLmdlbnBk ID0geworCQkJLm5hbWUgICAgICA9ICJ1c2Itb3RnMi1waHkiLAorCQkJLnBvd2VyX29uICA9IGlt eDdfZ3BjX3B1X3BnY19zd19wdXBfcmVxLAorCQkJLnBvd2VyX29mZiA9IGlteDdfZ3BjX3B1X3Bn Y19zd19wZG5fcmVxLAorCQl9LAorCQkuYml0cyAgPSB7CisJCQkucHh4ID0gVVNCX09URzJfUEhZ X1NXX1B4eF9SRVEsCisJCQkubWFwID0gVVNCX09URzJfUEhZX0E3X0RPTUFJTiwKKwkJfSwKKwl9 LAorCisJW0lNWDdfUE9XRVJfRE9NQUlOX1VTQl9PVEcxX1BIWV0gPSB7CisJCS5nZW5wZCA9IHsK KwkJCS5uYW1lICAgICAgPSAidXNiLW90ZzEtcGh5IiwKKwkJCS5wb3dlcl9vbiAgPSBpbXg3X2dw Y19wdV9wZ2Nfc3dfcHVwX3JlcSwKKwkJCS5wb3dlcl9vZmYgPSBpbXg3X2dwY19wdV9wZ2Nfc3df cGRuX3JlcSwKKwkJfSwKKwkJLmJpdHMgID0geworCQkJLnB4eCA9IFVTQl9PVEcxX1BIWV9TV19Q eHhfUkVRLAorCQkJLm1hcCA9IFVTQl9PVEcxX1BIWV9BN19ET01BSU4sCisJCX0sCisJfSwKKwor CVtJTVg3X1BPV0VSX0RPTUFJTl9QQ0lFX1BIWV0gPSB7CisJCS5nZW5wZCA9IHsKKwkJCS5uYW1l ICAgICAgPSAicGNpZS1waHkiLAorCQkJLnBvd2VyX29uICA9IGlteDdfZ3BjX3B1X3BnY19zd19w dXBfcmVxLAorCQkJLnBvd2VyX29mZiA9IGlteDdfZ3BjX3B1X3BnY19zd19wZG5fcmVxLAorCQl9 LAorCQkuYml0cyAgPSB7CisJCQkucHh4ID0gUENJRV9QSFlfU1dfUHh4X1JFUSwKKwkJCS5tYXAg PSBQQ0lFX1BIWV9BN19ET01BSU4sCisJCX0sCisJCS52b2x0YWdlICAgPSAxMDAwMDAwLAorCQku cGdjX25jdHJsID0gMHgwYzQwLAorCX0sCisKKwlbSU1YN19QT1dFUl9ET01BSU5fTUlQSV9QSFld ID0geworCQkuZ2VucGQgPSB7CisJCQkubmFtZSAgICAgID0gIm1pcGktcGh5IiwKKwkJCS5wb3dl cl9vbiAgPSBpbXg3X2dwY19wdV9wZ2Nfc3dfcHVwX3JlcSwKKwkJCS5wb3dlcl9vZmYgPSBpbXg3 X2dwY19wdV9wZ2Nfc3dfcGRuX3JlcSwKKwkJfSwKKwkJLmJpdHMgID0geworCQkJLnB4eCA9IE1J UElfUEhZX1NXX1B4eF9SRVEsCisJCQkubWFwID0gTUlQSV9QSFlfQTdfRE9NQUlOLAorCQl9LAor CQkudm9sdGFnZSAgID0gMTAwMDAwMCwKKwkJLnBnY19uY3RybCA9IDB4MGMwMCwKKwl9LAorfTsK Kworc3RhdGljIGludCBpbXg3X3BnY19kb21haW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpbXg3X3BnY19kb21haW4gKmRvbWFpbiA9 IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QTV9H RU5FUklDX0RPTUFJTlMpKQorCQlyZXR1cm4gMDsKKworCWRvbWFpbi0+ZGV2ID0gJnBkZXYtPmRl djsKKworCXJldCA9IHBtX2dlbnBkX2luaXQoJmRvbWFpbi0+Z2VucGQsIE5VTEwsIHRydWUpOwor CWlmIChyZXQpIHsKKwkJZGV2X2Vycihkb21haW4tPmRldiwgIkZhaWxlZCB0byBpbml0IHBvd2Vy IGRvbWFpblxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZG9tYWluLT5yZWd1bGF0b3IgPSBk ZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoZG9tYWluLT5kZXYsICJwb3dlciIpOworCWlmIChJ U19FUlIoZG9tYWluLT5yZWd1bGF0b3IpICAmJgorCSAgICBQVFJfRVJSKGRvbWFpbi0+cmVndWxh dG9yKSAhPSAtRU5PREVWKSB7CisJCWRldl9lcnIoZG9tYWluLT5kZXYsICJGYWlsZWQgdG8gZ2V0 IGRvbWFpbidzIHJlZ3VsYXRvclxuIik7CisJCXJldHVybiBQVFJfRVJSKGRvbWFpbi0+cmVndWxh dG9yKTsKKwl9CisKKwlpZiAoIUlTX0VSUihkb21haW4tPnJlZ3VsYXRvcikpIHsKKwkJV0FSTl9P TighZG9tYWluLT52b2x0YWdlKTsKKwkJcmVndWxhdG9yX3NldF92b2x0YWdlKGRvbWFpbi0+cmVn dWxhdG9yLAorCQkJCSAgICAgIGRvbWFpbi0+dm9sdGFnZSwgZG9tYWluLT52b2x0YWdlKTsKKwl9 CisKKwlyZXQgPSBvZl9nZW5wZF9hZGRfcHJvdmlkZXJfc2ltcGxlKGRvbWFpbi0+ZGV2LT5vZl9u b2RlLAorCQkJCQkgICAmZG9tYWluLT5nZW5wZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRv bWFpbi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBnZW5wZCBwcm92aWRlclxuIik7CisJCXBtX2dlbnBk X3JlbW92ZSgmZG9tYWluLT5nZW5wZCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludCBpbXg3X3BnY19kb21haW5fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJc3RydWN0IGlteDdfcGdjX2RvbWFpbiAqZG9tYWluID0gcGRldi0+ZGV2LnBsYXRmb3Jt X2RhdGE7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TKSkgewor CQlvZl9nZW5wZF9kZWxfcHJvdmlkZXIoZG9tYWluLT5kZXYtPm9mX25vZGUpOworCQlwbV9nZW5w ZF9yZW1vdmUoJmRvbWFpbi0+Z2VucGQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBpbXg3X3BnY19kb21haW5faWRbXSA9IHsK Kwl7ICJpbXg3LXBnYy1kb21haW4iLCB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIGlteDdfcGdjX2RvbWFpbl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJ Lm5hbWUgPSAiaW14Ny1wZ2MiLAorCX0sCisJLnByb2JlICAgID0gaW14N19wZ2NfZG9tYWluX3By b2JlLAorCS5yZW1vdmUgICA9IGlteDdfcGdjX2RvbWFpbl9yZW1vdmUsCisJLmlkX3RhYmxlID0g aW14N19wZ2NfZG9tYWluX2lkLAorfTsKK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKGlteDdfcGdj X2RvbWFpbl9kcml2ZXIpCisKK3N0YXRpYyBib29sIGlteF9ncGN2Ml9yZWFkYWJsZV9yZWcoc3Ry dWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiByZWcgJSA0ID09 IDAgJiYKKwkgICAgICAgcmVnIDw9IEdQQ19NQVhfUkVHSVNURVI7Cit9CisKK3N0YXRpYyBib29s IGlteF9ncGN2Ml92b2xhdGlsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQg cmVnKQoreworCXJldHVybiByZWcgPT0gR1BDX1BVX1BHQ19TV19QVVBfUkVRIHx8CisJICAgICAg IHJlZyA9PSBHUENfUFVfUEdDX1NXX1BETl9SRVE7Cit9CisKK3N0YXRpYyBpbnQgaW14X2dwY3Yy X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwl2b2lk IF9faW9tZW0gKmJhc2U7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHJlZ21hcCAq cmVnbWFwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmlj ZV9ub2RlICpwZ2NfbnAsICpucDsKKworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZp ZyByZWdtYXBfY29uZmlnID0geworCQkuY2FjaGVfdHlwZQk9IFJFR0NBQ0hFX0ZMQVQsCisJCS5y ZWdfYml0cwk9IDMyLAorCQkudmFsX2JpdHMJPSAzMiwKKwkJLnJlZ19zdHJpZGUJPSA0LAorCisJ CS5yZWFkYWJsZV9yZWcJPSBpbXhfZ3BjdjJfcmVhZGFibGVfcmVnLAorCQkudm9sYXRpbGVfcmVn CT0gaW14X2dwY3YyX3ZvbGF0aWxlX3JlZywKKworCQkubWF4X3JlZ2lzdGVyCT0gR1BDX01BWF9S RUdJU1RFUiwKKwl9OworCisJcGdjX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LT5vZl9u b2RlLCAicGdjIik7CisJaWYgKCFwZ2NfbnApIHsKKwkJZGV2X2VycihkZXYsICJObyBwb3dlciBk b21haW5zIHNwZWNpZmllZCBpbiBEVFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJl cyAgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWJh c2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkp CisJCXJldHVybiBQVFJfRVJSKGJhc2UpOworCisJcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9t bWlvKGRldiwgYmFzZSwgJnJlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIocmVnbWFwKSkgewor CQlyZXQgPSBQVFJfRVJSKHJlZ21hcCk7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQg cmVnbWFwXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2Rl KHBnY19ucCwgbnApIHsKKwkJdTMyIGRvbWFpbl9pbmRleDsKKwkJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRfcGRldjsKKwkJc3RydWN0IGlteDdfcGdjX2RvbWFpbiAqZG9tYWluOworCisJCXJl dCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVnIiwgJmRvbWFpbl9pbmRleCk7CisJCWlm IChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgJ3JlZycgcHJvcGVydHlc biIpOworCQkJb2Zfbm9kZV9wdXQobnApOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChk b21haW5faW5kZXggPj0gQVJSQVlfU0laRShpbXg3X3BnY19kb21haW5zKSkgeworCQkJZGV2X3dh cm4oZGV2LAorCQkJCSAiRG9tYWluIGluZGV4ICVkIGlzIG91dCBvZiBib3VuZHNcbiIsCisJCQkJ IGRvbWFpbl9pbmRleCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRvbWFpbiA9ICZpbXg3X3Bn Y19kb21haW5zW2RvbWFpbl9pbmRleF07CisJCWRvbWFpbi0+cmVnbWFwID0gcmVnbWFwOworCisJ CXBkX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImlteDctcGdjLWRvbWFpbiIsCisJCQkJ CQlkb21haW5faW5kZXgpOworCQlpZiAoIXBkX3BkZXYpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFp bGVkIHRvIGFsbG9jYXRlIHBsYXRmb3JtIGRldmljZVxuIik7CisJCQlvZl9ub2RlX3B1dChucCk7 CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXBkX3BkZXYtPmRldi5wbGF0Zm9ybV9kYXRh ID0gZG9tYWluOworCQlwZF9wZGV2LT5kZXYucGFyZW50ID0gZGV2OworCQlwZF9wZGV2LT5kZXYu b2Zfbm9kZSA9IG5wOworCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRfcGRldik7CisJ CWlmIChyZXQpIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRfcGRldik7CisJCQlvZl9ub2Rl X3B1dChucCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlteF9ncGN2Ml9kdF9pZHNbXSA9IHsKKwl7 IC5jb21wYXRpYmxlID0gImZzbCxpbXg3ZC1ncGMiIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBpbXhfZ3BjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQku bmFtZSA9ICJpbXgtZ3BjdjIiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBpbXhfZ3BjdjJfZHRfaWRz LAorCX0sCisJLnByb2JlID0gaW14X2dwY3YyX3Byb2JlLAorfTsKK2J1aWx0aW5fcGxhdGZvcm1f ZHJpdmVyKGlteF9ncGNfZHJpdmVyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9w b3dlci9pbXg3LXBvd2VyLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3Bvd2VyL2lteDctcG93ZXIu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGRkZTYyCi0tLSAvZGV2L251 bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9wb3dlci9pbXg3LXBvd2VyLmgKQEAgLTAsMCAr MSwxOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgwqkgMjAxNyBJbXBpbmoKKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19EVF9CSU5ESU5HU19BUk1fSU1YN19QT1dFUl9IX18K KyNkZWZpbmUgX19EVF9CSU5ESU5HU19BUk1fSU1YN19QT1dFUl9IX18KKworI2RlZmluZSBJTVg3 X1BPV0VSX0RPTUFJTl9VU0JfSFNJQ19QSFkJMAorI2RlZmluZSBJTVg3X1BPV0VSX0RPTUFJTl9V U0JfT1RHMl9QSFkJMQorI2RlZmluZSBJTVg3X1BPV0VSX0RPTUFJTl9VU0JfT1RHMV9QSFkJMgor I2RlZmluZSBJTVg3X1BPV0VSX0RPTUFJTl9QQ0lFX1BIWQkzCisjZGVmaW5lIElNWDdfUE9XRVJf RE9NQUlOX01JUElfUEhZCTQKKworI2VuZGlmCi0tIAoyLjkuMwoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBs aXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK