From patchwork Tue May 29 14:22:43 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: 922140 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="BRocA1oS"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40wGDN0rY9z9rvt for ; Wed, 30 May 2018 00:23:30 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id DEF65C21ECA; Tue, 29 May 2018 14:23:26 +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, 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 D98A6C21E29; Tue, 29 May 2018 14:23:22 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 2F381C21E31; Tue, 29 May 2018 14:23:21 +0000 (UTC) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0052.outbound.protection.outlook.com [104.47.33.52]) by lists.denx.de (Postfix) with ESMTPS id 731CCC21E29 for ; Tue, 29 May 2018 14:23:20 +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=KFnQBrgIkq2jjx8TkhYwMsDGiBGAQ9KVbjOSfsnlG3U=; b=BRocA1oSWvIx+Ny9jBk2Ti4RB3Yj7MICO+dbCvffsOYlAASnHlc2mmhV1zeEP8mF4V+xQRrOqx7gfp5tYD4DcGn4dQ35RsUUUm64wNTYGzCADkmmZWZ4Sdd3v9O3pd0gRgLlyTfHKESKg5CiWb6GOg5OMH9sWImsChW52ue4Ovk= Received: from BN6PR02CA0038.namprd02.prod.outlook.com (2603:10b6:404:5f::24) by BYAPR02MB4135.namprd02.prod.outlook.com (2603:10b6:a02:fa::28) 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:18 +0000 Received: from CY1NAM02FT034.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e45::202) by BN6PR02CA0038.outlook.office365.com (2603:10b6:404:5f::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.797.11 via Frontend Transport; Tue, 29 May 2018 14:23:17 +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 CY1NAM02FT034.mail.protection.outlook.com (10.152.75.190) 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:16 +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 1fNfWu-0008WT-6E for u-boot@lists.denx.de; Tue, 29 May 2018 07:23:16 -0700 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1fNfWp-0007WN-3x for u-boot@lists.denx.de; Tue, 29 May 2018 07:23:11 -0700 Received: from xsj-pvapsmtp01 (smtp3.xilinx.com [149.199.38.66]) by xsj-smtp-dlp1.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id w4TEN8rb013297; Tue, 29 May 2018 07:23:08 -0700 Received: from [172.23.37.99] (helo=xhdsivadur40.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1fNfWl-0007VN-Pj; Tue, 29 May 2018 07:23:08 -0700 From: Siva Durga Prasad Paladugu To: Date: Tue, 29 May 2018 19:52:43 +0530 Message-ID: <1527603765-24481-1-git-send-email-siva.durga.paladugu@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.83; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(376002)(346002)(396003)(39860400002)(39380400002)(2980300002)(438002)(199004)(189003)(36386004)(426003)(5660300001)(106466001)(59450400001)(2616005)(36756003)(336012)(476003)(50466002)(316002)(2351001)(106002)(54906003)(5890100001)(47776003)(8676002)(8936002)(26005)(6916009)(6666003)(50226002)(356003)(48376002)(9786002)(305945005)(77096007)(81166006)(81156014)(107886003)(126002)(7696005)(51416003)(2906002)(478600001)(63266004)(8746002)(4326008)(486006)(186003)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR02MB4135; H:xsj-pvapsmtpgw01; FPR:; SPF:Pass; LANG:en; PTR:unknown-60-83.xilinx.com; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; CY1NAM02FT034; 1:wpk9GUDqhfxDMl1K4+Nt2tgmJY30pVF6DWN/vUW6DBkyKgbKrlTGHDIUS8hoKKyVJl9csazd2Rexbvi5MIrZAmBYjtrwvKPXWa4WQnChJVWoKsF6b2Sml4d54qPNCnkn 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:BYAPR02MB4135; X-Microsoft-Exchange-Diagnostics: 1; BYAPR02MB4135; 3:7fCQrSiNjeJ77802OP2cH9QIA/v3KQZXm8noWLNn3atH6ohnYgG0dxyqHZCcjdGb+K28HubecB+PBOZxJbfIWGBWKVMXpbt+MEPuoVR873wBSMnioz1/Velayig9T9qpsdpQmeKi0ooc+1qojBhaiXxbD4z+m3u1RQh+Za04MeEB5/L8EK49YEE6cxX37CBXyP/pRR5bR1OqPQOtEd+v5OrMpUc1PmB7++E0so4TeMYG9tcFFZrplKfT9h1gPA3IkxOr+ZcbxbC8W58k8WzF60cvdvDxiX2HpUGYrjdUZUZsZEkzry/b54hrUNQW1715l7+jZ5rSlbonmMMVdEH7DNxu8nBkaZZ3CYiFnbMpQPU=; 25:ej6BNCoFB/TYLPP29zXwSbjk1HCaHLM4AUcjkmx+iSn5HU00c/VntkOZQs8W+1PMqloCkQciN+MJNxk4/lJUG8o8/lCGvbFXGoCWTS+FIJcTC2R14ZtY2r9bdwzoOuFzBuGJK0aHCrwdhhmxed8tLNm6NjZpeUiviHNdN1VEc/T6qUlwXBIIMOakbD2tZ7bC7gNa83hR8Sf0GvKP+PUX6CilGlDafkVYyNv528Fs0qvgyWhNgIusC5rPvwVLLad7qav2GD+77nBu84WSVt5+xw8UabGNNhHfyfsHr9USjUf2BeFdkIGBtiZFa/vDAYTs+uJNQ70onEN6I5L4/fgrIA== X-MS-TrafficTypeDiagnostic: BYAPR02MB4135: X-Microsoft-Exchange-Diagnostics: 1; BYAPR02MB4135; 31:5zYoNI9AgY9pRR8j+a3bRoN8uVrWXHHnKrdn8xxRsS0chgKjeDjOYcLXM+bi9LulsjisNiGdqLRK5ZHbssnM86SJrjGBf4IJnxCwuZ5O+F7hp1bPJYU5H2LYxGjweR1bh4kU4tlWUj9WR95Qip70K7TEDSOEDNOB+yNkaZe9hGQlNjYZu3Y5rFZ/cRfl2CI+aJUGBsZc7pqkNaWae2AMV9c8j2iheVTLHav2P4oOhgQ=; 20:EEJoNhZhJOWoQuLUnJ8ZMKm+4hD4NN4ZXImHhlSgMcK5KDpP1ctCzz9UFPhhi+ni2MKBnbbKEOlBdeuZp5KLn/7aoeLyrDQgDj09GAEHmCGTcdXDTgWOlW0s9yrlOqhDuUBbeyKOK0sQh/aH0YYHBfpplB8OF0y2Q5970eRnQvZUyN2Vutm5Z1pLA6NQbMnXI2Mhjn6YAELUZxWivaK73ZGfoCrpT3TDs836MMPji2S0E+ycLET9QsTeWwrUpOBT/UPH6LMORArk4We+aHbXB9uTEcyyA4XwxXSh9hWdhI0czI11II74NHAqdglqjk+zlA7F5Df8us3IVXW5cIhggEVcK+02SrTcU8D1z/Btj4oNXcII6uGPKMUk7p3Sd3lASUfjTNtUOfzLeGl8E1SEqe16Xx0ChABfZ5jj4IQZK+B6sFEX8tmavSzVlfonFM0rQj6pbONBSw87AidsendUW0LcRR/rN37BNsG4xYV56aaIw3PimYxBt+I6WycRN+mv 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)(5005006)(8121501046)(3231254)(944501410)(52105095)(10201501046)(93006095)(93004095)(3002001)(6055026)(149027)(150027)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123562045)(6072148)(201708071742011)(7699016); SRVR:BYAPR02MB4135; BCL:0; PCL:0; RULEID:; SRVR:BYAPR02MB4135; X-Microsoft-Exchange-Diagnostics: 1; BYAPR02MB4135; 4:MMwi4bCA4CKcQfROXb+Uzceeg3TATpe+br9OjpaPCWcb+sK37mUOKg6QwRumJP24agV/KPlgUOrM/fZXz9uXZA97Iznoq4+Uub5WHln0I0k29SJqCME/F0e5eh3vfN5PLEDl0M2xU6wEfe0vPBtaTMqHdRRMNTptuj/e+1F1y0Ofpdr3izE5RFErBA+ZRgw+8np0HCvXJLXY/AikVyxFH5da27GHL+S7nw8Z9bKGRIvCIHbL/rahKRybZeLYKMRk2KmwYV1V2pERRxKpACI4kiBiOCD//FvuW/SM5uK6/xcizOnBed9vogXrTeXY6zes X-Forefront-PRVS: 0687389FB0 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BYAPR02MB4135; 23:3PJjWNuEcUSLxnFFIkq+FWEsnKSYyWy1kLO1Y867J?= r3HGQWwbsy9RD9bGgnsn7uxO0zAeov/r19QQqPjVRFNXDaBI4JSzEzo5/RFsPuis+p1cCHtxK0AdHjavFUG3u9fagb38yjWnu+R2iFTmhWSZYQVlsDfYI05UZmzSK4fNV49VfbW7SALPFkn2k8K6aJSdzWZgA1SOaaETY1vDlaf+58lXjWBOb6pytKH3MK5f4hknTOtRMP5/fa54p+60ClAFg7XJXDXVY/KjFr0ZRHOLZCEgMH5D7ANUMvqqvAOfzGZswL/YOMthCjnnV28I1GGCCEdaavy/zicVbztjCsrItCDf6ohEXmuj99n6PLn6Ng995mLpfgTqjemNv5oR/jJ6jL6wZLrBYD8m+2qqUdBm66sspuVwAeCiMqhhXsBY5EWW77SIDb1eig4h+3JT/k+pwVVDoc2MLNgnuQwETo1GjHDbe3AJqGIBdEmPf7z6nWPSK10E4wFsrINM4/QCmCbzaDNoY58IEU9gVM1qF0/NQZyk8Wlx0UZmWeTndFH54eM48K8FPwGi6wurilM0oerC0DsO6AiHH2QM6mBd9bbtRCf+Q5b8na1DZFcIS9lHEwXvNjJhKKXFzzbwT2fKwlLX4XattyWjawc8LjH2BIkAfXJiIQorgo3UAeQsBAMYaQAUgiVxuGKac+APQOl9Q7g5TmNnVqm+VPTuSL+W7MS4u5zEtFCXIbN0O8WVuDp3qbCyc865jukCFTab6L6skWJbiyaykn+aMMv0iVW13F7Zm4MrT5HqkfkU4PQpvwqB4wWtwK4fBf8oKMcVwpTir+tNS4yw1r6f82bYCmlANf1VbA2TqeiiuyhRvx2rbqPb8zCgWXZ5lZMafBvK8qQnRN4Tx8BmGumo95+Li7zla31GQB93F4QlxDq+SoEHOi73phOXhgak/YW+Kr6148iejGvlG49x43mFv0dB/B9Op7even6IsxaZkmfz3yz/u91ZZ8BabmfkjgqctzxQOdwRQ1L+o3op5yTLIecAir580I2Jo37hQGyP1nB8+z4pFC6bNKpdS1/GzBcYO9jJB3cE5yrXcbIeQ+Xnox1e9FmsKPIjBucp7UPgmzOCHJXiySiTa4= X-Microsoft-Antispam-Message-Info: KNsIxzrsvfAj5MqDLNAbk51D7jUAyn1kgOI+tARfhCFuIUxMd3+c8vRp0NI7ydh3169vnmOYLtHWZDSVPhthAEXwmvFA0R9gwOnH0+OYH5ombgyHLKLhs7w72YeUM9XGitbEk0fcYqhoz2cIJrxNIoSbmDye9zn2pRUMEOht9MrOaFCjIhRDDovPWvaFlhsl X-Microsoft-Exchange-Diagnostics: 1; BYAPR02MB4135; 6:6VGSfcpr87h/WhaY0gDmHEi7tJD+umxeeIpdmHqWAjxYc+9Qq1PdiTJG0vlTwRFn1Q/ECN8ersPAByNmREHJK1bdMw28Gn/+8pQtzKy3bIYIxLSM8fdIbjwcOy+Khzx1U8yk+Kh6rTo2mix9KmwidZl2rzOpRkrm63WO4QGwUNgTGKdDmwGPZA3ZAvOk2SnYy9iT5RdG9SJMzvO0Mxl2sS+08YC30ZWJNYnV0ki3PPdkr/Jxd+4k+S5/X1fnBVsoMGcf99/nggANuFK7DJRGJedCwjOOP16eSnlrY9UBQCt6S4nwmBNC4Y34+2eNcALzEjboV6W58f9RZueRRJIJ5oykUKi8X0KQxfimte6NiUGnHcutlhI7/Jr4Gyh+RpLT3XoYFlec2Dfmln30AAJaLujYhZGHQ4r6HwV5zCwNc2DyfsHh9HexYnyIRUGstNP5OrGBdhRL6xaGB3Oo+E3o/A==; 5:BZGzNeB5GWwWtEZFZ2OApt9se7YeC5qb2WaTHcni0nPjh3Qzyz9+uIwQDZ85CGMIl3JN5rXbaMRYFjbdvlAjeVQv42hQ+JYhz7d8GoET31wQP3AiY9eMvdU0v6v8RbgTij1qkPNsL7WlJwWojCt6H8I+9RsR6JeE/vHE1LxEKrI=; 24:Q/smHwNp9aPMglQRixpiGZ4tICbx0gQW8Ss9SE9rKLpUL999rPoWetzgECliyGgDg3pggJUWP/0Ec5WT1u0+F3ZXXKLSKqm9poSyHUi6xoo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BYAPR02MB4135; 7:iupNEsv4Zpa2RWyqkI7fPgcbE8gLQy544fWZpFoePij4YYr3Ol9qhnON8tKMvJ9CPVbuEKgXpJcmR9w7p7yZdntIbT0soK1KamHZzWA+embS0xI/0pXG4FZp/fJZuYlL4bkJP445PyYD5ke0FrmfAqtC9xmYsznWFFUKaum25UuuNNRslCbvlEcv1+cGA+B7/k/pYVvQUO9T7oHGAJWPezxrDZiZYB1FZ+st/mZA36ov1mTgvr8uZgyRK1HZyAB6 X-MS-Office365-Filtering-Correlation-Id: 85e75729-ffcb-49d4-a5b5-08d5c56fb84d X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2018 14:23:16.5525 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 85e75729-ffcb-49d4-a5b5-08d5c56fb84d 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: BYAPR02MB4135 Cc: michal.simek@xilinx.com Subject: [U-Boot] [PATCH 1/3] cmd: fpga: Reorder the arguments parsing code 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 modifies the arguments parsing code by parsing based on requested operation for fpga loadfs and then parses the most common/basic args for other fpga load commands. This makes it easy for new command extensions or additions especially the commands with more args. Signed-off-by: Siva Durga Prasad Paladugu --- cmd/fpga.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) -- 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/cmd/fpga.c b/cmd/fpga.c index 14ad4e5..0981826 100644 --- a/cmd/fpga.c +++ b/cmd/fpga.c @@ -60,15 +60,31 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) if (datastr) fpga_data = (void *)simple_strtoul(datastr, NULL, 16); - switch (argc) { + if (argc > 9 && argc < 3) { + debug("%s: Too many or too few args (%d)\n", __func__, argc); + return CMD_RET_USAGE; + } + + op = (int)fpga_get_op(argv[1]); + + switch (op) { #if defined(CONFIG_CMD_FPGA_LOADFS) - case 9: + case FPGA_LOADFS: + if (argc < 9) + return CMD_RET_USAGE; fpga_fsinfo.blocksize = (unsigned int) - simple_strtoul(argv[5], NULL, 16); + simple_strtoul(argv[5], NULL, 16); fpga_fsinfo.interface = argv[6]; fpga_fsinfo.dev_part = argv[7]; fpga_fsinfo.filename = argv[8]; + argc = 5; + break; #endif + default: + break; + } + + switch (argc) { case 5: /* fpga */ data_size = simple_strtoul(argv[4], NULL, 16); @@ -117,15 +133,6 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) __func__, (ulong)fpga_data); dev = FPGA_INVALID_DEVICE; /* reset device num */ } - - case 2: /* fpga */ - op = (int)fpga_get_op(argv[1]); - break; - - default: - debug("%s: Too many or too few args (%d)\n", __func__, argc); - op = FPGA_NONE; /* force usage display */ - break; } if (dev == FPGA_INVALID_DEVICE) { From patchwork Tue May 29 14:22:44 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: 922141 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="cXLtJAXD"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40wGDx1g37z9rvt for ; Wed, 30 May 2018 00:24:01 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id C045AC21EBA; Tue, 29 May 2018 14:23:46 +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, 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 8BEA1C21E75; Tue, 29 May 2018 14:23:23 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 9543AC21E29; Tue, 29 May 2018 14:23:21 +0000 (UTC) Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0075.outbound.protection.outlook.com [104.47.42.75]) by lists.denx.de (Postfix) with ESMTPS id 64097C21DB5 for ; Tue, 29 May 2018 14:23:20 +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=OMz28uUY9yKtzC+hmnEC8aaUpUZHvlrLZrDhxa/If/I=; b=cXLtJAXDr5RiZA8kydGTbrSKcVeF9UzdwMObYdGXkw21ROf0NBLpJI+nA0Gc5T3zXigB0QmEKEfEV3yb4T5InZnxXA6YIE7TC4SymsWB8FjAGGqIM/C4ieTOwhKXmbvPh+4lwTR4XEmaYm4slZivWSdmDtKwV+9o/gcgafa5B34= Received: from SN4PR0201CA0060.namprd02.prod.outlook.com (2603:10b6:803:20::22) by SN6PR02MB4144.namprd02.prod.outlook.com (2603:10b6:805:2e::11) 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:17 +0000 Received: from CY1NAM02FT047.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e45::209) by SN4PR0201CA0060.outlook.office365.com (2603:10b6:803:20::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.797.11 via Frontend Transport; Tue, 29 May 2018 14:23:17 +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 CY1NAM02FT047.mail.protection.outlook.com (10.152.74.177) 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:16 +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 1fNfWu-0008WS-4u for u-boot@lists.denx.de; Tue, 29 May 2018 07:23:16 -0700 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1fNfWp-0007WN-1j for u-boot@lists.denx.de; Tue, 29 May 2018 07:23:11 -0700 Received: from xsj-pvapsmtp01 (smtp3.xilinx.com [149.199.38.66]) by xsj-smtp-dlp2.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id w4TEN9r5011611; Tue, 29 May 2018 07:23:10 -0700 Received: from [172.23.37.99] (helo=xhdsivadur40.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1fNfWn-0007VN-BO; Tue, 29 May 2018 07:23:09 -0700 From: Siva Durga Prasad Paladugu To: Date: Tue, 29 May 2018 19:52:44 +0530 Message-ID: <1527603765-24481-2-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)(39380400002)(396003)(39860400002)(346002)(376002)(2980300002)(438002)(199004)(189003)(6916009)(5660300001)(9786002)(6666003)(478600001)(336012)(59450400001)(51416003)(26005)(126002)(476003)(106002)(446003)(11346002)(7696005)(2616005)(426003)(76176011)(2351001)(107886003)(48376002)(50466002)(77096007)(186003)(47776003)(8936002)(356003)(575784001)(36756003)(486006)(8746002)(8676002)(2906002)(5890100001)(81166006)(81156014)(63266004)(305945005)(54906003)(50226002)(4326008)(316002)(106466001)(36386004)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN6PR02MB4144; H:xsj-pvapsmtpgw01; FPR:; SPF:Pass; LANG:en; PTR:unknown-60-83.xilinx.com; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; CY1NAM02FT047; 1:GbSgVQ9/Swed5t1yoD70BSsW5FJSCEg94ZL/8TEXYqwodM48cStk1o3czFoV/skSb6sqQvF+tavXCY1RUhEjiKPw8DV7aPvhOjKEAgaKWtU9yz3TilRoN7wIhKfoCl1p 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:SN6PR02MB4144; X-Microsoft-Exchange-Diagnostics: 1; SN6PR02MB4144; 3:nPjqmlHnzetznR2aih8lTRpDz4bD1NQsBN4ro1PdDkM0bm0EKQSc4yncrQeZJ2Ay8dLQQ14qhI02uvjDEJq5g+CK78mm6QNy4cNbRBc1r3fIndBgcXKuUhXpfiLJsGBYt8hTFWnxaUAcR2GpB3uhS2tEucIESjhonJHhgmi5Zu4wP4Gp5PzAWWZwGwfbOAdCXfW5flp+wvzAY1HmGMwwAa7Wq63VYh3Uc2aFZDJPlYzlJyVO9Vn6/xXxIIO/pytQzs3ZmzSFBy2ln2YD7x+0qvFeTnoMByaXffuXmHV3RvDrktyKTzsRZq2Zl+v32PJxNkzKd93tW253E/YIls6AX0kgH+T2CQ2HE0Lmr1jNqYs=; 25:YAZvORnqpzSvl/MnQbWGP9fL4Ggpi37c6yRCpB+lulgzo3Wt4NnmExh3DegbPgNgZpKofKxnlv3uhXPAq2H1BtI+Wff4ki6gpj61yBG+1RWQIVG7HroWyc5+fsvt6C5Te6IHR0RbeaqcfMu2h2SY2u3Dg36jDz/05lSPGSsrxEdPaXm2pSEZC45juO/W0JgGoE87oq4+RBV4qbS4P0Hz3nvgvRUUCTi31Rc2R183ibHoRTV2DfDKKCoRGIMChBXF8oo4k3+elL5JiRPkDnc4WNTWVt54h3yqU57FRtsuYZSJ1BNrlDgKJvMrKnksylFiI1usjIo4ch8Rbvq9/AV/PQ== X-MS-TrafficTypeDiagnostic: SN6PR02MB4144: X-Microsoft-Exchange-Diagnostics: 1; SN6PR02MB4144; 31:IvQCqsCPrDM+7azRrgW4h36hgJznOOwFIdEXESSQGwo0f0yci8rbNd3hjjXHUAx/QRElu5NNEKR93uqIzNa0DdcvCPiGQMhgZze1xYOy1CIKx4kE/mbia0M8OQ6AB/AnAjeleifi7LidORPT8gTPuX2PPrCbYcA7lfit7g7zGRD+TCO+IxU6un0XAY77kArSZA3fox9u95hkzFH6OIz9Gw83PZvY4BMAnT6r5KmfgEU=; 20:7w+PyJ1WT4Qs20vslnETbW5WYMJ4LNIc0EBqil0b7DQdxzKQc6R00TXzfKLuSI60ddNnySr0ghkQ7dbQMM8nS+0kX18cNPgFjw+kdog4jq12pz4FB/9JqTPC0Qd6M4n3l/KVbuDMp9BAb+A0Molev8aNSbKJOBjeJHeWdn80NxDj+QzCWLYzu8eK85imv5JHaVHL1e4/gHRq6W7oGgv3lTiMe8N0LfrzqM7JkXe110+w9W6akz4PBDbJ7wLc9/JVFz9Cs2gtCOmOxr/erEb4U3a2Kw9M4dG0YDZR1swR7iTABG3oLOvCaHUbcKMq14m6AfIwkM2VHSoMn88pnQicwUU+Fb0xksRpwEqiv+NOmOFtUHc+CTWi+JBFI+QTq5uM8hxZ3zFZZVi9BY2UYoM+YqnjUCkLyIrDmj77X1ux5Z4WZi0xIvkD+65M26UPIpmn8e72WnJmu9oTurjQ9j2acZR7Y33wKrysFwFlg8DaokzJ+eEyivC8WgWSCStuAcXB 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)(93006095)(93004095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:SN6PR02MB4144; BCL:0; PCL:0; RULEID:; SRVR:SN6PR02MB4144; X-Microsoft-Exchange-Diagnostics: 1; SN6PR02MB4144; 4:hwcc79lfIH8s8ggMHM9gD1IXyLXsVXkDO81nPn6LxiTnBWJQaAcFnhOyq1zrXa2UMVpZNTzTkiZck7gZfP3KnBoN8PncQcy4PFy2Ta6rp2m5Z1C4sidkmKLC8Zi+O2OMEq5xd4lh8Gey3WAEDCOsEMDMCvYmqISY4UZNvzphuhOGQvh8qGKQq/ukL8EczFlKVyQKi8K0lCPwByzN+6cp+Y66nhnIRefi3iW8TTpbvT1YDmFhWPmhENb5bFSLkJqhRkem2pJYwAuLPR8E7I/qqAmcZt1AfHIxJJSvqajGg7f8Q9ooST36vQOu0GwrFiei X-Forefront-PRVS: 0687389FB0 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN6PR02MB4144; 23:iuC1qnWh4Q+gXMv9GqgfWJ2SSlMPQw/CqCFETSQ2H?= zCOsQ84vMc+SeDmnK3acDHD601jJDHWa6aLxHnD3sBsRVh+sPwYm7bRx2TKk+2rbWyPleLVEHnTDuDINrvkZ2LnIg2v6W1O5Uuny6q1id+mAN2nX01Jgle/ufXNIuXt2bFCvfAXyZoDOev8fYEqkhnADp4E1WuSbwTezL8r1Kot95chSoKTS7rTSMeLPQHG8nAJHnZku+DBWZxzGKwLZhx+HV6MuRSqoW7ofyq4MvGt0CyoUgvh9TBlRh/wCE5UkaIztOH4uPflX9LjJAbdkSiCKhCx9HTgUIN2Vvp3Jf7oSYiopaaPbgjJMzyFf2tCFEuF+v2+LCtHPA3CWFQj53R09DgDRHsZochWwbaaYT+fEj/hnTEwZY2a9/pZyKDCccYCKl2TrILN54jHu08HCg18y+HUcHonCg0Q7DTvLfU+pvsJSkOCAnUgfNxK3HAfTWcyCxOpY1w+mZADAAkf7CoidwAwmuIvsxXzq7TS38BT653T9X08Hg9FPd9QSqI2kJkK0izSIOiDAIc5H+z7uYS+ShmUELbbCzE9aBMPzH+aYYgDU9lfwaeyfOaxTI7jNoJezHWApLlIAiuU2SLybC/c1ccWuTQwbvcFKuLWefzUPiCqCj4iMj3Ovb/1rWSSb6IrX+S1PgdBMud/R0/gUJ24jJJ/HVy5LeRg6Nem/GEOmWA5+vrt42OAjm4NL2LAFF5Qtqqhe4A1Jd/BoqwZZO8zsXG+OmE7X918iHe3pRhfXiRk+MQIWeCCmu5PpyU97JoQoKNIBa3wszMx1ZMwS4KOkRv3Smz4hTEcIczaIITTshMKAvrNnOfhWOohw97akLLZYwUWicOmW/IO1zudHngebyWzian/4oa4jVW9SBbSWpFbj/2KBRWOKkbKp80vsDxZ6/MDzNj8urUP5mNYNyDBdccTygJJXEK/wixe342lFaHhSP0019W9Ih04Xq40KDZQcoigMtmgqoqatMnFCY1QOLLfKeDJ9SLvpqXYpoBmBD9oj7xDv7MkYMT7tYdI1EluIMZe7IbwhcP8FzIg9JrxJWQXQDrZdPCN2BEIczRiGsmBQWp6dgh05Byu2dnTuNkU9sVSiOMD5LLvWzU4hTfGXVvtx0p6yg5gD+maPvyYIzSNV9fqziBUe+82zDJlccv85rGZYNjdf/baCbSB5s/L X-Microsoft-Antispam-Message-Info: l53ZBkXyh9h3DbVmOXt6mo2Pl6U8e/lyPKFKhAKVCjp1ExFz3+nc+LHLq7Ero/JODCNlWgCAXC4LVFL3GMadNB56VPTlgqhLu9iQjN4N/677tFiHvRYy+v8qOAhvXJqC/Db80AqzxUK82FBJNeMNAA6lp03eO1peLRG6SEgmzsxeRltcJV6re2Ta7TzY6zsn X-Microsoft-Exchange-Diagnostics: 1; SN6PR02MB4144; 6:1Ag5V44BseVcVTxZh04J8zYIKut+zc09qSLtTvi0ZSwCkdZQXieP4yZb/ZUgtmiv/cACtKct5IgaCUZUQdGdHuS0V0HwrV1y8NsMr7dnMutQ9pmFLT4794U77zpj8l4X6k7EusA3rwdnBED3I4eMHICESasElSjYba22kl7GTn/m/tqGYlP7U+/qNiLbPSPGuQOjpko414bbx4UmqUebKtgxlHqm/DpV0EYIGU8iU/ryhXdpQykr8Tb1owd2jT3kgEIIZ4/uJ+893Wl9NlXQkuLQKHhmGRVMjuHuQS4SskRZpFh39kutaBbE0s0HQgrMyPUpA9FIVc0LHroHB4dFjlxerUlX7vXbT2imn4AlpaxUvRoQHCsCw3wyE324qxEUiWaR532cK6zJc8oqLxPOZxRUkhi1rIwHI37WdYloSZ3P8sWs6i432kv9S0wcvjmD+vs03CWz8a4bLKwDdkY/aw==; 5:R6fGymvM2SffMseAEyHL++DREUotfCzYFzjlsZvkNnYUvEV+iohxu23CZcC24G8Thf99Qa4D3z70+02pXvyKAimN8IBItVc9gcQQwUI3rV265N0ALktOcPnYF4yzDam9Y2zjsHY2tMjw+8mO5CpY6XTu90RzrI7Fwj3UasiBU24=; 24:ZWnCSI3cpZQizdgD1PjrEwvEsnyQMyEGgxAsvB5SmsJ8ErAlVtkhxGs+HlyTyBpVwU1ob0c3VvdaGsTlske7f6hWBYp5il7+UxK6IhiyLZo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN6PR02MB4144; 7:nc8LcoK3DqCkqNPWneRydvbpeP1NsqfQE5nsYHVG82e2G/N04j4ozr6Ayq86ELdUxJhC5gGPKwP7YJWDNmCNt3pggk9k6ulj+Fd45beomD+vvB3wRGre4HrpuiD9D0Gc3w33fKf5nXwIMvmhfMfYV9vEnmB6QnwG89lopYjWH89JdULxO7pgZ0zBT0Bf96Lce3q5FDF55PMX9bIG3jREB/88pCzHn3S7nCk2djTJMB5PGs5cUS4TOGyMjPNC/Lvv X-MS-Office365-Filtering-Correlation-Id: f6d41488-660e-49c7-0ece-08d5c56fb85c X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2018 14:23:16.5688 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f6d41488-660e-49c7-0ece-08d5c56fb85c 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: SN6PR02MB4144 Cc: michal.simek@xilinx.com Subject: [U-Boot] [PATCH 2/3] cmd: fpga: Add support to load secure bitstreams 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 load secure bitstreams(authenticated or encrypted or both). As of now, this feature is added and tested only for xilinx bitstreams and the secure bitstream was generated using xilinx bootgen tool, but the command is defined in more generic way. Command example to load authenticated and device key encrypted bitstream is as follows "fpga loads 0 100000 2000000 0 1" Signed-off-by: Siva Durga Prasad Paladugu --- cmd/Kconfig | 7 ++++++ cmd/fpga.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++- drivers/fpga/fpga.c | 29 +++++++++++++++++++++++++ include/fpga.h | 11 ++++++++++ 4 files changed, 108 insertions(+), 1 deletion(-) -- 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/cmd/Kconfig b/cmd/Kconfig index 38406fc..9b9eb94 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -697,6 +697,13 @@ config CMD_FPGA_LOADP Supports loading an FPGA device from a bitstream buffer containing a partial bitstream. +config CMD_FPGA_LOAD_SECURE + bool "fpga loads - loads secure bitstreams (Xilinx only)" + depends on CMD_FPGA + help + Enables the fpga loads command which is used to load secure + (authenticated or encrypted or both) bitstreams on to FPGA. + config CMD_FPGAD bool "fpgad - dump FPGA registers" help diff --git a/cmd/fpga.c b/cmd/fpga.c index 0981826..ad716a0 100644 --- a/cmd/fpga.c +++ b/cmd/fpga.c @@ -27,6 +27,7 @@ enum { FPGA_LOADP, FPGA_LOADBP, FPGA_LOADFS, + FPGA_LOADS, }; /* ------------------------------------------------------------------------- */ @@ -54,6 +55,11 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) fpga_fs_info fpga_fsinfo; fpga_fsinfo.fstype = FS_TYPE_ANY; #endif +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) + struct fpga_secure_info fpga_sec_info; + + memset(&fpga_sec_info, 0, sizeof(fpga_sec_info)); +#endif if (devstr) dev = (int) simple_strtoul(devstr, NULL, 16); @@ -80,6 +86,19 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) argc = 5; break; #endif +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) + case FPGA_LOADS: + if (argc < 7) + return CMD_RET_USAGE; + if (argc == 8) + fpga_sec_info.userkey_addr = (u8 *)(uintptr_t) + simple_strtoull(argv[7], + NULL, 16); + fpga_sec_info.encflag = (u8)simple_strtoul(argv[6], NULL, 16); + fpga_sec_info.authflag = (u8)simple_strtoul(argv[5], NULL, 16); + argc = 5; + break; +#endif default: break; } @@ -150,6 +169,22 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) if (!fpga_fsinfo.interface || !fpga_fsinfo.dev_part || !fpga_fsinfo.filename) wrong_parms = 1; + break; +#endif +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) + case FPGA_LOADS: + if (fpga_sec_info.authflag >= FPGA_NO_ENC_OR_NO_AUTH && + fpga_sec_info.encflag >= FPGA_NO_ENC_OR_NO_AUTH) { + puts("ERR: use for NonSecure bitstream\n"); + wrong_parms = 1; + } + + if (fpga_sec_info.encflag == FPGA_ENC_USR_KEY && + !fpga_sec_info.userkey_addr) { + wrong_parms = 1; + puts("ERR:User key not provided\n"); + } + break; #endif case FPGA_LOAD: case FPGA_LOADP: @@ -206,6 +241,12 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) break; #endif +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) + case FPGA_LOADS: + rc = fpga_loads(dev, fpga_data, data_size, &fpga_sec_info); + break; +#endif + #if defined(CONFIG_CMD_FPGA_LOADMK) case FPGA_LOADMK: switch (genimg_get_format(fpga_data)) { @@ -339,6 +380,10 @@ static int fpga_get_op(char *opstr) #endif else if (!strcmp("dump", opstr)) op = FPGA_DUMP; +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) + else if (!strcmp("loads", opstr)) + op = FPGA_LOADS; +#endif if (op == FPGA_NONE) printf("Unknown fpga operation \"%s\"\n", opstr); @@ -346,7 +391,7 @@ static int fpga_get_op(char *opstr) return op; } -#if defined(CONFIG_CMD_FPGA_LOADFS) +#if defined(CONFIG_CMD_FPGA_LOADFS) || defined(CONFIG_CMD_FPGA_LOAD_SECURE) U_BOOT_CMD(fpga, 9, 1, do_fpga, #else U_BOOT_CMD(fpga, 6, 1, do_fpga, @@ -381,4 +426,19 @@ U_BOOT_CMD(fpga, 6, 1, do_fpga, "\tsubimage unit name in the form of addr:" #endif #endif +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) + "Load encrypted bitstream (Xilinx only)\n" + " loads [dev] [address] [size] [auth-OCM-0/DDR-1/noauth-2]\n" + " [enc-devkey(0)/userkey(1)/nenc(2) [Userkey address]\n" + "Loads the secure bistreams(authenticated/encrypted/both\n" + "authenticated and encrypted) of [size] from [address].\n" + "The auth-OCM/DDR flag specifies to perform authentication\n" + "in OCM or in DDR. 0 for OCM, 1 for DDR, 2 for no authentication.\n" + "The enc flag specifies which key to be used for decryption\n" + "0-device key, 1-user key, 2-no encryption.\n" + "The optional Userkey address specifies from which address key\n" + "has to be used for decryption if user key is selected.\n" + "NOTE: the sceure bitstream has to be created using xilinx\n" + "bootgen tool only.\n" +#endif ); diff --git a/drivers/fpga/fpga.c b/drivers/fpga/fpga.c index 55bdf9e..7e8bd7e 100644 --- a/drivers/fpga/fpga.c +++ b/drivers/fpga/fpga.c @@ -217,6 +217,35 @@ int fpga_fsload(int devnum, const void *buf, size_t size, } #endif +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) +int fpga_loads(int devnum, const void *buf, size_t size, + struct fpga_secure_info *fpga_sec_info) +{ + int ret_val = FPGA_FAIL; + + const fpga_desc *desc = fpga_validate(devnum, buf, size, + (char *)__func__); + + if (desc) { + switch (desc->devtype) { + case fpga_xilinx: +#if defined(CONFIG_FPGA_XILINX) + ret_val = xilinx_loads(desc->devdesc, buf, size, + fpga_sec_info); +#else + fpga_no_sup((char *)__func__, "Xilinx devices"); +#endif + break; + default: + printf("%s: Invalid or unsupported device type %d\n", + __func__, desc->devtype); + } + } + + return ret_val; +} +#endif + /* * Generic multiplexing code */ diff --git a/include/fpga.h b/include/fpga.h index f444093..195f0bd 100644 --- a/include/fpga.h +++ b/include/fpga.h @@ -20,6 +20,9 @@ /* device numbers must be non-negative */ #define FPGA_INVALID_DEVICE -1 +#define FPGA_ENC_USR_KEY 1 +#define FPGA_NO_ENC_OR_NO_AUTH 2 + /* root data type defintions */ typedef enum { /* typedef fpga_type */ fpga_min_type, /* range check value */ @@ -42,6 +45,12 @@ typedef struct { /* typedef fpga_desc */ int fstype; } fpga_fs_info; +struct fpga_secure_info { + u8 *userkey_addr; + u8 authflag; + u8 encflag; +}; + typedef enum { BIT_FULL = 0, BIT_PARTIAL, @@ -58,6 +67,8 @@ int fpga_load(int devnum, const void *buf, size_t bsize, bitstream_type bstype); int fpga_fsload(int devnum, const void *buf, size_t size, fpga_fs_info *fpga_fsinfo); +int fpga_loads(int devnum, const void *buf, size_t size, + struct fpga_secure_info *fpga_sec_info); int fpga_loadbitstream(int devnum, char *fpgadata, size_t size, bitstream_type bstype); int fpga_dump(int devnum, const void *buf, size_t bsize); 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)