From mboxrd@z Thu Jan 1 00:00:00 1970 From: megous@megous.com Subject: [PATCH 03/14] thermal: Add support for sun8i THS on Allwinner H3 Date: Thu, 23 Jun 2016 21:20:53 +0200 Message-ID: <20160623192104.18720-4-megous@megous.com> References: <20160623192104.18720-1-megous@megous.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160623192104.18720-1-megous@megous.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: dev@linux-sunxi.org Cc: Ondrej Jirman , "open list:THERMAL" , open list , Eduardo Valentin , Chen-Yu Tsai , Zhang Rui , Maxime Ripard , linux-arm-kernel@lists.infradead.org List-Id: linux-pm@vger.kernel.org RnJvbTogT25kcmVqIEppcm1hbiA8bWVnb3VzQG1lZ291cy5jb20+CgpUaGlzIHBhdGNoIGFkZHMg c3VwcG9ydCBmb3IgdGhlIHN1bjhpIHRoZXJtYWwgc2Vuc29yIG9uCkFsbHdpbm5lciBIMyBTb0Mu CgpTaWduZWQtb2ZmLWJ5OiBPbmTFmWVqIEppcm1hbiA8bWVnb3VzQG1lZ291cy5jb20+Ci0tLQog ZHJpdmVycy90aGVybWFsL0tjb25maWcgICAgIHwgICA3ICsrCiBkcml2ZXJzL3RoZXJtYWwvTWFr ZWZpbGUgICAgfCAgIDEgKwogZHJpdmVycy90aGVybWFsL3N1bjhpX3Rocy5jIHwgMjk1ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQs IDMwMyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90aGVybWFsL3N1 bjhpX3Rocy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL0tjb25maWcgYi9kcml2ZXJz L3RoZXJtYWwvS2NvbmZpZwppbmRleCAyZDcwMmNhLi4zZGUwZjhkIDEwMDY0NAotLS0gYS9kcml2 ZXJzL3RoZXJtYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZwpAQCAtMzUx LDYgKzM1MSwxMyBAQCBjb25maWcgTVRLX1RIRVJNQUwKIAkgIEVuYWJsZSB0aGlzIG9wdGlvbiBp ZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIHRoZXJtYWwgbWFuYWdlbWVudAogCSAgY29u dHJvbGxlciBwcmVzZW50IGluIE1lZGlhdGVrIFNvQ3MKIAorY29uZmlnIFNVTjhJX1RIUworCXRy aXN0YXRlICJzdW44aSBUSFMgZHJpdmVyIgorCWRlcGVuZHMgb24gTUFDSF9TVU44SQorCWRlcGVu ZHMgb24gT0YKKwloZWxwCisJICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IHRoZXJtYWwgcmVwb3J0 aW5nIG9uIHNvbWUgbmV3ZXIgQWxsd2lubmVyIFNvQ3MuCisKIG1lbnUgIlRleGFzIEluc3RydW1l bnRzIHRoZXJtYWwgZHJpdmVycyIKIGRlcGVuZHMgb24gQVJDSF9IQVNfQkFOREdBUCB8fCBDT01Q SUxFX1RFU1QKIGRlcGVuZHMgb24gSEFTX0lPTUVNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJt YWwvTWFrZWZpbGUgYi9kcml2ZXJzL3RoZXJtYWwvTWFrZWZpbGUKaW5kZXggMTBiMDdjMS4uNzI2 MWVlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMv dGhlcm1hbC9NYWtlZmlsZQpAQCAtNTEsMyArNTEsNCBAQCBvYmotJChDT05GSUdfVEVHUkFfU09D VEhFUk0pCSs9IHRlZ3JhLwogb2JqLSQoQ09ORklHX0hJU0lfVEhFUk1BTCkgICAgICs9IGhpc2lf dGhlcm1hbC5vCiBvYmotJChDT05GSUdfTVRLX1RIRVJNQUwpCSs9IG10a190aGVybWFsLm8KIG9i ai0kKENPTkZJR19HRU5FUklDX0FEQ19USEVSTUFMKQkrPSB0aGVybWFsLWdlbmVyaWMtYWRjLm8K K29iai0kKENPTkZJR19TVU44SV9USFMpCQkrPSBzdW44aV90aHMubwpkaWZmIC0tZ2l0IGEvZHJp dmVycy90aGVybWFsL3N1bjhpX3Rocy5jIGIvZHJpdmVycy90aGVybWFsL3N1bjhpX3Rocy5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOGNjYzMKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL3RoZXJtYWwvc3VuOGlfdGhzLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisg KiBzdW44aSBUSFMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE9uZMWZZWogSmly bWFuCisgKiBCYXNlZCBvbiB0aGUgd29yayBvZiBKb3NlZiBHYWpkdXNlayA8YXR4QGF0eC5uYW1l PgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBk aXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbnZtZW0tY29uc3VtZXIuaD4KKyNpbmNsdWRl IDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K KyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNs dWRlIDxsaW51eC90aGVybWFsLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisKKyNkZWZp bmUgVEhTX0gzX0NUUkwwCQkweDAwCisjZGVmaW5lIFRIU19IM19DVFJMMgkJMHg0MAorI2RlZmlu ZSBUSFNfSDNfSU5UX0NUUkwJCTB4NDQKKyNkZWZpbmUgVEhTX0gzX1NUQVQJCTB4NDgKKyNkZWZp bmUgVEhTX0gzX0ZJTFRFUgkJMHg3MAorI2RlZmluZSBUSFNfSDNfQ0RBVEEJCTB4NzQKKyNkZWZp bmUgVEhTX0gzX0RBVEEJCTB4ODAKKworI2RlZmluZSBUSFNfSDNfQ1RSTDBfU0VOU09SX0FDUTBf T0ZGUyAgIDAKKyNkZWZpbmUgVEhTX0gzX0NUUkwwX1NFTlNPUl9BQ1EwKHgpIFwKKyAgICAgICAg KCh4KSA8PCBUSFNfSDNfQ1RSTDBfU0VOU09SX0FDUTBfT0ZGUykKKyNkZWZpbmUgVEhTX0gzX0NU UkwyX1NFTlNFX0VOX09GRlMgICAgICAwCisjZGVmaW5lIFRIU19IM19DVFJMMl9TRU5TRV9FTiBc CisgICAgICAgIEJJVChUSFNfSDNfQ1RSTDJfU0VOU0VfRU5fT0ZGUykKKyNkZWZpbmUgVEhTX0gz X0NUUkwyX1NFTlNPUl9BQ1ExX09GRlMgICAxNgorI2RlZmluZSBUSFNfSDNfQ1RSTDJfU0VOU09S X0FDUTEoeCkgXAorICAgICAgICAoKHgpIDw8IFRIU19IM19DVFJMMl9TRU5TT1JfQUNRMV9PRkZT KQorCisjZGVmaW5lIFRIU19IM19JTlRfQ1RSTF9EQVRBX0lSUV9FTl9PRkZTICAgICAgICA4Cisj ZGVmaW5lIFRIU19IM19JTlRfQ1RSTF9EQVRBX0lSUV9FTiBcCisJCUJJVChUSFNfSDNfSU5UX0NU UkxfREFUQV9JUlFfRU5fT0ZGUykKKyNkZWZpbmUgVEhTX0gzX0lOVF9DVFJMX1RIRVJNQUxfUEVS X09GRlMgICAgICAgIDEyCisjZGVmaW5lIFRIU19IM19JTlRfQ1RSTF9USEVSTUFMX1BFUih4KSBc CisJCSgoeCkgPDwgVEhTX0gzX0lOVF9DVFJMX1RIRVJNQUxfUEVSX09GRlMpCisKKyNkZWZpbmUg VEhTX0gzX1NUQVRfREFUQV9JUlFfU1RTX09GRlMgICA4CisjZGVmaW5lIFRIU19IM19TVEFUX0RB VEFfSVJRX1NUUyBcCisgICAgICAgIEJJVChUSFNfSDNfU1RBVF9EQVRBX0lSUV9TVFNfT0ZGUykK KworI2RlZmluZSBUSFNfSDNfRklMVEVSX1RZUEVfT0ZGUyAwCisjZGVmaW5lIFRIU19IM19GSUxU RVJfVFlQRSh4KSBcCisgICAgICAgICgoeCkgPDwgVEhTX0gzX0ZJTFRFUl9UWVBFX09GRlMpCisj ZGVmaW5lIFRIU19IM19GSUxURVJfRU5fT0ZGUyAgIDIKKyNkZWZpbmUgVEhTX0gzX0ZJTFRFUl9F TiBcCisgICAgICAgIEJJVChUSFNfSDNfRklMVEVSX0VOX09GRlMpCisKKyNkZWZpbmUgVEhTX0gz X0NMS19JTiA0MDAwMDAwMCAgLyogSHogKi8KKyNkZWZpbmUgVEhTX0gzX0RBVEFfUEVSSU9EIDMz MCAgLyogbXMgKi8KKworI2RlZmluZSBUSFNfSDNfRklMVEVSX1RZUEVfVkFMVUUJCTIgIC8qIGF2 ZXJhZ2Ugb3ZlciAyXihuKzEpIHNhbXBsZXMgKi8KKyNkZWZpbmUgVEhTX0gzX0ZJTFRFUl9ESVYg CQkJKDEgPDwgKFRIU19IM19GSUxURVJfVFlQRV9WQUxVRSArIDEpKQorI2RlZmluZSBUSFNfSDNf SU5UX0NUUkxfVEhFUk1BTF9QRVJfVkFMVUUgXAorCShUSFNfSDNfREFUQV9QRVJJT0QgKiAoVEhT X0gzX0NMS19JTiAvIDEwMDApIC8gVEhTX0gzX0ZJTFRFUl9ESVYgLyA0MDk2IC0gMSkKKyNkZWZp bmUgVEhTX0gzX0NUUkwwX1NFTlNPUl9BQ1EwX1ZBTFVFCQkweDNmIC8qIDE2dXMgKi8KKyNkZWZp bmUgVEhTX0gzX0NUUkwyX1NFTlNPUl9BQ1ExX1ZBTFVFCQkweDNmCisKK3N0cnVjdCBzdW44aV90 aHNfZGF0YSB7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJlc2V0OworCXN0cnVjdCBjbGsgKmNs azsKKwlzdHJ1Y3QgY2xrICpidXNjbGs7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBu dm1lbV9jZWxsICpjYWxjZWxsOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3Ry dWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6ZDsKKwl1MzIgdGVtcDsKK307CisKK3N0YXRpYyBp bnQgc3VuOGlfdGhzX2dldF90ZW1wKHZvaWQgKl9kYXRhLCBpbnQgKm91dCkKK3sKKwlzdHJ1Y3Qg c3VuOGlfdGhzX2RhdGEgKmRhdGEgPSBfZGF0YTsKKworCWlmIChkYXRhLT50ZW1wID09IDApCisJ CXJldHVybiAtRUlOVkFMOworCisJLyogRm9ybXVsYSBhbmQgcGFyYW1ldGVycyBmcm9tIHRoZSBB bGx3aW5uZXIgMy40IGtlcm5lbCAqLworCSpvdXQgPSAyMTcwMDAgLSAoZGF0YS0+dGVtcCAqIDEw MDAwMDApIC8gODI1MzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IHN1bjhp X3Roc19pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBzdW44aV90 aHNfZGF0YSAqZGF0YSA9IF9kYXRhOworCisJd3JpdGVsKFRIU19IM19TVEFUX0RBVEFfSVJRX1NU UywgZGF0YS0+cmVncyArIFRIU19IM19TVEFUKTsKKworCWRhdGEtPnRlbXAgPSByZWFkbChkYXRh LT5yZWdzICsgVEhTX0gzX0RBVEEpOworCWlmIChkYXRhLT50ZW1wKQorCQl0aGVybWFsX3pvbmVf ZGV2aWNlX3VwZGF0ZShkYXRhLT50emQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitz dGF0aWMgaW50IHN1bjhpX3Roc19oM19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs CisJCQkgICAgIHN0cnVjdCBzdW44aV90aHNfZGF0YSAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXNp emVfdCBjYWxsZW47CisJczMyICpjYWxkYXRhOworCisJZGF0YS0+YnVzY2xrID0gZGV2bV9jbGtf Z2V0KCZwZGV2LT5kZXYsICJhaGIiKTsKKwlpZiAoSVNfRVJSKGRhdGEtPmJ1c2NsaykpIHsKKwkJ cmV0ID0gUFRSX0VSUihkYXRhLT5idXNjbGspOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWls ZWQgdG8gZ2V0IGFoYiBjbGs6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRh dGEtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAidGhzIik7CisJaWYgKElTX0VSUihk YXRhLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZGF0YS0+Y2xrKTsKKwkJZGV2X2VycigmcGRl di0+ZGV2LCAiZmFpbGVkIHRvIGdldCB0aHMgY2xrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlkYXRhLT5yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoJnBkZXYtPmRl diwgImFoYiIpOworCWlmIChJU19FUlIoZGF0YS0+cmVzZXQpKSB7CisJCXJldCA9IFBUUl9FUlIo ZGF0YS0+cmVzZXQpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlc2V0 OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZGF0YS0+Y2FsY2VsbCkg eworCQljYWxkYXRhID0gbnZtZW1fY2VsbF9yZWFkKGRhdGEtPmNhbGNlbGwsICZjYWxsZW4pOwor CQlpZiAoSVNfRVJSKGNhbGRhdGEpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2FsZGF0YSk7CisKKwkJ d3JpdGVsKGJlMzJfdG9fY3B1KCpjYWxkYXRhKSwgZGF0YS0+cmVncyArIFRIU19IM19DREFUQSk7 CisJCWtmcmVlKGNhbGRhdGEpOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkYXRh LT5idXNjbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRv IGVuYWJsZSBidXMgY2xrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQg PSBjbGtfcHJlcGFyZV9lbmFibGUoZGF0YS0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo JnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgdGhzIGNsazogJWRcbiIsIHJldCk7CisJCWdv dG8gZXJyX2Rpc2FibGVfYnVzOworCX0KKworCXJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQo ZGF0YS0+cmVzZXQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVzZXQg ZGVhc3NlcnQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZGlzYWJsZV90aHM7CisJ fQorCisJcmV0ID0gY2xrX3NldF9yYXRlKGRhdGEtPmNsaywgVEhTX0gzX0NMS19JTik7CisJaWYg KHJldCkKKwkJZ290byBlcnJfZGlzYWJsZV90aHM7CisKKwl3cml0ZWwoVEhTX0gzX0NUUkwwX1NF TlNPUl9BQ1EwKFRIU19IM19DVFJMMF9TRU5TT1JfQUNRMF9WQUxVRSksCisJCWRhdGEtPnJlZ3Mg KyBUSFNfSDNfQ1RSTDApOworCXdyaXRlbChUSFNfSDNfSU5UX0NUUkxfVEhFUk1BTF9QRVIoVEhT X0gzX0lOVF9DVFJMX1RIRVJNQUxfUEVSX1ZBTFVFKSB8CisJCVRIU19IM19JTlRfQ1RSTF9EQVRB X0lSUV9FTiwKKwkJZGF0YS0+cmVncyArIFRIU19IM19JTlRfQ1RSTCk7CisJd3JpdGVsKFRIU19I M19GSUxURVJfRU4gfCBUSFNfSDNfRklMVEVSX1RZUEUoVEhTX0gzX0ZJTFRFUl9UWVBFX1ZBTFVF KSwKKwkJZGF0YS0+cmVncyArIFRIU19IM19GSUxURVIpOworCXdyaXRlbChUSFNfSDNfQ1RSTDJf U0VOU09SX0FDUTEoVEhTX0gzX0NUUkwyX1NFTlNPUl9BQ1ExX1ZBTFVFKSB8CisJCVRIU19IM19D VFJMMl9TRU5TRV9FTiwKKwkJZGF0YS0+cmVncyArIFRIU19IM19DVFJMMik7CisKKwlyZXR1cm4g MDsKKworZXJyX2Rpc2FibGVfdGhzOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT5jbGsp OworZXJyX2Rpc2FibGVfYnVzOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT5idXNjbGsp OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3VuOGlfdGhzX2gzX2RlaW5pdChz dHJ1Y3Qgc3VuOGlfdGhzX2RhdGEgKmRhdGEpCit7CisJcmVzZXRfY29udHJvbF9hc3NlcnQoZGF0 YS0+cmVzZXQpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT5jbGspOworCWNsa19kaXNh YmxlX3VucHJlcGFyZShkYXRhLT5idXNjbGspOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRo ZXJtYWxfem9uZV9vZl9kZXZpY2Vfb3BzIHN1bjhpX3Roc190aGVybWFsX29wcyA9IHsKKwkuZ2V0 X3RlbXAgPSBzdW44aV90aHNfZ2V0X3RlbXAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBzdW44aV90aHNfaWRfdGFibGVbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0g ImFsbHdpbm5lcixzdW44aS1oMy10aHMiLAorCX0sCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsK K01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN1bjhpX3Roc19pZF90YWJsZSk7CisKK3N0YXRpYyBp bnQgc3VuOGlfdGhzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IHN1bjhpX3Roc19kYXRhICpkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBy ZXQ7CisJaW50IGlycTsKKworCWRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9m KCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWRhdGEtPnBkZXYgPSBwZGV2OworCisJZGF0YS0+Y2FsY2VsbCA9IGRldm1fbnZtZW1fY2VsbF9n ZXQoJnBkZXYtPmRldiwgImNhbGlicmF0aW9uIik7CisJaWYgKElTX0VSUihkYXRhLT5jYWxjZWxs KSkgeworCQlpZiAoUFRSX0VSUihkYXRhLT5jYWxjZWxsKSA9PSAtRVBST0JFX0RFRkVSKQorCQkJ cmV0dXJuIFBUUl9FUlIoZGF0YS0+Y2FsY2VsbCk7CisKKwkJZGF0YS0+Y2FsY2VsbCA9IE5VTEw7 IC8qIE5vIGNhbGlicmF0aW9uIGRhdGEgKi8KKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRhdGEtPnJlZ3MgPSBkZXZtX2lvcmVt YXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGRhdGEtPnJlZ3MpKSB7 CisJCXJldCA9IFBUUl9FUlIoZGF0YS0+cmVncyk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZh aWxlZCB0byBpb3JlbWFwIFRIUyByZWdpc3RlcnM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0 OworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDAp IHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJUlE6ICVkXG4iLCBpcnEp OworCQlyZXR1cm4gaXJxOworCX0KKworCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEo JnBkZXYtPmRldiwgaXJxLCBOVUxMLAorCQkJCQlzdW44aV90aHNfaXJxX3RocmVhZCwgSVJRRl9P TkVTSE9ULAorCQkJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwgZGF0YSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IHN1bjhpX3Roc19oM19pbml0KHBkZXYsIGRhdGEpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkYXRhLT50emQgPSB0aGVybWFsX3pvbmVfb2Zfc2Vu c29yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIDAsIGRhdGEsCisJCQkJCQkgICAgJnN1bjhpX3Roc190 aGVybWFsX29wcyk7CisJaWYgKElTX0VSUihkYXRhLT50emQpKSB7CisJCXJldCA9IFBUUl9FUlIo ZGF0YS0+dHpkKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHRo ZXJtYWwgem9uZTogJWRcbiIsCisJCQkJcmV0KTsKKwkJZ290byBlcnJfZGVpbml0OworCX0KKwor CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOworCXJldHVybiAwOworCitlcnJfZGVp bml0OgorCXN1bjhpX3Roc19oM19kZWluaXQoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBzdW44aV90aHNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJc3RydWN0IHN1bjhpX3Roc19kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7CisKKwl0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3VucmVnaXN0ZXIoJnBkZXYtPmRldiwgZGF0 YS0+dHpkKTsKKwlzdW44aV90aHNfaDNfZGVpbml0KGRhdGEpOworCXJldHVybiAwOworfQorCitz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdW44aV90aHNfZHJpdmVyID0geworCS5wcm9i ZSA9IHN1bjhpX3Roc19wcm9iZSwKKwkucmVtb3ZlID0gc3VuOGlfdGhzX3JlbW92ZSwKKwkuZHJp dmVyID0geworCQkubmFtZSA9ICJzdW44aV90aHMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBzdW44 aV90aHNfaWRfdGFibGUsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuOGlf dGhzX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIk9uZMWZZWogSmlybWFuIDxtZWdvdXNAbWVn b3VzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigic3VuOGkgVEhTIGRyaXZlciIpOworTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMi45LjAKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==