From patchwork Mon Apr 2 06:15:03 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: 894100 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="gEmuu6lG"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40F24P6b5lz9s0w for ; Mon, 2 Apr 2018 16:14:29 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 750C2C21E8A; Mon, 2 Apr 2018 06:14:25 +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_DNSWL_BLOCKED, 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 ABC5FC21DEC; Mon, 2 Apr 2018 06:14:21 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 50BE9C21E0B; Mon, 2 Apr 2018 06:14:20 +0000 (UTC) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0064.outbound.protection.outlook.com [104.47.32.64]) by lists.denx.de (Postfix) with ESMTPS id 7B80BC21DEC for ; Mon, 2 Apr 2018 06:14:19 +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; bh=MXi3OjTxAGlSdXYq+xr1WfKWj0+73EBycudPJre28qE=; b=gEmuu6lGE+AYKSA7yjozJv4lht7Qv7ELbAGuDiY0ZBom8v9weiofrN4u/GHHg+LjJbtKym1o8vms2oZV2h9XW46CMGg/TZAhL0TvDIFx8RtrRLfSGJNbyMt5oUb8KoPF+LlcMCnOtWf1gbybsSm1U/Ysz25CNYbXbYFHHjvsibY= Received: from SN4PR0201CA0038.namprd02.prod.outlook.com (10.162.76.24) by BN6PR02MB2260.namprd02.prod.outlook.com (10.168.253.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.631.10; Mon, 2 Apr 2018 06:14:16 +0000 Received: from BL2NAM02FT054.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e46::202) by SN4PR0201CA0038.outlook.office365.com (2603:10b6:803:2e::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.631.10 via Frontend Transport; Mon, 2 Apr 2018 06:14:15 +0000 Authentication-Results: spf=pass (sender IP is 149.199.60.100) 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.100 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.100; helo=xsj-pvapsmtpgw02; Received: from xsj-pvapsmtpgw02 (149.199.60.100) by BL2NAM02FT054.mail.protection.outlook.com (10.152.77.107) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.631.7 via Frontend Transport; Mon, 2 Apr 2018 06:14:14 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66]:48096 helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw02 with esmtp (Exim 4.63) (envelope-from ) id 1f2sjO-0007n0-8m for u-boot@lists.denx.de; Sun, 01 Apr 2018 23:14:14 -0700 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1f2sjJ-0004Oj-5N for u-boot@lists.denx.de; Sun, 01 Apr 2018 23:14:09 -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 w326E3MO018716; Sun, 1 Apr 2018 23:14:03 -0700 Received: from [172.23.37.99] (helo=xhdsivadur40.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1f2sjC-0004Mn-Mt; Sun, 01 Apr 2018 23:14:03 -0700 From: Siva Durga Prasad Paladugu To: Date: Mon, 2 Apr 2018 11:45:03 +0530 Message-ID: <1522649704-11696-1-git-send-email-sivadur@xilinx.com> X-Mailer: git-send-email 2.7.4 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.100; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(346002)(376002)(39860400002)(39380400002)(396003)(2970300002)(438002)(199004)(189003)(575784001)(50226002)(107886003)(36386004)(81156014)(36756003)(476003)(63266004)(51416003)(7696005)(486005)(486005)(47776003)(8936002)(81166006)(8676002)(8746002)(59450400001)(2616005)(126002)(9786002)(5890100001)(316002)(426003)(48376002)(106466001)(2351001)(54906003)(5660300001)(26005)(106002)(478600001)(186003)(305945005)(4326008)(2906002)(6916009)(336012)(356003)(50466002)(77096007)(107986001)(217873001)(5001870100001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR02MB2260; H:xsj-pvapsmtpgw02; FPR:; SPF:Pass; LANG:en; PTR:xapps1.xilinx.com,unknown-60-100.xilinx.com; A:1; MX:3; X-Microsoft-Exchange-Diagnostics: 1; BL2NAM02FT054; 1:hbfbU55P4ZE652iJ9D9wvv9n4dyYIgiRq+gM+2+gSkoqZCk06yoeZXq9ke4LKZntZ0pqp4mW7+vyVJfw2HLatSHNM8TxFVYnr1itgZ61PHqIuh1ScAewDSqEh8hlF8jA MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 24515637-3166-4cd6-d800-08d59860f5d7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4608076)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:BN6PR02MB2260; X-Microsoft-Exchange-Diagnostics: 1; BN6PR02MB2260; 3:74dHFhF56qAIhIQH6wHn6gpbZREXJIEB3z91yE3DiXy9Nbz9oYyiaNIyPew1346rvGk0er4umujleqn5BB+XoXkOPQarXb+ZSisvvzqMhlvaqbSunzTcBiDtOnD6BTXprK6koXeHDnNFBj45GADGtSBBkK8oX9/ScgbL9dISodSGRGRH3lIh/C7Moszysn8fBM594y3z8E+/6bJtn2lIH+bf0WsGizOS7baZ0GSLIPbbCf0TStDsOkeQDAXTAyajXeVJSXXl+rpg/JDgh52uCqGN2KMO9tfEJ/eRp48aAB60ME7KI0Ur8U5rBcBvIje+p+2M8FQaBcSKlUdnIyr8nVYeBpZ07TYtEmIqrtIYkcQ=; 25:p7w4gtemf2haA9QnNImMLkFfzW1gWROITUtZnISHv+yVxXZVAF02aNkWQiXp4/WzUqenMXYzlOaIRucCZ2ePdkIlBCMMNeTeKk4wrfPgYbpwBPJ9pZ9Gditm44Xbjpe32CLA3A12exONlewrdS4BHLsRqceVDRbRlU6ypn3c+wmtzUkRITeNzPzmeGs4BczdiL7ZfzErMHSNuQKw0IvU2L56ZfWv00QK/5KKmGaHTOn3NFMPTNtFFpGtd9/dzQh8ZWNErjfwL0uR95J66c1bPguBH0Zu2TU45OpOr3FfA0E0RvgbWsrWXiNInzuTptYs5YNKAk3WPF3Ek3BTY3uEnA== X-MS-TrafficTypeDiagnostic: BN6PR02MB2260: X-Microsoft-Exchange-Diagnostics: 1; BN6PR02MB2260; 31:YntQ0x+Hy2mjbFmzPG+AEubX2+ZlMa7H1LxagaMdszKmq6rmtif3dsAXZKSx4KTY5WbqRIO/OyZDHHHJ8Sla9YrGI6ATGhXjUoPN+DvOVmrI3gKOmQpQDSq+jASUxbf9CCjIPMwl6Sz9MV0Ihn5lS5nGVjylO4Hq/iRUKNDITzpo3FwjIVnnLMduL1YMduvJUzHlroMBkhaKK2nuKuePXYAPtiGvO2mARoM3RBS9hno=; 20:QMqAF1VlBgrvbjvH6GdSq/glT6G7WniJFEx83hY5PiwmT/eKhNruki93qSIdTNn3WyGYR0RThblbjPr0Xpu45uiEIS0PhymbXCQ/3Utwr5fvdC3DopTSfuIoC3actAgbFXnUbZ2jF+4RRz69H9GV3ZdP3F7Nfl8W1sJgEQRh2W1iJmg447BdCn6TKBLTDlkLLc1MOpVFrLixNC3ZJzIWkYr9mbbkECpqrH1XTQHanOmcCiTeN9WluCou4q1uANblAiqNVjI2J7Sn58/pen6Ly5zMo+4aC7aYWSxHzG1p88O8SVixSL/TqIzNgnbhtMGOAnDK/PZac1sLHBs9RYeWsjTHu//rxujz669lWGmeY7w2oojsoUg468XPTEqwlpaTM80nctuYA8qehFutLbARYXb1RhNpC/SutuW2i0k37H36pcBN+dY4vSh+4eiR0lltfY8jV+E49QEQjAQTG7mDu7VPKcs+XuAz3cOVRj5C+LCH4N088JtXatceyfMs3qq0 X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93004095)(10201501046)(3231221)(944501327)(52105095)(6055026)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:BN6PR02MB2260; BCL:0; PCL:0; RULEID:; SRVR:BN6PR02MB2260; X-Microsoft-Exchange-Diagnostics: 1; BN6PR02MB2260; 4:PCYCbTvHlTT7JY2Nj/fdih0puoLV94K6qsfAreDdCZQOhEo8t9AdQlxDut7ZmNCTmyhfnoW85VhGVR5bICqtBuSNvfEujto+FCzAFj8fMJ2+46kZNHCyU/ackYCcVpUgvhxCemtYq4b3JdWDCB5aH5J0VnMuUurJGDt2XQ+pW7Sqgm2m1eQdMnGssxsWOyYrm6csHNM0oqYA1cWtS8LElrUPSjID2xA5h6aJuKeGF7wnxpWRWnsEYPmEb7mt1Vrjb2BirJR52qNvOnUpGuRWgP4O3lZ3KhzeoE269o5nN23EF1GlWj6JINsFbIUzRrbN X-Forefront-PRVS: 0630013541 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN6PR02MB2260; 23:YhRKyd8FfItaY7pDnwoE+cPEymBayFKCF7PKRBn7H?= gRD50ZJoSQ70zEfhX/su214oowq59ENQnvrJKW9iaVdPgn71j+/204sS5C4T1dR7ogOpw+mBHsT/8e9SmIBPEr/6Q5W+lCE5fubpguqnT5R1HGno71T58gmHyt/aYIgSK3hU3y0pSq+/ul54bpTwe9okjWpFBl2ynm6CFNXgrvKKX/obDO4yMP7AlSix6QHvXCZZSPyQbedY0+sLmHKwLbFEx9hoovjS1f3O8hkxJMXtfTJU78KGqOMObGp60Dz4JE5XWDh6inPgSBvUQ2nt4luodtY3cY9ITM5ri7hPCTgUAyXbdItv3dsP0Idk4FbRfutE2ucmnWOoGAR6Um9tM6XDOto6pJgR6A1TMi7kRJIQfFHiUvvYfkwL/I3Unk5yPXNH2KXzzwCFCTx81/WSD3JgRdQrkEe8YP01caMNUrPTnri6hq9Iiwv+iblY9sv8S/UIn9ME9aTokM5K+WEv7RNWEJmCaNd9p/AcibcOOeUfr9o8QehhgxvsUbKzUGgmj6N1jFw8PQHz8BnplXXqrFtPr6kHXfi4k76qAcL3XHi/Jp1Y0PVfjOVh8SFjHUb0sqsmmvXrnyWojA+U6NsHuYTTiHK9SFpHof3u6GGYoA816X5kstHD4lAgHmDNo5nTZKVB3yJxPDmPAS9mIftKBQq15MSyfG9Hyrvh3W7BlHp3739/aA6PfLKGi/+PWQw8CnXUZ0pAb1W8BAxzIc2kb3MIobVf7aDkF0bmTvxmqXyKkYK2lQqaQSdXgPkWsVzHLvwE/n41mbOyYTowqcHAlQs7+dW0Hf9ZHPDyHDHt/1h4lEWjS431M4K3XscwuQQw6YidYv39kopo9H/6x/wK0Y+zWK0UX9nV3YzApD6nO89IiKq89wqNDRrrllTa8u2qVc6my+TcCze7JGCoZgYbDps7clnHAadQV/jtEf7D3/x+HwE/26sbpswWrentR8wyksJLHfZxhG1YIElMTxMB7WemNOWEGAKXedYzybZQgLY6qB0Mo0FEoriGoq4ibf3MWlUCm0wcTKQ9RaJwQODRmCOpurntRPDw5HlgJez/v/+gfYdwh/QOWbXA+uzQ3l73uMT5oCl1xav6eSKKJIHPlj+eYJPa3S/nNns2uGJTYRS3NJXmuqO0Py0tDSmfcs3wx8hOUJUXeaioy+j6IhEOUJ3 X-Microsoft-Antispam-Message-Info: s91t6iq0ebQxeUgRAGrjAlbJotimq4MmQgLa/M+bfYOxoFQoYQ4fyvQYcCnCoj2Ty4dXrgk7PMKilFCb5IPlvEDm7iIXa+j9W5vmBgqIRYYzuncELTVdwKWsXSQTIiTM8KKDkmWVDTL9Zsqa7F5AS4MqM6fCIaPC/a5uGYJAx0kqrPoeE5jo8uyez5oYCxW4 X-Microsoft-Exchange-Diagnostics: 1; BN6PR02MB2260; 6:bAEQHrCXzysHVuEugbVhOLphkPSTzM1HZlvKSupqxAMaFUC8AJG9A6jhQ4Webd6vuqxoT8W4K5PkitH/F4w31tAq/gPVLbYoBJXo5vM39xwYCEdbSFkmJ1PuDPI4jbDfanbkcDjIW6X9ERPKcvP/V9S/G0484tcVqirA5Qi8MuDpIB2oVe2fxZZjSjWw6jmVwXGKfzRSQVRkkw+hqMjywnW2gNAhv4oZJIccE3CeksElkaXgfw/0l7wgzmxjXF/OjvEFjuDXhHuxnsR5xdWB5WGUOKf+YvaaKm8g4MP0cnikk4QqxhBiW5AFKB3w60GcrHPqlJsg/LjWa+/ytu+1e+ML7OFZ5Q2S9iJGRjeTkJBMy2s2r11+3Gwt0/QBh8xqFhpdZu5Nin84dgrbV280T2QdVEm7JJt9/1jq2RApxAtoXDpaoGGfFB+MOqkInBP/9QhGtuorycMTMuzVWnKozA==; 5:/Af7hVXF9eh5akk0mrdA+ucRNZcvjHggcuncuRvCV8VAkFHvnG6bnniBROwy1rnFojYZ79MR60x8+e/YOkMivRKRzEirO6lfgZpllX/26KSwGXzyc1YjFGPHcm9R69kEqpKaJDn5EAxF+LAYJ5HkEqzptyOSCCKKaUq0QGIr9uQ=; 24:dcyvNW4XXTB0XcHJ/2zohWWqkVwRmsKmmvZl83MPz+G8bJQVErdIVsZby5kh4lcmO0D0x/IzS+JDnjolowH1Qjj9eetSBjeaDtxLmPNC6+o= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR02MB2260; 7:qqNIkpV5cf7esFvGGeTtjCW16zEJNq7kow40MfTxrfH3STtrpIoWpyTgxlMfVLpDAK6Fam3M1r8uqwVN2bCaBE+/RJejUmEC+R/FfEW2+fKS876ip4aQvbXxftj2I44nZO0UZG4U35+7tsk5WWyVAWF9mprSTIdowgzHZCEnC22EzMLUxsSJwhqFzowGK0/+lO8dQpY3GL1WkEe7hY7QeB94Chm42GL9CNKAP5lnJwKddDCQ3mnFxvEgpvLRP96w X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Apr 2018 06:14:14.9138 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 24515637-3166-4cd6-d800-08d59860f5d7 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.100]; Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR02MB2260 Cc: michal.simek@xilinx.com, Siva Durga Prasad Paladugu Subject: [U-Boot] [RFC PATCH 1/2] fpga: xilinx: zynq: Add support to decrypt images 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 to decrypt an encrypted bitstream or image. This zynq aes command can either load decrypted image back to DDR or it can load an encrypted bitsream to PL directly by decrypting it. The image has to be encrypted using xilinx bootgen tool and to get only the encrypted image from tool use -split option while invoking bootgen. Signed-off-by: Siva Durga Prasad Paladugu --- arch/arm/Kconfig | 1 + board/xilinx/zynq/Kconfig | 14 ++++ drivers/fpga/zynqpl.c | 158 ++++++++++++++++++++++++++++++++++++++++++++++ include/zynqpl.h | 5 ++ 4 files changed, 178 insertions(+) create mode 100644 board/xilinx/zynq/Kconfig -- 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/Kconfig b/arch/arm/Kconfig index 068ea1e..e0cd1d8 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1360,6 +1360,7 @@ source "board/toradex/colibri_pxa270/Kconfig" source "board/vscom/baltos/Kconfig" source "board/woodburn/Kconfig" source "board/work-microwave/work_92105/Kconfig" +source "board/xilinx/zynq/Kconfig" source "board/xilinx/zynqmp/Kconfig" source "board/zipitz2/Kconfig" diff --git a/board/xilinx/zynq/Kconfig b/board/xilinx/zynq/Kconfig new file mode 100644 index 0000000..f8f8a7f --- /dev/null +++ b/board/xilinx/zynq/Kconfig @@ -0,0 +1,14 @@ +# Copyright (c) 2018, Xilinx, Inc. +# +# SPDX-License-Identifier: GPL-2.0 + +if ARCH_ZYNQ + +config CMD_ZYNQ_AES + bool "Zynq AES" + default y + help + Decrypts the encrypted image present in source address + and places the decrypted image at destination address. + +endif diff --git a/drivers/fpga/zynqpl.c b/drivers/fpga/zynqpl.c index db9bd12..fcffc2d 100644 --- a/drivers/fpga/zynqpl.c +++ b/drivers/fpga/zynqpl.c @@ -18,6 +18,7 @@ #define DEVCFG_CTRL_PCFG_PROG_B 0x40000000 #define DEVCFG_CTRL_PCFG_AES_EFUSE_MASK 0x00001000 +#define DEVCFG_CTRL_PCAP_RATE_EN_MASK 0x02000000 #define DEVCFG_ISR_FATAL_ERROR_MASK 0x00740040 #define DEVCFG_ISR_ERROR_FLAGS_MASK 0x00340840 #define DEVCFG_ISR_RX_FIFO_OV 0x00040000 @@ -498,3 +499,160 @@ struct xilinx_fpga_op zynq_op = { .loadfs = zynq_loadfs, #endif }; + +#ifdef CONFIG_CMD_ZYNQ_AES +/* + * Load the encrypted image from src addr and decrypt the image and + * place it back the decrypted image into dstaddr. + */ +int zynq_decrypt_load(u32 srcaddr, u32 srclen, u32 dstaddr, u32 dstlen, + u8 bstype) +{ + u32 isr_status, ts; + + if ((srcaddr < SZ_1M) || (dstaddr < SZ_1M)) { + printf("%s: src and dst addr should be > 1M\n", + __func__); + return FPGA_FAIL; + } + + if (zynq_dma_xfer_init(bstype)) { + printf("%s: zynq_dma_xfer_init FAIL\n", __func__); + return FPGA_FAIL; + } + + writel((readl(&devcfg_base->ctrl) | DEVCFG_CTRL_PCAP_RATE_EN_MASK), + &devcfg_base->ctrl); + + debug("%s: Source = 0x%08X\n", __func__, (u32)srcaddr); + debug("%s: Size = %zu\n", __func__, srclen); + + /* flush(clean & invalidate) d-cache range buf */ + flush_dcache_range((u32)srcaddr, (u32)srcaddr + + roundup(srclen << 2, ARCH_DMA_MINALIGN)); + /* + * Flush destination address range only if image is not + * bitstream. + */ + if (bstype == BIT_NONE) + flush_dcache_range((u32)dstaddr, (u32)dstaddr + + roundup(dstlen << 2, ARCH_DMA_MINALIGN)); + + if (zynq_dma_transfer(srcaddr | 1, srclen, dstaddr | 1, dstlen)) + return FPGA_FAIL; + + if (bstype == BIT_FULL) { + isr_status = readl(&devcfg_base->int_sts); + /* Check FPGA configuration completion */ + ts = get_timer(0); + while (!(isr_status & DEVCFG_ISR_PCFG_DONE)) { + if (get_timer(ts) > CONFIG_SYS_FPGA_WAIT) { + printf("%s: Timeout wait for FPGA to config\n", + __func__); + return FPGA_FAIL; + } + isr_status = readl(&devcfg_base->int_sts); + } + + printf("%s: FPGA config done\n", __func__); + + if (bstype != BIT_PARTIAL) + zynq_slcr_devcfg_enable(); + } + + return FPGA_SUCCESS; +} + +static int do_zynq_decrypt_image(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) +{ + char *endp; + u32 srcaddr; + u32 srclen; + u32 dstaddr; + u32 dstlen; + u8 imgtype = BIT_NONE; + int status; + u8 i = 1; + + if (argc < 4 && argc > 5) + goto usage; + + if (argc == 4) { + if (!strcmp("load", argv[i])) + imgtype = BIT_FULL; + else if (!strcmp("loadp", argv[i])) + imgtype = BIT_PARTIAL; + else + goto usage; + i++; + } + + srcaddr = simple_strtoul(argv[i], &endp, 16); + if (*argv[i++] == 0 || *endp != 0) + goto usage; + srclen = simple_strtoul(argv[i], &endp, 16); + if (*argv[i++] == 0 || *endp != 0) + goto usage; + if (argc == 4) { + dstaddr = 0xFFFFFFFF; + dstlen = srclen; + } else { + dstaddr = simple_strtoul(argv[i], &endp, 16); + if (*argv[i++] == 0 || *endp != 0) + goto usage; + dstlen = simple_strtoul(argv[i], &endp, 16); + if (*argv[i++] == 0 || *endp != 0) + goto usage; + } + + /* + * If the image is not bitstream but destination address is + * 0xFFFFFFFF + */ + if (imgtype == BIT_NONE && dstaddr == 0xFFFFFFFF) { + printf("ERR:use zynqaes load/loadp encrypted bitstream\n"); + goto usage; + } + + /* + * Roundup source and destination lengths to + * word size + */ + if (srclen % 4) + srclen = roundup(srclen, 4); + if (dstlen % 4) + dstlen = roundup(dstlen, 4); + + status = zynq_decrypt_load(srcaddr, srclen >> 2, dstaddr, dstlen >> 2, + imgtype); + if (status != 0) + return -1; + + return 0; + +usage: + return CMD_RET_USAGE; +} + +#ifdef CONFIG_SYS_LONGHELP +static char zynqaes_help_text[] = +"zynqaes [operation type] -\n" +"Decrypts the encrypted image present in source address\n" +"and places the decrypted image at destination address\n" +"zynqaes operations:\n" +" zynqaes \n" +" zynqaes load \n" +" zynqaes loadp \n" +"if operation type is load or loadp, it loads the encrypted\n" +"full or partial bitstream on to PL respectively. If no valid\n" +"operation type specified then it loads decrypted image back\n" +"to memory and it doesn't support loading PL bistsream\n"; +#endif + +U_BOOT_CMD( + zynqaes, 5, 0, do_zynq_decrypt_image, + "Zynq AES decryption ", zynqaes_help_text + ); + +#endif diff --git a/include/zynqpl.h b/include/zynqpl.h index 5a34a17..0dd4cf9 100644 --- a/include/zynqpl.h +++ b/include/zynqpl.h @@ -12,6 +12,11 @@ #include +#ifdef CONFIG_CMD_ZYNQ_AES +int zynq_decrypt_load(u32 srcaddr, u32 dstaddr, u32 srclen, u32 dstlen, + u8 bstype); +#endif + #if defined(CONFIG_FPGA_ZYNQPL) extern struct xilinx_fpga_op zynq_op; # define FPGA_ZYNQPL_OPS &zynq_op