From patchwork Fri Apr 6 10:06:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michalis Pappas X-Patchwork-Id: 895839 X-Patchwork-Delegate: trini@ti.com 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=fail (p=none dis=none) header.from=fastmail.fm Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=fastmail.fm header.i=@fastmail.fm header.b="vnD7uaK5"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=messagingengine.com header.i=@messagingengine.com header.b="YsA7xlFA"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40HrD93nzVz9s0y for ; Sat, 7 Apr 2018 06:00:57 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 2C9DCC21DF3; Fri, 6 Apr 2018 19:58:30 +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=FREEMAIL_FROM, 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 837E7C21E16; Fri, 6 Apr 2018 19:57:18 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id E206BC21C2F; Fri, 6 Apr 2018 10:08:06 +0000 (UTC) Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lists.denx.de (Postfix) with ESMTPS id 60001C21C29 for ; Fri, 6 Apr 2018 10:08:06 +0000 (UTC) Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id 8F1CA20D7D; Fri, 6 Apr 2018 06:08:02 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Fri, 06 Apr 2018 06:08:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.fm; h= cc:date:from:message-id:subject:to:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=+tSx5FFro40uGrQGYO4kZiGDIFcClY/iVLBCubGyU GY=; b=vnD7uaK5QZEHow4L0SPBV88s/Hmpagrd63milrJ2UMf0CzhkmndAMZRLk ea9fGlejTZEaO9ozr1oSeQLJksXZiAvGGK9u6ssx9bpWbd9GscNHitImTrwaerR5 aIM18YrVwODlWKlluyqhWd1TnBGJFHM5uNWLxLCXbr2ekjxk1biPoTSMOQKtUZBF I6NuM9f8o/D1C9nOZYEsG6ex2nKnpOwZ/dzIeQ6ck3/qQtGoeMaxxTcMIQvQeePL f2E/stefzyysP5hcUqI01yznBKlb9DZi0I1eTpRfgXHhB1BxfrrBT1xA7EfqX3X3 LZpwQKcJXVGWvTqSsMKTx2YJEIqzw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:message-id:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=+tSx5FFro40uGrQGY O4kZiGDIFcClY/iVLBCubGyUGY=; b=YsA7xlFA1Nf1jsTRjq8CVnr90BgbzLjHB bKVj7cqWqVynwATQho0b84Nfv2hXWq7zbr0HCHA1SL3VMFQR0LFL+vIKVmIn9oyi LGesyTCdZ/ijSvQTCQ/PDZLPaWPoiz9/HapS3G1ZM2TxIwql2ItIz3nBr936FDkl v4uLx5uc0hOebySKpZ0uqhWrwpghjDjFmQgbJwRRW14L/o+/PpjSPrp2MVGDSyjq yh4WgNMYaeYPuwJrKiGEuCa9Wb++qe4q2byzvzimJYJm2lp5ouw2Gtmc+XfES31z RiAjxAahIbA79UNnSHpEzXkyeYyrfTJPuCdH7mYcLYJ9SdoRPVPnA== X-ME-Sender: Received: from localhost.localdomain (athedsl-88292.home.otenet.gr [87.203.98.50]) by mail.messagingengine.com (Postfix) with ESMTPA id D6C9610257; Fri, 6 Apr 2018 06:08:00 -0400 (EDT) From: Michalis Pappas To: u-boot@lists.denx.de Date: Fri, 6 Apr 2018 13:06:24 +0300 Message-Id: <20180406100624.25978-1-mpappas@fastmail.fm> X-Mailer: git-send-email 2.17.0 X-Mailman-Approved-At: Fri, 06 Apr 2018 19:57:13 +0000 Cc: Michalis Pappas , trini@konsulko.com Subject: [U-Boot] [PATCH] arm64: Add SMC and HVC commands 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: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" This patch adds smc and hvc commands, that allow issuing Secure Monitor Calls and Hypervisor Calls conforming to the ARM SMC Calling Convention. Add Kconfig items to allow each command to be individually enabled. Signed-off-by: Michalis Pappas Reviewed-by: Simon Glass --- cmd/Kconfig | 14 ++++++++++ cmd/Makefile | 2 ++ cmd/smccc.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 cmd/smccc.c -- 2.17.0 diff --git a/cmd/Kconfig b/cmd/Kconfig index 136836d146..bed6835eca 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1348,6 +1348,20 @@ config CMD_HASH saved to memory or to an environment variable. It is also possible to verify a hash against data in memory. +config CMD_HVC + bool "Support the 'hvc' command" + depends on ARM64 + default n + help + Allows issuing Hypervisor Calls (HVCs) + +config CMD_SMC + bool "Support the 'smc' command" + depends on ARM64 + default n + help + Allows issuing Secure Monitor Calls (SMCs) + config HASH_VERIFY bool "hash -v" depends on CMD_HASH diff --git a/cmd/Makefile b/cmd/Makefile index 9a358e4801..5656a1a40a 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -61,6 +61,7 @@ obj-$(CONFIG_CMD_FS_GENERIC) += fs.o obj-$(CONFIG_CMD_FUSE) += fuse.o obj-$(CONFIG_CMD_GETTIME) += gettime.o obj-$(CONFIG_CMD_GPIO) += gpio.o +obj-$(CONFIG_CMD_HVC) += smccc.o obj-$(CONFIG_CMD_I2C) += i2c.o obj-$(CONFIG_CMD_IOTRACE) += iotrace.o obj-$(CONFIG_CMD_HASH) += hash.o @@ -113,6 +114,7 @@ obj-$(CONFIG_CMD_SHA1SUM) += sha1sum.o obj-$(CONFIG_CMD_SETEXPR) += setexpr.o obj-$(CONFIG_CMD_SPI) += spi.o obj-$(CONFIG_CMD_STRINGS) += strings.o +obj-$(CONFIG_CMD_SMC) += smccc.o obj-$(CONFIG_CMD_TERMINAL) += terminal.o obj-$(CONFIG_CMD_TIME) += time.o obj-$(CONFIG_CMD_TRACE) += trace.o diff --git a/cmd/smccc.c b/cmd/smccc.c new file mode 100644 index 0000000000..2fa7c23999 --- /dev/null +++ b/cmd/smccc.c @@ -0,0 +1,72 @@ +/* + * Copyright 2018 + * Michalis Pappas + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include +#include +#include +#include +#include +#include + +static int do_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + struct arm_smccc_res res; + + unsigned long fid; + + unsigned long a1; + unsigned long a2; + unsigned long a3; + unsigned long a4; + unsigned long a5; + unsigned long a6; + unsigned long a7; + + if (argc < 2) + return CMD_RET_USAGE; + + fid = simple_strtoul(argv[1], NULL, 16); + + a1 = argc > 2 ? simple_strtoul(argv[2], NULL, 16) : 0; + a2 = argc > 3 ? simple_strtoul(argv[3], NULL, 16) : 0; + a3 = argc > 4 ? simple_strtoul(argv[4], NULL, 16) : 0; + a4 = argc > 5 ? simple_strtoul(argv[5], NULL, 16) : 0; + a5 = argc > 6 ? simple_strtoul(argv[6], NULL, 16) : 0; + a6 = argc > 7 ? simple_strtoul(argv[7], NULL, 16) : 0; + a7 = argc > 8 ? simple_strtoul(argv[8], NULL, 16) : 0; + + if (!strcmp(argv[0], "smc")) + arm_smccc_smc(fid, a1, a2, a3, a4, a5, a6, a7, &res); + else + arm_smccc_hvc(fid, a1, a2, a3, a4, a5, a6, a7, &res); + + printf("Res: %ld %ld %ld %ld\n", res.a0, res.a1, res.a2, res.a3); + + return 0; +} + +#ifdef CONFIG_CMD_SMC +U_BOOT_CMD( + smc, 8, 2, do_call, + "Issue a Secure Monitor Call", + " [arg1 ... arg6] [id]\n" + " - fid Function ID\n" + " - arg SMC arguments, passed to X1-X6 (default to zero)\n" + " - id Secure OS ID / Session ID, passed to W7 (defaults to zero)\n" +); +#endif + +#ifdef CONFIG_CMD_HVC +U_BOOT_CMD( + hvc, 8, 2, do_call, + "Issue a Hypervisor Call", + " [arg1...arg7] [id]\n" + " - fid Function ID\n" + " - arg HVC arguments, passed to X1-X6 (default to zero)\n" + " - id Session ID, passed to W7 (defaults to zero)\n" +); +#endif +