From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= Subject: [PATCH v3 4/5] clocksource: add driver for i.MX EPIT timer Date: Tue, 29 May 2018 19:04:35 +0200 Message-ID: <20180529170436.22711-5-peron.clem@gmail.com> References: <20180529170436.22711-1-peron.clem@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180529170436.22711-1-peron.clem@gmail.com> 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: Colin Didier , linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-clk@vger.kernel.org Cc: Rob Herring , Sascha Hauer , =?UTF-8?q?Cl=C3=A9ment=20Peron?= , NXP Linux Team , Pengutronix Kernel Team , Fabio Estevam , Vladimir Zapolskiy List-Id: devicetree@vger.kernel.org RnJvbTogQ29saW4gRGlkaWVyIDxjb2xpbi5kaWRpZXJAZGV2aWFsZXQuY29tPgoKQWRkIGRyaXZl ciBmb3IgTlhQJ3MgRVBJVCB0aW1lciB1c2VkIGluIGkuTVggNiBmYW1pbHkgb2YgU29DLgoKU2ln bmVkLW9mZi1ieTogQ29saW4gRGlkaWVyIDxjb2xpbi5kaWRpZXJAZGV2aWFsZXQuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBDbMOpbWVudCBQZXJvbiA8Y2xlbWVudC5wZXJvbkBkZXZpYWxldC5jb20+Ci0t LQogZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnICAgICAgICAgIHwgIDEyICsrCiBkcml2ZXJz L2Nsb2Nrc291cmNlL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9jbG9ja3NvdXJj ZS90aW1lci1pbXgtZXBpdC5jIHwgMjgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBm aWxlcyBjaGFuZ2VkLCAyOTYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvY2xvY2tzb3VyY2UvdGltZXItaW14LWVwaXQuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xv Y2tzb3VyY2UvS2NvbmZpZyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZwppbmRleCA4ZThh MDk3NTVkMTAuLjkyMGEwODc0ZjNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9L Y29uZmlnCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZwpAQCAtNTc2LDYgKzU3Niwx OCBAQCBjb25maWcgSDgzMDBfVFBVCiAJICBUaGlzIGVuYWJsZXMgdGhlIGNsb2Nrc291cmNlIGZv ciB0aGUgSDgzMDAgcGxhdGZvcm0gd2l0aCB0aGUKIAkgIEg4UzI2NzggY3B1LgogCitjb25maWcg Q0xLU1JDX0lNWF9FUElUCisJYm9vbCAiQ2xvY2tzb3VyY2UgdXNpbmcgaS5NWCBFUElUIgorCWRl cGVuZHMgb24gQVJNICYmIENMS0RFVl9MT09LVVAgJiYgT0YgJiYgKEFSQ0hfTVhDIHx8IENPTVBJ TEVfVEVTVCkKKwlzZWxlY3QgVElNRVJfT0YKKwlzZWxlY3QgQ0xLU1JDX01NSU8KKwloZWxwCisJ ICBUaGlzIGVuYWJsZXMgRVBJVCBzdXBwb3J0IGF2YWlsYWJsZSBvbiBzb21lIGkuTVggcGxhdGZv cm1zLgorCSAgTm9ybWFsbHkgeW91IGRvbid0IGhhdmUgYSByZWFzb24gdG8gZG8gc28gYXMgdGhl IEVQSVQgaGFzCisJICB0aGUgc2FtZSBmZWF0dXJlcyBhbmQgdXNlcyB0aGUgc2FtZSBjbG9ja3Mg YXMgdGhlIEdQVC4KKwkgIEFueXdheSwgb24gc29tZSBzeXN0ZW1zIHRoZSBHUFQgbWF5IGJlIGlu IHVzZSBmb3Igb3RoZXIKKwkgIHB1cnBvc2VzLgorCiBjb25maWcgQ0xLU1JDX0lNWF9HUFQKIAli b29sICJDbG9ja3NvdXJjZSB1c2luZyBpLk1YIEdQVCIgaWYgQ09NUElMRV9URVNUCiAJZGVwZW5k cyBvbiBBUk0gJiYgQ0xLREVWX0xPT0tVUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJj ZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKaW5kZXggMDBjYWYzN2U1 MmY5Li5kOTQyNmY2OWVjNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZp bGUKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQpAQCAtNjksNiArNjksNyBAQCBv YmotJChDT05GSUdfSU5URUdSQVRPUl9BUF9USU1FUikJKz0gdGltZXItaW50ZWdyYXRvci1hcC5v CiBvYmotJChDT05GSUdfQ0xLU1JDX1ZFUlNBVElMRSkJCSs9IHZlcnNhdGlsZS5vCiBvYmotJChD T05GSUdfQ0xLU1JDX01JUFNfR0lDKQkJKz0gbWlwcy1naWMtdGltZXIubwogb2JqLSQoQ09ORklH X0NMS1NSQ19UQU5HT19YVEFMKQkJKz0gdGFuZ29feHRhbC5vCitvYmotJChDT05GSUdfQ0xLU1JD X0lNWF9FUElUKQkJKz0gdGltZXItaW14LWVwaXQubwogb2JqLSQoQ09ORklHX0NMS1NSQ19JTVhf R1BUKQkJKz0gdGltZXItaW14LWdwdC5vCiBvYmotJChDT05GSUdfQ0xLU1JDX0lNWF9UUE0pCQkr PSB0aW1lci1pbXgtdHBtLm8KIG9iai0kKENPTkZJR19BU005MjYwX1RJTUVSKQkJKz0gYXNtOTI2 MF90aW1lci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWlteC1lcGl0 LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWlteC1lcGl0LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44NzAyNWQ1ZjNhOTcKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWlteC1lcGl0LmMKQEAgLTAsMCArMSwyODMgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogaS5NWCBFUElUIFRp bWVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5n dXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBDb2xpbiBEaWRpZXIgPGNvbGluLmRp ZGllckBkZXZpYWxldC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQ2zDqW1lbnQgUMOpcm9u IDxjbGVtZW50LnBlcm9uQGRldmlhbGV0LmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xr Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5o PgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgor I2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4K KyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkX2Nsb2NrLmg+Cisj aW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIEVQSVRDUgkJCQkweDAwCisjZGVmaW5l IEVQSVRTUgkJCQkweDA0CisjZGVmaW5lIEVQSVRMUgkJCQkweDA4CisjZGVmaW5lIEVQSVRDTVBS CQkJMHgwYworI2RlZmluZSBFUElUQ05SCQkJCTB4MTAKKworI2RlZmluZSBFUElUQ1JfRU4JCQlC SVQoMCkKKyNkZWZpbmUgRVBJVENSX0VOTU9ECQkJQklUKDEpCisjZGVmaW5lIEVQSVRDUl9PQ0lF TgkJCUJJVCgyKQorI2RlZmluZSBFUElUQ1JfUkxECQkJQklUKDMpCisjZGVmaW5lIEVQSVRDUl9Q UkVTQyh4KQkJCSgoKHgpICYgMHhmZmYpIDw8IDQpCisjZGVmaW5lIEVQSVRDUl9TV1IJCQlCSVQo MTYpCisjZGVmaW5lIEVQSVRDUl9JT1ZXCQkJQklUKDE3KQorI2RlZmluZSBFUElUQ1JfREJHRU4J CQlCSVQoMTgpCisjZGVmaW5lIEVQSVRDUl9XQUlURU4JCQlCSVQoMTkpCisjZGVmaW5lIEVQSVRD Ul9SRVMJCQlCSVQoMjApCisjZGVmaW5lIEVQSVRDUl9TVE9QRU4JCQlCSVQoMjEpCisjZGVmaW5l IEVQSVRDUl9PTV9ESVNDT04JCSgwIDw8IDIyKQorI2RlZmluZSBFUElUQ1JfT01fVE9HR0xFCQko MSA8PCAyMikKKyNkZWZpbmUgRVBJVENSX09NX0NMRUFSCQkJKDIgPDwgMjIpCisjZGVmaW5lIEVQ SVRDUl9PTV9TRVQJCQkoMyA8PCAyMikKKyNkZWZpbmUgRVBJVENSX0NMS1NSQ19PRkYJCSgwIDw8 IDI0KQorI2RlZmluZSBFUElUQ1JfQ0xLU1JDX1BFUklQSEVSQUwJKDEgPDwgMjQpCisjZGVmaW5l IEVQSVRDUl9DTEtTUkNfUkVGX0hJR0gJCSgyIDw8IDI0KQorI2RlZmluZSBFUElUQ1JfQ0xLU1JD X1JFRl9MT1cJCSgzIDw8IDI0KQorCisjZGVmaW5lIEVQSVRTUl9PQ0lGCQkJQklUKDApCisKK3N0 cnVjdCBlcGl0X3RpbWVyIHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IGlycTsKKwlzdHJ1 Y3QgY2xrICpjbGtfcGVyOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2VkOworCXN0cnVj dCBpcnFhY3Rpb24gYWN0OworfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqc2NoZWRfY2xvY2tf cmVnOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlcGl0X3RpbWVyICp0b19lcGl0X3RpbWVyKHN0 cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNl ZCwgc3RydWN0IGVwaXRfdGltZXIsIGNlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcGl0 X2lycV9kaXNhYmxlKHN0cnVjdCBlcGl0X3RpbWVyICplcGl0dG0pCit7CisJdTMyIHZhbDsKKwor CXZhbCA9IHJlYWRsX3JlbGF4ZWQoZXBpdHRtLT5iYXNlICsgRVBJVENSKTsKKwl3cml0ZWxfcmVs YXhlZCh2YWwgJiB+RVBJVENSX09DSUVOLCBlcGl0dG0tPmJhc2UgKyBFUElUQ1IpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgZXBpdF9pcnFfZW5hYmxlKHN0cnVjdCBlcGl0X3RpbWVyICplcGl0 dG0pCit7CisJdTMyIHZhbDsKKworCXZhbCA9IHJlYWRsX3JlbGF4ZWQoZXBpdHRtLT5iYXNlICsg RVBJVENSKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwgfCBFUElUQ1JfT0NJRU4sIGVwaXR0bS0+YmFz ZSArIEVQSVRDUik7Cit9CisKK3N0YXRpYyB2b2lkIGVwaXRfaXJxX2Fja25vd2xlZGdlKHN0cnVj dCBlcGl0X3RpbWVyICplcGl0dG0pCit7CisJd3JpdGVsX3JlbGF4ZWQoRVBJVFNSX09DSUYsIGVw aXR0bS0+YmFzZSArIEVQSVRTUik7Cit9CisKK3N0YXRpYyB1NjQgbm90cmFjZSBlcGl0X3JlYWRf c2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gfnJlYWRsX3JlbGF4ZWQoc2NoZWRfY2xvY2tf cmVnKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZXBpdF9jbG9ja3NvdXJjZV9pbml0KHN0cnVj dCBlcGl0X3RpbWVyICplcGl0dG0pCit7CisJdW5zaWduZWQgaW50IGMgPSBjbGtfZ2V0X3JhdGUo ZXBpdHRtLT5jbGtfcGVyKTsKKworCXNjaGVkX2Nsb2NrX3JlZyA9IGVwaXR0bS0+YmFzZSArIEVQ SVRDTlI7CisJc2NoZWRfY2xvY2tfcmVnaXN0ZXIoZXBpdF9yZWFkX3NjaGVkX2Nsb2NrLCAzMiwg Yyk7CisKKwlyZXR1cm4gY2xvY2tzb3VyY2VfbW1pb19pbml0KGVwaXR0bS0+YmFzZSArIEVQSVRD TlIsICJlcGl0IiwgYywgMjAwLCAzMiwKKwkJCWNsb2Nrc291cmNlX21taW9fcmVhZGxfZG93bik7 Cit9CisKK3N0YXRpYyBpbnQgZXBpdF9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGN5Y2xl cywKKwkJCSAgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCit7CisJc3RydWN0 IGVwaXRfdGltZXIgKmVwaXR0bSA9IHRvX2VwaXRfdGltZXIoY2VkKTsKKwl1bnNpZ25lZCBsb25n IHRjbXA7CisKKwl0Y21wID0gcmVhZGxfcmVsYXhlZChlcGl0dG0tPmJhc2UgKyBFUElUQ05SKSAt IGN5Y2xlczsKKwl3cml0ZWxfcmVsYXhlZCh0Y21wLCBlcGl0dG0tPmJhc2UgKyBFUElUQ01QUik7 CisKKwlyZXR1cm4gMDsKK30KKworLyogTGVmdCBldmVudCBzb3VyY2VzIGRpc2FibGVkLCBubyBt b3JlIGludGVycnVwdHMgYXBwZWFyICovCitzdGF0aWMgaW50IGVwaXRfc2h1dGRvd24oc3RydWN0 IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQoreworCXN0cnVjdCBlcGl0X3RpbWVyICplcGl0dG0g PSB0b19lcGl0X3RpbWVyKGNlZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICog VGhlIHRpbWVyIGludGVycnVwdCBnZW5lcmF0aW9uIGlzIGRpc2FibGVkIGF0IGxlYXN0CisJICog Zm9yIGVub3VnaCB0aW1lIHRvIGNhbGwgZXBpdF9zZXRfbmV4dF9ldmVudCgpCisJICovCisJbG9j YWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHQgaW4gRVBJVCBtb2R1 bGUgKi8KKwllcGl0X2lycV9kaXNhYmxlKGVwaXR0bSk7CisKKwkvKiBDbGVhciBwZW5kaW5nIGlu dGVycnVwdCAqLworCWVwaXRfaXJxX2Fja25vd2xlZGdlKGVwaXR0bSk7CisKKwlsb2NhbF9pcnFf cmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcGl0X3NldF9v bmVzaG90KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKK3sKKwlzdHJ1Y3QgZXBpdF90 aW1lciAqZXBpdHRtID0gdG9fZXBpdF90aW1lcihjZWQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisKKwkvKgorCSAqIFRoZSB0aW1lciBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBpcyBkaXNhYmxlZCBh dCBsZWFzdAorCSAqIGZvciBlbm91Z2ggdGltZSB0byBjYWxsIGVwaXRfc2V0X25leHRfZXZlbnQo KQorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0 IGluIEVQSVQgbW9kdWxlICovCisJZXBpdF9pcnFfZGlzYWJsZShlcGl0dG0pOworCisJLyogQ2xl YXIgcGVuZGluZyBpbnRlcnJ1cHQsIG9ubHkgd2hpbGUgc3dpdGNoaW5nIG1vZGUgKi8KKwlpZiAo IWNsb2NrZXZlbnRfc3RhdGVfb25lc2hvdChjZWQpKQorCQllcGl0X2lycV9hY2tub3dsZWRnZShl cGl0dG0pOworCisJLyoKKwkgKiBEbyBub3QgcHV0IG92ZXJoZWFkIG9mIGludGVycnVwdCBlbmFi bGUvZGlzYWJsZSBpbnRvCisJICogZXBpdF9zZXRfbmV4dF9ldmVudCgpLCB0aGUgY29yZSBoYXMg YWJvdXQgNCBtaW51dGVzCisJICogdG8gY2FsbCBlcGl0X3NldF9uZXh0X2V2ZW50KCkgb3Igc2h1 dGRvd24gY2xvY2sgYWZ0ZXIKKwkgKiBtb2RlIHN3aXRjaGluZworCSAqLworCWVwaXRfaXJxX2Vu YWJsZShlcGl0dG0pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZXBpdF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9p ZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9IGRldl9pZDsK KwlzdHJ1Y3QgZXBpdF90aW1lciAqZXBpdHRtID0gdG9fZXBpdF90aW1lcihjZWQpOworCisJZXBp dF9pcnFfYWNrbm93bGVkZ2UoZXBpdHRtKTsKKworCWNlZC0+ZXZlbnRfaGFuZGxlcihjZWQpOwor CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBlcGl0X2Nsb2Nr ZXZlbnRfaW5pdChzdHJ1Y3QgZXBpdF90aW1lciAqZXBpdHRtKQoreworCXN0cnVjdCBjbG9ja19l dmVudF9kZXZpY2UgKmNlZCA9ICZlcGl0dG0tPmNlZDsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Qg PSAmZXBpdHRtLT5hY3Q7CisKKwljZWQtPm5hbWUgPSAiZXBpdCI7CisJY2VkLT5mZWF0dXJlcyA9 IENMT0NLX0VWVF9GRUFUX09ORVNIT1QgfCBDTE9DS19FVlRfRkVBVF9EWU5JUlE7CisJY2VkLT5z ZXRfc3RhdGVfc2h1dGRvd24gPSBlcGl0X3NodXRkb3duOworCWNlZC0+dGlja19yZXN1bWUgPSBl cGl0X3NodXRkb3duOworCWNlZC0+c2V0X3N0YXRlX29uZXNob3QgPSBlcGl0X3NldF9vbmVzaG90 OworCWNlZC0+c2V0X25leHRfZXZlbnQgPSBlcGl0X3NldF9uZXh0X2V2ZW50OworCWNlZC0+cmF0 aW5nID0gMjAwOworCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisJY2VkLT5pcnEgPSBl cGl0dG0tPmlycTsKKwljbG9ja2V2ZW50c19jb25maWdfYW5kX3JlZ2lzdGVyKGNlZCwgY2xrX2dl dF9yYXRlKGVwaXR0bS0+Y2xrX3BlciksCisJCTB4ZmYsIDB4ZmZmZmZmZmUpOworCisJYWN0LT5u YW1lID0gImkuTVggRVBJVCBUaW1lciBUaWNrIiwKKwlhY3QtPmZsYWdzID0gSVJRRl9USU1FUiB8 IElSUUZfSVJRUE9MTDsKKwlhY3QtPmhhbmRsZXIgPSBlcGl0X3RpbWVyX2ludGVycnVwdDsKKwlh Y3QtPmRldl9pZCA9IGNlZDsKKworCS8qIE1ha2UgaXJxcyBoYXBwZW4gKi8KKwlyZXR1cm4gc2V0 dXBfaXJxKGVwaXR0bS0+aXJxLCBhY3QpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBlcGl0X3Rp bWVyX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZXBpdF90aW1lciAq ZXBpdHRtOworCXN0cnVjdCBjbGsgKmNsa19pcGc7CisJaW50IHJldDsKKworCWVwaXR0bSA9IGt6 YWxsb2Moc2l6ZW9mKCplcGl0dG0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVwaXR0bSkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwllcGl0dG0tPmJhc2UgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFl cGl0dG0tPmJhc2UpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dF9rZnJlZTsKKwl9CisK KwllcGl0dG0tPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwlpZiAoIWVwaXR0 bS0+aXJxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJ Y2xrX2lwZyA9IG9mX2Nsa19nZXRfYnlfbmFtZShucCwgImlwZyIpOworCWlmIChJU19FUlIoY2xr X2lwZykpIHsKKwkJcHJfZXJyKCJpLk1YIEVQSVQ6IHVuYWJsZSB0byBnZXQgY2xrX2lwZ1xuIik7 CisJCXJldCA9IFBUUl9FUlIoY2xrX2lwZyk7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJ cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsa19pcGcpOworCWlmIChyZXQpIHsKKwkJcHJfZXJy KCJpLk1YIEVQSVQ6IHVuYWJsZSB0byBwcmVwYXJlK2VuYWJsZSBjbGtfaXBnXG4iKTsKKwkJZ290 byBvdXRfY2xrX2lwZ19kaXNhYmxlOworCX0KKworCWVwaXR0bS0+Y2xrX3BlciA9IG9mX2Nsa19n ZXRfYnlfbmFtZShucCwgInBlciIpOworCWlmIChJU19FUlIoZXBpdHRtLT5jbGtfcGVyKSkgewor CQlwcl9lcnIoImkuTVggRVBJVDogdW5hYmxlIHRvIGdldCBjbGtfcGVyXG4iKTsKKwkJcmV0ID0g UFRSX0VSUihlcGl0dG0tPmNsa19wZXIpOworCQlnb3RvIG91dF9jbGtfaXBnX2Rpc2FibGU7CisJ fQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGVwaXR0bS0+Y2xrX3Blcik7CisJaWYgKHJl dCkgeworCQlwcl9lcnIoImkuTVggRVBJVDogdW5hYmxlIHRvIHByZXBhcmUrZW5hYmxlIGNsa19w ZXJcbiIpOworCQlnb3RvIG91dF9jbGtfaXBnX2Rpc2FibGU7CisJfQorCisJLyogSW5pdGlhbGlz ZSB0byBhIGtub3duIHN0YXRlIChhbGwgdGltZXJzIG9mZiwgYW5kIHRpbWluZyByZXNldCkgKi8K Kwl3cml0ZWxfcmVsYXhlZCgweDAsIGVwaXR0bS0+YmFzZSArIEVQSVRDUik7CisJd3JpdGVsX3Jl bGF4ZWQoMHhmZmZmZmZmZiwgZXBpdHRtLT5iYXNlICsgRVBJVExSKTsKKwl3cml0ZWxfcmVsYXhl ZChFUElUQ1JfRU4gfCBFUElUQ1JfQ0xLU1JDX1JFRl9ISUdIIHwgRVBJVENSX1dBSVRFTiwKKwkJ ICAgICAgIGVwaXR0bS0+YmFzZSArIEVQSVRDUik7CisKKwlyZXQgPSBlcGl0X2Nsb2Nrc291cmNl X2luaXQoZXBpdHRtKTsKKwlpZihyZXQpIHsKKwkJcHJfZXJyKCJpLk1YIEVQSVQ6IGZhaWxlZCB0 byBpbml0IGNsb2Nrc291cmNlXG4iKTsKKwkJZ290byBvdXRfY2xrX3Blcl9kaXNhYmxlOworCX0K KworCXJldCA9IGVwaXRfY2xvY2tldmVudF9pbml0KGVwaXR0bSk7CisJaWYocmV0KSB7CisJCXBy X2VycigiaS5NWCBFUElUOiBmYWlsZWQgdG8gaW5pdCBjbG9ja2V2ZW50XG4iKTsKKwkJZ290byBv dXRfY2xrX3Blcl9kaXNhYmxlOworCX0KKworCXJldHVybiAwOworCitvdXRfY2xrX3Blcl9kaXNh YmxlOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShlcGl0dG0tPmNsa19wZXIpOworb3V0X2Nsa19p cGdfZGlzYWJsZToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrX2lwZyk7CitvdXRfaW91bm1h cDoKKwlpb3VubWFwKGVwaXR0bS0+YmFzZSk7CitvdXRfa2ZyZWU6CisJa2ZyZWUoZXBpdHRtKTsK KworCXJldHVybiByZXQ7Cit9CitUSU1FUl9PRl9ERUNMQVJFKG14NnFfdGltZXIsICJmc2wsaW14 NnEtZXBpdCIsIGVwaXRfdGltZXJfaW5pdCk7Ci0tIAoyLjE3LjAKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==