From patchwork Fri Mar 17 08:12:32 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Z.Q. Hou" X-Patchwork-Id: 740193 X-Patchwork-Delegate: yorksun@freescale.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3vkz5F4VkVz9ryT for ; Fri, 17 Mar 2017 19:28:49 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 469B3C21C31; Fri, 17 Mar 2017 08:27:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=BAD_ENC_HEADER, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 0AB53C21CA0; Fri, 17 Mar 2017 08:27:15 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 1FACFC21C5B; Fri, 17 Mar 2017 08:27:10 +0000 (UTC) Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0072.outbound.protection.outlook.com [104.47.40.72]) by lists.denx.de (Postfix) with ESMTPS id 5A28AC21C8C for ; Fri, 17 Mar 2017 08:27:06 +0000 (UTC) Received: from BN6PR03CA0027.namprd03.prod.outlook.com (10.175.124.13) by BN1PR03MB186.namprd03.prod.outlook.com (10.255.200.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.961.17; Fri, 17 Mar 2017 08:27:03 +0000 Received: from BL2FFO11FD054.protection.gbl (2a01:111:f400:7c09::193) by BN6PR03CA0027.outlook.office365.com (2603:10b6:404:10c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.977.11 via Frontend Transport; Fri, 17 Mar 2017 08:27:03 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD054.mail.protection.outlook.com (10.173.161.182) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.961.10 via Frontend Transport; Fri, 17 Mar 2017 08:27:02 +0000 Received: from titan.ap.freescale.net ([10.192.208.233]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id v2H8QpB4025692; Fri, 17 Mar 2017 01:26:59 -0700 From: Zhiqiang Hou To: , , , , , , Date: Fri, 17 Mar 2017 16:12:32 +0800 Message-ID: <1489738354-306-3-git-send-email-Zhiqiang.Hou@nxp.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1489738354-306-1-git-send-email-Zhiqiang.Hou@nxp.com> References: <1489738354-306-1-git-send-email-Zhiqiang.Hou@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131342128229352218; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39380400002)(39850400002)(39860400002)(39840400002)(39450400003)(39400400002)(39410400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(9170700003)(48376002)(6666003)(104016004)(105606002)(38730400002)(50986999)(5660300001)(106466001)(36756003)(76176999)(50466002)(189998001)(2906002)(85426001)(53936002)(356003)(305945005)(77096006)(6636002)(2201001)(5003940100001)(4326008)(86362001)(2950100002)(8936002)(50226002)(8676002)(47776003)(8656002)(81166006)(21314002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR03MB186; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD054; 1:eNIyh6HtHf25nvqFpekM/74l2hHISviYUzDv1CBBC5SYcnWsTlC0VVrEcjZv466CGa3NiHepXRevUVtz9svkAnRC31O9mGlROCah17JJ5vtnipnFIC1U2Ytn30F6NQP2mD9o5/KRp9RqwYztNuiZKuRb5TeDPK69nYnc2EnF/iOjQt6Ab5SCj2sHlTg0y/v65DDKh1rf2FKRmrlI987PG2G6u9ycO6GGBgvCYTTe/NKol/7CblpISITwX3/vX7b3eY/YsFVxLjgNgquurvJZzz5WZswVm4dYlJTa3cDiA66IxY//vGD8QNass4PXUY98ZGQd2MeruWPCOsKIzDirCn19KGc+4OrNe3XJ1S94k7uW7zvfDjgUc7onAPQYooi41LLuIUtG6xtVkODIgzrLj+WxZcV+aPOqSE5FAt47I0K+KOdp5qvtiiugN7Oyyr6d8VyQzsc8tXHNOmZdTlTwroIn/i40ppHZUSrhn5nOEK/8kfqHTid5owZh5cnr4EgnHUhgyIHCMwNm4jNxFzPGlqKZA0IuiyKghsYFW1UKW5cNwjoes/tqp3O5ZN5mhrQlSwM0t48MpN/g2Z13FqSGrtw7zLaiKTtgWSY7A1mxDhUb+JsDiH8s+Mhdn7GkCRcZG5BIiIy3LWAprFNfR7MYJxHb4rgIzQKopB/tf5kNdnMwXVtrb8UCc0fs+5yJWTCdsTEc/67J/cvJXzbcvkgDrQ== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 9ea944d2-3b75-422e-16cc-08d46d0f6389 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BN1PR03MB186; X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB186; 3:MeZ0V6TOoDpeKbl9JQBMp9iXXdp7crxM2KrxihYf3N4/Pf/O9J6JQLt2aExmYXLdD69N+0PHeGGLBmmdNIqCD7/NuOfx2Dlaj4QsgSLLe6JJEgK4cLem6QkXx+2WNlYNzzzLFjft6ljS3LDtjbyUuZz9PiufXcThW5oKZAh53OV9UliifDgyT0w9N/3PaRm3rn5i69VtXmzlvw8TwBcoxkJ/+IfZzahaX/adfmZAuPX+P5jVx9nOvOGobcCHlnQ+v1Si4TBgiPAYkJxklVFwYVbxOOIgJCr8rcuEGOAE65enfWvBGgFej2Vi2pYWj+HqzuNiT+2LpJIngTgZfRS1sacnPukFmsqa9nNEYLNpPLQK+ZXfD6CV3CEOzU/1HamC; 25:8RZj03S/tM0LV5ba+kpjkUkB2GvNFepfjk1XqoRvcXI+Ocs1UAkqiLIObu9zM2Y9ZeKPAyEaVcmxdJ+LwSh9mitU4m0e9Nk4ST8TVU9MkqQK8ooJayvmu1SiJeczDSXl2kmthzHr0p5NXN1igVVZEMNkQrckznzcC40ZboN6Mf/OzwvubJf3k3t8SkE2I+A3Pqn1C9mCIvISvDE8OFx/B00eDUlRi3dpY9mhOr1FJb2n2giQmePvWLqV3jNBMm51/sLYxOJ9XX+hn80NRW78+s/4PcqPojOVja6ErF3w5gjDf/rmY10adqvsPW3svusygV9XaE/yhAeeEld5qtdvbtxo0NUCRQMVuledJA7Qxpm/5M7svLO32gxdNzhzyLPffkONI1uV1gRRE4GApGriU9YsEcfSOgzonfsQU+yxDhjr9Tq4yhE5fQwpRvb9WBtjgR/d/wBWhRCsQ3R9Cr2P/A== X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB186; 31:Brg0ID+KkJYW0aiFWbtj2jBbA1VO+SHkgH6Zl1+QXZjYEbxBKQ5CnEsiWHqn2I5IYUdQxSG5XO6ynJe085hG29klf834Tm5FFRQWP27rYpLkAiLf2tawdRi8xT8rwI25MjoiRFTzvvQIfOAwqm7YN1RcgXdG/+99rc0Kneay/etSeKiveGJO1k6y/de9BRzb/WJH0UJd+FJDfyJ6S6kLFK30Fej/idKOG/0qvTFeDO/FmtSbPayknYc/j8Na9JQcoy+LLYUdF/162fVQyViv0g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(5005006)(13017025)(8121501046)(13024025)(13015025)(13023025)(13018025)(10201501046)(3002001)(6055026)(6096035)(20161123559025)(20161123563025)(20161123561025)(20161123565025)(20161123556025); SRVR:BN1PR03MB186; BCL:0; PCL:0; RULEID:(400006); SRVR:BN1PR03MB186; X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB186; 4:cquW4+Hmo6qttRyL94hHej6pjA6s91VVhPl3gcRzPHLDjDO/bvx/ufyBj0TS8kWq7HtEO4YvGplaueVrMbbswi5h42RowOQ87VHHyRm6cujTDoIkKJ2BES/MfXlFxX5uXIqgEjdYLsJwhJADaEo/PXrKcPictho4MuBkap9sS0nEAICUIzUKVATQExGRQ/xVZ0LVDA9VYQmtdO6h5ykvsZixxDqIFtzmEXftzM5Xua91jWChrROiWyRBYcFb/Goeq3zeC1uj+XQsw8tAO6w2YjKGH6ZcKW6YPj8xA6vN1N65sjXh9Sq4sMMU4xKEohIOxxTmF73WcFL+KzktdEbarE5BhR6J/h7VBF9Bp7X3HSB3GJhKo3sCJsq8DBqieyEXb5qCLMbSPscZ+Ixs9Sqzc1mcjAIvEnc8CA/I2nOvK2TXJMuowLtWojvdoJ19mP3TmWutimJcmNCVbWJ4JAuNh33XDqj0x584lTzWIep6PFiM4ILX7kK57ypM2znD3GpqeSVHT6nj95645Ke0wU7fzlTwGQ7GyS1/k31++VVviNiBRDmSc6GmgV5uoTApVx6eUnjVJ2QrgKiFugvYISIcC7hceThkPd9nuTcNZb8Ssxog/gty2YmGcLvLAFYsGOFmbksFbOh3EiJAm73mZluYeKsqszUSx33n8FRV+5n5qKxTYVsmX54rOHZjFs6Ymsb5FsE9CcN9RbXvr6O9v5OB0zzSz1NHCQbh+oEvoq38wyeNPedJGW00ih6EZebjKzT4 X-Forefront-PRVS: 0249EFCB0B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR03MB186; 23:8HVM8RT0XAm2nu+KAeLB9gDdVldR6Vk1Nl6p0XT159?= =?us-ascii?Q?z1oOVDk2BoWxhiaB8TVdsayHTlK5bofHhnBSvKc1EVfen80xVNVH1ZZQmtmn?= =?us-ascii?Q?1bVzlt47JoZ3oEMhnTG0lLVI2YQzRo3j3OaCKUXI4jULrnYZl65a8BXC0ftd?= =?us-ascii?Q?wdJv+iBryC7btAeqU5ZNmPGGODenwVVZQ36v+eWdb+PazKG8XhYZB8nv+BSr?= =?us-ascii?Q?jL7ln7oSJEMcmjdaDmpK8urEJTTb0WFPMeIiuVkhAlW5PgwDIy3DMTrPETTp?= =?us-ascii?Q?JWexIgCpWTe/2eLxB8Fpo2HbEpbiqnr8hgzJBkI48OzfHXNcM1pdE0agRy8K?= =?us-ascii?Q?zOrlVi4k3kEfEJuUMQ2jNGgNU0gBvpDPM4CUh0lPz1tNQmRs7AMwPMoM4kDW?= =?us-ascii?Q?IBtNWUpTs50T3j1sspLpy4yZTCKQkAB317uosVcrcJC8MwZMLsm5D4PNpdNG?= =?us-ascii?Q?/khZBTcNprvXlCT9T0eu72+tk/pHNRtWSlkRnQnfBLzkNopRSWugsldCyC2B?= =?us-ascii?Q?cfkp2+oZVG/xsvtzo19siVBUmjbgm4EC28fbivL9wnvHt9MdJaoJJsqkvk/m?= =?us-ascii?Q?hvZ3tXRiSxOuph82aVYkhe0s+Bu6SLjNHvYp7/v/fc+CxJW7M6R8ZkotWoLt?= =?us-ascii?Q?xgwydt1Ynr6pnkKdGRTdq77P1UnXGbfZgZcsM8WVqjUiB+ZxmOTEQ5DyqyGs?= =?us-ascii?Q?uc14UEfQIyJysmODO8opILqbMW+sohztCKRALYic9hGU+7FdFXsJNFs9tK5J?= =?us-ascii?Q?QQp2NfzvxIBZoyLiaXGTMB2pegVsgVqpHZPUXWZpJCmwVUxg8FBpuWG+LV2k?= =?us-ascii?Q?HfG80632nZpR7ffb4Dv+0yeB0erEIc7VFvFk8D6/lsEz14lyagYA4EHGY/Ug?= =?us-ascii?Q?mN0k0qeXfnhiapueFuK8q8nLmPUU15JF9h99hxSVxvPeJQHKhpq4lZl15hT0?= =?us-ascii?Q?ar5u0hyGhiHQN1EPxgyxIuLjmAD/nplxucbUXPe3K5w3i1otQ3vnkh5XvxKW?= =?us-ascii?Q?XS8BNrNxrFYHfqnPFoAUgSw2iEKxqtWU/ayZndqFPzk6h6JP5b2ZxcRuaDDF?= =?us-ascii?Q?FBCw6e0nWQvNGa7vituTimKROwAoavusxNd3dL1jPgBP48eCSGl3+I0fHQrA?= =?us-ascii?Q?j6DuIzDxFIdHPr0zgifaaVY4TX09M6BADTSFVb9qmMW29t8Y1JgA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB186; 6:KGBB4xAiTR3s9Ggpr92Z6KkF+JxVGviZVF6QlhGz/xMTH5DuZBJYwxj/dkiT1etdo2IySfMFhKk1CErRja8rkSO0082QkOWf19ANFc6O7mT47YuYU8DRSZtG0EvAETTY+QwyUxRx57Wjm0hCyGuHMQ+NcjkuhETQwPR6eLiYdVxg686bBGeixv2rOOy5Uh48/1oaDoycCTB6i8dQtqVihljH+L6ZrYl5r0Z2a+xo9OUlLEtKJOooW999/RDFZgdlhlJlm/a4kOnjFsAFqNakCRC/LS3j9nt7vZDQj+FvOxRhX0YBYYT50xiyul+JKcDZD/D9Rx7BBnTaEcWle4CfvwGt/roce8GRVovRxkDBcyaqABDul25t0ebXLOUj5h4ZeVB+jbdkF5Dcel8F3ztSYO0Lesrn+aTA7uyG13ft+84=; 5:NtXPwJbQudZP/2aqjftGP1zCf9WOSQI7cw7FBjA/U5IF6I7SfAq0VjL0OfD9ZS/xSFfVnAtVt56OHL3ofEaTboE1f3WbKBgjb4FSjofgYvI/++SXa+9eh59QGtNMHqBIii0hVHOw4HNcLgpXjFz6A3t/5I+NgK8MW2E0YIy9moYi1ziZ2cvEzSGTXBeAZMc/; 24:Kx6w95AXDwY3bVk2SfUqGf2wRF8cR7Tx4pr48F9ylE9oLeUub8fvFZt0LD7XKimx856fxSfYaPOpJgQiCD5eTS+1s1uVR7Pi637ksu2XjbE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB186; 7:2JOCJ25QnSjkXeU6aSfce57/i32174TX1Y/8V8yMJn65hxMbkm1cuNHSLhFUgbcaY7NmCKVKiKeUlSGx8Cl2wuuh/jzAAYp8n8ICmY6HI5Bq/wEFQ6JBQgwTvRJx92KYKGY61ndpEPxC7AKJj/oK8aUU/p79YFPk5ls93jluD37PnSyRHh5ZEQXuQhdcXiTvuuuFVloFgWGtpAqWBapQJT9KgLCUxiGkuG/H6ttuddZ9HHrn0ntw4GTRCsN10nB0NLaJsHquLyK0ut9E0N8SatbOw3HtzCMcea167Angw4Br2cawGDu/h4ccMG6VJZSuHNGVKcAh/r/ILLi3tISuzw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2017 08:27:02.5764 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR03MB186 Cc: Hou Zhiqiang Subject: [U-Boot] [PATCHv3 3/5] fsl PPA: add support PPA image loading from NAND and SD X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Hou Zhiqiang Signed-off-by: Hou Zhiqiang Reviewed-by: Jaehoon Chung --- V3: - Added checking for return value of mmc initialization. - Added checking the fdt header before getting the size of PPA image. arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 143 +++++++++++++++++++++++++++++++- 1 file changed, 142 insertions(+), 1 deletion(-) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c index b68e87d..b35ad5f 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c @@ -4,6 +4,7 @@ * SPDX-License-Identifier: GPL-2.0+ */ #include +#include #include #include #include @@ -21,9 +22,17 @@ #include #endif +#ifdef CONFIG_SYS_LS_PPA_FW_IN_NAND +#include +#elif defined(CONFIG_SYS_LS_PPA_FW_IN_MMC) +#include +#endif + +DECLARE_GLOBAL_DATA_PTR; + int ppa_init(void) { - const void *ppa_fit_addr; + void *ppa_fit_addr; u32 *boot_loc_ptr_l, *boot_loc_ptr_h; int ret; @@ -34,10 +43,137 @@ int ppa_init(void) #ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP ppa_fit_addr = (void *)CONFIG_SYS_LS_PPA_FW_ADDR; + debug("%s: PPA image load from XIP\n", __func__); +#else /* !CONFIG_SYS_LS_PPA_FW_IN_XIP */ + size_t fw_length, fdt_header_len = sizeof(struct fdt_header); + + /* Copy PPA image from MMC/SD/NAND to allocated memory */ +#ifdef CONFIG_SYS_LS_PPA_FW_IN_MMC + struct mmc *mmc; + int dev = CONFIG_SYS_MMC_ENV_DEV; + struct fdt_header *fitp; + u32 cnt; + u32 blk = CONFIG_SYS_LS_PPA_FW_ADDR / 512; + + debug("%s: PPA image load from eMMC/SD\n", __func__); + + ret = mmc_initialize(gd->bd); + if (ret) { + printf("%s: mmc_initialize() failed\n", __func__); + return ret; + } + mmc = find_mmc_device(dev); + if (!mmc) { + printf("PPA: MMC cannot find device for PPA firmware\n"); + return -ENODEV; + } + + ret = mmc_init(mmc); + if (ret) { + printf("%s: mmc_init() failed\n", __func__); + return ret; + } + + fitp = malloc(roundup(fdt_header_len, 512)); + if (!fitp) { + printf("PPA: malloc failed for FIT header(size 0x%zx)\n", + roundup(fdt_header_len, 512)); + return -ENOMEM; + } + + cnt = DIV_ROUND_UP(fdt_header_len, 512); + debug("%s: MMC read PPA FIT header: dev # %u, block # %u, count %u\n", + __func__, dev, blk, cnt); + ret = mmc->block_dev.block_read(&mmc->block_dev, blk, cnt, fitp); + if (ret != cnt) { + free(fitp); + printf("MMC/SD read of PPA FIT header at offset 0x%x failed\n", + CONFIG_SYS_LS_PPA_FW_ADDR); + return -EIO; + } + + /* flush cache after read */ + flush_cache((ulong)fitp, cnt * 512); + + ret = fdt_check_header(fitp); + if (ret) { + free(fitp); + printf("%s: fdt_check_header() failed\n", __func__); + return ret; + } + + fw_length = fdt_totalsize(fitp); + free(fitp); + + fw_length = roundup(fw_length, 512); + ppa_fit_addr = malloc(fw_length); + if (!ppa_fit_addr) { + printf("PPA: malloc failed for PPA image(size 0x%zx)\n", + fw_length); + return -ENOMEM; + } + + cnt = DIV_ROUND_UP(fw_length, 512); + debug("%s: MMC read PPA FIT image: dev # %u, block # %u, count %u\n", + __func__, dev, blk, cnt); + ret = mmc->block_dev.block_read(&mmc->block_dev, + blk, cnt, ppa_fit_addr); + if (ret != cnt) { + free(ppa_fit_addr); + printf("MMC/SD read of PPA FIT header at offset 0x%x failed\n", + CONFIG_SYS_LS_PPA_FW_ADDR); + return -EIO; + } + + /* flush cache after read */ + flush_cache((ulong)ppa_fit_addr, cnt * 512); + +#elif defined(CONFIG_SYS_LS_PPA_FW_IN_NAND) + struct fdt_header fit; + + debug("%s: PPA image load from NAND\n", __func__); + + nand_init(); + ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_FW_ADDR, + &fdt_header_len, (u_char *)&fit); + if (ret == -EUCLEAN) { + printf("NAND read of PPA FIT header at offset 0x%x failed\n", + CONFIG_SYS_LS_PPA_FW_ADDR); + return -EIO; + } + + ret = fdt_check_header(&fit); + if (ret) { + printf("%s: fdt_check_header() failed\n", __func__); + return ret; + } + + fw_length = fdt_totalsize(&fit); + + ppa_fit_addr = malloc(fw_length); + if (!ppa_fit_addr) { + printf("PPA: malloc failed for PPA image(size 0x%zx)\n", + fw_length); + return -ENOMEM; + } + + ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_FW_ADDR, + &fw_length, (u_char *)ppa_fit_addr); + if (ret == -EUCLEAN) { + free(ppa_fit_addr); + printf("NAND read of PPA firmware at offset 0x%x failed\n", + CONFIG_SYS_LS_PPA_FW_ADDR); + return -EIO; + } + + /* flush cache after read */ + flush_cache((ulong)ppa_fit_addr, fw_length); #else #error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined" #endif +#endif + #ifdef CONFIG_CHAIN_OF_TRUST ppa_img_addr = (uintptr_t)ppa_fit_addr; if (fsl_check_boot_mode_secure() != 0) { @@ -65,5 +201,10 @@ int ppa_init(void) boot_loc_ptr_l, boot_loc_ptr_h); ret = sec_firmware_init(ppa_fit_addr, boot_loc_ptr_l, boot_loc_ptr_h); +#if defined(CONFIG_SYS_LS_PPA_FW_IN_MMC) || \ + defined(CONFIG_SYS_LS_PPA_FW_IN_NAND) + free(ppa_fit_addr); +#endif + return ret; }