From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Osipenko Subject: [PATCH v10 1/7] ARM: trusted_foundations: Support L2 cache maintenance Date: Mon, 18 Mar 2019 01:52:04 +0300 Message-ID: <20190317225211.23091-2-digetx@gmail.com> References: <20190317225211.23091-1-digetx@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20190317225211.23091-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 | 10 ++++++ 2 files changed, 51 insertions(+) diff --git a/arch/arm/firmware/trusted_foundations.c b/arch/arm/firmware/trusted_foundations.c index 689e6565abfc..d7ac05103a52 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 & L310_AUX_CTRL_ASSOCIATIVITY_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..9e6a41e9215e 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,9 @@ 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) +{ +} static inline void register_trusted_foundations( struct trusted_foundations_platform_data *pd) @@ -53,6 +59,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 kept 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=-8.7 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,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 51FE2C10F05 for ; Sun, 17 Mar 2019 22:55:54 +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 215C72087F for ; Sun, 17 Mar 2019 22:55:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="SREV5y7v"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PEi36b5z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 215C72087F 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=KtoVNA+NVY4PsYVIOC1p2tzeGKX6IYAJfB8na5jGZMk=; b=SREV5y7vKuBL4z It1Idnoor8ppnNqRuskqV5mji71cY6rZNq3z1LZFIslmcE8rN54Cfl11c7CnfZI8/DeXt0F9HoB2X KbXIj3lQts8z5cXUDZJJJdprujX5rv/zFmq9RSV1zY4Gjqicz1exrCMGd2og9WIb3dDSIH3IewijT xFabLQwUbbhG1IxjGZBFiMYtMhOl4XJ7g/lCGdlMTCramFf+sZHgunAxdbUCbEed74GSmawsYq7ME 8tvlOSA1H3zGtr6BAv8/6PInV5b/1xixELuMrXFfE56JDLn63jfooBv6t3IWKFmd5yuCGxfOmIJPG Skt2wPgkxcUirP9mkcGQ==; 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 1h5eh0-0006zE-OD; Sun, 17 Mar 2019 22:55:47 +0000 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h5egs-0006ps-Va for linux-arm-kernel@lists.infradead.org; Sun, 17 Mar 2019 22:55:42 +0000 Received: by mail-pg1-x542.google.com with SMTP id r124so10045134pgr.3 for ; Sun, 17 Mar 2019 15:55:36 -0700 (PDT) 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=HSikdKeOgVMUbPdUvSpI1vxVe2RfmJf1h+7n9WQeyU8=; b=PEi36b5zpTEJmpsUOoisFLOi8d0Q0wXGJL03axzsB31v6fjwhnROUduUsTzUDN2VpB gdU0L3pNl8GVgRy6yvobK7eIMSxSRgXn4jx9PQw2Yo+zbjqohE2vQKoy7Jm6uYV1jo9S wdotEepLqUf4MPxOJPrb5dcs/Mm4Mc1tMd9zyIiZRk13wBSSBTYnfNDG50igZstmMsaX 5YWRmFDIHrLNoIxSIdRiaWvuoFaZ/zKuGhx55wWjIgVZgo5I+OahEOdF1QZHnVywEXsn /7E07VUQBssgr0tIrT4GjqKOqQghkBNFwQbDGV/VoljyQ1px4irDTtjb2eXobN9W1Xzq TvpQ== 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=HSikdKeOgVMUbPdUvSpI1vxVe2RfmJf1h+7n9WQeyU8=; b=kXcjFVYgIWE6FEy0bBlqTuXLRQWheDDtjDJEIUKV8J6Bb+gy7u7JLF+JUwt8+lvmR/ OlHCTb4vj5H2BqVavEKo3SnONPxqXzJS5gluwGXbecopTBwasbiNQRnglCIRTsCQj8NG h8xbTyOPhIuI6nDE9mV9IK893sNOdtlOdDpQB+8ImzExnRxI2TauoFCMqBLxM9FrmAYp D7b+Q7oGzs1uWM1QroDi25AAOHoEVjNeH9xtSud9Sfnvat/lDwmKPPVe9k7kPI+mlky5 jcLKvZ9kGT08a/LQD5P246FmeTIg7Yx8B/cIibuXEd3e+PC2bu5EKJv4cF6KtJejfPQF WULQ== X-Gm-Message-State: APjAAAUCVc5Tyl0VvcKYWXbLU2I4/ZD1UdfO2Zab72J04bJ0PSsaO/+k EWxlH0y8ewH7gabjGbm9s8Q= X-Google-Smtp-Source: APXvYqyHAAmmuTYlCvbEWrpAnISBYqSZKxjOQsd5C8tcZzyRaWynTw9dZDqIz6Oll/Xt9t5tQfTRFw== X-Received: by 2002:a65:6559:: with SMTP id a25mr13688586pgw.99.1552863336090; Sun, 17 Mar 2019 15:55:36 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-37-86.pppoe.spdop.ru. [94.29.37.86]) by smtp.gmail.com with ESMTPSA id v2sm13738838pfg.118.2019.03.17.15.55.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 17 Mar 2019 15:55:35 -0700 (PDT) From: Dmitry Osipenko To: Russell King , Thierry Reding , Jonathan Hunter , Robert Yang , =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Subject: [PATCH v10 1/7] ARM: trusted_foundations: Support L2 cache maintenance Date: Mon, 18 Mar 2019 01:52:04 +0300 Message-Id: <20190317225211.23091-2-digetx@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317225211.23091-1-digetx@gmail.com> References: <20190317225211.23091-1-digetx@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190317_155539_162983_610982AF X-CRM114-Status: GOOD ( 14.88 ) 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 c20vdHJ1c3RlZF9mb3VuZGF0aW9ucy5oIHwgMTAgKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDUx IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9hcmNoL2FybS9maXJtd2FyZS90cnVzdGVkX2Zv dW5kYXRpb25zLmMgYi9hcmNoL2FybS9maXJtd2FyZS90cnVzdGVkX2ZvdW5kYXRpb25zLmMKaW5k ZXggNjg5ZTY1NjVhYmZjLi5kN2FjMDUxMDNhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Zpcm13 YXJlL3RydXN0ZWRfZm91bmRhdGlvbnMuYworKysgYi9hcmNoL2FybS9maXJtd2FyZS90cnVzdGVk X2ZvdW5kYXRpb25zLmMKQEAgLTE4LDggKzE4LDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5o PgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjaW5j bHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KKyNpbmNsdWRlIDxhc20vb3V0ZXJjYWNo ZS5oPgogI2luY2x1ZGUgPGFzbS90cnVzdGVkX2ZvdW5kYXRpb25zLmg+CiAKKyNkZWZpbmUgVEZf Q0FDSEVfTUFJTlQJCTB4ZmZmZmYxMDAKKworI2RlZmluZSBURl9DQUNIRV9FTkFCTEUJCTEKKyNk ZWZpbmUgVEZfQ0FDSEVfRElTQUJMRQkyCisKICNkZWZpbmUgVEZfU0VUX0NQVV9CT09UX0FERFJf U01DIDB4ZmZmZmYyMDAKIAogI2RlZmluZSBURl9DUFVfUE0JCTB4ZmZmZmZmZmMKQEAgLTY3LDkg Kzc0LDQzIEBAIHN0YXRpYyBpbnQgdGZfcHJlcGFyZV9pZGxlKHZvaWQpCiAJcmV0dXJuIDA7CiB9 CiAKKyNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAorc3RhdGljIHZvaWQgdGZfY2FjaGVfd3JpdGVf c2VjKHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXUzMiBsMngwX3dh eV9tYXNrID0gMHhmZjsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBMMlgwX0NUUkw6CisJCWlm IChsMngwX3NhdmVkX3JlZ3MuYXV4X2N0cmwgJiBMMzEwX0FVWF9DVFJMX0FTU09DSUFUSVZJVFlf MTYpCisJCQlsMngwX3dheV9tYXNrID0gMHhmZmZmOworCisJCWlmICh2YWwgPT0gTDJYMF9DVFJM X0VOKQorCQkJdGZfZ2VuZXJpY19zbWMoVEZfQ0FDSEVfTUFJTlQsIFRGX0NBQ0hFX0VOQUJMRSwK KwkJCQkgICAgICAgbDJ4MF9zYXZlZF9yZWdzLmF1eF9jdHJsKTsKKwkJZWxzZQorCQkJdGZfZ2Vu ZXJpY19zbWMoVEZfQ0FDSEVfTUFJTlQsIFRGX0NBQ0hFX0RJU0FCTEUsCisJCQkJICAgICAgIGwy eDBfd2F5X21hc2spOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwor c3RhdGljIGludCB0Zl9pbml0X2NhY2hlKHZvaWQpCit7CisJb3V0ZXJfY2FjaGUud3JpdGVfc2Vj ID0gdGZfY2FjaGVfd3JpdGVfc2VjOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklH X0NBQ0hFX0wyWDAgKi8KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZV9vcHMgdHJ1c3Rl ZF9mb3VuZGF0aW9uc19vcHMgPSB7CiAJLnNldF9jcHVfYm9vdF9hZGRyID0gdGZfc2V0X2NwdV9i b290X2FkZHIsCiAJLnByZXBhcmVfaWRsZSA9IHRmX3ByZXBhcmVfaWRsZSwKKyNpZmRlZiBDT05G SUdfQ0FDSEVfTDJYMAorCS5sMngwX2luaXQgPSB0Zl9pbml0X2NhY2hlLAorI2VuZGlmCiB9Owog CiB2b2lkIHJlZ2lzdGVyX3RydXN0ZWRfZm91bmRhdGlvbnMoc3RydWN0IHRydXN0ZWRfZm91bmRh dGlvbnNfcGxhdGZvcm1fZGF0YSAqcGQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2Fz bS90cnVzdGVkX2ZvdW5kYXRpb25zLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90cnVzdGVkX2Zv dW5kYXRpb25zLmgKaW5kZXggMDA3NDgzNTBjZjcyLi45ZTZhNDFlOTIxNWUgMTAwNjQ0Ci0tLSBh L2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RydXN0ZWRfZm91bmRhdGlvbnMuaAorKysgYi9hcmNoL2Fy bS9pbmNsdWRlL2FzbS90cnVzdGVkX2ZvdW5kYXRpb25zLmgKQEAgLTMyLDYgKzMyLDkgQEAKICNp bmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAorI2luY2x1ZGUg PGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CisjaW5jbHVkZSA8YXNtL291dGVyY2FjaGUuaD4K Kwogc3RydWN0IHRydXN0ZWRfZm91bmRhdGlvbnNfcGxhdGZvcm1fZGF0YSB7CiAJdW5zaWduZWQg aW50IHZlcnNpb25fbWFqb3I7CiAJdW5zaWduZWQgaW50IHZlcnNpb25fbWlub3I7CkBAIC00Myw2 ICs0Niw5IEBAIHZvaWQgcmVnaXN0ZXJfdHJ1c3RlZF9mb3VuZGF0aW9ucyhzdHJ1Y3QgdHJ1c3Rl ZF9mb3VuZGF0aW9uc19wbGF0Zm9ybV9kYXRhICpwZCk7CiB2b2lkIG9mX3JlZ2lzdGVyX3RydXN0 ZWRfZm91bmRhdGlvbnModm9pZCk7CiAKICNlbHNlIC8qIENPTkZJR19UUlVTVEVEX0ZPVU5EQVRJ T05TICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGZfZHVtbXlfd3JpdGVfc2VjKHVuc2lnbmVkIGxv bmcgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQoreworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVn aXN0ZXJfdHJ1c3RlZF9mb3VuZGF0aW9ucygKIAkJCQkgICBzdHJ1Y3QgdHJ1c3RlZF9mb3VuZGF0 aW9uc19wbGF0Zm9ybV9kYXRhICpwZCkKQEAgLTUzLDYgKzU5LDEwIEBAIHN0YXRpYyBpbmxpbmUg dm9pZCByZWdpc3Rlcl90cnVzdGVkX2ZvdW5kYXRpb25zKAogCSAqLwogCXByX2VycigiTm8gc3Vw cG9ydCBmb3IgVHJ1c3RlZCBGb3VuZGF0aW9ucywgY29udGludWluZyBpbiBkZWdyYWRlZCBtb2Rl LlxuIik7CiAJcHJfZXJyKCJTZWNvbmRhcnkgcHJvY2Vzc29ycyBhcyB3ZWxsIGFzIENQVSBQTSB3 aWxsIGJlIGRpc2FibGVkLlxuIik7CisjaWYgSVNfRU5BQkxFRChDT05GSUdfQ0FDSEVfTDJYMCkK Kwlwcl9lcnIoIkwyWDAgY2FjaGUgd2lsbCBiZSBrZXB0IGRpc2FibGVkLlxuIik7CisJb3V0ZXJf Y2FjaGUud3JpdGVfc2VjID0gdGZfZHVtbXlfd3JpdGVfc2VjOworI2VuZGlmCiAjaWYgSVNfRU5B QkxFRChDT05GSUdfU01QKQogCXNldHVwX21heF9jcHVzID0gMDsKICNlbmRpZgotLSAKMi4yMC4x CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=