From patchwork Tue May 29 14:22:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siva Durga Prasad Paladugu X-Patchwork-Id: 922142 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="UQ98Io4o"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40wGFd2BRzz9rvt for ; Wed, 30 May 2018 00:24:37 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 0106EC21EE4; Tue, 29 May 2018 14:24:11 +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_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,T_DKIM_INVALID 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 1DBDDC21EBD; Tue, 29 May 2018 14:23:44 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 9D2F9C21E5B; Tue, 29 May 2018 14:23:35 +0000 (UTC) Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0041.outbound.protection.outlook.com [104.47.42.41]) by lists.denx.de (Postfix) with ESMTPS id 7414CC21E57 for ; Tue, 29 May 2018 14:23:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/JzIEfXGlcVKGmRTVvLnYP8of7r4ML0EWgmwynTp4uE=; b=UQ98Io4oLFaKQ5M4RrUeE9+DIl+Y1zefTN6S9zkicyOVfeeMXrXSk1+ed1v/awKb0CosQgTP4g4m8MUe/C0PyuedHZHYQRoOYwrmk3eO2bFiEXnVEb4nhFCMuuWmkuZsHm1FDIhgI97Lne/7MChIuH1aOJuM8j+Het2kV5cD5bw= Received: from BLUPR0201CA0009.namprd02.prod.outlook.com (2a01:111:e400:52e7::19) by BL2PR02MB2099.namprd02.prod.outlook.com (2a01:111:e400:c74b::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.797.11; Tue, 29 May 2018 14:23:27 +0000 Received: from CY1NAM02FT044.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e45::201) by BLUPR0201CA0009.outlook.office365.com (2a01:111:e400:52e7::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.776.11 via Frontend Transport; Tue, 29 May 2018 14:23:27 +0000 Authentication-Results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; lists.denx.de; dkim=none (message not signed) header.d=none;lists.denx.de; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.60.83 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.83; helo=xsj-pvapsmtpgw01; Received: from xsj-pvapsmtpgw01 (149.199.60.83) by CY1NAM02FT044.mail.protection.outlook.com (10.152.75.137) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.820.8 via Frontend Transport; Tue, 29 May 2018 14:23:26 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66] helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1fNfX4-00004y-9o for u-boot@lists.denx.de; Tue, 29 May 2018 07:23:26 -0700 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1fNfWz-0007Xb-7k for u-boot@lists.denx.de; Tue, 29 May 2018 07:23:21 -0700 Received: from xsj-pvapsmtp01 (smtp.xilinx.com [149.199.38.66]) by xsj-smtp-dlp2.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id w4TENB4P011621; Tue, 29 May 2018 07:23:11 -0700 Received: from [172.23.37.99] (helo=xhdsivadur40.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1fNfWo-0007VN-TN; Tue, 29 May 2018 07:23:11 -0700 From: Siva Durga Prasad Paladugu To: Date: Tue, 29 May 2018 19:52:45 +0530 Message-ID: <1527603765-24481-3-git-send-email-siva.durga.paladugu@xilinx.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1527603765-24481-1-git-send-email-siva.durga.paladugu@xilinx.com> References: <1527603765-24481-1-git-send-email-siva.durga.paladugu@xilinx.com> X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.2.0.1013-23620.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.83; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(376002)(346002)(396003)(39860400002)(39380400002)(2980300002)(438002)(199004)(189003)(126002)(2616005)(186003)(6916009)(63266004)(51416003)(6666003)(5660300001)(8936002)(8746002)(26005)(106466001)(4326008)(47776003)(59450400001)(2906002)(76176011)(107886003)(7696005)(36386004)(81156014)(426003)(446003)(356003)(11346002)(9786002)(36756003)(50466002)(478600001)(81166006)(48376002)(50226002)(5890100001)(54906003)(305945005)(2351001)(575784001)(106002)(486006)(336012)(8676002)(316002)(77096007)(476003)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:BL2PR02MB2099; H:xsj-pvapsmtpgw01; FPR:; SPF:Pass; LANG:en; PTR:unknown-60-83.xilinx.com; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; CY1NAM02FT044; 1:OBvFAUFd+YEoDPgidUglN95uGY/vuLaBlC7lWXNtLemL3jgPRsz6w3/Tpa8+h41Oy9F/ABAlmzP7Gf12i9MJt/8v/V9z9iqVfbKJbgLsuCNTSUZ/EzSYkX5K6zvdihPI MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4608076)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:BL2PR02MB2099; X-Microsoft-Exchange-Diagnostics: 1; BL2PR02MB2099; 3:q/VgeLGiwLs7iRqr5jfyT35HvnTscUxC7GIdGY7bH4xl9MvvLy49e1ZNbKNZkBi6khDH+ekYLPcnfPtE9WGfsMz5X/qjCsAABtC5yNytDCNqWhQKxu1bFnRjIgIXIzxtmzexaH+rxGkOqyG9hs0DowaFLLg/yb1GDV5QDxkXshr7+bptljPtGja5eUbm/fHi7NegZ9iKNJHvi4YmY0yqUuVtPgzFBggv/kfZOJl1vm5kpffHhGXc5eAe+xB8aZWpCnIq7Ff8wZg2BnJ7wNR6J/QgUUe+NVX34HsBM6Feo9NIISPkpA/V/vcW+UbWs5FuIo6irCdoHUDPx79OKDT2Zrz2Y7oyJfTFfNcPJREtKiU=; 25:hbRnFQyiEtPBvnt/tHBADUYdfo/2At0xD1ksOXJ11YrIVRsauo9xWCWjfa4BmlhIvJeehonOfa+v8RUivUTFd5xx565Cy75aD48b479L9u3yoV221wgC5jbC7pjyM/B8Wg/pHl+DhQe4lv45MYfqk/ltpJhhE8hMZlr1t+ZH33b/ZZicB3EeruhVvrgSYTwInRKLfJX0nFvrY7xpSwqQbU574jbKunqRq7D/12hndj0cS64i9dOKRktmDhO6lHxcgjws76m94TbuQCrEfl9Itap30gTNG5NrRIB13xHIZESHMrk3qLv3QURgmhmfDn8h+2iDUP2pi1UZxQmf2KByqw== X-MS-TrafficTypeDiagnostic: BL2PR02MB2099: X-Microsoft-Exchange-Diagnostics: 1; BL2PR02MB2099; 31:5o2jlyKMlt2KPhcP71+9Whd1rkCKU4HZw7Pqxcjb7zKtFVDLMievR3Ssaq5X6/A3jjkjGEQeKK2iRymxeb07jGC+ECMD/npbfoejfk2Lpv/ASfTJK4nAXsV8pXAov2Ykn7h1dRYtmRPrb/yTjXVq4k7jZ8i0vaNV83wlkjrSMEJpxcvzqAsDfUioBBDmXaSWk4jOjBEepC9Tfo6du1t5Wv20U85u1TUf6imCOPE03KU=; 20:RGTGBz5KSuFQcF5Qixik0wGCalc+4DLZnF3f/wmf+wd4xj6FJJKbEmVvjGVEy2B84zVtFd9nOAvpMP+iHPszGP/vq4a0IfX/Dfx5yKZa8uYXKW8WvFSQRAZ3DWlZj54gfOKkMvBczv4kbEGzHdmK8vW+4E3EE7H+SNf7LoD4cNEjErqcjOkOWxKKlXLZ8x+NiodQIR/nWW1GMbYStM/Wk9e4kYb6uRsEsTpJB9z8r7JVM7imgTkKczgYSnOxcZcKXRm3AV4KpPLQn0V84Z5MU1/Y4RhbS6n174mX9zJunMr5b7fTE6nlc2GhZ3BzBLOScTB+KEZF/XdEwivZa7ixerv2w6jH8dlg/CaNfRiT9CY/GQ+D98nyUcALmVT9XNdJ5lNeQITWVLv1E/EnYmUSjIxFSYXZqM0fis2ZbKL5fL/OxLjH9AQ/Rsw3QtHo/bwQBU/G+DBMSxaJSU6oJHX6TH9iYEhI59mynKQduJURyIZ7Y9j8pZBHl9Zu61UBQM2O X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(3231254)(944501410)(52105095)(93006095)(93004095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(6072148)(201708071742011)(7699016); SRVR:BL2PR02MB2099; BCL:0; PCL:0; RULEID:; SRVR:BL2PR02MB2099; X-Microsoft-Exchange-Diagnostics: 1; BL2PR02MB2099; 4:F/8YpVEyVBp7x+4gyjY8uJLEH6OfhDl2HBop9LHzQMyeGjGcvfm49L+yBzU/dlMla5JEjT+lI2gqo/LYzi+HnqA7j2Ug496wQsXfo+1hD/BE6run20FAQPer54dMQexm6nvN9F75BIrzfu9yROmDuEaOFDZIESFj6xAVYI3TcMXu3bwG7q+wZZ8eEFXYOz6i+gE9zFPlU7hjiteGp+0luXk4jv0SWes+mc+zdzYXpro1sp783AuIklKZ40A4GFilyenudqJMQcOQ7mCiO4SKhT8dsqPPIElhNOIyPr26ZmIq7pqbVR+H1dY8i8zeu3h/ X-Forefront-PRVS: 0687389FB0 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BL2PR02MB2099; 23:VQlbg5rVsZeus2dWa+5fY2QpZDbzCCoPyglMO46xi?= 7cTOzhSmZWB9Qx3Xmiw6HeZTiDi6jh73iLWESDlfzbm4gSmG1r1x9m13B5edrsrmCnYVDy0ltGt1dUOCWIeWG8CZ2smp3g6vPL5lxMRTiWKqRBWBEpdSSodL7X6k/KiDbh03fUS+PlPRSaJB0O6LKNA+5dHFgWKLSfRLsYCrSxbWlIAezKt6b2H6ijKp8MUW7VVjZYyu78nLuTuR0x/NhkjUZNtc+7FpIlM3M6vdD08BkUdZqk+0xggyKCLpe45VxAyNTsPkrHZG5ncwwgiiGcTDGFqHbGYIiWte6nC31e7AZ1PHf/qRcUNpDtAg1SOHEnGS10dVEJEqJRTY6/+5Kl3X6VUmu3jkoGuCaX/FYM71cwkKRD7/NqHsMk9cMSlfDiS55VB2b6YMbaqCIrI6KZkc2spj96H+oATW6tg3jJd0eVoJETlZVENIdbEEtmb1s2I4BMdkkjk8wi0HRs1yHWEwZCZcYG1niyVkQdNfJJE+eeL16rwIeGu3D9UWmJhKaegdwGv9kM0P9+6OgsnnCThowoUD/Qu6Gl7NQoDkOSdQaKolohFuwjQX+XUZNlOsROoF1c/gvmPqon685Dlm9HR3zGsXyT0R40JgeOtqj7rv+7XcqUJ5vyW0EaRl0+jcrNM71BRpc/qtIiPiGLIQ4MXuv8Ild2ASrN4F6vhiLSYe4XgMwajqaSBdccst6hYGEYLPGejmWtpoobG3DDTtztC0jz4NegTidEiPvS745q85UczNCnlGAcN6PLm4Kkh8xmLHC+OtUfdbG9HjqnVw97xdydI5sVeebSUM6mph5HmFJQogN0BkqjgHL/YqXPmjKMqgQ4H/XAgQ3utyIP+8PAuAAu973/xkixcElwH2wquVb5qb1xypClshaOcMw7TkMS6X0pbamgLNEQw5xlSarWVR1Gt6QElSrJNiRii+ebzA4WrMihAej/L73dPsdR5vS4Pk1DLEaDcoljp65GuCq0FL0YcZrWdsclz/Poojz+wwWNhq2WN56OZZodX0ul7RUDOXjcHAq71FNJ5x5XsAjxx+m5elS5TL8Br52DMDEFwyMQy/tvncdR48gmI7HrZzvQOlpyuQr0ddpKBBQBclQBFXo1Xz5+bYoTCkbagVij5p5W7bCvNib8uyu8xgbSLhscoFfTYnv21+W+TDSvpbKtD X-Microsoft-Antispam-Message-Info: jjRmISBmzDJmheYiPSSV8NT7lbsqr0ehv68k3b6zW1ZWeOIUB7byqvV/Po1peBa6qWeyg/x2OmToy7Qw5885dw8lQyCrzXB2s9Yd/r8cYVMIt+2UIZk6CWCimQ4Hok2LF7aSY8VDMVTYf2YUsPvQ3Wf4GT0KnFEHfw2uqjlp2l4hzZk1VmJyUqbJpQQmU/jb X-Microsoft-Exchange-Diagnostics: 1; BL2PR02MB2099; 6:AIILfgZ/st5u1EhoZeGV8UvAMhTY3ul4CQ4amBReW4YI0OId+MeLhbQ39hDdb4fiQSq6tmXCVh/G02+wTGtM9NU5OBa+qkSf7D6gHbBW4mPNhIG5XEGTVfhx2gUQYuGDggusKv3l6pf447QKocy7BxlbnsXNbxCSV4PbJhpOXdcZY8QM8AKSgzCZ1geOKnbpCrHi1mEZTc97MUguMGHii8411b96RUz/geCWlJ91yVJw7p497/uVPLDlPdF2kMYQX8s9IRWY1lRHtPd8ot+FkF3CCW1mQYttypEKZ9CD/O112e1dCkNvQ2SdtDxKSOxUvxWlfQLcqREaEo00xGki//m+17RVXBNab49q7kHxVU7zDATFjESQEEBzGu5wXj3hXtjHZ0zTkiCIATi84OAmx0MbaRPYeMtuIUI9Qo7H6jXd+gosDIAu6EdtAUra6aAU6LhMb8QTiCY9oP3FPBeLbw==; 5:a6OIBqEbHS4HkkNHyOKuoCuKZiDx0hCfo+psRwuBRpN6Gaomriqw6GbeTuTebECV+zb2tujRXCpoB4YZ2YJjtmGMcfsljWDk9Znb70JU6f14/85x80IFp1fMWlrLOvVpGlC3xhrlGivVkckMf19ivCSPi5ZxpzZDRG0qcIiHcQc=; 24:7Kgor78/g5XtthWBiE88WrfB4RiCLa18RUr2E8woCJYLGPBzV7S/mT4jZNiOHcf4OTIsKiloVBMTqyPyi/4LyBzvCpwcXZ1Ciid8Gt8QX6c= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BL2PR02MB2099; 7:WB4EkwkYihGJcQfdS+9neQRJVQNTodAxBLjptrboPzYGOW7ljLlQvKDLxc5aH/RbQGgxWyIo5ZZdPTPx0XVzc9hizjU+T7pw5LmWJG9NCJSZiZIxJtA9o6xrjpwx4nNLiWy1nyeNmwqPXvUhdtSZ2c1W/8Zb7hzXpVJbBz3AkDFRXeLbFrw82U0YXCQs1h35LLBDLXGiCcFF+lqWMnbkFdx+ZyNhgM2OZFst2Dx/ct8GwrXx2DVWAvf4fLjMJn+i X-MS-Office365-Filtering-Correlation-Id: 9ae7618d-6c04-49c0-19d0-08d5c56fbe6d X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2018 14:23:26.7780 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9ae7618d-6c04-49c0-19d0-08d5c56fbe6d X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.60.83]; Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR02MB2099 Cc: michal.simek@xilinx.com Subject: [U-Boot] [PATCH 3/3] fpga: zynqmp: Add secure bitstream loading for ZynqMP 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" This patch adds support for loading secure bitstreams on ZynqMP platforms. The secure bitstream images has to be generated using Xilinx bootgen tool. Signed-off-by: Siva Durga Prasad Paladugu --- arch/arm/include/asm/arch-zynqmp/sys_proto.h | 6 ++++ configs/xilinx_zynqmp_zcu102_rev1_0_defconfig | 1 + drivers/fpga/xilinx.c | 18 ++++++++++ drivers/fpga/zynqmppl.c | 48 +++++++++++++++++++++++++++ include/xilinx.h | 4 +++ include/zynqmppl.h | 3 ++ 6 files changed, 80 insertions(+) -- 2.7.4 This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately. diff --git a/arch/arm/include/asm/arch-zynqmp/sys_proto.h b/arch/arm/include/asm/arch-zynqmp/sys_proto.h index 6056bc6..773b930 100644 --- a/arch/arm/include/asm/arch-zynqmp/sys_proto.h +++ b/arch/arm/include/asm/arch-zynqmp/sys_proto.h @@ -13,8 +13,14 @@ #define ZYNQMP_SIP_SVC_PM_SECURE_IMG_LOAD 0xC200002D #define KEY_PTR_LEN 32 +#define ZYNQMP_FPGA_BIT_AUTH_DDR 1 +#define ZYNQMP_FPGA_BIT_AUTH_OCM 2 +#define ZYNQMP_FPGA_BIT_ENC_USR_KEY 3 +#define ZYNQMP_FPGA_BIT_ENC_DEV_KEY 4 #define ZYNQMP_FPGA_BIT_NS 5 +#define ZYNQMP_FPGA_AUTH_DDR 1 + enum { IDCODE, VERSION, diff --git a/configs/xilinx_zynqmp_zcu102_rev1_0_defconfig b/configs/xilinx_zynqmp_zcu102_rev1_0_defconfig index 4cb3959..1379f14 100644 --- a/configs/xilinx_zynqmp_zcu102_rev1_0_defconfig +++ b/configs/xilinx_zynqmp_zcu102_rev1_0_defconfig @@ -31,6 +31,7 @@ CONFIG_CMD_DFU=y # CONFIG_CMD_FLASH is not set CONFIG_CMD_FPGA_LOADBP=y CONFIG_CMD_FPGA_LOADP=y +CONFIG_CMD_FPGA_LOAD_SECURE=y CONFIG_CMD_GPIO=y CONFIG_CMD_GPT=y CONFIG_CMD_I2C=y diff --git a/drivers/fpga/xilinx.c b/drivers/fpga/xilinx.c index 724304a..f513550 100644 --- a/drivers/fpga/xilinx.c +++ b/drivers/fpga/xilinx.c @@ -171,6 +171,24 @@ int xilinx_loadfs(xilinx_desc *desc, const void *buf, size_t bsize, } #endif +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) +int xilinx_loads(xilinx_desc *desc, const void *buf, size_t bsize, + struct fpga_secure_info *fpga_sec_info) +{ + if (!xilinx_validate(desc, (char *)__func__)) { + printf("%s: Invalid device descriptor\n", __func__); + return FPGA_FAIL; + } + + if (!desc->operations || !desc->operations->loads) { + printf("%s: Missing loads operation\n", __func__); + return FPGA_FAIL; + } + + return desc->operations->loads(desc, buf, bsize, fpga_sec_info); +} +#endif + int xilinx_dump(xilinx_desc *desc, const void *buf, size_t bsize) { if (!xilinx_validate (desc, (char *)__FUNCTION__)) { diff --git a/drivers/fpga/zynqmppl.c b/drivers/fpga/zynqmppl.c index b57623b..03ffa8c 100644 --- a/drivers/fpga/zynqmppl.c +++ b/drivers/fpga/zynqmppl.c @@ -223,6 +223,51 @@ static int zynqmp_load(xilinx_desc *desc, const void *buf, size_t bsize, return ret; } +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) && !defined(CONFIG_SPL_BUILD) +static int zynqmp_loads(xilinx_desc *desc, const void *buf, size_t bsize, + struct fpga_secure_info *fpga_sec_info) +{ + int ret; + u32 buf_lo, buf_hi; + u32 ret_payload[PAYLOAD_ARG_CNT]; + u8 flag = 0; + + flush_dcache_range((ulong)buf, (ulong)buf + + ALIGN(bsize, CONFIG_SYS_CACHELINE_SIZE)); + + if (!fpga_sec_info->encflag) + flag |= BIT(ZYNQMP_FPGA_BIT_ENC_DEV_KEY); + + if (fpga_sec_info->userkey_addr && + fpga_sec_info->encflag == FPGA_ENC_USR_KEY) { + flush_dcache_range((ulong)fpga_sec_info->userkey_addr, + (ulong)fpga_sec_info->userkey_addr + + ALIGN(KEY_PTR_LEN, + CONFIG_SYS_CACHELINE_SIZE)); + flag |= BIT(ZYNQMP_FPGA_BIT_ENC_USR_KEY); + } + + if (!fpga_sec_info->authflag) + flag |= BIT(ZYNQMP_FPGA_BIT_AUTH_OCM); + + if (fpga_sec_info->authflag == ZYNQMP_FPGA_AUTH_DDR) + flag |= BIT(ZYNQMP_FPGA_BIT_AUTH_DDR); + + buf_lo = lower_32_bits((ulong)buf); + buf_hi = upper_32_bits((ulong)buf); + + ret = invoke_smc(ZYNQMP_SIP_SVC_PM_FPGA_LOAD, buf_lo, buf_hi, + (u32)(uintptr_t)fpga_sec_info->userkey_addr, + flag, ret_payload); + if (ret) + puts("PL FPGA LOAD fail\n"); + else + puts("Bitstream successfully loaded\n"); + + return ret; +} +#endif + static int zynqmp_pcap_info(xilinx_desc *desc) { int ret; @@ -238,5 +283,8 @@ static int zynqmp_pcap_info(xilinx_desc *desc) struct xilinx_fpga_op zynqmp_op = { .load = zynqmp_load, +#if defined CONFIG_CMD_FPGA_LOAD_SECURE + .loads = zynqmp_loads, +#endif .info = zynqmp_pcap_info, }; diff --git a/include/xilinx.h b/include/xilinx.h index 9429f51..af40bef 100644 --- a/include/xilinx.h +++ b/include/xilinx.h @@ -48,6 +48,8 @@ typedef struct { /* typedef xilinx_desc */ struct xilinx_fpga_op { int (*load)(xilinx_desc *, const void *, size_t, bitstream_type); int (*loadfs)(xilinx_desc *, const void *, size_t, fpga_fs_info *); + int (*loads)(xilinx_desc *desc, const void *buf, size_t bsize, + struct fpga_secure_info *fpga_sec_info); int (*dump)(xilinx_desc *, const void *, size_t); int (*info)(xilinx_desc *); }; @@ -60,6 +62,8 @@ int xilinx_dump(xilinx_desc *desc, const void *buf, size_t bsize); int xilinx_info(xilinx_desc *desc); int xilinx_loadfs(xilinx_desc *desc, const void *buf, size_t bsize, fpga_fs_info *fpga_fsinfo); +int xilinx_loads(xilinx_desc *desc, const void *buf, size_t bsize, + struct fpga_secure_info *fpga_sec_info); /* Board specific implementation specific function types *********************************************************************/ diff --git a/include/zynqmppl.h b/include/zynqmppl.h index a0f4e68..5214db9 100644 --- a/include/zynqmppl.h +++ b/include/zynqmppl.h @@ -16,6 +16,9 @@ #define ZYNQMP_FPGA_OP_LOAD (1 << 1) #define ZYNQMP_FPGA_OP_DONE (1 << 2) +#define ZYNQMP_FPGA_FLAG_AUTHENTICATED BIT(2) +#define ZYNQMP_FPGA_FLAG_ENCRYPTED BIT(3) + #define ZYNQMP_CSU_IDCODE_DEVICE_CODE_SHIFT 15 #define ZYNQMP_CSU_IDCODE_DEVICE_CODE_MASK (0xf << \ ZYNQMP_CSU_IDCODE_DEVICE_CODE_SHIFT)