From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Osipenko Subject: [PATCH v7 1/7] ARM: trusted_foundations: Support L2 cache maintenance Date: Thu, 28 Feb 2019 16:17:01 +0300 Message-ID: <20190228131707.2592-2-digetx@gmail.com> References: <20190228131707.2592-1-digetx@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20190228131707.2592-1-digetx@gmail.com> Sender: linux-kernel-owner@vger.kernel.org To: Russell King , Thierry Reding , Jonathan Hunter , Robert Yang , =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Cc: linux-arm-kernel@lists.infradead.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: linux-tegra@vger.kernel.org Implement L2 cache initialization firmware callback that should be invoked early during boot in order to set up the required outer cache driver's callbacks and add the callback required for L2X0 maintenance. Partially based on work done by Michał Mirosław [1]. [1] https://www.spinics.net/lists/arm-kernel/msg594765.html Tested-by: Robert Yang Tested-by: Michał Mirosław Signed-off-by: Michał Mirosław Signed-off-by: Dmitry Osipenko --- arch/arm/firmware/trusted_foundations.c | 41 ++++++++++++++++++++++ arch/arm/include/asm/trusted_foundations.h | 12 +++++++ 2 files changed, 53 insertions(+) diff --git a/arch/arm/firmware/trusted_foundations.c b/arch/arm/firmware/trusted_foundations.c index 689e6565abfc..4028104cf7b2 100644 --- a/arch/arm/firmware/trusted_foundations.c +++ b/arch/arm/firmware/trusted_foundations.c @@ -18,8 +18,15 @@ #include #include #include +#include +#include #include +#define TF_CACHE_MAINT 0xfffff100 + +#define TF_CACHE_ENABLE 1 +#define TF_CACHE_DISABLE 2 + #define TF_SET_CPU_BOOT_ADDR_SMC 0xfffff200 #define TF_CPU_PM 0xfffffffc @@ -67,9 +74,43 @@ static int tf_prepare_idle(void) return 0; } +#ifdef CONFIG_CACHE_L2X0 +static void tf_cache_write_sec(unsigned long val, unsigned int reg) +{ + u32 l2x0_way_mask = 0xff; + + switch (reg) { + case L2X0_CTRL: + if (l2x0_saved_regs.aux_ctrl & BIT(16)) + l2x0_way_mask = 0xffff; + + if (val == L2X0_CTRL_EN) + tf_generic_smc(TF_CACHE_MAINT, TF_CACHE_ENABLE, + l2x0_saved_regs.aux_ctrl); + else + tf_generic_smc(TF_CACHE_MAINT, TF_CACHE_DISABLE, + l2x0_way_mask); + break; + + default: + break; + } +} + +static int tf_init_cache(void) +{ + outer_cache.write_sec = tf_cache_write_sec; + + return 0; +} +#endif /* CONFIG_CACHE_L2X0 */ + static const struct firmware_ops trusted_foundations_ops = { .set_cpu_boot_addr = tf_set_cpu_boot_addr, .prepare_idle = tf_prepare_idle, +#ifdef CONFIG_CACHE_L2X0 + .l2x0_init = tf_init_cache, +#endif }; void register_trusted_foundations(struct trusted_foundations_platform_data *pd) diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h index 00748350cf72..07183ca43b25 100644 --- a/arch/arm/include/asm/trusted_foundations.h +++ b/arch/arm/include/asm/trusted_foundations.h @@ -32,6 +32,9 @@ #include #include +#include +#include + struct trusted_foundations_platform_data { unsigned int version_major; unsigned int version_minor; @@ -43,6 +46,11 @@ void register_trusted_foundations(struct trusted_foundations_platform_data *pd); void of_register_trusted_foundations(void); #else /* CONFIG_TRUSTED_FOUNDATIONS */ +static inline void tf_dummy_write_sec(unsigned long val, unsigned int reg) +{ + if (reg == L2X0_CTRL && val == L2X0_CTRL_EN) + pr_err("Trusted Foundations unavailable, ignoring L2C enable-request\n"); +} static inline void register_trusted_foundations( struct trusted_foundations_platform_data *pd) @@ -53,6 +61,10 @@ static inline void register_trusted_foundations( */ pr_err("No support for Trusted Foundations, continuing in degraded mode.\n"); pr_err("Secondary processors as well as CPU PM will be disabled.\n"); +#if IS_ENABLED(CONFIG_CACHE_L2X0) + pr_err("L2X0 cache will be disabled.\n"); + outer_cache.write_sec = tf_dummy_write_sec; +#endif #if IS_ENABLED(CONFIG_SMP) setup_max_cpus = 0; #endif -- 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=-9.0 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,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 6C09AC43381 for ; Thu, 28 Feb 2019 13:19:08 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 3B68720C01 for ; Thu, 28 Feb 2019 13:19:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="NWboeKC3"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="X88mHS2a" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3B68720C01 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.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=/MePI9pw02mkRRFxer5rMdEmTTYFve+XhJfx4uIRfPA=; b=NWboeKC3R4wjNo ub93kXfv3RfN3NtfwCX5o9+fOJBP+swaDHyNS/eWs5o3dRcStKP9+UmwUBvG08smBaowJM/BaHL91 djzwz66Lo9K3JEx69JNg65fJGmUNXcqlpRBhfq2F27kgbvc4AF98ZJuUgMjak42e30131g27/ebq2 Zb/YesXFq7OjWmdFsl2WSet0kSJWlJXjdeq1R7HSll47w4lDZNXA6HHlI+eCTtwpE2+s2s6oYtwAX Z9gk9VFXkt/2sabchuKgvMdoUa6brphzA+GbmjuEi/7iIDc6lniE9HLJJ1TCkfe9P5vFAky2vR4XN sRoso6mzOmMCjs2np7WQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gzLaa-0004US-Gg; Thu, 28 Feb 2019 13:19:04 +0000 Received: from mail-lj1-x243.google.com ([2a00:1450:4864:20::243]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gzLaI-0004CK-AP for linux-arm-kernel@lists.infradead.org; Thu, 28 Feb 2019 13:18:48 +0000 Received: by mail-lj1-x243.google.com with SMTP id d14so17065898ljl.9 for ; Thu, 28 Feb 2019 05:18:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yAub7ZN7TB3C9m6Jjn4lIV9KKAuyGf3mG5EO+qiXK7g=; b=X88mHS2aPJyQxDRk1zfz0iJtFQNRomWUXrlYh1C8GQEXe7dWsioRcl/EtDeNRQSEdl 3TjYRC1jW79JIxCQbdYvw1+OXJ3npD8fQz6PWLIhdmCsEKB1KBzv94N0KpJOsBC+XewR 2HoORB92YCR9yBfddICdOlr/R2exPt3Vak3tkn0iTdMxlSwCMf2niKYVOITHGPRLHP4p iXG0dAfj+Gr+ns6lHSPoaEIB1B/qI1OjYyPk3WFl36zxt5AimcrAExRy/zr0sJXodjwK 32YvQyyKa9QXe1rFVweX+r4bPu0kj+WlwefYTWfV1z88yW2D0VRAEjSDwXOWLnyJIed0 ORsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yAub7ZN7TB3C9m6Jjn4lIV9KKAuyGf3mG5EO+qiXK7g=; b=sNlXeP9ftvlERhbl4GDh3PdoltL3CAcMDnzaPxo3W622g26rfQUWwRICpl9306W/8L u01MgOERp0l4LtO/TqGFPWKwDJJ8/z9lY9vqhibjD/behxdhF1VO3fQAVC45/J8HK1CF KDKlXDoQ8xcjXH0OfgMJlDCBI/PRiUQlL19AVhPK4UaMH2q02ODwbwAS88XuR8+XQL6q C8Kr3NV5ai456kb+vEO++WpYWoF4BOq2f+lw/vDZDXLNZTG/DqXhmWhCvL80xcqH7a29 gEHZ67jZjuwf4ouHjtM06ZQ2RYpTS7+g53skDzkAe083iZLIluZAM1CpVedgZ7PMk1kE M9lQ== X-Gm-Message-State: AHQUAuaDLFnlYajK3llwVOnpJ6EEzwHfsAPc5YZ1t+xZl/Xwuz3WjPID 7QtziBr9Uo4RxLLbNOMIxWs= X-Google-Smtp-Source: AHgI3Iay8ez0a1RQCFomOJDUMhoHpogz5BNBDfxXHCGhS2T/imLnSJwyv6jNxG0dMULdd8ONusesjw== X-Received: by 2002:a2e:131a:: with SMTP id 26-v6mr4612778ljt.107.1551359923994; Thu, 28 Feb 2019 05:18:43 -0800 (PST) Received: from localhost.localdomain (ppp91-79-175-49.pppoe.mtu-net.ru. [91.79.175.49]) by smtp.gmail.com with ESMTPSA id l26sm4600069lfc.37.2019.02.28.05.18.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 28 Feb 2019 05:18:43 -0800 (PST) From: Dmitry Osipenko To: Russell King , Thierry Reding , Jonathan Hunter , Robert Yang , =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Subject: [PATCH v7 1/7] ARM: trusted_foundations: Support L2 cache maintenance Date: Thu, 28 Feb 2019 16:17:01 +0300 Message-Id: <20190228131707.2592-2-digetx@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190228131707.2592-1-digetx@gmail.com> References: <20190228131707.2592-1-digetx@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190228_051846_356789_047A3CE1 X-CRM114-Status: GOOD ( 16.00 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SW1wbGVtZW50IEwyIGNhY2hlIGluaXRpYWxpemF0aW9uIGZpcm13YXJlIGNhbGxiYWNrIHRoYXQg c2hvdWxkIGJlCmludm9rZWQgZWFybHkgZHVyaW5nIGJvb3QgaW4gb3JkZXIgdG8gc2V0IHVwIHRo ZSByZXF1aXJlZCBvdXRlciBjYWNoZQpkcml2ZXIncyBjYWxsYmFja3MgYW5kIGFkZCB0aGUgY2Fs bGJhY2sgcmVxdWlyZWQgZm9yIEwyWDAgbWFpbnRlbmFuY2UuCgpQYXJ0aWFsbHkgYmFzZWQgb24g d29yayBkb25lIGJ5IE1pY2hhxYIgTWlyb3PFgmF3IFsxXS4KClsxXSBodHRwczovL3d3dy5zcGlu aWNzLm5ldC9saXN0cy9hcm0ta2VybmVsL21zZzU5NDc2NS5odG1sCgpUZXN0ZWQtYnk6IFJvYmVy dCBZYW5nIDxkZWNhdGZAZ21haWwuY29tPgpUZXN0ZWQtYnk6IE1pY2hhxYIgTWlyb3PFgmF3IDxt aXJxLWxpbnV4QHJlcmUucW1xbS5wbD4KU2lnbmVkLW9mZi1ieTogTWljaGHFgiBNaXJvc8WCYXcg PG1pcnEtbGludXhAcmVyZS5xbXFtLnBsPgpTaWduZWQtb2ZmLWJ5OiBEbWl0cnkgT3NpcGVua28g PGRpZ2V0eEBnbWFpbC5jb20+Ci0tLQogYXJjaC9hcm0vZmlybXdhcmUvdHJ1c3RlZF9mb3VuZGF0 aW9ucy5jICAgIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKwogYXJjaC9hcm0vaW5jbHVkZS9h c20vdHJ1c3RlZF9mb3VuZGF0aW9ucy5oIHwgMTIgKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1 MyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vZmlybXdhcmUvdHJ1c3RlZF9m b3VuZGF0aW9ucy5jIGIvYXJjaC9hcm0vZmlybXdhcmUvdHJ1c3RlZF9mb3VuZGF0aW9ucy5jCmlu ZGV4IDY4OWU2NTY1YWJmYy4uNDAyODEwNGNmN2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9maXJt d2FyZS90cnVzdGVkX2ZvdW5kYXRpb25zLmMKKysrIGIvYXJjaC9hcm0vZmlybXdhcmUvdHJ1c3Rl ZF9mb3VuZGF0aW9ucy5jCkBAIC0xOCw4ICsxOCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQu aD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorI2lu Y2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CisjaW5jbHVkZSA8YXNtL291dGVyY2Fj aGUuaD4KICNpbmNsdWRlIDxhc20vdHJ1c3RlZF9mb3VuZGF0aW9ucy5oPgogCisjZGVmaW5lIFRG X0NBQ0hFX01BSU5UCQkweGZmZmZmMTAwCisKKyNkZWZpbmUgVEZfQ0FDSEVfRU5BQkxFCQkxCisj ZGVmaW5lIFRGX0NBQ0hFX0RJU0FCTEUJMgorCiAjZGVmaW5lIFRGX1NFVF9DUFVfQk9PVF9BRERS X1NNQyAweGZmZmZmMjAwCiAKICNkZWZpbmUgVEZfQ1BVX1BNCQkweGZmZmZmZmZjCkBAIC02Nyw5 ICs3NCw0MyBAQCBzdGF0aWMgaW50IHRmX3ByZXBhcmVfaWRsZSh2b2lkKQogCXJldHVybiAwOwog fQogCisjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKK3N0YXRpYyB2b2lkIHRmX2NhY2hlX3dyaXRl X3NlYyh1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MzIgbDJ4MF93 YXlfbWFzayA9IDB4ZmY7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgTDJYMF9DVFJMOgorCQlp ZiAobDJ4MF9zYXZlZF9yZWdzLmF1eF9jdHJsICYgQklUKDE2KSkKKwkJCWwyeDBfd2F5X21hc2sg PSAweGZmZmY7CisKKwkJaWYgKHZhbCA9PSBMMlgwX0NUUkxfRU4pCisJCQl0Zl9nZW5lcmljX3Nt YyhURl9DQUNIRV9NQUlOVCwgVEZfQ0FDSEVfRU5BQkxFLAorCQkJCSAgICAgICBsMngwX3NhdmVk X3JlZ3MuYXV4X2N0cmwpOworCQllbHNlCisJCQl0Zl9nZW5lcmljX3NtYyhURl9DQUNIRV9NQUlO VCwgVEZfQ0FDSEVfRElTQUJMRSwKKwkJCQkgICAgICAgbDJ4MF93YXlfbWFzayk7CisJCWJyZWFr OworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHRmX2luaXRfY2Fj aGUodm9pZCkKK3sKKwlvdXRlcl9jYWNoZS53cml0ZV9zZWMgPSB0Zl9jYWNoZV93cml0ZV9zZWM7 CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfQ0FDSEVfTDJYMCAqLworCiBzdGF0 aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlX29wcyB0cnVzdGVkX2ZvdW5kYXRpb25zX29wcyA9IHsK IAkuc2V0X2NwdV9ib290X2FkZHIgPSB0Zl9zZXRfY3B1X2Jvb3RfYWRkciwKIAkucHJlcGFyZV9p ZGxlID0gdGZfcHJlcGFyZV9pZGxlLAorI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCisJLmwyeDBf aW5pdCA9IHRmX2luaXRfY2FjaGUsCisjZW5kaWYKIH07CiAKIHZvaWQgcmVnaXN0ZXJfdHJ1c3Rl ZF9mb3VuZGF0aW9ucyhzdHJ1Y3QgdHJ1c3RlZF9mb3VuZGF0aW9uc19wbGF0Zm9ybV9kYXRhICpw ZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RydXN0ZWRfZm91bmRhdGlvbnMu aCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RydXN0ZWRfZm91bmRhdGlvbnMuaAppbmRleCAwMDc0 ODM1MGNmNzIuLjA3MTgzY2E0M2IyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20v dHJ1c3RlZF9mb3VuZGF0aW9ucy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RydXN0ZWRf Zm91bmRhdGlvbnMuaApAQCAtMzIsNiArMzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgog I2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwy eDAuaD4KKyNpbmNsdWRlIDxhc20vb3V0ZXJjYWNoZS5oPgorCiBzdHJ1Y3QgdHJ1c3RlZF9mb3Vu ZGF0aW9uc19wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQgdmVyc2lvbl9tYWpvcjsKIAl1 bnNpZ25lZCBpbnQgdmVyc2lvbl9taW5vcjsKQEAgLTQzLDYgKzQ2LDExIEBAIHZvaWQgcmVnaXN0 ZXJfdHJ1c3RlZF9mb3VuZGF0aW9ucyhzdHJ1Y3QgdHJ1c3RlZF9mb3VuZGF0aW9uc19wbGF0Zm9y bV9kYXRhICpwZCk7CiB2b2lkIG9mX3JlZ2lzdGVyX3RydXN0ZWRfZm91bmRhdGlvbnModm9pZCk7 CiAKICNlbHNlIC8qIENPTkZJR19UUlVTVEVEX0ZPVU5EQVRJT05TICovCitzdGF0aWMgaW5saW5l IHZvaWQgdGZfZHVtbXlfd3JpdGVfc2VjKHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCBpbnQg cmVnKQoreworCWlmIChyZWcgPT0gTDJYMF9DVFJMICYmIHZhbCA9PSBMMlgwX0NUUkxfRU4pCisJ CXByX2VycigiVHJ1c3RlZCBGb3VuZGF0aW9ucyB1bmF2YWlsYWJsZSwgaWdub3JpbmcgTDJDIGVu YWJsZS1yZXF1ZXN0XG4iKTsKK30KIAogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX3RydXN0 ZWRfZm91bmRhdGlvbnMoCiAJCQkJICAgc3RydWN0IHRydXN0ZWRfZm91bmRhdGlvbnNfcGxhdGZv cm1fZGF0YSAqcGQpCkBAIC01Myw2ICs2MSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0 ZXJfdHJ1c3RlZF9mb3VuZGF0aW9ucygKIAkgKi8KIAlwcl9lcnIoIk5vIHN1cHBvcnQgZm9yIFRy dXN0ZWQgRm91bmRhdGlvbnMsIGNvbnRpbnVpbmcgaW4gZGVncmFkZWQgbW9kZS5cbiIpOwogCXBy X2VycigiU2Vjb25kYXJ5IHByb2Nlc3NvcnMgYXMgd2VsbCBhcyBDUFUgUE0gd2lsbCBiZSBkaXNh YmxlZC5cbiIpOworI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBQ0hFX0wyWDApCisJcHJfZXJyKCJM MlgwIGNhY2hlIHdpbGwgYmUgZGlzYWJsZWQuXG4iKTsKKwlvdXRlcl9jYWNoZS53cml0ZV9zZWMg PSB0Zl9kdW1teV93cml0ZV9zZWM7CisjZW5kaWYKICNpZiBJU19FTkFCTEVEKENPTkZJR19TTVAp CiAJc2V0dXBfbWF4X2NwdXMgPSAwOwogI2VuZGlmCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==