Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/808578/?format=api
{ "id": 808578, "url": "http://patchwork.ozlabs.org/api/patches/808578/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/1504254301-7970-2-git-send-email-sumit.garg@nxp.com/", "project": { "id": 18, "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api", "name": "U-Boot", "link_name": "uboot", "list_id": "u-boot.lists.denx.de", "list_email": "u-boot@lists.denx.de", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1504254301-7970-2-git-send-email-sumit.garg@nxp.com>", "list_archive_url": null, "date": "2017-09-01T08:25:01", "name": "[U-Boot,2/2] armv8: sec_firmware: Add support for loadables in FIT", "commit_ref": "9b3f40ad092ff2633eefa7e8a4a713f71c9cb8cb", "pull_url": null, "state": "accepted", "archived": false, "hash": "0f647ec1b9dbe4d05aea9477e27340c4c78f8eac", "submitter": { "id": 68653, "url": "http://patchwork.ozlabs.org/api/people/68653/?format=api", "name": "Sumit Garg", "email": "sumit.garg@nxp.com" }, "delegate": { "id": 2666, "url": "http://patchwork.ozlabs.org/api/users/2666/?format=api", "username": "yorksun", "first_name": "York", "last_name": "Sun", "email": "yorksun@freescale.com" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/1504254301-7970-2-git-send-email-sumit.garg@nxp.com/mbox/", "series": [ { "id": 971, "url": "http://patchwork.ozlabs.org/api/series/971/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=971", "date": "2017-09-01T08:25:00", "name": "[U-Boot,1/2] armv8: layerscape: Allocate 66 MB DDR for secure memory", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/971/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808578/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808578/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.denx.de\n\t(client-ip=81.169.180.215; helo=lists.denx.de;\n\tenvelope-from=u-boot-bounces@lists.denx.de;\n\treceiver=<UNKNOWN>)", "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed)\n\theader.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;" ], "Received": [ "from lists.denx.de (dione.denx.de [81.169.180.215])\n\tby ozlabs.org (Postfix) with ESMTP id 3xkC4H69kVz9t1t\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 1 Sep 2017 18:25:51 +1000 (AEST)", "by lists.denx.de (Postfix, from userid 105)\n\tid 7757AC21ED6; Fri, 1 Sep 2017 08:25:33 +0000 (UTC)", "from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id F3B95C21EDF;\n\tFri, 1 Sep 2017 08:25:28 +0000 (UTC)", "by lists.denx.de (Postfix, from userid 105)\n\tid AD214C21ED5; Fri, 1 Sep 2017 08:25:04 +0000 (UTC)", "from NAM02-CY1-obe.outbound.protection.outlook.com\n\t(mail-cys01nam02on0066.outbound.protection.outlook.com\n\t[104.47.37.66])\n\tby lists.denx.de (Postfix) with ESMTPS id 97F2CC21EE0\n\tfor <u-boot@lists.denx.de>; Fri, 1 Sep 2017 08:25:00 +0000 (UTC)", "from BN6PR03CA0060.namprd03.prod.outlook.com (10.173.137.22) by\n\tCY1PR03MB2268.namprd03.prod.outlook.com (10.166.207.20) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.20.13.10; Fri, 1 Sep 2017 08:24:58 +0000", "from BY2FFO11FD032.protection.gbl (2a01:111:f400:7c0c::124) by\n\tBN6PR03CA0060.outlook.office365.com (2603:10b6:404:4c::22) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.13.10 via\n\tFrontend Transport; Fri, 1 Sep 2017 08:24:58 +0000", "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBY2FFO11FD032.mail.protection.outlook.com (10.1.14.210) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1385.11\n\tvia Frontend Transport; Fri, 1 Sep 2017 08:24:57 +0000", "from vinitha-OptiPlex-790.ap.freescale.net\n\t(vinitha-OptiPlex-790.ap.freescale.net [10.232.134.143])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv818OgmX021859; Fri, 1 Sep 2017 01:24:53 -0700" ], "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,\n\tRCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,\n\tSPF_HELO_PASS autolearn=unavailable\n\tautolearn_force=no version=3.4.0", "Received-SPF": "Fail (protection.outlook.com: domain of nxp.com does not\n\tdesignate 192.88.168.50 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=192.88.168.50; helo=tx30smr01.am.freescale.net;", "From": "Sumit Garg <sumit.garg@nxp.com>", "To": "<u-boot@lists.denx.de>", "Date": "Fri, 1 Sep 2017 13:55:01 +0530", "Message-ID": "<1504254301-7970-2-git-send-email-sumit.garg@nxp.com>", "X-Mailer": "git-send-email 2.7.4", "In-Reply-To": "<1504254301-7970-1-git-send-email-sumit.garg@nxp.com>", "References": "<1504254301-7970-1-git-send-email-sumit.garg@nxp.com>", "X-EOPAttributedMessage": "0", "X-Matching-Connectors": "131487278980793600;\n\t(91ab9b29-cfa4-454e-5278-08d120cd25b8); ()", "X-Forefront-Antispam-Report": "CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI;\n\tSFV:NSPM;\n\tSFS:(10009020)(979002)(6009001)(336005)(39860400002)(39380400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(50986999)(53936002)(54906002)(76176999)(36756003)(47776003)(498600001)(48376002)(110136004)(50466002)(2950100002)(68736007)(626005)(4326008)(104016004)(85426001)(50226002)(97736004)(8936002)(81156014)(81166006)(5003940100001)(8656003)(6666003)(189998001)(6916009)(86362001)(8676002)(356003)(106466001)(33646002)(5660300001)(2351001)(105606002)(2906002)(305945005)(77096006)(969003)(989001)(999001)(1009001)(1019001);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR03MB2268;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; ", "X-Microsoft-Exchange-Diagnostics": [ "1; BY2FFO11FD032;\n\t1:SJgcTF66j2YpQB48R+DMClXXL5VAIscZPAByJRDouQA1G2e1zOfNxujEQms1jSxK5mZm+FQ74unzb0Epyz08FMrWJguPyo3v30Ld7Qh7jVDAuoQFMw2/ot6m10PPrOud", "1; CY1PR03MB2268;\n\t3:6XBf4WXCh5WDwlfZLpb6V3mh60c0UNizLQFfNBaVZCiYCAGLvSGAiMFsUO8zSlJXgrmzbjE7Q2VfDLdli0/WmKrviTdRT66P+bnUxs5A/MVTF7LhmnnEUZo3eGTGWmCqY7Gb/02Ip4kCsecQWxp5ASk3nesbOQX9ePtfKHgwi8jKSJXFgXQJrhjA4oeKT1DNLxkh1QnDS+QnEYzAyoDw2puMvu0lrPAwa6a1uUMAJkPWtxazVkmKoSPdHP8v/LXtL9N8R74c3qwvEU48WuzQouJWhMf1dsO9q88xMf+kXAbaG/7Y/0vurvY1lJVFIxW5iy1OnX35skNOUn0rB1sm8qjtdO/RHDC70XaT8hiJ6NA=;\n\t25:4VJxa1eCTwrlDjI8ZH95Pg5EUHpTbyBLKgW0ia9hq+xc4kwh6cgHAi/8HRkfJKLcjSc3hNhwzBneHqpmTtwyZ1WGDLSKe0ky7ft62gvyrNbZEg4mjnQA9cjP2cj4EnZzuxagpWFyTl7+N/Dg/DRnYv+JrLa3tMuH0LImlIbB7YVTWzJEKZziHQisEMoBkIOGrrm83ZwJvx2Bt20YWbUUDp/4HmLiLOskYFwJDO7Q5PyjNgNHEaCtSXKdakSjh24fKHwNuwKdsHk9sVkgWPi0GeN0ZNGHIFEzhxFN8LdOgVR0WeMOFMs0BTzwJc+wZNhnsKUc2jpCcK8Xlto4Acgjfw==", "1; CY1PR03MB2268;\n\t31:NlR4bQ0ckADmfM0IzcAdIEe0OgvemrRZVKZlaPsUNblRO9AitUdC2va7SG8am9dWErAoma4vF4nwUMyzI+TS0ei4cBIqGQGg9Ki+mGqBhULRO5d+XpOnHkAOZZNN8fk1tu2466TxkjdO521LjF1jvOBeJNtsYp75lV033frJzdqfRlzQxcnNWEyc7S7NniRStvFEgDToMoGJQ1I29yIcySvUx2VJ5P1LucxIFERBgic=;\n\t4:Iw/Y7fn0X5x0HvZqNffzObWpo7FLUsXa8GXZN9I7vyHMlVru0LRBFFSPRajzat+bzFr+sIqtSRzCyRTF8/OpI1xCqa3b/zc+ESfMfxFuctnWjFK6LMMCIYKSS4jSusewy7pQRQ1R1kPupk1F8HFS3eKvA9uAba7doj++5U+x2JbjWw0wjdxqzcLdHSRjJZpO4ZvGU6GUqbcfQj9O/zNDeyycOxmtCppT4MPQvTiwFAd/en/xU8oXc3PZQMrV1A0muZPAoYkgOe35/uajiIdccrcpBoMGqBblqu7glOjyUf8=", "=?us-ascii?Q?1; CY1PR03MB2268;\n\t23:KdY4Z5aqhZbttlJVGhlqsbXLrIGVkueuwYxsInnxW?=\n\ts9SYltiv7fQVdPXR54slnfxUugZKEJD5ByMhx382WZ6ObfrmmI8JxZusvIsbCUlWu3yY7BgTd0dkXOg/Qp+XwZKVBZuFiPbnKVRdzOapobfkLUhDpVsMfsTu9rGjYaeeQy9Vu+KguTfRborXpX2Ce73A+XFtSDL++BiX8y0o7K1A2uo0Fyc+0rjFebYNp3t5OSOV4iVagzbZMi9QwzlhuwR/acDVu8qLmvfX/MPhCt+0HWx3J8U0kl7k8aHjD1zwQpNieI56iqsa76wOfyUTnhqKugwWTXk3mH2a4u2FXQQM/T236rJT1tf6rLuM1SVyznpS0bohWB127of20UUVmtp40XxZlmy1fspLukpdVK6bXPZ1TWbNtw+t7FWqPUxCAoZwShOzb0zUmEXWdcBlCYLWji/UFa8HthSfcIyl9NbXUq11M22sUJNS73UjvWg+L4KuIiAaq598pj0qPfIIm+xWxTeFl7XyX9CV2Lw34XE/fg9dTF92H9yXl2RAqhyoxcWwJtsestDicwiYB6Bqxlz83no08h+7ABJee0Sn5ioRvyu0TUtoweqgeNPWKegK8Q6ecU+nnRQNTpcKZxfln5z09DSPzhx160+y1qtt0Kf+PcQ4TR79QnNPw8R9mHOhApcm0yX7i5K/uvVxb/95vdLSXMpVI1PwUqGN0gVhgrX7ocPDayYa+58KsPBDRrRyiglgmEbLR52h0nbncNEw+KJKKb2YMmt/FjUvW1lLH+HzgVQ0dZKY1WT/RRiEzbKBsFcaJPS/XZTU+WHNJGfbcwgcUXn19Uk/x3zRFzkzJvcJAChldsFMg3LQk2jIgUIs02XhynGXLGzlCIN+AINclpRApPT/mgwNuReNF4JaXzO4l8EV9sAwJ4fYMsotZoxOxyblewtRXmd42AOs4b62/IvePhdYWy2Vif76445eXXY0Pz3QpGckCdu3T+l5h1zXMIWM9pmSei0hvFpaPRnY1XwD7qUGbqEQJ5BKVrPNLjtrLE3BbEszw6RstQXu8hwYZFYFsuVuZMsDRlobaV9Ieni/tWd1ztPfdmHyQEZ9DQ/f4LaT+kYIAfZWv/eZLDQu1q0B1Kw9B6cxYqsPmnazyhhQApxXCKWH57V41bCGvbCFxNb4Row4obYDNQUEau/lhIRi/OAyTpTmOsNIIm7gkfq/8fzlSWEcVNXAhaaW96uhA==", "1; CY1PR03MB2268;\n\t6:or8VU+1d5v3VfCS0MNI0EKGBtWLPZYH/++Vs2wWBiGPg06PcagQB8m/xf8McUMp6p9xRDIYHMpoE03nIrXM5++d6QTPy92Ll5kWjkoGufZWTzUircLZyd5MDeLXB8ZmsVysu8kSyMORYOQcf6D8GasiuQvnCedbOU3rLFAW0iXbj7+9iAyqhxhdb+b3xEzbTtatNWqUPuoy2ZzWuYgZuzSkjFZsXTr5SCRlsnYfVBNSyAWWyDn7VIaluxwh3AGQ+y2ZSPhdMCfD9+eJ+hUQbjZb4qRLYep1MCecKXuGGiinAZyPfZJ/e0UynM4Ag/d7VEn+mBnSZ6EncAMixk6RHwg==;\n\t5:eMVoxNo0+WQGCf9WZc4I1fGu7CpU4vjDGKY+yemW+dwFGDWMtJCX/uVuerQS5ahq+5/W9/hKv6uaEfGwBPq4+qNsT+Y0yj6y+8ON2mGF01saGmzHDu+hlt9oEULyDyTdzmyE5NV8CmdMBMZ/GkmNRg==;\n\t24:oFejA/pEK80N5g6KeIwoQrOUKgog65O5K/jBYJa8a7XcFjPAfbWYyhOEX15/4AjiFM0mqVDrZPFNT0o8UME912M0Uu93Ye7d67Q60IztbKk=;\n\t7:4PMaK+r8y5MkvkSAl8+0mjvH2aZ4AyPcGw/UCIy8uF3tINUEdhxFhGrG5A4u33rRSRn+xPCpYDIWcI1Qc1+7vMaN+9lY8v8gMI9eWvnQDmQiwxPPB3nAITz02zAR5GtKNNF+qsPf+yMve6t3YAbYEZEE+q54WFvCzM+meAYgBoiIPVynN45QW2IEg7Gk1/6NwTOdbgvE9OnqZJWSGhREaz7vdwWj5BIBv85PdKRhc6w=" ], "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "ccd43ed1-ccfe-4e8d-f9f8-08d4f112ee85", "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(300000503095)(300135400095)(2017052603199)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:CY1PR03MB2268; ", "X-MS-TrafficTypeDiagnostic": "CY1PR03MB2268:", "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197);", "X-Microsoft-Antispam-PRVS": "<CY1PR03MB2268855B69E45578EB1EF1B798920@CY1PR03MB2268.namprd03.prod.outlook.com>", "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(601004)(2401047)(13018025)(8121501046)(5005006)(13016025)(93006095)(93001095)(3002001)(100000703101)(100105400095)(10201501046)(6055026)(6096035)(20161123561025)(20161123563025)(20161123556025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123559100)(20161123565025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:CY1PR03MB2268; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:CY1PR03MB2268; ", "X-Forefront-PRVS": "0417A3FFD2", "SpamDiagnosticOutput": "1:99", "SpamDiagnosticMetadata": "NSPM", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "01 Sep 2017 08:24:57.7673\n\t(UTC)", "X-MS-Exchange-CrossTenant-Id": "5afe0b00-7697-4969-b663-5eab37d5f47e", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;\n\tIp=[192.88.168.50]; \n\tHelo=[tx30smr01.am.freescale.net]", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY1PR03MB2268", "Cc": "sahil.malhotra@nxp.com, Zhiqiang.Hou@nxp.com, pankaj.gupta@nxp.com,\n\tarun.pathak@nxp.com, ruchika.gupta@nxp.com", "Subject": "[U-Boot] [PATCH 2/2] armv8: sec_firmware: Add support for loadables\n\tin FIT", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.18", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<http://lists.denx.de/pipermail/u-boot/>", "List-Post": "<mailto:u-boot@lists.denx.de>", "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>", "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=subscribe>", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "base64", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>" }, "content": "Enable support for loadables in SEC firmware FIT image. Currently support\nis added for single loadable image.\n\nBrief description of implementation:\n- Add two more address pointers (loadable_h, loadable_l) as arguments to\n sec_firmware_init() api.\n- Create new api: sec_firmware_checks_copy_loadable() to check if loadables\n node is present in SEC firmware FIT image. If present, verify loadable\n image and copies it to secure DDR memory.\n- Populate address pointers with secure DDR memory addresses where loadable\n is copied.\n\nExample use-case could be trusted OS (tee.bin) as loadables node in SEC\nfirmware FIT image.\n\nSigned-off-by: Sumit Garg <sumit.garg@nxp.com>\n---\n arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 16 +++++-\n arch/arm/cpu/armv8/sec_firmware.c | 92 +++++++++++++++++++++++++++++--\n arch/arm/include/asm/armv8/sec_firmware.h | 4 +-\n 3 files changed, 104 insertions(+), 8 deletions(-)", "diff": "diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c\nindex 35c612d..87a0885 100644\n--- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c\n+++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c\n@@ -35,6 +35,7 @@ int ppa_init(void)\n \tunsigned int el = current_el();\n \tvoid *ppa_fit_addr;\n \tu32 *boot_loc_ptr_l, *boot_loc_ptr_h;\n+\tu32 *loadable_l, *loadable_h;\n \tint ret;\n \n #ifdef CONFIG_CHAIN_OF_TRUST\n@@ -252,9 +253,9 @@ int ppa_init(void)\n \t\t\t\t\t PPA_KEY_HASH,\n \t\t\t\t\t &ppa_img_addr);\n \t\tif (ret != 0)\n-\t\t\tprintf(\"PPA validation failed\\n\");\n+\t\t\tprintf(\"SEC firmware(s) validation failed\\n\");\n \t\telse\n-\t\t\tprintf(\"PPA validation Successful\\n\");\n+\t\t\tprintf(\"SEC firmware(s) validation Successful\\n\");\n \t}\n #if defined(CONFIG_SYS_LS_PPA_FW_IN_MMC) || \\\n \tdefined(CONFIG_SYS_LS_PPA_FW_IN_NAND)\n@@ -266,15 +267,24 @@ int ppa_init(void)\n \tstruct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);\n \tboot_loc_ptr_l = &gur->bootlocptrl;\n \tboot_loc_ptr_h = &gur->bootlocptrh;\n+\n+\t/* Assign addresses to loadable ptrs */\n+\tloadable_l = &gur->scratchrw[4];\n+\tloadable_h = &gur->scratchrw[5];\n #elif defined(CONFIG_FSL_LSCH2)\n \tstruct ccsr_scfg __iomem *scfg = (void *)(CONFIG_SYS_FSL_SCFG_ADDR);\n \tboot_loc_ptr_l = &scfg->scratchrw[1];\n \tboot_loc_ptr_h = &scfg->scratchrw[0];\n+\n+\t/* Assign addresses to loadable ptrs */\n+\tloadable_l = &scfg->scratchrw[2];\n+\tloadable_h = &scfg->scratchrw[3];\n #endif\n \n \tdebug(\"fsl-ppa: boot_loc_ptr_l = 0x%p, boot_loc_ptr_h =0x%p\\n\",\n \t boot_loc_ptr_l, boot_loc_ptr_h);\n-\tret = sec_firmware_init(ppa_fit_addr, boot_loc_ptr_l, boot_loc_ptr_h);\n+\tret = sec_firmware_init(ppa_fit_addr, boot_loc_ptr_l, boot_loc_ptr_h,\n+\t\t\t\tloadable_l, loadable_h);\n \n #if defined(CONFIG_SYS_LS_PPA_FW_IN_MMC) || \\\n \tdefined(CONFIG_SYS_LS_PPA_FW_IN_NAND)\ndiff --git a/arch/arm/cpu/armv8/sec_firmware.c b/arch/arm/cpu/armv8/sec_firmware.c\nindex 0e74834..927eae4 100644\n--- a/arch/arm/cpu/armv8/sec_firmware.c\n+++ b/arch/arm/cpu/armv8/sec_firmware.c\n@@ -105,6 +105,74 @@ static int sec_firmware_parse_image(const void *sec_firmware_img,\n \treturn 0;\n }\n \n+/*\n+ * SEC Firmware FIT image parser to check if any loadable is\n+ * present. If present, verify integrity of the loadable and\n+ * copy loadable to address provided in (loadable_h, loadable_l).\n+ *\n+ * Returns 0 on success and a negative errno on error task fail.\n+ */\n+static int sec_firmware_check_copy_loadable(const void *sec_firmware_img,\n+\t\t\t\t\t u32 *loadable_l, u32 *loadable_h)\n+{\n+\tphys_addr_t sec_firmware_loadable_addr = 0;\n+\tint conf_node_off, ld_node_off;\n+\tchar *conf_node_name = NULL;\n+\tconst void *data;\n+\tsize_t size;\n+\tulong load;\n+\n+\tconf_node_name = SEC_FIRMEWARE_FIT_CNF_NAME;\n+\n+\tconf_node_off = fit_conf_get_node(sec_firmware_img, conf_node_name);\n+\tif (conf_node_off < 0) {\n+\t\tprintf(\"SEC Firmware: %s: no such config\\n\", conf_node_name);\n+\treturn -ENOENT;\n+\t}\n+\n+\tld_node_off = fit_conf_get_prop_node(sec_firmware_img, conf_node_off,\n+\t\t\t\t\t FIT_LOADABLE_PROP);\n+\tif (ld_node_off >= 0) {\n+\t\tprintf(\"SEC Firmware: '%s' present in config\\n\",\n+\t\t FIT_LOADABLE_PROP);\n+\n+\t\t/* Verify secure firmware image */\n+\t\tif (!(fit_image_verify(sec_firmware_img, ld_node_off))) {\n+\t\t\tprintf(\"SEC Loadable: Bad loadable image (bad CRC)\\n\");\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\n+\t\tif (fit_image_get_data(sec_firmware_img, ld_node_off,\n+\t\t\t\t &data, &size)) {\n+\t\t\tprintf(\"SEC Loadable: Can't get subimage data/size\");\n+\t\t\treturn -ENOENT;\n+\t\t}\n+\n+\t\t/* Get load address, treated as load offset to secure memory */\n+\t\tif (fit_image_get_load(sec_firmware_img, ld_node_off, &load)) {\n+\t\t\tprintf(\"SEC Loadable: Can't get subimage load\");\n+\t\t\treturn -ENOENT;\n+\t\t}\n+\n+\t\t/* Compute load address for loadable in secure memory */\n+\t\tsec_firmware_loadable_addr = (sec_firmware_addr -\n+\t\t\t\t\t\tgd->arch.tlb_size) + load;\n+\n+\t\t/* Copy loadable to secure memory and flush dcache */\n+\t\tdebug(\"%s copied to address 0x%p\\n\",\n+\t\t FIT_LOADABLE_PROP, (void *)sec_firmware_loadable_addr);\n+\t\tmemcpy((void *)sec_firmware_loadable_addr, data, size);\n+\t\tflush_dcache_range(sec_firmware_loadable_addr,\n+\t\t\t\t sec_firmware_loadable_addr + size);\n+\t}\n+\n+\t/* Populate address ptrs for loadable image with loadbale addr */\n+\tout_le32(loadable_l, (sec_firmware_loadable_addr & WORD_MASK));\n+\tout_le32(loadable_h, (sec_firmware_loadable_addr >> WORD_SHIFT));\n+\n+\treturn 0;\n+}\n+\n static int sec_firmware_copy_image(const char *title,\n \t\t\t u64 image_addr, u32 image_size, u64 sec_firmware)\n {\n@@ -117,9 +185,11 @@ static int sec_firmware_copy_image(const char *title,\n \n /*\n * This function will parse the SEC Firmware image, and then load it\n- * to secure memory.\n+ * to secure memory. Also load any loadable if present along with SEC\n+ * Firmware image.\n */\n-static int sec_firmware_load_image(const void *sec_firmware_img)\n+static int sec_firmware_load_image(const void *sec_firmware_img,\n+\t\t\t\t u32 *loadable_l, u32 *loadable_h)\n {\n \tconst void *raw_image_addr;\n \tsize_t raw_image_size = 0;\n@@ -172,6 +242,15 @@ static int sec_firmware_load_image(const void *sec_firmware_img)\n \tif (ret)\n \t\tgoto out;\n \n+\t/*\n+\t * Check if any loadable are present along with firmware image, if\n+\t * present load them.\n+\t */\n+\tret = sec_firmware_check_copy_loadable(sec_firmware_img, loadable_l,\n+\t\t\t\t\t loadable_h);\n+\tif (ret)\n+\t\tgoto out;\n+\n \tsec_firmware_addr |= SEC_FIRMWARE_LOADED;\n \tdebug(\"SEC Firmware: Entry point: 0x%llx\\n\",\n \t sec_firmware_addr & SEC_FIRMWARE_ADDR_MASK);\n@@ -289,17 +368,22 @@ int sec_firmware_get_random(uint8_t *rand, int bytes)\n * @sec_firmware_img:\tthe SEC Firmware image address\n * @eret_hold_l:\tthe address to hold exception return address low\n * @eret_hold_h:\tthe address to hold exception return address high\n+ * @loadable_l:\t\tthe address to hold loadable address low\n+ * @loadable_h:\t\tthe address to hold loadable address high\n */\n int sec_firmware_init(const void *sec_firmware_img,\n \t\t\tu32 *eret_hold_l,\n-\t\t\tu32 *eret_hold_h)\n+\t\t\tu32 *eret_hold_h,\n+\t\t\tu32 *loadable_l,\n+\t\t\tu32 *loadable_h)\n {\n \tint ret;\n \n \tif (!sec_firmware_is_valid(sec_firmware_img))\n \t\treturn -EINVAL;\n \n-\tret = sec_firmware_load_image(sec_firmware_img);\n+\tret = sec_firmware_load_image(sec_firmware_img, loadable_l,\n+\t\t\t\t loadable_h);\n \tif (ret) {\n \t\tprintf(\"SEC Firmware: Failed to load image\\n\");\n \t\treturn ret;\ndiff --git a/arch/arm/include/asm/armv8/sec_firmware.h b/arch/arm/include/asm/armv8/sec_firmware.h\nindex 6d42a71..2ba1847 100644\n--- a/arch/arm/include/asm/armv8/sec_firmware.h\n+++ b/arch/arm/include/asm/armv8/sec_firmware.h\n@@ -9,8 +9,10 @@\n \n #define PSCI_INVALID_VER\t\t0xffffffff\n #define SEC_JR3_OFFSET\t\t\t0x40000\n+#define WORD_MASK\t\t\t0xffffffff\n+#define WORD_SHIFT\t\t\t32\n \n-int sec_firmware_init(const void *, u32 *, u32 *);\n+int sec_firmware_init(const void *, u32 *, u32 *, u32 *, u32 *);\n int _sec_firmware_entry(const void *, u32 *, u32 *);\n bool sec_firmware_is_valid(const void *);\n bool sec_firmware_support_hwrng(void);\n", "prefixes": [ "U-Boot", "2/2" ] }