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=-19.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,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 62582C433E9 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 36E0664ED3 for ; Mon, 22 Feb 2021 19:43:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233298AbhBVTnp (ORCPT ); Mon, 22 Feb 2021 14:43:45 -0500 Received: from mail.kernel.org ([198.145.29.99]:55062 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233263AbhBVTnk (ORCPT ); Mon, 22 Feb 2021 14:43:40 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id D0A9D64E41; Mon, 22 Feb 2021 19:42:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1614022941; bh=bkKKvMFpdLoerSiEbf1UVnm7NLJKTpEQ8RK9o47v8pw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zh0wiZi1sUOdGyT2pTvT5+XwhW+5nzVSOlGrMGyQgwjKWvUVoH/9NKMTN/J08cEiu LYiMhBE1TUr9z1+76aARN43wsCsIxe2R3glfd7NWUWMA+laDA5OVzqwBq0nrvlMdsP 8IfL9GhxsKLcDf/0UR45CnCVEGwWvq8TQXr0tkDYF7lrA1EknEzRLh7IkKFUl/xUXI XqFhVALgrLA0V/rhdd0XSLZrj5U5UPEJZBtb2XrqUzHZhtA02gjQBSpMLwJCc0O5Sv ilwwr8EOFJqJApSOI7KwtDj75H2SFV2EMcIa/7ppnNUd3xII0GtDv0dTlK8BIg0sH4 BRzDJAKpw20AA== Received: by pali.im (Postfix) id E4B72FC2; 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 06/10] clk: mvebu: armada-37xx-periph: Fix workaround for switching from L1 to L0 Date: Mon, 22 Feb 2021 20:41:54 +0100 Message-Id: <20210222194158.12342-7-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-clk@vger.kernel.org When CPU frequency is at 250 MHz and set_rate() is called with 500 MHz (L1) quickly followed by a call with 1 GHz (L0), the CPU does not necessarily stay in L1 for at least 20ms as is required by Marvell errata. This situation happens frequently with the ondemand cpufreq governor and can be also reproduced with userspace governor. In most cases it causes CPU to crash. This change fixes the above issue and ensures that the CPU always stays in L1 for at least 20ms when switching from any state to L0. Signed-off-by: Marek Behún Signed-off-by: Pali Rohár Acked-by: Stephen Boyd Tested-by: Tomasz Maciej Nowak Tested-by: Anders Trier Olesen Tested-by: Philip Soares Fixes: 61c40f35f5cd ("clk: mvebu: armada-37xx-periph: Fix switching CPU rate from 300Mhz to 1.2GHz") Cc: stable@vger.kernel.org --- drivers/clk/mvebu/armada-37xx-periph.c | 45 ++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/drivers/clk/mvebu/armada-37xx-periph.c b/drivers/clk/mvebu/armada-37xx-periph.c index b15e177bea7e..32ac6b6b7530 100644 --- a/drivers/clk/mvebu/armada-37xx-periph.c +++ b/drivers/clk/mvebu/armada-37xx-periph.c @@ -84,6 +84,7 @@ struct clk_pm_cpu { void __iomem *reg_div; u8 shift_div; struct regmap *nb_pm_base; + unsigned long l1_expiration; }; #define to_clk_double_div(_hw) container_of(_hw, struct clk_double_div, hw) @@ -504,22 +505,52 @@ static long clk_pm_cpu_round_rate(struct clk_hw *hw, unsigned long rate, * 2. Sleep 20ms for stabling VDD voltage * 3. Then switch from L1 (500/600 MHz) to L0 (1000/1200 MHz). */ -static void clk_pm_cpu_set_rate_wa(unsigned long rate, struct regmap *base) +static void clk_pm_cpu_set_rate_wa(struct clk_pm_cpu *pm_cpu, + unsigned int new_level, unsigned long rate, + struct regmap *base) { unsigned int cur_level; - if (rate < 1000 * 1000 * 1000) - return; - regmap_read(base, ARMADA_37XX_NB_CPU_LOAD, &cur_level); cur_level &= ARMADA_37XX_NB_CPU_LOAD_MASK; - if (cur_level <= ARMADA_37XX_DVFS_LOAD_1) + + if (cur_level == new_level) + return; + + /* + * System wants to go to L1 on its own. If we are going from L2/L3, + * remember when 20ms will expire. If from L0, set the value so that + * next switch to L0 won't have to wait. + */ + if (new_level == ARMADA_37XX_DVFS_LOAD_1) { + if (cur_level == ARMADA_37XX_DVFS_LOAD_0) + pm_cpu->l1_expiration = jiffies; + else + pm_cpu->l1_expiration = jiffies + msecs_to_jiffies(20); return; + } + + /* + * If we are setting to L2/L3, just invalidate L1 expiration time, + * sleeping is not needed. + */ + if (rate < 1000*1000*1000) + goto invalidate_l1_exp; + + /* + * We are going to L0 with rate >= 1GHz. Check whether we have been at + * L1 for long enough time. If not, go to L1 for 20ms. + */ + if (pm_cpu->l1_expiration && jiffies >= pm_cpu->l1_expiration) + goto invalidate_l1_exp; regmap_update_bits(base, ARMADA_37XX_NB_CPU_LOAD, ARMADA_37XX_NB_CPU_LOAD_MASK, ARMADA_37XX_DVFS_LOAD_1); msleep(20); + +invalidate_l1_exp: + pm_cpu->l1_expiration = 0; } static int clk_pm_cpu_set_rate(struct clk_hw *hw, unsigned long rate, @@ -553,7 +584,9 @@ static int clk_pm_cpu_set_rate(struct clk_hw *hw, unsigned long rate, reg = ARMADA_37XX_NB_CPU_LOAD; mask = ARMADA_37XX_NB_CPU_LOAD_MASK; - clk_pm_cpu_set_rate_wa(rate, base); + /* Apply workaround when base CPU frequency is 1000 or 1200 MHz */ + if (parent_rate >= 1000*1000*1000) + clk_pm_cpu_set_rate_wa(pm_cpu, load_level, rate, base); regmap_update_bits(base, reg, mask, load_level); -- 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=-17.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, 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 850AAC433E0 for ; Mon, 22 Feb 2021 19:44:31 +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 4D20464E15 for ; Mon, 22 Feb 2021 19:44:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4D20464E15 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=AiJtKICVmd9qqbEwFZQMjuBikMOYU2QqYIX8W/wvoEE=; b=U9aCeK4WsH3EStPM8N9S2DvaR yFADphOi2L/d/ppHacnz6DCplrj6IE2vkPG82wo+LN05iMxn2e10IXnbwxrXv/aMXUjXF/rwS6RL9 qcUoNf6k1+ukszr7n9nFzmYLZzol7CM5htL7f2i/IQ+I2IH+riaD9eHdWXihk5n03hAlkSTCl93uc ulLt0b022WpTkJXMdDQ/JJ5ghpQTQXQ2XiCoNHGHYM+RGGYTphu7BkTqgxTsisxpMHcQwmXnINgoh xksS9kU82C3je5dFUoAodX9gmmpb2NSHdFneb7xJkx4BdfyCiB+SmBk3HcYuuM+ZC4hd/2PXZiYox jbm/Ilr+Q==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lEH6Z-0002Ya-L2; Mon, 22 Feb 2021 19:42:51 +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 1lEH66-0002R3-55 for linux-arm-kernel@lists.infradead.org; Mon, 22 Feb 2021 19:42:25 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id D0A9D64E41; Mon, 22 Feb 2021 19:42:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1614022941; bh=bkKKvMFpdLoerSiEbf1UVnm7NLJKTpEQ8RK9o47v8pw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zh0wiZi1sUOdGyT2pTvT5+XwhW+5nzVSOlGrMGyQgwjKWvUVoH/9NKMTN/J08cEiu LYiMhBE1TUr9z1+76aARN43wsCsIxe2R3glfd7NWUWMA+laDA5OVzqwBq0nrvlMdsP 8IfL9GhxsKLcDf/0UR45CnCVEGwWvq8TQXr0tkDYF7lrA1EknEzRLh7IkKFUl/xUXI XqFhVALgrLA0V/rhdd0XSLZrj5U5UPEJZBtb2XrqUzHZhtA02gjQBSpMLwJCc0O5Sv ilwwr8EOFJqJApSOI7KwtDj75H2SFV2EMcIa/7ppnNUd3xII0GtDv0dTlK8BIg0sH4 BRzDJAKpw20AA== Received: by pali.im (Postfix) id E4B72FC2; 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 06/10] clk: mvebu: armada-37xx-periph: Fix workaround for switching from L1 to L0 Date: Mon, 22 Feb 2021 20:41:54 +0100 Message-Id: <20210222194158.12342-7-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_144222_398072_585C6958 X-CRM114-Status: GOOD ( 17.48 ) 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 V2hlbiBDUFUgZnJlcXVlbmN5IGlzIGF0IDI1MCBNSHogYW5kIHNldF9yYXRlKCkgaXMgY2FsbGVk IHdpdGggNTAwIE1IeiAoTDEpCnF1aWNrbHkgZm9sbG93ZWQgYnkgYSBjYWxsIHdpdGggMSBHSHog KEwwKSwgdGhlIENQVSBkb2VzIG5vdCBuZWNlc3NhcmlseQpzdGF5IGluIEwxIGZvciBhdCBsZWFz dCAyMG1zIGFzIGlzIHJlcXVpcmVkIGJ5IE1hcnZlbGwgZXJyYXRhLgoKVGhpcyBzaXR1YXRpb24g aGFwcGVucyBmcmVxdWVudGx5IHdpdGggdGhlIG9uZGVtYW5kIGNwdWZyZXEgZ292ZXJub3IgYW5k CmNhbiBiZSBhbHNvIHJlcHJvZHVjZWQgd2l0aCB1c2Vyc3BhY2UgZ292ZXJub3IuIEluIG1vc3Qg Y2FzZXMgaXQgY2F1c2VzIENQVQp0byBjcmFzaC4KClRoaXMgY2hhbmdlIGZpeGVzIHRoZSBhYm92 ZSBpc3N1ZSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBDUFUgYWx3YXlzIHN0YXlzIGluCkwxIGZvciBh dCBsZWFzdCAyMG1zIHdoZW4gc3dpdGNoaW5nIGZyb20gYW55IHN0YXRlIHRvIEwwLgoKU2lnbmVk LW9mZi1ieTogTWFyZWsgQmVow7puIDxrYWJlbEBrZXJuZWwub3JnPgpTaWduZWQtb2ZmLWJ5OiBQ YWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgpBY2tlZC1ieTogU3RlcGhlbiBCb3lkIDxzYm95 ZEBrZXJuZWwub3JnPgpUZXN0ZWQtYnk6IFRvbWFzeiBNYWNpZWogTm93YWsgPHRtbjUwNUBnbWFp bC5jb20+ClRlc3RlZC1ieTogQW5kZXJzIFRyaWVyIE9sZXNlbiA8YW5kZXJzLnRyaWVyLm9sZXNl bkBnbWFpbC5jb20+ClRlc3RlZC1ieTogUGhpbGlwIFNvYXJlcyA8cGhpbGlwc0BuZXRpc2Vuc2Uu Y29tPgpGaXhlczogNjFjNDBmMzVmNWNkICgiY2xrOiBtdmVidTogYXJtYWRhLTM3eHgtcGVyaXBo OiBGaXggc3dpdGNoaW5nIENQVSByYXRlIGZyb20gMzAwTWh6IHRvIDEuMkdIeiIpCkNjOiBzdGFi bGVAdmdlci5rZXJuZWwub3JnCi0tLQogZHJpdmVycy9jbGsvbXZlYnUvYXJtYWRhLTM3eHgtcGVy aXBoLmMgfCA0NSArKysrKysrKysrKysrKysrKysrKysrLS0tLQogMSBmaWxlIGNoYW5nZWQsIDM5 IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv bXZlYnUvYXJtYWRhLTM3eHgtcGVyaXBoLmMgYi9kcml2ZXJzL2Nsay9tdmVidS9hcm1hZGEtMzd4 eC1wZXJpcGguYwppbmRleCBiMTVlMTc3YmVhN2UuLjMyYWM2YjZiNzUzMCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9jbGsvbXZlYnUvYXJtYWRhLTM3eHgtcGVyaXBoLmMKKysrIGIvZHJpdmVycy9jbGsv bXZlYnUvYXJtYWRhLTM3eHgtcGVyaXBoLmMKQEAgLTg0LDYgKzg0LDcgQEAgc3RydWN0IGNsa19w bV9jcHUgewogCXZvaWQgX19pb21lbSAqcmVnX2RpdjsKIAl1OCBzaGlmdF9kaXY7CiAJc3RydWN0 IHJlZ21hcCAqbmJfcG1fYmFzZTsKKwl1bnNpZ25lZCBsb25nIGwxX2V4cGlyYXRpb247CiB9Owog CiAjZGVmaW5lIHRvX2Nsa19kb3VibGVfZGl2KF9odykgY29udGFpbmVyX29mKF9odywgc3RydWN0 IGNsa19kb3VibGVfZGl2LCBodykKQEAgLTUwNCwyMiArNTA1LDUyIEBAIHN0YXRpYyBsb25nIGNs a19wbV9jcHVfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRl LAogICogMi4gU2xlZXAgMjBtcyBmb3Igc3RhYmxpbmcgVkREIHZvbHRhZ2UKICAqIDMuIFRoZW4g c3dpdGNoIGZyb20gTDEgKDUwMC82MDAgTUh6KSB0byBMMCAoMTAwMC8xMjAwIE1IeikuCiAgKi8K LXN0YXRpYyB2b2lkIGNsa19wbV9jcHVfc2V0X3JhdGVfd2EodW5zaWduZWQgbG9uZyByYXRlLCBz dHJ1Y3QgcmVnbWFwICpiYXNlKQorc3RhdGljIHZvaWQgY2xrX3BtX2NwdV9zZXRfcmF0ZV93YShz dHJ1Y3QgY2xrX3BtX2NwdSAqcG1fY3B1LAorCQkJCSAgIHVuc2lnbmVkIGludCBuZXdfbGV2ZWws IHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICBzdHJ1Y3QgcmVnbWFwICpiYXNlKQogewogCXVu c2lnbmVkIGludCBjdXJfbGV2ZWw7CiAKLQlpZiAocmF0ZSA8IDEwMDAgKiAxMDAwICogMTAwMCkK LQkJcmV0dXJuOwotCiAJcmVnbWFwX3JlYWQoYmFzZSwgQVJNQURBXzM3WFhfTkJfQ1BVX0xPQUQs ICZjdXJfbGV2ZWwpOwogCWN1cl9sZXZlbCAmPSBBUk1BREFfMzdYWF9OQl9DUFVfTE9BRF9NQVNL OwotCWlmIChjdXJfbGV2ZWwgPD0gQVJNQURBXzM3WFhfRFZGU19MT0FEXzEpCisKKwlpZiAoY3Vy X2xldmVsID09IG5ld19sZXZlbCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTeXN0ZW0gd2FudHMg dG8gZ28gdG8gTDEgb24gaXRzIG93bi4gSWYgd2UgYXJlIGdvaW5nIGZyb20gTDIvTDMsCisJICog cmVtZW1iZXIgd2hlbiAyMG1zIHdpbGwgZXhwaXJlLiBJZiBmcm9tIEwwLCBzZXQgdGhlIHZhbHVl IHNvIHRoYXQKKwkgKiBuZXh0IHN3aXRjaCB0byBMMCB3b24ndCBoYXZlIHRvIHdhaXQuCisJICov CisJaWYgKG5ld19sZXZlbCA9PSBBUk1BREFfMzdYWF9EVkZTX0xPQURfMSkgeworCQlpZiAoY3Vy X2xldmVsID09IEFSTUFEQV8zN1hYX0RWRlNfTE9BRF8wKQorCQkJcG1fY3B1LT5sMV9leHBpcmF0 aW9uID0gamlmZmllczsKKwkJZWxzZQorCQkJcG1fY3B1LT5sMV9leHBpcmF0aW9uID0gamlmZmll cyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOwogCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB3 ZSBhcmUgc2V0dGluZyB0byBMMi9MMywganVzdCBpbnZhbGlkYXRlIEwxIGV4cGlyYXRpb24gdGlt ZSwKKwkgKiBzbGVlcGluZyBpcyBub3QgbmVlZGVkLgorCSAqLworCWlmIChyYXRlIDwgMTAwMCox MDAwKjEwMDApCisJCWdvdG8gaW52YWxpZGF0ZV9sMV9leHA7CisKKwkvKgorCSAqIFdlIGFyZSBn b2luZyB0byBMMCB3aXRoIHJhdGUgPj0gMUdIei4gQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGJlZW4g YXQKKwkgKiBMMSBmb3IgbG9uZyBlbm91Z2ggdGltZS4gSWYgbm90LCBnbyB0byBMMSBmb3IgMjBt cy4KKwkgKi8KKwlpZiAocG1fY3B1LT5sMV9leHBpcmF0aW9uICYmIGppZmZpZXMgPj0gcG1fY3B1 LT5sMV9leHBpcmF0aW9uKQorCQlnb3RvIGludmFsaWRhdGVfbDFfZXhwOwogCiAJcmVnbWFwX3Vw ZGF0ZV9iaXRzKGJhc2UsIEFSTUFEQV8zN1hYX05CX0NQVV9MT0FELAogCQkJICAgQVJNQURBXzM3 WFhfTkJfQ1BVX0xPQURfTUFTSywKIAkJCSAgIEFSTUFEQV8zN1hYX0RWRlNfTE9BRF8xKTsKIAlt c2xlZXAoMjApOworCitpbnZhbGlkYXRlX2wxX2V4cDoKKwlwbV9jcHUtPmwxX2V4cGlyYXRpb24g PSAwOwogfQogCiBzdGF0aWMgaW50IGNsa19wbV9jcHVfc2V0X3JhdGUoc3RydWN0IGNsa19odyAq aHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKQEAgLTU1Myw3ICs1ODQsOSBAQCBzdGF0aWMgaW50IGNs a19wbV9jcHVfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwK IAkJCXJlZyA9IEFSTUFEQV8zN1hYX05CX0NQVV9MT0FEOwogCQkJbWFzayA9IEFSTUFEQV8zN1hY X05CX0NQVV9MT0FEX01BU0s7CiAKLQkJCWNsa19wbV9jcHVfc2V0X3JhdGVfd2EocmF0ZSwgYmFz ZSk7CisJCQkvKiBBcHBseSB3b3JrYXJvdW5kIHdoZW4gYmFzZSBDUFUgZnJlcXVlbmN5IGlzIDEw MDAgb3IgMTIwMCBNSHogKi8KKwkJCWlmIChwYXJlbnRfcmF0ZSA+PSAxMDAwKjEwMDAqMTAwMCkK KwkJCQljbGtfcG1fY3B1X3NldF9yYXRlX3dhKHBtX2NwdSwgbG9hZF9sZXZlbCwgcmF0ZSwgYmFz ZSk7CiAKIAkJCXJlZ21hcF91cGRhdGVfYml0cyhiYXNlLCByZWcsIG1hc2ssIGxvYWRfbGV2ZWwp OwogCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==