From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Osipenko Subject: [PATCH v7 0/7] Support Trusted Foundations firmware on Tegra30 Date: Thu, 28 Feb 2019 16:17:00 +0300 Message-ID: <20190228131707.2592-1-digetx@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: 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 Hello, This patchset adds support for the Trusted Foundations firmware on NVIDIA Tegra30. Pretty much all of Tegra30 consumer devices have that firmware and upstream kernel can't boot on those devices without the firmware support. This series was tested on Nexus 7, TF300T and Ouya Tegra30 devices. Changelog: v7: - Fixed kernel booting with CONFIG_TRUSTED_FOUNDATIONS=n by providing a dummy L2C write_sec implementation in the "Support L2 cache maintenance" patch. - Minor clean up: no static variables anymore, replaced white spaces with a tab in one place, etc. - Added Michał's and Robert's Tested-by/Signed-off-by to the patches. v6: - One patch got messed up accidentally in v5, this is fixed now. - Squashed "Support L2 cache maintenance done via firmware" patch into the "Add firmware calls..." patch. - The l2x0_init() firmware callback is now invoked unconditionally because it is always a NO-OP on T114+ and is a NO-OP on T20/30 if firmware node is missed in device-tree, hence there is no need to check the machine's DT compatible as it was done in the previous versions of the series. v5: - Fixed machine hanging on disabling D-cache during suspend, turned out there are slight variations in behaviour between firmware version in regards to cache-management. Thanks to Robert Yang for reporting the problem and helping with the solution. v4: - Fixed Thumb2-kernel hanging on Tegra20, turned out it was not a good idea to switch CPU into Thumb2 mode right after jumping into the reset handler. - Moved LP2-mode-set firmware call invocation to a later stage to better replicate what downstream kernel does. This change was suggested by Robert Yang and fixes system hang on Ouya game console. - Added references to the original work made by Michał Mirosław into commit messages of the relevant patches. v3: - Implemented suspend-resume support. - Reworked arm/firmware/trusted_foundations.c a tad. Now cache is getting properly initialized, cache enabling / disabling is supported. v2: - The "Don't apply CPU erratas in insecure mode" patch got some cleanup, in particular resolved the messiness in __tegra_cpu_reset_handler_data. - Added a comment to tf_cache_write_sec(), justifying the warning message. Dmitry Osipenko (7): ARM: trusted_foundations: Support L2 cache maintenance ARM: trusted_foundations: Make prepare_idle call to take mode argument ARM: trusted_foundations: Provide information about whether firmware is registered ARM: tegra: Set up L2 cache using Trusted Foundations firmware ARM: tegra: Don't apply CPU erratas in insecure mode ARM: tegra: Always boot CPU in ARM-mode ARM: tegra: Add firmware calls required for suspend-resume on Tegra30 arch/arm/firmware/trusted_foundations.c | 75 +++++++++++++++++++++- arch/arm/include/asm/firmware.h | 2 +- arch/arm/include/asm/trusted_foundations.h | 25 ++++++++ arch/arm/mach-tegra/cpuidle-tegra114.c | 3 +- arch/arm/mach-tegra/pm.c | 49 ++++++++++++++ arch/arm/mach-tegra/reset-handler.S | 50 +++++++++++---- arch/arm/mach-tegra/reset.c | 3 + arch/arm/mach-tegra/reset.h | 9 ++- arch/arm/mach-tegra/sleep-tegra20.S | 4 ++ arch/arm/mach-tegra/sleep.S | 14 ++-- arch/arm/mach-tegra/tegra.c | 2 + 11 files changed, 214 insertions(+), 22 deletions(-) -- 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=-3.0 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,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 EA508C4360F for ; Thu, 28 Feb 2019 13:18:53 +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 B3AF120449 for ; Thu, 28 Feb 2019 13:18:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="fEfUnkHv"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HUJr9vAZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B3AF120449 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: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:In-Reply-To:References: List-Owner; bh=HJd74ANk0ACwYIggeskIZ/UWsnemV88wE2iDhisfg8s=; b=fEfUnkHvh80WNq EO9Ywha4oq7s2SX3hsBmG8Rp/qlh352B+FK7zJn4aToavy8OT+uuqXF1OwohPrGz+toaZXrhxpqrc StSlCwM3FslVAzx2KsRLBSC+D2Nc+K3Eph2Phk0jW1B0Rg258rUfrQMarYd1m+wrxjB6nM/jcEf3Z sBEkFef7KLCrIC/jzMyS09QgAGib56XJad6a27uNYebVfnjykJpZTMQTghA8UjguNEZjSdp6+8r7a R96hIurHoX6BVQNzHzl6M+3TXv+D1iBmviibymJUrw9Q4q3xUi0Y78nS/mdEabYpJXrameX4WhdV3 EXQpSOroOGMkji+o+k5g==; 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 1gzLaK-0004DR-Th; Thu, 28 Feb 2019 13:18:48 +0000 Received: from mail-lf1-x142.google.com ([2a00:1450:4864:20::142]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gzLaH-0004CJ-7l for linux-arm-kernel@lists.infradead.org; Thu, 28 Feb 2019 13:18:46 +0000 Received: by mail-lf1-x142.google.com with SMTP id z196so14515809lff.4 for ; Thu, 28 Feb 2019 05:18:44 -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:mime-version :content-transfer-encoding; bh=a15wzvx7tFLD8LiZo50Ded0D042ullA6pwTPr/5iHRU=; b=HUJr9vAZvh/TW9bGAyDTWKkWHrPmvV0Pxy/1TiVl6XO6QgRg7vWbV6nKDEeNMRitAi 791rEx42MP5STEkQTL2Nd17CoOn4x6pGCPmAHrAX4SiMyrsmUcONm66Nd8mLKBkBXOcj ie0dEIx3fbNMYkPeUGCC1dcoz+Iero/x2VwRI+sAx9RMDr1kXu0fEwUjO/hhaUrk4bZg 9qQImsFx9EuT2ZYNXA2cCjetY0MzzPdweLfuP/Q6rcYrN97kn/z9y6egYK8jDgDDiMMm 5kiXfd81FsevwDCoc+S2xuWUOC0uJQaDrZKAVqkZpkVTVDy712KY+ugd9OZRO8xoRabB 2hrA== 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:mime-version :content-transfer-encoding; bh=a15wzvx7tFLD8LiZo50Ded0D042ullA6pwTPr/5iHRU=; b=XlcOIPBmzSz2S8ma5XdjQRaEJdpVcNSEXEjF9rU2XPz1wxN20iEWi80Ct9ldDsu7ey r+0HbsNfGJU51qD7UFZHX1XcxrLjSn4MlKKUtvo4z8Ms/jjApNXFnv/UZNeyPUMBI0+B G87aqptnijvXf3IKgdKMJmsoQGyy6satFvmfZ30hS9+sp3/vtnntKpBrAG9pStZRf3CB kgnrsTuCaE/JZuMfuV7i6I+GzkN7QzXJNBzBHVncFlGQlx6r49chwv4l5qhYMNAkDKHt q00D/oo5PofneQ6ybZi+4ZfQAvx1nv0V4YAXOtDe3jEaFp7igtJSUqPI2Wi511RsSR7l Q2Ew== X-Gm-Message-State: AHQUAubDkIbrafmz8zbLStJF5xH1nX3UeRJIIBejOkiVeHm+nTcCD3Eg UfXsP1BwActv+lLMK4RWEb4= X-Google-Smtp-Source: AHgI3IabfSJ7j1EIejYzHUsjuMH4tPYrOfEjI7SgPIAngX35tNR2SFLEBk39/8C9N6i6FdA/tigEKw== X-Received: by 2002:a19:5601:: with SMTP id k1mr3813948lfb.99.1551359922936; Thu, 28 Feb 2019 05:18:42 -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.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 28 Feb 2019 05:18:42 -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 0/7] Support Trusted Foundations firmware on Tegra30 Date: Thu, 28 Feb 2019 16:17:00 +0300 Message-Id: <20190228131707.2592-1-digetx@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190228_051845_280343_C2AEBF33 X-CRM114-Status: GOOD ( 16.56 ) 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 SGVsbG8sCgpUaGlzIHBhdGNoc2V0IGFkZHMgc3VwcG9ydCBmb3IgdGhlIFRydXN0ZWQgRm91bmRh dGlvbnMgZmlybXdhcmUgb24KTlZJRElBIFRlZ3JhMzAuIFByZXR0eSBtdWNoIGFsbCBvZiBUZWdy YTMwIGNvbnN1bWVyIGRldmljZXMgaGF2ZSB0aGF0CmZpcm13YXJlIGFuZCB1cHN0cmVhbSBrZXJu ZWwgY2FuJ3QgYm9vdCBvbiB0aG9zZSBkZXZpY2VzIHdpdGhvdXQgdGhlCmZpcm13YXJlIHN1cHBv cnQuIFRoaXMgc2VyaWVzIHdhcyB0ZXN0ZWQgb24gTmV4dXMgNywgVEYzMDBUIGFuZCBPdXlhClRl Z3JhMzAgZGV2aWNlcy4KCkNoYW5nZWxvZzoKCnY3OiAgICAgLSBGaXhlZCBrZXJuZWwgYm9vdGlu ZyB3aXRoIENPTkZJR19UUlVTVEVEX0ZPVU5EQVRJT05TPW4gYnkKICAgICAgICAgIHByb3ZpZGlu ZyBhIGR1bW15IEwyQyB3cml0ZV9zZWMgaW1wbGVtZW50YXRpb24gaW4gdGhlCiAgICAgICAgICAi U3VwcG9ydCBMMiBjYWNoZSBtYWludGVuYW5jZSIgcGF0Y2guCgogICAgICAgIC0gTWlub3IgY2xl YW4gdXA6IG5vIHN0YXRpYyB2YXJpYWJsZXMgYW55bW9yZSwgcmVwbGFjZWQKICAgICAgICAgIHdo aXRlIHNwYWNlcyB3aXRoIGEgdGFiIGluIG9uZSBwbGFjZSwgZXRjLgoKICAgICAgICAtIEFkZGVk IE1pY2hhxYIncyBhbmQgUm9iZXJ0J3MgVGVzdGVkLWJ5L1NpZ25lZC1vZmYtYnkgdG8gdGhlCiAg ICAgICAgICBwYXRjaGVzLgoKdjY6ICAgICAtIE9uZSBwYXRjaCBnb3QgbWVzc2VkIHVwIGFjY2lk ZW50YWxseSBpbiB2NSwgdGhpcyBpcyBmaXhlZCBub3cuCgogICAgICAgIC0gU3F1YXNoZWQgIlN1 cHBvcnQgTDIgY2FjaGUgbWFpbnRlbmFuY2UgZG9uZSB2aWEgZmlybXdhcmUiIHBhdGNoCiAgICAg ICAgICBpbnRvIHRoZSAiQWRkIGZpcm13YXJlIGNhbGxzLi4uIiBwYXRjaC4KCiAgICAgICAgLSBU aGUgbDJ4MF9pbml0KCkgZmlybXdhcmUgY2FsbGJhY2sgaXMgbm93IGludm9rZWQgdW5jb25kaXRp b25hbGx5CiAgICAgICAgICBiZWNhdXNlIGl0IGlzIGFsd2F5cyBhIE5PLU9QIG9uIFQxMTQrIGFu ZCBpcyBhIE5PLU9QIG9uIFQyMC8zMAogICAgICAgICAgaWYgZmlybXdhcmUgbm9kZSBpcyBtaXNz ZWQgaW4gZGV2aWNlLXRyZWUsIGhlbmNlIHRoZXJlIGlzIG5vCiAgICAgICAgICBuZWVkIHRvIGNo ZWNrIHRoZSBtYWNoaW5lJ3MgRFQgY29tcGF0aWJsZSBhcyBpdCB3YXMgZG9uZSBpbiB0aGUKICAg ICAgICAgIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBzZXJpZXMuCgp2NTogICAgIC0gRml4ZWQg bWFjaGluZSBoYW5naW5nIG9uIGRpc2FibGluZyBELWNhY2hlIGR1cmluZyBzdXNwZW5kLAogICAg ICAgICAgdHVybmVkIG91dCB0aGVyZSBhcmUgc2xpZ2h0IHZhcmlhdGlvbnMgaW4gYmVoYXZpb3Vy IGJldHdlZW4KICAgICAgICAgIGZpcm13YXJlIHZlcnNpb24gaW4gcmVnYXJkcyB0byBjYWNoZS1t YW5hZ2VtZW50LiBUaGFua3MgdG8KICAgICAgICAgIFJvYmVydCBZYW5nIGZvciByZXBvcnRpbmcg dGhlIHByb2JsZW0gYW5kIGhlbHBpbmcgd2l0aCB0aGUKICAgICAgICAgIHNvbHV0aW9uLgoKdjQ6 ICAgICAtIEZpeGVkIFRodW1iMi1rZXJuZWwgaGFuZ2luZyBvbiBUZWdyYTIwLCB0dXJuZWQgb3V0 IGl0IHdhcyBub3QgYQogICAgICAgICAgZ29vZCBpZGVhIHRvIHN3aXRjaCBDUFUgaW50byBUaHVt YjIgbW9kZSByaWdodCBhZnRlciBqdW1waW5nIGludG8KICAgICAgICAgIHRoZSByZXNldCBoYW5k bGVyLgoKICAgICAgICAtIE1vdmVkIExQMi1tb2RlLXNldCBmaXJtd2FyZSBjYWxsIGludm9jYXRp b24gdG8gYSBsYXRlciBzdGFnZSB0bwogICAgICAgICAgYmV0dGVyIHJlcGxpY2F0ZSB3aGF0IGRv d25zdHJlYW0ga2VybmVsIGRvZXMuIFRoaXMgY2hhbmdlIHdhcwogICAgICAgICAgc3VnZ2VzdGVk IGJ5IFJvYmVydCBZYW5nIGFuZCBmaXhlcyBzeXN0ZW0gaGFuZyBvbiBPdXlhIGdhbWUKICAgICAg ICAgIGNvbnNvbGUuCgogICAgICAgIC0gQWRkZWQgcmVmZXJlbmNlcyB0byB0aGUgb3JpZ2luYWwg d29yayBtYWRlIGJ5IE1pY2hhxYIgTWlyb3PFgmF3CiAgICAgICAgICBpbnRvIGNvbW1pdCBtZXNz YWdlcyBvZiB0aGUgcmVsZXZhbnQgcGF0Y2hlcy4KCnYzOiAgICAgLSBJbXBsZW1lbnRlZCBzdXNw ZW5kLXJlc3VtZSBzdXBwb3J0LgoKICAgICAgICAtIFJld29ya2VkIGFybS9maXJtd2FyZS90cnVz dGVkX2ZvdW5kYXRpb25zLmMgYSB0YWQuIE5vdyBjYWNoZQogICAgICAgICAgaXMgZ2V0dGluZyBw cm9wZXJseSBpbml0aWFsaXplZCwgY2FjaGUgZW5hYmxpbmcgLyBkaXNhYmxpbmcgaXMKICAgICAg ICAgIHN1cHBvcnRlZC4KCnYyOgogICAgICAgIC0gVGhlICJEb24ndCBhcHBseSBDUFUgZXJyYXRh cyBpbiBpbnNlY3VyZSBtb2RlIiBwYXRjaCBnb3Qgc29tZQogICAgICAgICAgY2xlYW51cCwgaW4g cGFydGljdWxhciByZXNvbHZlZCB0aGUgbWVzc2luZXNzIGluCiAgICAgICAgICBfX3RlZ3JhX2Nw dV9yZXNldF9oYW5kbGVyX2RhdGEuCgogICAgICAgIC0gQWRkZWQgYSBjb21tZW50IHRvIHRmX2Nh Y2hlX3dyaXRlX3NlYygpLCBqdXN0aWZ5aW5nIHRoZSB3YXJuaW5nCiAgICAgICAgICBtZXNzYWdl LgoKRG1pdHJ5IE9zaXBlbmtvICg3KToKICBBUk06IHRydXN0ZWRfZm91bmRhdGlvbnM6IFN1cHBv cnQgTDIgY2FjaGUgbWFpbnRlbmFuY2UKICBBUk06IHRydXN0ZWRfZm91bmRhdGlvbnM6IE1ha2Ug cHJlcGFyZV9pZGxlIGNhbGwgdG8gdGFrZSBtb2RlIGFyZ3VtZW50CiAgQVJNOiB0cnVzdGVkX2Zv dW5kYXRpb25zOiBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgZmlybXdhcmUKICAg IGlzIHJlZ2lzdGVyZWQKICBBUk06IHRlZ3JhOiBTZXQgdXAgTDIgY2FjaGUgdXNpbmcgVHJ1c3Rl ZCBGb3VuZGF0aW9ucyBmaXJtd2FyZQogIEFSTTogdGVncmE6IERvbid0IGFwcGx5IENQVSBlcnJh dGFzIGluIGluc2VjdXJlIG1vZGUKICBBUk06IHRlZ3JhOiBBbHdheXMgYm9vdCBDUFUgaW4gQVJN LW1vZGUKICBBUk06IHRlZ3JhOiBBZGQgZmlybXdhcmUgY2FsbHMgcmVxdWlyZWQgZm9yIHN1c3Bl bmQtcmVzdW1lIG9uIFRlZ3JhMzAKCiBhcmNoL2FybS9maXJtd2FyZS90cnVzdGVkX2ZvdW5kYXRp b25zLmMgICAgfCA3NSArKysrKysrKysrKysrKysrKysrKystCiBhcmNoL2FybS9pbmNsdWRlL2Fz bS9maXJtd2FyZS5oICAgICAgICAgICAgfCAgMiArLQogYXJjaC9hcm0vaW5jbHVkZS9hc20vdHJ1 c3RlZF9mb3VuZGF0aW9ucy5oIHwgMjUgKysrKysrKysKIGFyY2gvYXJtL21hY2gtdGVncmEvY3B1 aWRsZS10ZWdyYTExNC5jICAgICB8ICAzICstCiBhcmNoL2FybS9tYWNoLXRlZ3JhL3BtLmMgICAg ICAgICAgICAgICAgICAgfCA0OSArKysrKysrKysrKysrKwogYXJjaC9hcm0vbWFjaC10ZWdyYS9y ZXNldC1oYW5kbGVyLlMgICAgICAgIHwgNTAgKysrKysrKysrKystLS0tCiBhcmNoL2FybS9tYWNo LXRlZ3JhL3Jlc2V0LmMgICAgICAgICAgICAgICAgfCAgMyArCiBhcmNoL2FybS9tYWNoLXRlZ3Jh L3Jlc2V0LmggICAgICAgICAgICAgICAgfCAgOSArKy0KIGFyY2gvYXJtL21hY2gtdGVncmEvc2xl ZXAtdGVncmEyMC5TICAgICAgICB8ICA0ICsrCiBhcmNoL2FybS9tYWNoLXRlZ3JhL3NsZWVwLlMg ICAgICAgICAgICAgICAgfCAxNCArKy0tCiBhcmNoL2FybS9tYWNoLXRlZ3JhL3RlZ3JhLmMgICAg ICAgICAgICAgICAgfCAgMiArCiAxMSBmaWxlcyBjaGFuZ2VkLCAyMTQgaW5zZXJ0aW9ucygrKSwg MjIgZGVsZXRpb25zKC0pCgotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=