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=-24.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable 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 259D2C433E0 for ; Mon, 22 Feb 2021 19:43:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E34C364E32 for ; Mon, 22 Feb 2021 19:43:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233248AbhBVTnh (ORCPT ); Mon, 22 Feb 2021 14:43:37 -0500 Received: from mail.kernel.org ([198.145.29.99]:54818 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232985AbhBVTnA (ORCPT ); Mon, 22 Feb 2021 14:43:00 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3C27364EC1; Mon, 22 Feb 2021 19:42:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1614022939; bh=g7I54Xx87A8O+3hHocomlXJ+qgIiONJK4DHpRS8aEOM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rIM4/TITjHNhYlYnDD0kak708vDb9Erq7OvQPzCzEzZSjIRVvyGtGnL+ulWmM9Uxf v5Bxp372CZ7hEUEnE1ukKhAYyizQtGjKUT8dSyFsBrY7qQIUEyQ/DZtkldLumOqRJn ecSlrKGsL/0OL87leK4VmJ4fRZE58gAsTrRsCSNqLBZQwjlaPb4e843Jgt0s9gxeC2 U7IMZuPedxkWB4yoApfzP0gMpZCNcimKQdYV7TM2iVi1GVSpg9xT6Og6uvs6Us6dI6 01Yk58RfhUUgy22l6CKU3ItYbyCcaMJ58xq4xb25lB2ebOyxwZ8TnP5pKdJnXWgGj2 OSH8KWds8YEhw== Received: by pali.im (Postfix) id 4408EF17; Mon, 22 Feb 2021 20:42:17 +0100 (CET) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Gregory Clement , Andrew Lunn , Michael Turquette , Stephen Boyd , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org Cc: =?UTF-8?q?Marek=20Beh=C3=BAn?= , Miquel Raynal , Tomasz Maciej Nowak , Luka Perkov , Andre Heider , Vladimir Vid , Russell King , =?UTF-8?q?G=C3=A9rald=20Kerma?= , Konstantin Porotchkin Subject: [PATCH mvebu v3 04/10] cpufreq: armada-37xx: Fix the AVS value for load L1 Date: Mon, 22 Feb 2021 20:41:52 +0100 Message-Id: <20210222194158.12342-5-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210222194158.12342-1-pali@kernel.org> References: <20210114124032.12765-1-pali@kernel.org> <20210222194158.12342-1-pali@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The original CPU voltage value for load L1 is too low for Armada 37xx SoC when base CPU frequency is 1000 or 1200 MHz. It leads to instabilities where CPU gets stuck soon after dynamic voltage scaling from load L1 to L0. Update the CPU voltage value for load L1 accordingly when base frequency is 1000 or 1200 MHz. The minimal L1 value for base CPU frequency 1000 MHz is updated from the original 1.05V to 1.108V and for 1200 MHz is updated to 1.155V. This minimal L1 value is used only in the case when it is lower than value for L0. This change fixes CPU instability issues on 1 GHz and 1.2 GHz variants of Espressobin and 1 GHz Turris Mox. Marvell previously for 1 GHz variant of Espressobin provided a patch [1] suitable only for their Marvell Linux kernel 4.4 fork which workarounded this issue. Patch forced CPU voltage value to 1.108V in all loads. But such change does not fix CPU instability issues on 1.2 GHz variants of Armada 3720 SoC. During testing we come to the conclusion that using 1.108V as minimal value for L1 load makes 1 GHz variants of Espressobin and Turris Mox boards stable. And similarly 1.155V for 1.2 GHz variant of Espressobin. These two values 1.108V and 1.155V are documented in Armada 3700 Hardware Specifications as typical initial CPU voltage values. Discussion about this issue is also at the Armbian forum [2]. [1] - https://github.com/MarvellEmbeddedProcessors/linux-marvell/commit/dc33b62c90696afb6adc7dbcc4ebbd48bedec269 [2] - https://forum.armbian.com/topic/10429-how-to-make-espressobin-v7-stable/ Signed-off-by: Pali Rohár Tested-by: Tomasz Maciej Nowak Tested-by: Anders Trier Olesen Tested-by: Philip Soares Fixes: 1c3528232f4b ("cpufreq: armada-37xx: Add AVS support") Cc: stable@vger.kernel.org --- drivers/cpufreq/armada-37xx-cpufreq.c | 37 +++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/cpufreq/armada-37xx-cpufreq.c b/drivers/cpufreq/armada-37xx-cpufreq.c index b8dc6c849579..c7683d447b11 100644 --- a/drivers/cpufreq/armada-37xx-cpufreq.c +++ b/drivers/cpufreq/armada-37xx-cpufreq.c @@ -73,6 +73,8 @@ #define LOAD_LEVEL_NR 4 #define MIN_VOLT_MV 1000 +#define MIN_VOLT_MV_FOR_L1_1000MHZ 1108 +#define MIN_VOLT_MV_FOR_L1_1200MHZ 1155 /* AVS value for the corresponding voltage (in mV) */ static int avs_map[] = { @@ -208,6 +210,8 @@ static u32 armada_37xx_avs_val_match(int target_vm) * - L2 & L3 voltage should be about 150mv smaller than L0 voltage. * This function calculates L1 & L2 & L3 AVS values dynamically based * on L0 voltage and fill all AVS values to the AVS value table. + * When base CPU frequency is 1000 or 1200 MHz then there is additional + * minimal avs value for load L1. */ static void __init armada37xx_cpufreq_avs_configure(struct regmap *base, struct armada_37xx_dvfs *dvfs) @@ -239,6 +243,19 @@ static void __init armada37xx_cpufreq_avs_configure(struct regmap *base, for (load_level = 1; load_level < LOAD_LEVEL_NR; load_level++) dvfs->avs[load_level] = avs_min; + /* + * Set the avs values for load L0 and L1 when base CPU frequency + * is 1000/1200 MHz to its typical initial values according to + * the Armada 3700 Hardware Specifications. + */ + if (dvfs->cpu_freq_max >= 1000*1000*1000) { + if (dvfs->cpu_freq_max >= 1200*1000*1000) + avs_min = armada_37xx_avs_val_match(MIN_VOLT_MV_FOR_L1_1200MHZ); + else + avs_min = armada_37xx_avs_val_match(MIN_VOLT_MV_FOR_L1_1000MHZ); + dvfs->avs[0] = dvfs->avs[1] = avs_min; + } + return; } @@ -258,6 +275,26 @@ static void __init armada37xx_cpufreq_avs_configure(struct regmap *base, target_vm = avs_map[l0_vdd_min] - 150; target_vm = target_vm > MIN_VOLT_MV ? target_vm : MIN_VOLT_MV; dvfs->avs[2] = dvfs->avs[3] = armada_37xx_avs_val_match(target_vm); + + /* + * Fix the avs value for load L1 when base CPU frequency is 1000/1200 MHz, + * otherwise the CPU gets stuck when switching from load L1 to load L0. + * Also ensure that avs value for load L1 is not higher than for L0. + */ + if (dvfs->cpu_freq_max >= 1000*1000*1000) { + u32 avs_min_l1; + + if (dvfs->cpu_freq_max >= 1200*1000*1000) + avs_min_l1 = armada_37xx_avs_val_match(MIN_VOLT_MV_FOR_L1_1200MHZ); + else + avs_min_l1 = armada_37xx_avs_val_match(MIN_VOLT_MV_FOR_L1_1000MHZ); + + if (avs_min_l1 > dvfs->avs[0]) + avs_min_l1 = dvfs->avs[0]; + + if (dvfs->avs[1] < avs_min_l1) + dvfs->avs[1] = avs_min_l1; + } } static void __init armada37xx_cpufreq_avs_setup(struct regmap *base, -- 2.20.1 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=-22.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,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 0501DC433DB for ; Mon, 22 Feb 2021 19:44:09 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BD4EF64E6B for ; Mon, 22 Feb 2021 19:44:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BD4EF64E6B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=V3uKQ3dMx7ikUaQJbpCJCwJ9o9n4R1OWbwlesPizZr4=; b=fCD7Rmj3qXORK2v2bUPi7Nl6z 5xmnvg4Fsr54A2F4teWrQdSsLg61bsUr2xQa4qdIFC69Lgo8m+CWA2NcUIZAvkEOaJ9vsVlrtmIiH Qh6snu7xz9MtPfckezV2QgPdLxIaMEqob4s447Bf+s7dtLJsUMK7dne8PdifpLQoZ9wXDMNpYEQr0 IsLhk8HhyIMjJmc2sa33ODf+cGIIizPoZsEgze78CNonToUuZ9uiAgPGFGQVIjzmSfdsRWlx52ZE1 EpyLNDkvHtK8bbqAdgibMod92LOFaMe3ycHWf0VzUat6n2h3/9jaY1+lYwJF7Kzkxf3G7yLNo7h+8 B1c2q3WCg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lEH6J-0002UN-5x; Mon, 22 Feb 2021 19:42:35 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1lEH64-0002Pp-F0 for linux-arm-kernel@lists.infradead.org; Mon, 22 Feb 2021 19:42:24 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3C27364EC1; Mon, 22 Feb 2021 19:42:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1614022939; bh=g7I54Xx87A8O+3hHocomlXJ+qgIiONJK4DHpRS8aEOM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rIM4/TITjHNhYlYnDD0kak708vDb9Erq7OvQPzCzEzZSjIRVvyGtGnL+ulWmM9Uxf v5Bxp372CZ7hEUEnE1ukKhAYyizQtGjKUT8dSyFsBrY7qQIUEyQ/DZtkldLumOqRJn ecSlrKGsL/0OL87leK4VmJ4fRZE58gAsTrRsCSNqLBZQwjlaPb4e843Jgt0s9gxeC2 U7IMZuPedxkWB4yoApfzP0gMpZCNcimKQdYV7TM2iVi1GVSpg9xT6Og6uvs6Us6dI6 01Yk58RfhUUgy22l6CKU3ItYbyCcaMJ58xq4xb25lB2ebOyxwZ8TnP5pKdJnXWgGj2 OSH8KWds8YEhw== Received: by pali.im (Postfix) id 4408EF17; Mon, 22 Feb 2021 20:42:17 +0100 (CET) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Gregory Clement , Andrew Lunn , Michael Turquette , Stephen Boyd , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org Subject: [PATCH mvebu v3 04/10] cpufreq: armada-37xx: Fix the AVS value for load L1 Date: Mon, 22 Feb 2021 20:41:52 +0100 Message-Id: <20210222194158.12342-5-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210222194158.12342-1-pali@kernel.org> References: <20210114124032.12765-1-pali@kernel.org> <20210222194158.12342-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210222_144220_795213_2733CCA1 X-CRM114-Status: GOOD ( 18.66 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marek=20Beh=C3=BAn?= , Tomasz Maciej Nowak , Luka Perkov , Andre Heider , Vladimir Vid , Russell King , =?UTF-8?q?G=C3=A9rald=20Kerma?= , Miquel Raynal , Konstantin Porotchkin Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhlIG9yaWdpbmFsIENQVSB2b2x0YWdlIHZhbHVlIGZvciBsb2FkIEwxIGlzIHRvbyBsb3cgZm9y IEFybWFkYSAzN3h4IFNvQwp3aGVuIGJhc2UgQ1BVIGZyZXF1ZW5jeSBpcyAxMDAwIG9yIDEyMDAg TUh6LiBJdCBsZWFkcyB0byBpbnN0YWJpbGl0aWVzCndoZXJlIENQVSBnZXRzIHN0dWNrIHNvb24g YWZ0ZXIgZHluYW1pYyB2b2x0YWdlIHNjYWxpbmcgZnJvbSBsb2FkIEwxIHRvIEwwLgoKVXBkYXRl IHRoZSBDUFUgdm9sdGFnZSB2YWx1ZSBmb3IgbG9hZCBMMSBhY2NvcmRpbmdseSB3aGVuIGJhc2Ug ZnJlcXVlbmN5IGlzCjEwMDAgb3IgMTIwMCBNSHouIFRoZSBtaW5pbWFsIEwxIHZhbHVlIGZvciBi YXNlIENQVSBmcmVxdWVuY3kgMTAwMCBNSHogaXMKdXBkYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCAx LjA1ViB0byAxLjEwOFYgYW5kIGZvciAxMjAwIE1IeiBpcyB1cGRhdGVkIHRvCjEuMTU1Vi4gVGhp cyBtaW5pbWFsIEwxIHZhbHVlIGlzIHVzZWQgb25seSBpbiB0aGUgY2FzZSB3aGVuIGl0IGlzIGxv d2VyCnRoYW4gdmFsdWUgZm9yIEwwLgoKVGhpcyBjaGFuZ2UgZml4ZXMgQ1BVIGluc3RhYmlsaXR5 IGlzc3VlcyBvbiAxIEdIeiBhbmQgMS4yIEdIeiB2YXJpYW50cyBvZgpFc3ByZXNzb2JpbiBhbmQg MSBHSHogVHVycmlzIE1veC4KCk1hcnZlbGwgcHJldmlvdXNseSBmb3IgMSBHSHogdmFyaWFudCBv ZiBFc3ByZXNzb2JpbiBwcm92aWRlZCBhIHBhdGNoIFsxXQpzdWl0YWJsZSBvbmx5IGZvciB0aGVp ciBNYXJ2ZWxsIExpbnV4IGtlcm5lbCA0LjQgZm9yayB3aGljaCB3b3JrYXJvdW5kZWQKdGhpcyBp c3N1ZS4gUGF0Y2ggZm9yY2VkIENQVSB2b2x0YWdlIHZhbHVlIHRvIDEuMTA4ViBpbiBhbGwgbG9h ZHMuIEJ1dApzdWNoIGNoYW5nZSBkb2VzIG5vdCBmaXggQ1BVIGluc3RhYmlsaXR5IGlzc3VlcyBv biAxLjIgR0h6IHZhcmlhbnRzIG9mCkFybWFkYSAzNzIwIFNvQy4KCkR1cmluZyB0ZXN0aW5nIHdl IGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB1c2luZyAxLjEwOFYgYXMgbWluaW1hbAp2YWx1 ZSBmb3IgTDEgbG9hZCBtYWtlcyAxIEdIeiB2YXJpYW50cyBvZiBFc3ByZXNzb2JpbiBhbmQgVHVy cmlzIE1veCBib2FyZHMKc3RhYmxlLiBBbmQgc2ltaWxhcmx5IDEuMTU1ViBmb3IgMS4yIEdIeiB2 YXJpYW50IG9mIEVzcHJlc3NvYmluLgoKVGhlc2UgdHdvIHZhbHVlcyAxLjEwOFYgYW5kIDEuMTU1 ViBhcmUgZG9jdW1lbnRlZCBpbiBBcm1hZGEgMzcwMCBIYXJkd2FyZQpTcGVjaWZpY2F0aW9ucyBh cyB0eXBpY2FsIGluaXRpYWwgQ1BVIHZvbHRhZ2UgdmFsdWVzLgoKRGlzY3Vzc2lvbiBhYm91dCB0 aGlzIGlzc3VlIGlzIGFsc28gYXQgdGhlIEFybWJpYW4gZm9ydW0gWzJdLgoKWzFdIC0gaHR0cHM6 Ly9naXRodWIuY29tL01hcnZlbGxFbWJlZGRlZFByb2Nlc3NvcnMvbGludXgtbWFydmVsbC9jb21t aXQvZGMzM2I2MmM5MDY5NmFmYjZhZGM3ZGJjYzRlYmJkNDhiZWRlYzI2OQpbMl0gLSBodHRwczov L2ZvcnVtLmFybWJpYW4uY29tL3RvcGljLzEwNDI5LWhvdy10by1tYWtlLWVzcHJlc3NvYmluLXY3 LXN0YWJsZS8KClNpZ25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+ClRl c3RlZC1ieTogVG9tYXN6IE1hY2llaiBOb3dhayA8dG1uNTA1QGdtYWlsLmNvbT4KVGVzdGVkLWJ5 OiBBbmRlcnMgVHJpZXIgT2xlc2VuIDxhbmRlcnMudHJpZXIub2xlc2VuQGdtYWlsLmNvbT4KVGVz dGVkLWJ5OiBQaGlsaXAgU29hcmVzIDxwaGlsaXBzQG5ldGlzZW5zZS5jb20+CkZpeGVzOiAxYzM1 MjgyMzJmNGIgKCJjcHVmcmVxOiBhcm1hZGEtMzd4eDogQWRkIEFWUyBzdXBwb3J0IikKQ2M6IHN0 YWJsZUB2Z2VyLmtlcm5lbC5vcmcKLS0tCiBkcml2ZXJzL2NwdWZyZXEvYXJtYWRhLTM3eHgtY3B1 ZnJlcS5jIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwg MzcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9hcm1hZGEtMzd4 eC1jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvYXJtYWRhLTM3eHgtY3B1ZnJlcS5jCmluZGV4 IGI4ZGM2Yzg0OTU3OS4uYzc2ODNkNDQ3YjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEv YXJtYWRhLTM3eHgtY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9hcm1hZGEtMzd4eC1j cHVmcmVxLmMKQEAgLTczLDYgKzczLDggQEAKICNkZWZpbmUgTE9BRF9MRVZFTF9OUgk0CiAKICNk ZWZpbmUgTUlOX1ZPTFRfTVYgMTAwMAorI2RlZmluZSBNSU5fVk9MVF9NVl9GT1JfTDFfMTAwME1I WiAxMTA4CisjZGVmaW5lIE1JTl9WT0xUX01WX0ZPUl9MMV8xMjAwTUhaIDExNTUKIAogLyogIEFW UyB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdm9sdGFnZSAoaW4gbVYpICovCiBzdGF0aWMg aW50IGF2c19tYXBbXSA9IHsKQEAgLTIwOCw2ICsyMTAsOCBAQCBzdGF0aWMgdTMyIGFybWFkYV8z N3h4X2F2c192YWxfbWF0Y2goaW50IHRhcmdldF92bSkKICAqIC0gTDIgJiBMMyB2b2x0YWdlIHNo b3VsZCBiZSBhYm91dCAxNTBtdiBzbWFsbGVyIHRoYW4gTDAgdm9sdGFnZS4KICAqIFRoaXMgZnVu Y3Rpb24gY2FsY3VsYXRlcyBMMSAmIEwyICYgTDMgQVZTIHZhbHVlcyBkeW5hbWljYWxseSBiYXNl ZAogICogb24gTDAgdm9sdGFnZSBhbmQgZmlsbCBhbGwgQVZTIHZhbHVlcyB0byB0aGUgQVZTIHZh bHVlIHRhYmxlLgorICogV2hlbiBiYXNlIENQVSBmcmVxdWVuY3kgaXMgMTAwMCBvciAxMjAwIE1I eiB0aGVuIHRoZXJlIGlzIGFkZGl0aW9uYWwKKyAqIG1pbmltYWwgYXZzIHZhbHVlIGZvciBsb2Fk IEwxLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhMzd4eF9jcHVmcmVxX2F2c19jb25m aWd1cmUoc3RydWN0IHJlZ21hcCAqYmFzZSwKIAkJCQkJCXN0cnVjdCBhcm1hZGFfMzd4eF9kdmZz ICpkdmZzKQpAQCAtMjM5LDYgKzI0MywxOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhMzd4 eF9jcHVmcmVxX2F2c19jb25maWd1cmUoc3RydWN0IHJlZ21hcCAqYmFzZSwKIAkJZm9yIChsb2Fk X2xldmVsID0gMTsgbG9hZF9sZXZlbCA8IExPQURfTEVWRUxfTlI7IGxvYWRfbGV2ZWwrKykKIAkJ CWR2ZnMtPmF2c1tsb2FkX2xldmVsXSA9IGF2c19taW47CiAKKwkJLyoKKwkJICogU2V0IHRoZSBh dnMgdmFsdWVzIGZvciBsb2FkIEwwIGFuZCBMMSB3aGVuIGJhc2UgQ1BVIGZyZXF1ZW5jeQorCQkg KiBpcyAxMDAwLzEyMDAgTUh6IHRvIGl0cyB0eXBpY2FsIGluaXRpYWwgdmFsdWVzIGFjY29yZGlu ZyB0bworCQkgKiB0aGUgQXJtYWRhIDM3MDAgSGFyZHdhcmUgU3BlY2lmaWNhdGlvbnMuCisJCSAq LworCQlpZiAoZHZmcy0+Y3B1X2ZyZXFfbWF4ID49IDEwMDAqMTAwMCoxMDAwKSB7CisJCQlpZiAo ZHZmcy0+Y3B1X2ZyZXFfbWF4ID49IDEyMDAqMTAwMCoxMDAwKQorCQkJCWF2c19taW4gPSBhcm1h ZGFfMzd4eF9hdnNfdmFsX21hdGNoKE1JTl9WT0xUX01WX0ZPUl9MMV8xMjAwTUhaKTsKKwkJCWVs c2UKKwkJCQlhdnNfbWluID0gYXJtYWRhXzM3eHhfYXZzX3ZhbF9tYXRjaChNSU5fVk9MVF9NVl9G T1JfTDFfMTAwME1IWik7CisJCQlkdmZzLT5hdnNbMF0gPSBkdmZzLT5hdnNbMV0gPSBhdnNfbWlu OworCQl9CisKIAkJcmV0dXJuOwogCX0KIApAQCAtMjU4LDYgKzI3NSwyNiBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgYXJtYWRhMzd4eF9jcHVmcmVxX2F2c19jb25maWd1cmUoc3RydWN0IHJlZ21hcCAq YmFzZSwKIAl0YXJnZXRfdm0gPSBhdnNfbWFwW2wwX3ZkZF9taW5dIC0gMTUwOwogCXRhcmdldF92 bSA9IHRhcmdldF92bSA+IE1JTl9WT0xUX01WID8gdGFyZ2V0X3ZtIDogTUlOX1ZPTFRfTVY7CiAJ ZHZmcy0+YXZzWzJdID0gZHZmcy0+YXZzWzNdID0gYXJtYWRhXzM3eHhfYXZzX3ZhbF9tYXRjaCh0 YXJnZXRfdm0pOworCisJLyoKKwkgKiBGaXggdGhlIGF2cyB2YWx1ZSBmb3IgbG9hZCBMMSB3aGVu IGJhc2UgQ1BVIGZyZXF1ZW5jeSBpcyAxMDAwLzEyMDAgTUh6LAorCSAqIG90aGVyd2lzZSB0aGUg Q1BVIGdldHMgc3R1Y2sgd2hlbiBzd2l0Y2hpbmcgZnJvbSBsb2FkIEwxIHRvIGxvYWQgTDAuCisJ ICogQWxzbyBlbnN1cmUgdGhhdCBhdnMgdmFsdWUgZm9yIGxvYWQgTDEgaXMgbm90IGhpZ2hlciB0 aGFuIGZvciBMMC4KKwkgKi8KKwlpZiAoZHZmcy0+Y3B1X2ZyZXFfbWF4ID49IDEwMDAqMTAwMCox MDAwKSB7CisJCXUzMiBhdnNfbWluX2wxOworCisJCWlmIChkdmZzLT5jcHVfZnJlcV9tYXggPj0g MTIwMCoxMDAwKjEwMDApCisJCQlhdnNfbWluX2wxID0gYXJtYWRhXzM3eHhfYXZzX3ZhbF9tYXRj aChNSU5fVk9MVF9NVl9GT1JfTDFfMTIwME1IWik7CisJCWVsc2UKKwkJCWF2c19taW5fbDEgPSBh cm1hZGFfMzd4eF9hdnNfdmFsX21hdGNoKE1JTl9WT0xUX01WX0ZPUl9MMV8xMDAwTUhaKTsKKwor CQlpZiAoYXZzX21pbl9sMSA+IGR2ZnMtPmF2c1swXSkKKwkJCWF2c19taW5fbDEgPSBkdmZzLT5h dnNbMF07CisKKwkJaWYgKGR2ZnMtPmF2c1sxXSA8IGF2c19taW5fbDEpCisJCQlkdmZzLT5hdnNb MV0gPSBhdnNfbWluX2wxOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGFybWFkYTM3eHhf Y3B1ZnJlcV9hdnNfc2V0dXAoc3RydWN0IHJlZ21hcCAqYmFzZSwKLS0gCjIuMjAuMQoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK