From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B7193C43461 for ; Wed, 9 Sep 2020 09:51:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5356221D7A for ; Wed, 9 Sep 2020 09:51:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="fBtR6si6" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728363AbgIIJvz (ORCPT ); Wed, 9 Sep 2020 05:51:55 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:49970 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1729822AbgIIJvu (ORCPT ); Wed, 9 Sep 2020 05:51:50 -0400 X-UUID: 3061000facd64ec6aae8e827c41635d6-20200909 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=DzkKP8nsNO/LNtJ6b4mDmm6tYs8xlamU7IfwMjvYRDE=; b=fBtR6si6HqZC76AzI/Hc7S5qoI2v6DitkrO8YfDuEjludZGj3Rd251Vr3kjTvqSXItcPqcN9nvEC5F1NQYncLZCsVLSJSy5T8bTRh5HpXOttFqTfeXIA7UvLl/tmhYa3j6LcT+jMIrczHgcNZHtEvTA6+E17MXpiutpFin1D8Kg=; X-UUID: 3061000facd64ec6aae8e827c41635d6-20200909 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 697556037; Wed, 09 Sep 2020 17:51:41 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs01n1.mediatek.inc (172.21.101.68) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 9 Sep 2020 17:51:32 +0800 Received: from mtkswgap22.mediatek.inc (172.21.77.33) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 9 Sep 2020 17:51:33 +0800 From: Hector Yuan To: , , , , "Rafael J. Wysocki" , "Viresh Kumar" , Rob Herring CC: , , Subject: [PATCH v5 1/2] cpufreq: mediatek-hw: Add support for Mediatek cpufreq HW driver Date: Wed, 9 Sep 2020 17:51:25 +0800 Message-ID: <1599645086-10169-2-git-send-email-hector.yuan@mediatek.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1599645086-10169-1-git-send-email-hector.yuan@mediatek.com> References: <1599645086-10169-1-git-send-email-hector.yuan@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org RnJvbTogIkhlY3Rvci5ZdWFuIiA8aGVjdG9yLnl1YW5AbWVkaWF0ZWsuY29tPg0KDQpBZGQgTVQ2 Nzc5IGNwdWZyZXEgSFcgc3VwcG9ydC4NCg0KU2lnbmVkLW9mZi1ieTogSGVjdG9yLll1YW4gPGhl Y3Rvci55dWFuQG1lZGlhdGVrLmNvbT4NCi0tLQ0KIGRyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLmFy bSAgICAgICAgICAgfCAgIDEyICsrDQogZHJpdmVycy9jcHVmcmVxL01ha2VmaWxlICAgICAgICAg ICAgICB8ICAgIDEgKw0KIGRyaXZlcnMvY3B1ZnJlcS9tZWRpYXRlay1jcHVmcmVxLWh3LmMgfCAg Mjg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDMgZmlsZXMgY2hhbmdlZCwg MzAyIGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jcHVmcmVxL21l ZGlhdGVrLWNwdWZyZXEtaHcuYw0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL0tjb25m aWcuYXJtIGIvZHJpdmVycy9jcHVmcmVxL0tjb25maWcuYXJtDQppbmRleCBjNmNiZmM4Li44ZTU4 YzEyIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9jcHVmcmVxL0tjb25maWcuYXJtDQorKysgYi9kcml2 ZXJzL2NwdWZyZXEvS2NvbmZpZy5hcm0NCkBAIC0xMjEsNiArMTIxLDE4IEBAIGNvbmZpZyBBUk1f TUVESUFURUtfQ1BVRlJFUQ0KIAloZWxwDQogCSAgVGhpcyBhZGRzIHRoZSBDUFVGcmVxIGRyaXZl ciBzdXBwb3J0IGZvciBNZWRpYVRlayBTb0NzLg0KIA0KK2NvbmZpZyBBUk1fTUVESUFURUtfQ1BV RlJFUV9IVw0KKwl0cmlzdGF0ZSAiTWVkaWFUZWsgQ1BVRnJlcSBIVyBkcml2ZXIiDQorCWRlcGVu ZHMgb24gQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RFU1QNCisJZGVmYXVsdCBtDQorCWhlbHAN CisJICBTdXBwb3J0IGZvciB0aGUgQ1BVRnJlcSBIVyBkcml2ZXIuDQorCSAgU29tZSBNZWRpYVRl ayBjaGlwc2V0cyBoYXZlIGEgSFcgZW5naW5lIHRvIG9mZmxvYWQgdGhlIHN0ZXBzDQorCSAgbmVj ZXNzYXJ5IGZvciBjaGFuZ2luZyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBDUFVzLiBGaXJtd2FyZSBs b2FkZWQNCisJICBpbiB0aGlzIGVuZ2luZSBleHBvc2VzIGEgcHJvZ3JhbW1pbmcgaW50ZXJmYWNl IHRvIHRoZSBPUy4NCisJICBUaGUgZHJpdmVyIGltcGxlbWVudHMgdGhlIGNwdWZyZXEgaW50ZXJm YWNlIGZvciB0aGlzIEhXIGVuZ2luZS4NCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0 IENQVUZyZXEgSFcuDQorDQogY29uZmlnIEFSTV9PTUFQMlBMVVNfQ1BVRlJFUQ0KIAlib29sICJU SSBPTUFQMisiDQogCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMNCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2NwdWZyZXEvTWFrZWZpbGUgYi9kcml2ZXJzL2NwdWZyZXEvTWFrZWZpbGUNCmluZGV4IGY2 NjcwYzQuLmRjMWYzNzEgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2NwdWZyZXEvTWFrZWZpbGUNCisr KyBiL2RyaXZlcnMvY3B1ZnJlcS9NYWtlZmlsZQ0KQEAgLTU3LDYgKzU3LDcgQEAgb2JqLSQoQ09O RklHX0FSTV9JTVg2UV9DUFVGUkVRKQkJKz0gaW14NnEtY3B1ZnJlcS5vDQogb2JqLSQoQ09ORklH X0FSTV9JTVhfQ1BVRlJFUV9EVCkJKz0gaW14LWNwdWZyZXEtZHQubw0KIG9iai0kKENPTkZJR19B Uk1fS0lSS1dPT0RfQ1BVRlJFUSkJKz0ga2lya3dvb2QtY3B1ZnJlcS5vDQogb2JqLSQoQ09ORklH X0FSTV9NRURJQVRFS19DUFVGUkVRKQkrPSBtZWRpYXRlay1jcHVmcmVxLm8NCitvYmotJChDT05G SUdfQVJNX01FRElBVEVLX0NQVUZSRVFfSFcpCSs9IG1lZGlhdGVrLWNwdWZyZXEtaHcubw0KIG9i ai0kKENPTkZJR19NQUNIX01WRUJVX1Y3KQkJKz0gbXZlYnUtY3B1ZnJlcS5vDQogb2JqLSQoQ09O RklHX0FSTV9PTUFQMlBMVVNfQ1BVRlJFUSkJKz0gb21hcC1jcHVmcmVxLm8NCiBvYmotJChDT05G SUdfQVJNX1BYQTJ4eF9DUFVGUkVRKQkrPSBweGEyeHgtY3B1ZnJlcS5vDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9jcHVmcmVxL21lZGlhdGVrLWNwdWZyZXEtaHcuYyBiL2RyaXZlcnMvY3B1ZnJlcS9t ZWRpYXRlay1jcHVmcmVxLWh3LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw Li5hZTRiMzhiDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL2NwdWZyZXEvbWVkaWF0ZWst Y3B1ZnJlcS1ody5jDQpAQCAtMCwwICsxLDI4OSBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wDQorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5jLg0K KyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPg0KKyNpbmNsdWRlIDxsaW51eC9j cHVmcmVxLmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZl9h ZGRyZXNzLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+DQorI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4NCisNCisjZGVmaW5lIExVVF9NQVhfRU5UUklFUwkJCTMyVQ0KKyNkZWZpbmUg TFVUX0ZSRVEJCQlHRU5NQVNLKDExLCAwKQ0KKyNkZWZpbmUgTFVUX1JPV19TSVpFCQkJMHg0DQor DQorZW51bSB7DQorCVJFR19MVVRfVEFCTEUsDQorCVJFR19FTkFCTEUsDQorCVJFR19QRVJGX1NU QVRFLA0KKw0KKwlSRUdfQVJSQVlfU0laRSwNCit9Ow0KKw0KK3N0cnVjdCBjcHVmcmVxX210ayB7 DQorCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGU7DQorCXZvaWQgX19pb21l bSAqcmVnX2Jhc2VzW1JFR19BUlJBWV9TSVpFXTsNCisJY3B1bWFza190IHJlbGF0ZWRfY3B1czsN Cit9Ow0KKw0KK3N0YXRpYyBjb25zdCB1MTYgY3B1ZnJlcV9tdGtfb2Zmc2V0c1tSRUdfQVJSQVlf U0laRV0gPSB7DQorCVtSRUdfTFVUX1RBQkxFXQkJPSAweDAsDQorCVtSRUdfRU5BQkxFXQkJPSAw eDg0LA0KKwlbUkVHX1BFUkZfU1RBVEVdCT0gMHg4OCwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3Qg Y3B1ZnJlcV9tdGsgKm10a19mcmVxX2RvbWFpbl9tYXBbTlJfQ1BVU107DQorDQorc3RhdGljIGlu dCBtdGtfY3B1ZnJlcV9od190YXJnZXRfaW5kZXgoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xp Y3ksDQorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpDQorew0KKwlzdHJ1Y3QgY3B1ZnJl cV9tdGsgKmMgPSBwb2xpY3ktPmRyaXZlcl9kYXRhOw0KKw0KKwl3cml0ZWxfcmVsYXhlZChpbmRl eCwgYy0+cmVnX2Jhc2VzW1JFR19QRVJGX1NUQVRFXSk7DQorCWFyY2hfc2V0X2ZyZXFfc2NhbGUo cG9saWN5LT5yZWxhdGVkX2NwdXMsDQorCQkJICAgIHBvbGljeS0+ZnJlcV90YWJsZVtpbmRleF0u ZnJlcXVlbmN5LA0KKwkJCSAgICBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEpOw0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIHVuc2lnbmVkIGludCBtdGtfY3B1ZnJlcV9od19nZXQodW5z aWduZWQgaW50IGNwdSkNCit7DQorCXN0cnVjdCBjcHVmcmVxX210ayAqYzsNCisJc3RydWN0IGNw dWZyZXFfcG9saWN5ICpwb2xpY3k7DQorCXVuc2lnbmVkIGludCBpbmRleDsNCisNCisJcG9saWN5 ID0gY3B1ZnJlcV9jcHVfZ2V0X3JhdyhjcHUpOw0KKwlpZiAoIXBvbGljeSkNCisJCXJldHVybiAw Ow0KKw0KKwljID0gcG9saWN5LT5kcml2ZXJfZGF0YTsNCisNCisJaW5kZXggPSByZWFkbF9yZWxh eGVkKGMtPnJlZ19iYXNlc1tSRUdfUEVSRl9TVEFURV0pOw0KKwlpbmRleCA9IG1pbihpbmRleCwg TFVUX01BWF9FTlRSSUVTIC0gMSk7DQorDQorCXJldHVybiBwb2xpY3ktPmZyZXFfdGFibGVbaW5k ZXhdLmZyZXF1ZW5jeTsNCit9DQorDQorc3RhdGljIGludCBtdGtfY3B1ZnJlcV9od19jcHVfaW5p dChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkNCit7DQorCXN0cnVjdCBjcHVmcmVxX210 ayAqYzsNCisJc3RydWN0IGRldmljZSAqY3B1X2RldjsNCisNCisJY3B1X2RldiA9IGdldF9jcHVf ZGV2aWNlKHBvbGljeS0+Y3B1KTsNCisJaWYgKCFjcHVfZGV2KSB7DQorCQlwcl9lcnIoIiVzOiBm YWlsZWQgdG8gZ2V0IGNwdSVkIGRldmljZVxuIiwgX19mdW5jX18sDQorCQkgICAgICAgcG9saWN5 LT5jcHUpOw0KKwkJcmV0dXJuIC1FTk9ERVY7DQorCX0NCisNCisJYyA9IG10a19mcmVxX2RvbWFp bl9tYXBbcG9saWN5LT5jcHVdOw0KKwlpZiAoIWMpIHsNCisJCXByX2VycigiTm8gc2NhbGluZyBz dXBwb3J0IGZvciBDUFUlZFxuIiwgcG9saWN5LT5jcHUpOw0KKwkJcmV0dXJuIC1FTk9ERVY7DQor CX0NCisNCisJY3B1bWFza19jb3B5KHBvbGljeS0+Y3B1cywgJmMtPnJlbGF0ZWRfY3B1cyk7DQor DQorCXBvbGljeS0+ZnJlcV90YWJsZSA9IGMtPnRhYmxlOw0KKwlwb2xpY3ktPmRyaXZlcl9kYXRh ID0gYzsNCisNCisJLyogSFcgc2hvdWxkIGJlIGluIGVuYWJsZWQgc3RhdGUgdG8gcHJvY2VlZCBu b3cgKi8NCisJd3JpdGVsX3JlbGF4ZWQoMHgxLCBjLT5yZWdfYmFzZXNbUkVHX0VOQUJMRV0pOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBjcHVm cmVxX210a19od19kcml2ZXIgPSB7DQorCS5mbGFncwkJPSBDUFVGUkVRX1NUSUNLWSB8IENQVUZS RVFfTkVFRF9JTklUSUFMX0ZSRVFfQ0hFQ0sgfA0KKwkJCSAgQ1BVRlJFUV9IQVZFX0dPVkVSTk9S X1BFUl9QT0xJQ1ksDQorCS52ZXJpZnkJCT0gY3B1ZnJlcV9nZW5lcmljX2ZyZXF1ZW5jeV90YWJs ZV92ZXJpZnksDQorCS50YXJnZXRfaW5kZXgJPSBtdGtfY3B1ZnJlcV9od190YXJnZXRfaW5kZXgs DQorCS5nZXQJCT0gbXRrX2NwdWZyZXFfaHdfZ2V0LA0KKwkuaW5pdAkJPSBtdGtfY3B1ZnJlcV9o d19jcHVfaW5pdCwNCisJLm5hbWUJCT0gIm10ay1jcHVmcmVxLWh3IiwNCisJLmF0dHIJCT0gY3B1 ZnJlcV9nZW5lcmljX2F0dHIsDQorfTsNCisNCitzdGF0aWMgaW50IG10a19jcHVfY3JlYXRlX2Zy ZXFfdGFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwNCisJCQkJICAgICBzdHJ1Y3Qg Y3B1ZnJlcV9tdGsgKmMpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0K Kwl2b2lkIF9faW9tZW0gKmJhc2VfdGFibGU7DQorCXUzMiBkYXRhLCBpLCBmcmVxLCBwcmV2X2Zy ZXEgPSAwOw0KKw0KKwljLT50YWJsZSA9IGRldm1fa2NhbGxvYyhkZXYsIExVVF9NQVhfRU5UUklF UyArIDEsDQorCQkJCXNpemVvZigqYy0+dGFibGUpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFjLT50 YWJsZSkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwliYXNlX3RhYmxlID0gYy0+cmVnX2Jhc2Vz W1JFR19MVVRfVEFCTEVdOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgTFVUX01BWF9FTlRSSUVTOyBp KyspIHsNCisJCWRhdGEgPSByZWFkbF9yZWxheGVkKGJhc2VfdGFibGUgKyAoaSAqIExVVF9ST1df U0laRSkpOw0KKwkJZnJlcSA9IEZJRUxEX0dFVChMVVRfRlJFUSwgZGF0YSkgKiAxMDAwOw0KKw0K KwkJaWYgKGZyZXEgPT0gcHJldl9mcmVxKQ0KKwkJCWJyZWFrOw0KKw0KKwkJYy0+dGFibGVbaV0u ZnJlcXVlbmN5ID0gZnJlcTsNCisNCisJCWRldl9kYmcoZGV2LCAiaW5kZXg9JWQgZnJlcT0lZFxu IiwNCisJCQlpLCBjLT50YWJsZVtpXS5mcmVxdWVuY3kpOw0KKw0KKwkJcHJldl9mcmVxID0gZnJl cTsNCisJfQ0KKw0KKwljLT50YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2dldF9yZWxhdGVkX2NwdXMo aW50IGluZGV4LCBzdHJ1Y3QgY3B1bWFzayAqbSkNCit7DQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAq Y3B1X25wOw0KKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7DQorCWludCBjcHUsIHJldDsN CisNCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgew0KKwkJY3B1X25wID0gb2ZfY3B1X2Rl dmljZV9ub2RlX2dldChjcHUpOw0KKwkJaWYgKCFjcHVfbnApDQorCQkJY29udGludWU7DQorDQor CQlyZXQgPSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyhjcHVfbnAsICJtdGstZnJlcS1kb21h aW4iLA0KKwkJCQkJCSAiI2ZyZXEtZG9tYWluLWNlbGxzIiwgMCwNCisJCQkJCQkgJmFyZ3MpOw0K KwkJb2Zfbm9kZV9wdXQoY3B1X25wKTsNCisJCWlmIChyZXQgPCAwKQ0KKwkJCWNvbnRpbnVlOw0K Kw0KKwkJaWYgKGluZGV4ID09IGFyZ3MuYXJnc1swXSkNCisJCQljcHVtYXNrX3NldF9jcHUoY3B1 LCBtKTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdGtfY3B1X3Jl c291cmNlc19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsDQorCQkJCSAgdW5zaWdu ZWQgaW50IGNwdSwgaW50IGluZGV4LA0KKwkJCQkgIGNvbnN0IHUxNiAqb2Zmc2V0cykNCit7DQor CXN0cnVjdCBjcHVmcmVxX210ayAqYzsNCisJc3RydWN0IHJlc291cmNlICpyZXM7DQorCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQorCWludCByZXQsIGksIGNwdV9yOw0KKwl2b2lk IF9faW9tZW0gKmJhc2U7DQorDQorCWlmIChtdGtfZnJlcV9kb21haW5fbWFwW2NwdV0pDQorCQly ZXR1cm4gMDsNCisNCisJYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqYyksIEdGUF9LRVJO RUwpOw0KKwlpZiAoIWMpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJcmVzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpbmRleCk7DQorCWJhc2UgPSBkZXZt X2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOw0KKwlpZiAoSVNfRVJSKGJhc2UpKQ0KKwkJcmV0 dXJuIFBUUl9FUlIoYmFzZSk7DQorDQorCWZvciAoaSA9IFJFR19MVVRfVEFCTEU7IGkgPCBSRUdf QVJSQVlfU0laRTsgaSsrKQ0KKwkJYy0+cmVnX2Jhc2VzW2ldID0gYmFzZSArIG9mZnNldHNbaV07 DQorDQorCXJldCA9IG10a19nZXRfcmVsYXRlZF9jcHVzKGluZGV4LCAmYy0+cmVsYXRlZF9jcHVz KTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJEb21haW4tJWQgZmFpbGVkIHRvIGdl dCByZWxhdGVkIENQVXNcbiIsIGluZGV4KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0 ID0gbXRrX2NwdV9jcmVhdGVfZnJlcV90YWJsZShwZGV2LCBjKTsNCisJaWYgKHJldCkgew0KKwkJ ZGV2X2VycihkZXYsICJEb21haW4tJWQgZmFpbGVkIHRvIGNyZWF0ZSBPUFBcbiIsIGluZGV4KTsN CisJCXJldHVybiByZXQ7DQorCX0NCisNCisJZm9yX2VhY2hfY3B1KGNwdV9yLCAmYy0+cmVsYXRl ZF9jcHVzKQ0KKwkJbXRrX2ZyZXFfZG9tYWluX21hcFtjcHVfcl0gPSBjOw0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQorc3RhdGljIGludCBtdGtfY3B1ZnJlcV9od19kcml2ZXJfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25w Ow0KKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7DQorCWNvbnN0IHUxNiAqb2Zmc2V0czsN CisJdW5zaWduZWQgaW50IGNwdTsNCisJaW50IHJldDsNCisNCisJb2Zmc2V0cyA9IG9mX2Rldmlj ZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+ZGV2KTsNCisJaWYgKCFvZmZzZXRzKQ0KKwkJcmV0dXJu IC1FSU5WQUw7DQorDQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsNCisJCWNwdV9ucCA9 IG9mX2NwdV9kZXZpY2Vfbm9kZV9nZXQoY3B1KTsNCisJCWlmICghY3B1X25wKSB7DQorCQkJZGV2 X2RiZygmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBjcHUgJWQgZGV2aWNlXG4iLA0KKwkJCQlj cHUpOw0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0KKwkJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZV93 aXRoX2FyZ3MoY3B1X25wLCAibXRrLWZyZXEtZG9tYWluIiwNCisJCQkJCQkgIiNmcmVxLWRvbWFp bi1jZWxscyIsIDAsDQorCQkJCQkJICZhcmdzKTsNCisJCWlmIChyZXQgPCAwKQ0KKwkJCXJldHVy biByZXQ7DQorDQorCQkvKiBHZXQgdGhlIGJhc2VzIG9mIGNwdWZyZXEgZm9yIGRvbWFpbnMgKi8N CisJCXJldCA9IG10a19jcHVfcmVzb3VyY2VzX2luaXQocGRldiwgY3B1LCBhcmdzLmFyZ3NbMF0s IG9mZnNldHMpOw0KKwkJaWYgKHJldCkgew0KKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNQVUZy ZXEgcmVzb3VyY2UgaW5pdCBmYWlsZWRcbiIpOw0KKwkJCXJldHVybiByZXQ7DQorCQl9DQorCX0N CisNCisJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmNwdWZyZXFfbXRrX2h3X2RyaXZl cik7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNQVUZyZXEgSFcgZHJp dmVyIGZhaWxlZCB0byByZWdpc3RlclxuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJl dHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG10a19jcHVmcmVxX2h3X2RyaXZlcl9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXJldHVybiBjcHVmcmVxX3VucmVn aXN0ZXJfZHJpdmVyKCZjcHVmcmVxX210a19od19kcml2ZXIpOw0KK30NCisNCitzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfY3B1ZnJlcV9od19tYXRjaFtdID0gew0KKwl7IC5j b21wYXRpYmxlID0gIm1lZGlhdGVrLGNwdWZyZXEtaHciLCAuZGF0YSA9ICZjcHVmcmVxX210a19v ZmZzZXRzIH0sDQorCXt9DQorfTsNCisNCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt dGtfY3B1ZnJlcV9od19kcml2ZXIgPSB7DQorCS5wcm9iZSA9IG10a19jcHVmcmVxX2h3X2RyaXZl cl9wcm9iZSwNCisJLnJlbW92ZSA9IG10a19jcHVmcmVxX2h3X2RyaXZlcl9yZW1vdmUsDQorCS5k cml2ZXIgPSB7DQorCQkubmFtZSA9ICJtdGstY3B1ZnJlcS1odyIsDQorCQkub2ZfbWF0Y2hfdGFi bGUgPSBtdGtfY3B1ZnJlcV9od19tYXRjaCwNCisJfSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgX19p bml0IG10a19jcHVmcmVxX2h3X2luaXQodm9pZCkNCit7DQorCXJldHVybiBwbGF0Zm9ybV9kcml2 ZXJfcmVnaXN0ZXIoJm10a19jcHVmcmVxX2h3X2RyaXZlcik7DQorfQ0KK21vZHVsZV9pbml0KG10 a19jcHVmcmVxX2h3X2luaXQpOw0KKw0KK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtfY3B1ZnJlcV9o d19leGl0KHZvaWQpDQorew0KKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXRrX2NwdWZy ZXFfaHdfZHJpdmVyKTsNCit9DQorbW9kdWxlX2V4aXQobXRrX2NwdWZyZXFfaHdfZXhpdCk7DQor DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJtdGsgQ1BVRlJFUSBIVyBEcml2ZXIiKTsNCitNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7DQotLSANCjEuNy45LjUNCg==