[U-Boot] [PATCH v4] arm64: Add SMC and HVC commands
Michalis Pappas
mpappas at fastmail.fm
Wed May 2 07:54:32 UTC 2018
On 04/25/2018 03:54 PM, Michalis Pappas wrote:
> On 04/13/2018 10:40 AM, Michalis Pappas wrote:
>> 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 can be individually enabled.
>>
>> Signed-off-by: Michalis Pappas <mpappas at fastmail.fm>
>> ---
>>
>> Changes for v2:
>> - Update help message with additional information on usefulness
>> - Remove default=n from Kconfig
>>
>> Changes for v3:
>> - Replace dependency on ARM64 with ARM_SMCCC in Kconfig
>>
>> Changes for v4:
>> - Add list of changes
>>
>> cmd/Kconfig | 14 ++++++++++
>> cmd/Makefile | 2 ++
>> cmd/smccc.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>> 3 files changed, 88 insertions(+)
>> create mode 100644 cmd/smccc.c
>>
>> diff --git a/cmd/Kconfig b/cmd/Kconfig
>> index 136836d146..2176b98ccb 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 ARM_SMCCC
>> + help
>> + Allows issuing Hypervisor Calls (HVCs). Mostly useful for
>> + development and testing.
>> +
>> +config CMD_SMC
>> + bool "Support the 'smc' command"
>> + depends on ARM_SMCCC
>> + help
>> + Allows issuing Secure Monitor Calls (SMCs). Mostly useful for
>> + development and testing.
>> +
>> 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 <mpappas at fastmail.fm>
>> + *
>> + * SPDX-License-Identifier: GPL-2.0+
>> + */
>> +#include <asm/psci.h>
>> +#include <common.h>
>> +#include <command.h>
>> +#include <linux/arm-smccc.h>
>> +#include <linux/compiler.h>
>> +#include <linux/psci.h>
>> +
>> +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",
>> + "<fid> [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",
>> + "<fid> [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
>> +
>> --
>> 2.17.0
>>
>
> Hi,
>
> all review comments have been satsified, happy to merge this one?
>
> Thanks,
>
> Michalis
Hi, any news on this one?
More information about the U-Boot
mailing list