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.2 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,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 4A7A5C433E9 for ; Thu, 14 Jan 2021 12:42:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 200F823A56 for ; Thu, 14 Jan 2021 12:42:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728817AbhANMmO (ORCPT ); Thu, 14 Jan 2021 07:42:14 -0500 Received: from mail.kernel.org ([198.145.29.99]:59364 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726329AbhANMmO (ORCPT ); Thu, 14 Jan 2021 07:42:14 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id C5DD523A61; Thu, 14 Jan 2021 12:40:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1610628056; bh=BM2JrmrK5VRVYXEAX31FmsqxA+U0Nplk6UV2WlHNTT8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lGUG7aVVKLpy0ULIGMXUEMD7z3ejJd1HmKIM0lJ8DsPhmL5gQs8JX3k78U556NlS7 ia/F0SoOL7h9crLT+zM0RYBO24dV7JHvX9Ju8OHlMRQc9XXK8uZNC3IPCVQhHWWviV FBh9DExD1rw2ZCijn4Gdgd8r79UFZnQDsImn+dEkI1azCBgj/6gwhPlyU375PW0TeW bPrLKAv1igtFr+i0b1LVWgZ0rFYaIQPLuZI1wsMy+ZIkc3D0fXxOALF4FlY1loW/oN iRg6jrcBlIn63S4nrhdQyMhk0PN7D1+imM/HbJX5VZQx8/GZMvvx9QeR6UviO1eRA0 RajRerSTd0YUQ== Received: by pali.im (Postfix) id 8E51B843; Thu, 14 Jan 2021 13:40:54 +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 v2 06/10] clk: mvebu: armada-37xx-periph: Fix workaround for switching from L1 to L0 Date: Thu, 14 Jan 2021 13:40:28 +0100 Message-Id: <20210114124032.12765-7-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210114124032.12765-1-pali@kernel.org> References: <20210114124032.12765-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 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.2 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 632EDC433DB for ; Thu, 14 Jan 2021 12:42:54 +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 2C17D239FD for ; Thu, 14 Jan 2021 12:42:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2C17D239FD 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=tYFY2rLzDXiWgv42AbolqUocKeu0ypmiEsQNovjBS4k=; b=WCw3wOeJfAQP452/Pza1T18lD MFulieY5M+7FSHDPnhhAIZPZ22TjwQuKyAfhN9KRtJgPzcuhflAMcgJ6n8mw29Iu8rK+hyGs2Idjl jvBVeh0U8TX7ehB6OXGICsZcjsESAJ3HJFBvho1JMY9XdAzect7kp7CgnZoYaborxnrcs1DsTCI3Z zKaDBMhqW1VTkjqQ1wopuHLGbkTL+JLzO7Lg3uzEVNyphjJxodw5lyOxTR60hIJrIaqRD7kytSzL8 z3vZ+/wmtH2T9RDogZ3xWFnkYuuQh3EB8b06gEUo61kLw75wbwF1jls+TrPazw2E21NcspRGEX+WX 0mHVxjZiQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l01w7-0001jB-Dp; Thu, 14 Jan 2021 12:41:11 +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 1l01vt-0001gC-JM for linux-arm-kernel@lists.infradead.org; Thu, 14 Jan 2021 12:41:01 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id C5DD523A61; Thu, 14 Jan 2021 12:40:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1610628056; bh=BM2JrmrK5VRVYXEAX31FmsqxA+U0Nplk6UV2WlHNTT8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lGUG7aVVKLpy0ULIGMXUEMD7z3ejJd1HmKIM0lJ8DsPhmL5gQs8JX3k78U556NlS7 ia/F0SoOL7h9crLT+zM0RYBO24dV7JHvX9Ju8OHlMRQc9XXK8uZNC3IPCVQhHWWviV FBh9DExD1rw2ZCijn4Gdgd8r79UFZnQDsImn+dEkI1azCBgj/6gwhPlyU375PW0TeW bPrLKAv1igtFr+i0b1LVWgZ0rFYaIQPLuZI1wsMy+ZIkc3D0fXxOALF4FlY1loW/oN iRg6jrcBlIn63S4nrhdQyMhk0PN7D1+imM/HbJX5VZQx8/GZMvvx9QeR6UviO1eRA0 RajRerSTd0YUQ== Received: by pali.im (Postfix) id 8E51B843; Thu, 14 Jan 2021 13:40:54 +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 v2 06/10] clk: mvebu: armada-37xx-periph: Fix workaround for switching from L1 to L0 Date: Thu, 14 Jan 2021 13:40:28 +0100 Message-Id: <20210114124032.12765-7-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210114124032.12765-1-pali@kernel.org> References: <20210114124032.12765-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210114_074057_850661_84F46207 X-CRM114-Status: GOOD ( 17.14 ) 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 YWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgpGaXhlczogNjFjNDBmMzVmNWNkICgiY2xrOiBt dmVidTogYXJtYWRhLTM3eHgtcGVyaXBoOiBGaXggc3dpdGNoaW5nIENQVSByYXRlIGZyb20gMzAw TWh6IHRvIDEuMkdIeiIpCkNjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnCi0tLQogZHJpdmVycy9j bGsvbXZlYnUvYXJtYWRhLTM3eHgtcGVyaXBoLmMgfCA0NSArKysrKysrKysrKysrKysrKysrKysr LS0tLQogMSBmaWxlIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbXZlYnUvYXJtYWRhLTM3eHgtcGVyaXBoLmMgYi9kcml2 ZXJzL2Nsay9tdmVidS9hcm1hZGEtMzd4eC1wZXJpcGguYwppbmRleCBiMTVlMTc3YmVhN2UuLjMy YWM2YjZiNzUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvbXZlYnUvYXJtYWRhLTM3eHgtcGVy aXBoLmMKKysrIGIvZHJpdmVycy9jbGsvbXZlYnUvYXJtYWRhLTM3eHgtcGVyaXBoLmMKQEAgLTg0 LDYgKzg0LDcgQEAgc3RydWN0IGNsa19wbV9jcHUgewogCXZvaWQgX19pb21lbSAqcmVnX2RpdjsK IAl1OCBzaGlmdF9kaXY7CiAJc3RydWN0IHJlZ21hcCAqbmJfcG1fYmFzZTsKKwl1bnNpZ25lZCBs b25nIGwxX2V4cGlyYXRpb247CiB9OwogCiAjZGVmaW5lIHRvX2Nsa19kb3VibGVfZGl2KF9odykg Y29udGFpbmVyX29mKF9odywgc3RydWN0IGNsa19kb3VibGVfZGl2LCBodykKQEAgLTUwNCwyMiAr NTA1LDUyIEBAIHN0YXRpYyBsb25nIGNsa19wbV9jcHVfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3 ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogICogMi4gU2xlZXAgMjBtcyBmb3Igc3RhYmxpbmcg VkREIHZvbHRhZ2UKICAqIDMuIFRoZW4gc3dpdGNoIGZyb20gTDEgKDUwMC82MDAgTUh6KSB0byBM MCAoMTAwMC8xMjAwIE1IeikuCiAgKi8KLXN0YXRpYyB2b2lkIGNsa19wbV9jcHVfc2V0X3JhdGVf d2EodW5zaWduZWQgbG9uZyByYXRlLCBzdHJ1Y3QgcmVnbWFwICpiYXNlKQorc3RhdGljIHZvaWQg Y2xrX3BtX2NwdV9zZXRfcmF0ZV93YShzdHJ1Y3QgY2xrX3BtX2NwdSAqcG1fY3B1LAorCQkJCSAg IHVuc2lnbmVkIGludCBuZXdfbGV2ZWwsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICBzdHJ1 Y3QgcmVnbWFwICpiYXNlKQogewogCXVuc2lnbmVkIGludCBjdXJfbGV2ZWw7CiAKLQlpZiAocmF0 ZSA8IDEwMDAgKiAxMDAwICogMTAwMCkKLQkJcmV0dXJuOwotCiAJcmVnbWFwX3JlYWQoYmFzZSwg QVJNQURBXzM3WFhfTkJfQ1BVX0xPQUQsICZjdXJfbGV2ZWwpOwogCWN1cl9sZXZlbCAmPSBBUk1B REFfMzdYWF9OQl9DUFVfTE9BRF9NQVNLOwotCWlmIChjdXJfbGV2ZWwgPD0gQVJNQURBXzM3WFhf RFZGU19MT0FEXzEpCisKKwlpZiAoY3VyX2xldmVsID09IG5ld19sZXZlbCkKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBTeXN0ZW0gd2FudHMgdG8gZ28gdG8gTDEgb24gaXRzIG93bi4gSWYgd2UgYXJl IGdvaW5nIGZyb20gTDIvTDMsCisJICogcmVtZW1iZXIgd2hlbiAyMG1zIHdpbGwgZXhwaXJlLiBJ ZiBmcm9tIEwwLCBzZXQgdGhlIHZhbHVlIHNvIHRoYXQKKwkgKiBuZXh0IHN3aXRjaCB0byBMMCB3 b24ndCBoYXZlIHRvIHdhaXQuCisJICovCisJaWYgKG5ld19sZXZlbCA9PSBBUk1BREFfMzdYWF9E VkZTX0xPQURfMSkgeworCQlpZiAoY3VyX2xldmVsID09IEFSTUFEQV8zN1hYX0RWRlNfTE9BRF8w KQorCQkJcG1fY3B1LT5sMV9leHBpcmF0aW9uID0gamlmZmllczsKKwkJZWxzZQorCQkJcG1fY3B1 LT5sMV9leHBpcmF0aW9uID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOwogCQlyZXR1 cm47CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgc2V0dGluZyB0byBMMi9MMywganVzdCBpbnZh bGlkYXRlIEwxIGV4cGlyYXRpb24gdGltZSwKKwkgKiBzbGVlcGluZyBpcyBub3QgbmVlZGVkLgor CSAqLworCWlmIChyYXRlIDwgMTAwMCoxMDAwKjEwMDApCisJCWdvdG8gaW52YWxpZGF0ZV9sMV9l eHA7CisKKwkvKgorCSAqIFdlIGFyZSBnb2luZyB0byBMMCB3aXRoIHJhdGUgPj0gMUdIei4gQ2hl Y2sgd2hldGhlciB3ZSBoYXZlIGJlZW4gYXQKKwkgKiBMMSBmb3IgbG9uZyBlbm91Z2ggdGltZS4g SWYgbm90LCBnbyB0byBMMSBmb3IgMjBtcy4KKwkgKi8KKwlpZiAocG1fY3B1LT5sMV9leHBpcmF0 aW9uICYmIGppZmZpZXMgPj0gcG1fY3B1LT5sMV9leHBpcmF0aW9uKQorCQlnb3RvIGludmFsaWRh dGVfbDFfZXhwOwogCiAJcmVnbWFwX3VwZGF0ZV9iaXRzKGJhc2UsIEFSTUFEQV8zN1hYX05CX0NQ VV9MT0FELAogCQkJICAgQVJNQURBXzM3WFhfTkJfQ1BVX0xPQURfTUFTSywKIAkJCSAgIEFSTUFE QV8zN1hYX0RWRlNfTE9BRF8xKTsKIAltc2xlZXAoMjApOworCitpbnZhbGlkYXRlX2wxX2V4cDoK KwlwbV9jcHUtPmwxX2V4cGlyYXRpb24gPSAwOwogfQogCiBzdGF0aWMgaW50IGNsa19wbV9jcHVf c2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKQEAgLTU1Myw3 ICs1ODQsOSBAQCBzdGF0aWMgaW50IGNsa19wbV9jcHVfc2V0X3JhdGUoc3RydWN0IGNsa19odyAq aHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAkJCXJlZyA9IEFSTUFEQV8zN1hYX05CX0NQVV9MT0FE OwogCQkJbWFzayA9IEFSTUFEQV8zN1hYX05CX0NQVV9MT0FEX01BU0s7CiAKLQkJCWNsa19wbV9j cHVfc2V0X3JhdGVfd2EocmF0ZSwgYmFzZSk7CisJCQkvKiBBcHBseSB3b3JrYXJvdW5kIHdoZW4g YmFzZSBDUFUgZnJlcXVlbmN5IGlzIDEwMDAgb3IgMTIwMCBNSHogKi8KKwkJCWlmIChwYXJlbnRf cmF0ZSA+PSAxMDAwKjEwMDAqMTAwMCkKKwkJCQljbGtfcG1fY3B1X3NldF9yYXRlX3dhKHBtX2Nw dSwgbG9hZF9sZXZlbCwgcmF0ZSwgYmFzZSk7CiAKIAkJCXJlZ21hcF91cGRhdGVfYml0cyhiYXNl LCByZWcsIG1hc2ssIGxvYWRfbGV2ZWwpOwogCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==