From mboxrd@z Thu Jan 1 00:00:00 1970 From: Neelesh Gupta Subject: [PATCH v3] rtc/tpo: Driver to support rtc and wakeup on PowerNV platform Date: Tue, 14 Oct 2014 14:08:36 +0530 Message-ID: <20141014083447.7505.89771.stgit@localhost.localdomain> 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: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: devicetree@vger.kernel.org, tglx@linutronix.de, linuxppc-dev@lists.ozlabs.org, rtc-linux@googlegroups.com, a.zummo@towertech.it Cc: benh@au1.ibm.com List-Id: devicetree@vger.kernel.org VGhlIHBhdGNoIGltcGxlbWVudHMgdGhlIE9QQUwgcnRjIGRyaXZlciB0aGF0IGJpbmRzIHdpdGgg dGhlIHJ0Ywpkcml2ZXIgc3Vic3lzdGVtLiBUaGUgZHJpdmVyIHVzZXMgdGhlIHBsYXRmb3JtIGRl dmljZSBpbmZyYXN0cnVjdHVyZQp0byBwcm9iZSB0aGUgcnRjIGRldmljZSBhbmQgcmVnaXN0ZXIg aXQgdG8gcnRjIGNsYXNzIGZyYW1ld29yay4gVGhlCid3YWtldXAnIGlzIHN1cHBvcnRlZCBkZXBl bmRpbmcgdXBvbiB0aGUgcHJvcGVydHkgJ2hhcy10cG8nIHByZXNlbnQKaW4gdGhlIE9GIG5vZGUu IEl0IHByb3ZpZGVzIGEgd2F5IHRvIGxvYWQgdGhlIGdlbmVyaWMgcnRjIGRyaXZlciBpbgppbiB0 aGUgYWJzZW5jZSBvZiBhbiBPUEFMIGRyaXZlci4KClRoZSBwYXRjaCBhbHNvIG1vdmVzIHRoZSBl eGlzdGluZyBPUEFMIHJ0YyBnZXQvc2V0IHRpbWUgaW50ZXJmYWNlcyB0byB0aGUKbmV3IGRyaXZl ciBhbmQgZXhwb3NlcyB0aGUgbmVjZXNzYXJ5IE9QQUwgY2FsbHMgdXNpbmcgRVhQT1JUX1NZTUJP TF9HUEwuCgpUZXN0IHJlc3VsdHM6Ci0tLS0tLS0tLS0tLS0KSG9zdDoKW3Jvb3RAdHVsMTY5cDEg fl0jIGxzIC1sIC9zeXMvY2xhc3MvcnRjLwp0b3RhbCAwCmxyd3hyd3hyd3ggMSByb290IHJvb3Qg MCBPY3QgMTQgMDM6MDcgcnRjMCAtPiAuLi8uLi9kZXZpY2VzL29wYWwtcnRjL3J0Yy9ydGMwClty b290QHR1bDE2OXAxIH5dIyBjYXQgL3N5cy9kZXZpY2VzL29wYWwtcnRjL3J0Yy9ydGMwL3RpbWUK MDg6MTA6MDcKW3Jvb3RAdHVsMTY5cDEgfl0jIGVjaG8gYGRhdGUgJyslcycgLWQgJysgMiBtaW51 dGVzJ2AgPiAvc3lzL2NsYXNzL3J0Yy9ydGMwL3dha2VhbGFybQpbcm9vdEB0dWwxNjlwMSB+XSMg Y2F0IC9zeXMvY2xhc3MvcnRjL3J0YzAvd2FrZWFsYXJtCjE0MTMyNzQzNDUKW3Jvb3RAdHVsMTY5 cDEgfl0jCgpGU1A6CiQgc21nciBtZmdTdGF0ZQpzdGFuZGJ5CiQgcnRpbSB0aW1lb2ZkYXkKClN5 c3RlbSB0aW1lIGlzIHZhbGlkOiAyMDE0LzEwLzE0IDA4OjEyOjA0LjIyNTExNQoKJCBzbWdyIG1m Z1N0YXRlCmlwbGluZwokIAoKU2lnbmVkLW9mZi1ieTogTmVlbGVzaCBHdXB0YSA8bmVlbGVndXBA bGludXgudm5ldC5pYm0uY29tPgotLS0KCkNoYW5nZXMgaW4gdjMKPT09PT09PT09PT09PQotIFJl YmFzZWQgdG8gdGhlIGxhdGVzdCB0cmVlLgoKQ2hhbmdlcyBpbiB2Mgo9PT09PT09PT09PT09Ci0g QWRkZWQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3J0Yy9ydGMtb3BhbC50eHQK LSBFeHBsaWNpdGx5IHR1cm4gb2ZmIFJUQ19VSUUgbW9kZSBieSBzZXR0aW5nICdydGMtPnVpZV91 bnN1cHBvcnRlZCcKCiBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcnRjL3J0Yy1v cGFsLnR4dCB8ICAgMTYgKwogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29wYWwuaCAgICAgICAg ICAgICAgICAgICAgfCAgICA3IC0KIGFyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgMSAKIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9v cGFsLWFzeW5jLmMgICAgICAgIHwgICAgMyAKIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJu di9vcGFsLXJ0Yy5jICAgICAgICAgIHwgICA2NSArLS0tLQogYXJjaC9wb3dlcnBjL3BsYXRmb3Jt cy9wb3dlcm52L29wYWwtd3JhcHBlcnMuUyAgICAgfCAgICAyIAogYXJjaC9wb3dlcnBjL3BsYXRm b3Jtcy9wb3dlcm52L29wYWwuYyAgICAgICAgICAgICAgfCAgICA2IAogYXJjaC9wb3dlcnBjL3Bs YXRmb3Jtcy9wb3dlcm52L3NldHVwLmMgICAgICAgICAgICAgfCAgICAyIAogZHJpdmVycy9ydGMv S2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsKIGRyaXZlcnMv cnRjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAKIGRyaXZl cnMvcnRjL3J0Yy1vcGFsLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI2MSArKysr KysrKysrKysrKysrKysrKwogMTEgZmlsZXMgY2hhbmdlZCwgMzI1IGluc2VydGlvbnMoKyksIDUw IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2aWNldHJl ZS9iaW5kaW5ncy9ydGMvcnRjLW9wYWwudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9y dGMvcnRjLW9wYWwuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5k aW5ncy9ydGMvcnRjLW9wYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L3J0Yy9ydGMtb3BhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4 N2U1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n cy9ydGMvcnRjLW9wYWwudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0lCTSBPUEFMIHJlYWwtdGltZSBj bG9jaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6Cist IGNvbWFwYXRpYmxlOiBTaG91bGQgYmUgImlibSxvcGFsLXJ0YyIKKworT3B0aW9uYWwgcHJvcGVy dGllczoKKy0gaGFzLXRwbzogRGVjaWRlcyBpZiB0aGUgd2FrZXVwIGlzIHN1cHBvcnRlZCBvciBu b3QuCisKK0V4YW1wbGU6CisJcnRjIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sb3BhbC1ydGMiOwor CQloYXMtdHBvOworCQlwaGFuZGxlID0gPDB4MTAwMDAwMjk+OworCQlsaW51eCxwaGFuZGxlID0g PDB4MTAwMDAwMjk+OworCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20v b3BhbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29wYWwuaAppbmRleCA5MTI0YjBlLi4y YzIwNTYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb3BhbC5oCisrKyBi L2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9vcGFsLmgKQEAgLTE1NCw2ICsxNTQsOCBAQCBzdHJ1 Y3Qgb3BhbF9zZ19saXN0IHsKICNkZWZpbmUgT1BBTF9IQU5ETEVfSE1JCQkJCTk4CiAjZGVmaW5l IE9QQUxfUkVHSVNURVJfRFVNUF9SRUdJT04JCTEwMQogI2RlZmluZSBPUEFMX1VOUkVHSVNURVJf RFVNUF9SRUdJT04JCTEwMgorI2RlZmluZSBPUEFMX1dSSVRFX1RQTwkJCQkxMDMKKyNkZWZpbmUg T1BBTF9SRUFEX1RQTwkJCQkxMDQKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtODE5LDYg KzgyMSw5IEBAIGludDY0X3Qgb3BhbF9ydGNfcmVhZChfX2JlMzIgKnllYXJfbW9udGhfZGF5LAog CQkgICAgICBfX2JlNjQgKmhvdXJfbWludXRlX3NlY29uZF9taWxsaXNlY29uZCk7CiBpbnQ2NF90 IG9wYWxfcnRjX3dyaXRlKHVpbnQzMl90IHllYXJfbW9udGhfZGF5LAogCQkgICAgICAgdWludDY0 X3QgaG91cl9taW51dGVfc2Vjb25kX21pbGxpc2Vjb25kKTsKK2ludDY0X3Qgb3BhbF90cG9fcmVh ZCh1aW50NjRfdCB0b2tlbiwgX19iZTMyICp5ZWFyX21vbl9kYXksIF9fYmUzMiAqaG91cl9taW4p OworaW50NjRfdCBvcGFsX3Rwb193cml0ZSh1aW50NjRfdCB0b2tlbiwgdWludDMyX3QgeWVhcl9t b25fZGF5LAorCQkgICAgICAgdWludDMyX3QgaG91cl9taW4pOwogaW50NjRfdCBvcGFsX2NlY19w b3dlcl9kb3duKHVpbnQ2NF90IHJlcXVlc3QpOwogaW50NjRfdCBvcGFsX2NlY19yZWJvb3Qodm9p ZCk7CiBpbnQ2NF90IG9wYWxfcmVhZF9udnJhbSh1aW50NjRfdCBidWZmZXIsIHVpbnQ2NF90IHNp emUsIHVpbnQ2NF90IG9mZnNldCk7CkBAIC05OTIsOCArOTk3LDYgQEAgZXh0ZXJuIGludCBvcGFs X2FzeW5jX3dhaXRfcmVzcG9uc2UodWludDY0X3QgdG9rZW4sIHN0cnVjdCBvcGFsX21zZyAqbXNn KTsKIGV4dGVybiBpbnQgb3BhbF9nZXRfc2Vuc29yX2RhdGEodTMyIHNlbnNvcl9obmRsLCB1MzIg KnNlbnNvcl9kYXRhKTsKIAogc3RydWN0IHJ0Y190aW1lOwotZXh0ZXJuIGludCBvcGFsX3NldF9y dGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKLWV4dGVybiB2b2lkIG9wYWxfZ2V0X3J0Y190 aW1lKHN0cnVjdCBydGNfdGltZSAqdG0pOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb3BhbF9nZXRf Ym9vdF90aW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgb3BhbF9udnJhbV9pbml0KHZvaWQpOwogZXh0 ZXJuIHZvaWQgb3BhbF9mbGFzaF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBj L2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA3NTA1NTk5 Li41NDQ5MGM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9h cmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtOTg5LDYgKzk4OSw3IEBAIHZvaWQgR3JlZ29y aWFuRGF5KHN0cnVjdCBydGNfdGltZSAqIHRtKQogCiAJdG0tPnRtX3dkYXkgPSBkYXkgJSA3Owog fQorRVhQT1JUX1NZTUJPTF9HUEwoR3JlZ29yaWFuRGF5KTsKIAogdm9pZCB0b190bShpbnQgdGlt LCBzdHJ1Y3QgcnRjX3RpbWUgKiB0bSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0 Zm9ybXMvcG93ZXJudi9vcGFsLWFzeW5jLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2Vy bnYvb3BhbC1hc3luYy5jCmluZGV4IGU0NjJhYjkuLjY5M2I2Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gv cG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWFzeW5jLmMKKysrIGIvYXJjaC9wb3dlcnBj L3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtYXN5bmMuYwpAQCAtNzEsNiArNzEsNyBAQCBpbnQgb3Bh bF9hc3luY19nZXRfdG9rZW5faW50ZXJydXB0aWJsZSh2b2lkKQogCiAJcmV0dXJuIHRva2VuOwog fQorRVhQT1JUX1NZTUJPTF9HUEwob3BhbF9hc3luY19nZXRfdG9rZW5faW50ZXJydXB0aWJsZSk7 CiAKIGludCBfX29wYWxfYXN5bmNfcmVsZWFzZV90b2tlbihpbnQgdG9rZW4pCiB7CkBAIC0xMDIs NiArMTAzLDcgQEAgaW50IG9wYWxfYXN5bmNfcmVsZWFzZV90b2tlbihpbnQgdG9rZW4pCiAKIAly ZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9wYWxfYXN5bmNfcmVsZWFzZV90b2tlbik7 CiAKIGludCBvcGFsX2FzeW5jX3dhaXRfcmVzcG9uc2UodWludDY0X3QgdG9rZW4sIHN0cnVjdCBv cGFsX21zZyAqbXNnKQogewpAQCAtMTIwLDYgKzEyMiw3IEBAIGludCBvcGFsX2FzeW5jX3dhaXRf cmVzcG9uc2UodWludDY0X3QgdG9rZW4sIHN0cnVjdCBvcGFsX21zZyAqbXNnKQogCiAJcmV0dXJu IDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvcGFsX2FzeW5jX3dhaXRfcmVzcG9uc2UpOwogCiBz dGF0aWMgaW50IG9wYWxfYXN5bmNfY29tcF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5i LAogCQl1bnNpZ25lZCBsb25nIG1zZ190eXBlLCB2b2lkICptc2cpCmRpZmYgLS1naXQgYS9hcmNo L3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1ydGMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0 Zm9ybXMvcG93ZXJudi9vcGFsLXJ0Yy5jCmluZGV4IDQ5OTcwN2QuLjM3ZGJlZTEgMTAwNjQ0Ci0t LSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXJ0Yy5jCisrKyBiL2FyY2gv cG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXJ0Yy5jCkBAIC0xNSw2ICsxNSw4IEBACiAj aW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogCiAjaW5jbHVkZSA8YXNtL29wYWwuaD4KICNpbmNs dWRlIDxhc20vZmlybXdhcmUuaD4KQEAgLTQzLDcgKzQ1LDcgQEAgdW5zaWduZWQgbG9uZyBfX2lu aXQgb3BhbF9nZXRfYm9vdF90aW1lKHZvaWQpCiAJbG9uZyByYyA9IE9QQUxfQlVTWTsKIAogCWlm ICghb3BhbF9jaGVja190b2tlbihPUEFMX1JUQ19SRUFEKSkKLQkJZ290byBvdXQ7CisJCXJldHVy biAwOwogCiAJd2hpbGUgKHJjID09IE9QQUxfQlVTWSB8fCByYyA9PSBPUEFMX0JVU1lfRVZFTlQp IHsKIAkJcmMgPSBvcGFsX3J0Y19yZWFkKCZfX3lfbV9kLCAmX19oX21fc19tcyk7CkBAIC01Myw2 MiArNTUsMzMgQEAgdW5zaWduZWQgbG9uZyBfX2luaXQgb3BhbF9nZXRfYm9vdF90aW1lKHZvaWQp CiAJCQltZGVsYXkoMTApOwogCX0KIAlpZiAocmMgIT0gT1BBTF9TVUNDRVNTKQotCQlnb3RvIG91 dDsKKwkJcmV0dXJuIDA7CiAKIAl5X21fZCA9IGJlMzJfdG9fY3B1KF9feV9tX2QpOwogCWhfbV9z X21zID0gYmU2NF90b19jcHUoX19oX21fc19tcyk7CiAJb3BhbF90b190bSh5X21fZCwgaF9tX3Nf bXMsICZ0bSk7CiAJcmV0dXJuIG1rdGltZSh0bS50bV95ZWFyICsgMTkwMCwgdG0udG1fbW9uICsg MSwgdG0udG1fbWRheSwKIAkJICAgICAgdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMp Owotb3V0OgotCXBwY19tZC5nZXRfcnRjX3RpbWUgPSBOVUxMOwotCXBwY19tZC5zZXRfcnRjX3Rp bWUgPSBOVUxMOwotCXJldHVybiAwOwogfQogCi12b2lkIG9wYWxfZ2V0X3J0Y190aW1lKHN0cnVj dCBydGNfdGltZSAqdG0pCitzdGF0aWMgX19pbml0IGludCBvcGFsX3RpbWVfaW5pdCh2b2lkKQog ewotCWxvbmcgcmMgPSBPUEFMX0JVU1k7Ci0JdTMyIHlfbV9kOwotCXU2NCBoX21fc19tczsKLQlf X2JlMzIgX195X21fZDsKLQlfX2JlNjQgX19oX21fc19tczsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcnRjOwogCi0Jd2hpbGUgKHJjID09IE9Q QUxfQlVTWSB8fCByYyA9PSBPUEFMX0JVU1lfRVZFTlQpIHsKLQkJcmMgPSBvcGFsX3J0Y19yZWFk KCZfX3lfbV9kLCAmX19oX21fc19tcyk7Ci0JCWlmIChyYyA9PSBPUEFMX0JVU1lfRVZFTlQpCi0J CQlvcGFsX3BvbGxfZXZlbnRzKE5VTEwpOworCXJ0YyA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIv aWJtLG9wYWwvcnRjIik7CisJaWYgKHJ0YykgeworCQlwZGV2ID0gb2ZfcGxhdGZvcm1fZGV2aWNl X2NyZWF0ZShydGMsICJvcGFsLXJ0YyIsIE5VTEwpOworCQlvZl9ub2RlX3B1dChydGMpOworCX0g ZWxzZSB7CisJCWlmIChvcGFsX2NoZWNrX3Rva2VuKE9QQUxfUlRDX1JFQUQpIHx8CisJCSAgICBv cGFsX2NoZWNrX3Rva2VuKE9QQUxfUkVBRF9UUE8pKQorCQkJcGRldiA9IHBsYXRmb3JtX2Rldmlj ZV9yZWdpc3Rlcl9zaW1wbGUoIm9wYWwtcnRjIiwgLTEsCisJCQkJCQkJICAgICAgIE5VTEwsIDAp OwogCQllbHNlCi0JCQltZGVsYXkoMTApOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmIChy YyAhPSBPUEFMX1NVQ0NFU1MpCi0JCXJldHVybjsKLQl5X21fZCA9IGJlMzJfdG9fY3B1KF9feV9t X2QpOwotCWhfbV9zX21zID0gYmU2NF90b19jcHUoX19oX21fc19tcyk7Ci0Jb3BhbF90b190bSh5 X21fZCwgaF9tX3NfbXMsIHRtKTsKLX0KLQotaW50IG9wYWxfc2V0X3J0Y190aW1lKHN0cnVjdCBy dGNfdGltZSAqdG0pCi17Ci0JbG9uZyByYyA9IE9QQUxfQlVTWTsKLQl1MzIgeV9tX2QgPSAwOwot CXU2NCBoX21fc19tcyA9IDA7Ci0KLQl5X21fZCB8PSAoKHUzMiliaW4yYmNkKCh0bS0+dG1feWVh ciArIDE5MDApIC8gMTAwKSkgPDwgMjQ7Ci0JeV9tX2QgfD0gKCh1MzIpYmluMmJjZCgodG0tPnRt X3llYXIgKyAxOTAwKSAlIDEwMCkpIDw8IDE2OwotCXlfbV9kIHw9ICgodTMyKWJpbjJiY2QoKHRt LT50bV9tb24gKyAxKSkpIDw8IDg7Ci0JeV9tX2QgfD0gKCh1MzIpYmluMmJjZCh0bS0+dG1fbWRh eSkpOwotCi0JaF9tX3NfbXMgfD0gKCh1NjQpYmluMmJjZCh0bS0+dG1faG91cikpIDw8IDU2Owot CWhfbV9zX21zIHw9ICgodTY0KWJpbjJiY2QodG0tPnRtX21pbikpIDw8IDQ4OwotCWhfbV9zX21z IHw9ICgodTY0KWJpbjJiY2QodG0tPnRtX3NlYykpIDw8IDQwOwogCi0Jd2hpbGUgKHJjID09IE9Q QUxfQlVTWSB8fCByYyA9PSBPUEFMX0JVU1lfRVZFTlQpIHsKLQkJcmMgPSBvcGFsX3J0Y193cml0 ZSh5X21fZCwgaF9tX3NfbXMpOwotCQlpZiAocmMgPT0gT1BBTF9CVVNZX0VWRU5UKQotCQkJb3Bh bF9wb2xsX2V2ZW50cyhOVUxMKTsKLQkJZWxzZQotCQkJbWRlbGF5KDEwKTsKLQl9Ci0JcmV0dXJu IHJjID09IE9QQUxfU1VDQ0VTUyA/IDAgOiAtRUlPOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8o cGRldik7CiB9CittYWNoaW5lX3N1YnN5c19pbml0Y2FsbChwb3dlcm52LCBvcGFsX3RpbWVfaW5p dCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC13cmFw cGVycy5TIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtd3JhcHBlcnMuUwpp bmRleCBlOWUyNDUwLi43ZDdlN2E4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1z L3Bvd2VybnYvb3BhbC13cmFwcGVycy5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93 ZXJudi9vcGFsLXdyYXBwZXJzLlMKQEAgLTI1MCwzICsyNTAsNSBAQCBPUEFMX0NBTEwob3BhbF9o YW5kbGVfaG1pLAkJCU9QQUxfSEFORExFX0hNSSk7CiBPUEFMX0NBTEwob3BhbF9yZWdpc3Rlcl9k dW1wX3JlZ2lvbiwJCU9QQUxfUkVHSVNURVJfRFVNUF9SRUdJT04pOwogT1BBTF9DQUxMKG9wYWxf dW5yZWdpc3Rlcl9kdW1wX3JlZ2lvbiwJCU9QQUxfVU5SRUdJU1RFUl9EVU1QX1JFR0lPTik7CiBP UEFMX0NBTEwob3BhbF9wY2lfc2V0X3BoYl9jeGxfbW9kZSwJCU9QQUxfUENJX1NFVF9QSEJfQ1hM X01PREUpOworT1BBTF9DQUxMKG9wYWxfdHBvX3dyaXRlLAkJCU9QQUxfV1JJVEVfVFBPKTsKK09Q QUxfQ0FMTChvcGFsX3Rwb19yZWFkLAkJCU9QQUxfUkVBRF9UUE8pOwpkaWZmIC0tZ2l0IGEvYXJj aC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9y bXMvcG93ZXJudi9vcGFsLmMKaW5kZXggYjY0MmIwNS4uN2E3MzY1YSAxMDA2NDQKLS0tIGEvYXJj aC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwuYworKysgYi9hcmNoL3Bvd2VycGMvcGxh dGZvcm1zL3Bvd2VybnYvb3BhbC5jCkBAIC03ODQsMyArNzg0LDkgQEAgdm9pZCBvcGFsX2ZyZWVf c2dfbGlzdChzdHJ1Y3Qgb3BhbF9zZ19saXN0ICpzZykKIAkJCXNnID0gTlVMTDsKIAl9CiB9CisK K0VYUE9SVF9TWU1CT0xfR1BMKG9wYWxfcG9sbF9ldmVudHMpOworRVhQT1JUX1NZTUJPTF9HUEwo b3BhbF9ydGNfcmVhZCk7CitFWFBPUlRfU1lNQk9MX0dQTChvcGFsX3J0Y193cml0ZSk7CitFWFBP UlRfU1lNQk9MX0dQTChvcGFsX3Rwb19yZWFkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG9wYWxfdHBv X3dyaXRlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9zZXR1 cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3NldHVwLmMKaW5kZXggM2Y5NTQ2 ZC4uOTc1OTMzOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3Nl dHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3NldHVwLmMKQEAgLTI2 NSw4ICsyNjUsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwbnZfbWVtb3J5X2Jsb2NrX3NpemUo dm9pZCkKIHN0YXRpYyB2b2lkIF9faW5pdCBwbnZfc2V0dXBfbWFjaGRlcF9vcGFsKHZvaWQpCiB7 CiAJcHBjX21kLmdldF9ib290X3RpbWUgPSBvcGFsX2dldF9ib290X3RpbWU7Ci0JcHBjX21kLmdl dF9ydGNfdGltZSA9IG9wYWxfZ2V0X3J0Y190aW1lOwotCXBwY19tZC5zZXRfcnRjX3RpbWUgPSBv cGFsX3NldF9ydGNfdGltZTsKIAlwcGNfbWQucmVzdGFydCA9IHBudl9yZXN0YXJ0OwogCXBwY19t ZC5wb3dlcl9vZmYgPSBwbnZfcG93ZXJfb2ZmOwogCXBwY19tZC5oYWx0ID0gcG52X2hhbHQ7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRl eCA4Y2QwYmVlLi4wZTM4Y2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBi L2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTk3OSw2ICs5NzksMTcgQEAgY29uZmlnIFJUQ19EUlZf TlVDOTAwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFJU QyBzdWJzeXN0ZW0gb2YgdGhlCiAJICBOVUM5MTAvTlVDOTIwIHVzZWQgaW4gZW1iZWRkZWQgc3lz dGVtcy4KIAorY29uZmlnIFJUQ19EUlZfT1BBTAorCXRyaXN0YXRlICJJQk0gT1BBTCBSVEMgZHJp dmVyIgorCWRlcGVuZHMgb24gUFBDX1BPV0VSTlYKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJZiB5 b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFBvd2VyTlYgcGxhdGZvcm0g UlRDCisJICBkcml2ZXIgYmFzZWQgb24gT1BBTCBpbnRlcmZhY2VzLgorCisJICBUaGlzIGRyaXZl ciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdp bGwgYmUgY2FsbGVkIHJ0Yy1vcGFsLgorCiBjb21tZW50ICJvbi1DUFUgUlRDIGRyaXZlcnMiCiAK IGNvbmZpZyBSVENfRFJWX0RBVklOQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxl IGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggYjE4ODMyMy4uYzhlZjNlMSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTky LDYgKzkyLDcgQEAgb2JqLSQoQ09ORklHX1JUQ19EUlZfTVNNNjI0MikJKz0gcnRjLW1zbTYyNDIu bwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTVBDNTEyMSkJKz0gcnRjLW1wYzUxMjEubwogb2JqLSQo Q09ORklHX1JUQ19EUlZfTVYpCSs9IHJ0Yy1tdi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9OVUM5 MDApCSs9IHJ0Yy1udWM5MDAubworb2JqLSQoQ09ORklHX1JUQ19EUlZfT1BBTCkJKz0gcnRjLW9w YWwubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfT01BUCkJKz0gcnRjLW9tYXAubwogb2JqLSQoQ09O RklHX1JUQ19EUlZfUEFMTUFTKQkrPSBydGMtcGFsbWFzLm8KIG9iai0kKENPTkZJR19SVENfRFJW X1BDQVApCSs9IHJ0Yy1wY2FwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1vcGFsLmMg Yi9kcml2ZXJzL3J0Yy9ydGMtb3BhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjk1ZjY1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtb3BhbC5jCkBA IC0wLDAgKzEsMjYxIEBACisvKgorICogSUJNIE9QQUwgUlRDIGRyaXZlcgorICogQ29weXJpZ2h0 IChDKSAyMDE0IElCTQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4KKyAqLworCisjZGVmaW5lIERSVk5BTUUJCSJydGMtb3BhbCIKKyNkZWZpbmUgcHJfZm10KGZt dCkJRFJWTkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVk ZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGFzbS9vcGFsLmg+ CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisKK3N0YXRpYyB2b2lkIG9wYWxfdG9fdG0odTMy IHlfbV9kLCB1NjQgaF9tX3NfbXMsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdG0tPnRtX3ll YXIgPSAoKGJjZDJiaW4oeV9tX2QgPj4gMjQpICogMTAwKSArCisJCSAgICAgICBiY2QyYmluKCh5 X21fZCA+PiAxNikgJiAweGZmKSkgLSAxOTAwOworCXRtLT50bV9tb24gID0gYmNkMmJpbigoeV9t X2QgPj4gOCkgJiAweGZmKSAtIDE7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHlfbV9kICYgMHhm Zik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKChoX21fc19tcyA+PiA1NikgJiAweGZmKTsKKwl0 bS0+dG1fbWluICA9IGJjZDJiaW4oKGhfbV9zX21zID4+IDQ4KSAmIDB4ZmYpOworCXRtLT50bV9z ZWMgID0gYmNkMmJpbigoaF9tX3NfbXMgPj4gNDApICYgMHhmZik7CisKKwlHcmVnb3JpYW5EYXko dG0pOworfQorCitzdGF0aWMgdm9pZCB0bV90b19vcGFsKHN0cnVjdCBydGNfdGltZSAqdG0sIHUz MiAqeV9tX2QsIHU2NCAqaF9tX3NfbXMpCit7CisJKnlfbV9kIHw9ICgodTMyKWJpbjJiY2QoKHRt LT50bV95ZWFyICsgMTkwMCkgLyAxMDApKSA8PCAyNDsKKwkqeV9tX2QgfD0gKCh1MzIpYmluMmJj ZCgodG0tPnRtX3llYXIgKyAxOTAwKSAlIDEwMCkpIDw8IDE2OworCSp5X21fZCB8PSAoKHUzMili aW4yYmNkKCh0bS0+dG1fbW9uICsgMSkpKSA8PCA4OworCSp5X21fZCB8PSAoKHUzMiliaW4yYmNk KHRtLT50bV9tZGF5KSk7CisKKwkqaF9tX3NfbXMgfD0gKCh1NjQpYmluMmJjZCh0bS0+dG1faG91 cikpIDw8IDU2OworCSpoX21fc19tcyB8PSAoKHU2NCliaW4yYmNkKHRtLT50bV9taW4pKSA8PCA0 ODsKKwkqaF9tX3NfbXMgfD0gKCh1NjQpYmluMmJjZCh0bS0+dG1fc2VjKSkgPDwgNDA7Cit9CisK K3N0YXRpYyBpbnQgb3BhbF9nZXRfcnRjX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg cnRjX3RpbWUgKnRtKQoreworCWxvbmcgcmMgPSBPUEFMX0JVU1k7CisJdTMyIHlfbV9kOworCXU2 NCBoX21fc19tczsKKwlfX2JlMzIgX195X21fZDsKKwlfX2JlNjQgX19oX21fc19tczsKKworCXdo aWxlIChyYyA9PSBPUEFMX0JVU1kgfHwgcmMgPT0gT1BBTF9CVVNZX0VWRU5UKSB7CisJCXJjID0g b3BhbF9ydGNfcmVhZCgmX195X21fZCwgJl9faF9tX3NfbXMpOworCQlpZiAocmMgPT0gT1BBTF9C VVNZX0VWRU5UKQorCQkJb3BhbF9wb2xsX2V2ZW50cyhOVUxMKTsKKwkJZWxzZQorCQkJbXNsZWVw KDEwKTsKKwl9CisKKwlpZiAocmMgIT0gT1BBTF9TVUNDRVNTKQorCQlyZXR1cm4gLUVJTzsKKwor CXlfbV9kID0gYmUzMl90b19jcHUoX195X21fZCk7CisJaF9tX3NfbXMgPSBiZTY0X3RvX2NwdShf X2hfbV9zX21zKTsKKwlvcGFsX3RvX3RtKHlfbV9kLCBoX21fc19tcywgdG0pOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgb3BhbF9zZXRfcnRjX3RpbWUoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCWxvbmcgcmMgPSBPUEFMX0JVU1k7CisJdTMyIHlf bV9kID0gMDsKKwl1NjQgaF9tX3NfbXMgPSAwOworCisJdG1fdG9fb3BhbCh0bSwgJnlfbV9kLCAm aF9tX3NfbXMpOworCXdoaWxlIChyYyA9PSBPUEFMX0JVU1kgfHwgcmMgPT0gT1BBTF9CVVNZX0VW RU5UKSB7CisJCXJjID0gb3BhbF9ydGNfd3JpdGUoeV9tX2QsIGhfbV9zX21zKTsKKwkJaWYgKHJj ID09IE9QQUxfQlVTWV9FVkVOVCkKKwkJCW9wYWxfcG9sbF9ldmVudHMoTlVMTCk7CisJCWVsc2UK KwkJCW1zbGVlcCgxMCk7CisJfQorCisJcmV0dXJuIHJjID09IE9QQUxfU1VDQ0VTUyA/IDAgOiAt RUlPOworfQorCisvKgorICogVFBPCVRpbWVkIFBvd2VyLU9uCisgKgorICogVFBPIGdldC9zZXQg T1BBTCBjYWxscyBjYXJlIGFib3V0IHRoZSBob3VyIGFuZCBtaW4gYW5kIHRvIG1ha2UgaXQgY29u c2lzdGVudAorICogd2l0aCB0aGUgcnRjIHV0aWxpdHkgdGltZSBjb252ZXJzaW9uIGZ1bmN0aW9u cywgd2UgdXNlIHRoZSAndTY0JyB0byBzdG9yZQorICogaXRzIHZhbHVlIGFuZCBwZXJmb3JtIGJp dCBzaGlmdCBieSAzMiBiZWZvcmUgdXNlLi4KKyAqLworc3RhdGljIGludCBvcGFsX2dldF90cG9f dGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlf X2JlMzIgX195X21fZCwgX19oX207CisJc3RydWN0IG9wYWxfbXNnIG1zZzsKKwlpbnQgcmMsIHRv a2VuOworCXU2NCBoX21fc19tczsKKwl1MzIgeV9tX2Q7CisKKwl0b2tlbiA9IG9wYWxfYXN5bmNf Z2V0X3Rva2VuX2ludGVycnVwdGlibGUoKTsKKwlpZiAodG9rZW4gPCAwKSB7CisJCWlmICh0b2tl biAhPSAtRVJFU1RBUlRTWVMpCisJCQlwcl9lcnIoIkZhaWxlZCB0byBnZXQgdGhlIGFzeW5jIHRv a2VuXG4iKTsKKworCQlyZXR1cm4gdG9rZW47CisJfQorCisJcmMgPSBvcGFsX3Rwb19yZWFkKHRv a2VuLCAmX195X21fZCwgJl9faF9tKTsKKwlpZiAocmMgIT0gT1BBTF9BU1lOQ19DT01QTEVUSU9O KSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCXJjID0gb3BhbF9hc3luY193 YWl0X3Jlc3BvbnNlKHRva2VuLCAmbXNnKTsKKwlpZiAocmMpIHsKKwkJcmMgPSAtRUlPOworCQln b3RvIGV4aXQ7CisJfQorCisJcmMgPSBiZTY0X3RvX2NwdShtc2cucGFyYW1zWzFdKTsKKwlpZiAo cmMgIT0gT1BBTF9TVUNDRVNTKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKwor CXlfbV9kID0gYmUzMl90b19jcHUoX195X21fZCk7CisJaF9tX3NfbXMgPSAoKHU2NCliZTMyX3Rv X2NwdShfX2hfbSkgPDwgMzIpOworCW9wYWxfdG9fdG0oeV9tX2QsIGhfbV9zX21zLCAmYWxhcm0t PnRpbWUpOworCitleGl0OgorCW9wYWxfYXN5bmNfcmVsZWFzZV90b2tlbih0b2tlbik7CisJcmV0 dXJuIHJjOworfQorCisvKiBTZXQgVGltZWQgUG93ZXItT24gKi8KK3N0YXRpYyBpbnQgb3BhbF9z ZXRfdHBvX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0p Cit7CisJdTY0IGhfbV9zX21zID0gMCwgdG9rZW47CisJc3RydWN0IG9wYWxfbXNnIG1zZzsKKwl1 MzIgeV9tX2QgPSAwOworCWludCByYzsKKworCXRtX3RvX29wYWwoJmFsYXJtLT50aW1lLCAmeV9t X2QsICZoX21fc19tcyk7CisKKwl0b2tlbiA9IG9wYWxfYXN5bmNfZ2V0X3Rva2VuX2ludGVycnVw dGlibGUoKTsKKwlpZiAodG9rZW4gPCAwKSB7CisJCWlmICh0b2tlbiAhPSAtRVJFU1RBUlRTWVMp CisJCQlwcl9lcnIoIkZhaWxlZCB0byBnZXQgdGhlIGFzeW5jIHRva2VuXG4iKTsKKworCQlyZXR1 cm4gdG9rZW47CisJfQorCisJLyogVFBPLCB3ZSBjYXJlIGFib3V0IGhvdXIgYW5kIG1pbnV0ZSAq LworCXJjID0gb3BhbF90cG9fd3JpdGUodG9rZW4sIHlfbV9kLAorCQkJICAgICh1MzIpKChoX21f c19tcyA+PiAzMikgJiAweGZmZmYwMDAwKSk7CisJaWYgKHJjICE9IE9QQUxfQVNZTkNfQ09NUExF VElPTikgeworCQlyYyA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyYyA9IG9wYWxfYXN5 bmNfd2FpdF9yZXNwb25zZSh0b2tlbiwgJm1zZyk7CisJaWYgKHJjKSB7CisJCXJjID0gLUVJTzsK KwkJZ290byBleGl0OworCX0KKworCXJjID0gYmU2NF90b19jcHUobXNnLnBhcmFtc1sxXSk7CisJ aWYgKHJjICE9IE9QQUxfU1VDQ0VTUykKKwkJcmMgPSAtRUlPOworCitleGl0OgorCW9wYWxfYXN5 bmNfcmVsZWFzZV90b2tlbih0b2tlbik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IHJ0Y19jbGFzc19vcHMgb3BhbF9ydGNfb3BzID0geworCS5yZWFkX3RpbWUJPSBvcGFs X2dldF9ydGNfdGltZSwKKwkuc2V0X3RpbWUJPSBvcGFsX3NldF9ydGNfdGltZSwKKwkucmVhZF9h bGFybQk9IG9wYWxfZ2V0X3Rwb190aW1lLAorCS5zZXRfYWxhcm0JPSBvcGFsX3NldF90cG9fdGlt ZSwKK307CisKK3N0YXRpYyBpbnQgb3BhbF9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCisJaWYgKHBkZXYtPmRldi5v Zl9ub2RlICYmIG9mX2dldF9wcm9wZXJ0eShwZGV2LT5kZXYub2Zfbm9kZSwgImhhcy10cG8iLAor CQkJCQkJIE5VTEwpKQorCQlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZwZGV2LT5kZXYsIHRy dWUpOworCisJcnRjID0gZGV2bV9ydGNfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIERSVk5B TUUsICZvcGFsX3J0Y19vcHMsCisJCQkJICAgICAgIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJS KHJ0YykpCisJCXJldHVybiBQVFJfRVJSKHJ0Yyk7CisKKwlydGMtPnVpZV91bnN1cHBvcnRlZCA9 IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg b3BhbF9ydGNfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlCT0gImlibSxvcGFsLXJ0YyIs CisJfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvcGFsX3J0Y19tYXRjaCk7 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIG9wYWxfcnRjX2RyaXZl cl9pZHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJvcGFsLXJ0YyIsCisJfSwKKwl7IH0KK307CitN T0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBvcGFsX3J0Y19kcml2ZXJfaWRzKTsKKworc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3BhbF9ydGNfZHJpdmVyID0geworCS5wcm9iZQkJ PSBvcGFsX3J0Y19wcm9iZSwKKwkuaWRfdGFibGUJPSBvcGFsX3J0Y19kcml2ZXJfaWRzLAorCS5k cml2ZXIJCT0geworCQkubmFtZQkJPSBEUlZOQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUs CisJCS5vZl9tYXRjaF90YWJsZQk9IG9wYWxfcnRjX21hdGNoLAorCX0sCit9OworCitzdGF0aWMg aW50IF9faW5pdCBvcGFsX3J0Y19pbml0KHZvaWQpCit7CisJaWYgKCFmaXJtd2FyZV9oYXNfZmVh dHVyZShGV19GRUFUVVJFX09QQUwpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwbGF0 Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9wYWxfcnRjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lk IF9fZXhpdCBvcGFsX3J0Y19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0 ZXIoJm9wYWxfcnRjX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIk5lZWxlc2ggR3VwdGEg PG5lZWxlZ3VwQGxpbnV4LnZuZXQuaWJtLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSUJN IE9QQUwgUlRDIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5p dChvcGFsX3J0Y19pbml0KTsKK21vZHVsZV9leGl0KG9wYWxfcnRjX2V4aXQpOwoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXhwcGMtZGV2IG1haWxp bmcgbGlzdApMaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwpodHRwczovL2xpc3RzLm96bGFi cy5vcmcvbGlzdGluZm8vbGludXhwcGMtZGV2