1 // SPDX-License-Identifier: GPL-2.0+
4 * Michalis Pappas <mpappas@fastmail.fm>
9 #include <linux/arm-smccc.h>
10 #include <linux/compiler.h>
11 #include <linux/psci.h>
13 static int do_call(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[])
15 struct arm_smccc_res res
;
30 fid
= simple_strtoul(argv
[1], NULL
, 16);
32 a1
= argc
> 2 ? simple_strtoul(argv
[2], NULL
, 16) : 0;
33 a2
= argc
> 3 ? simple_strtoul(argv
[3], NULL
, 16) : 0;
34 a3
= argc
> 4 ? simple_strtoul(argv
[4], NULL
, 16) : 0;
35 a4
= argc
> 5 ? simple_strtoul(argv
[5], NULL
, 16) : 0;
36 a5
= argc
> 6 ? simple_strtoul(argv
[6], NULL
, 16) : 0;
37 a6
= argc
> 7 ? simple_strtoul(argv
[7], NULL
, 16) : 0;
38 a7
= argc
> 8 ? simple_strtoul(argv
[8], NULL
, 16) : 0;
40 if (!strcmp(argv
[0], "smc"))
41 arm_smccc_smc(fid
, a1
, a2
, a3
, a4
, a5
, a6
, a7
, &res
);
43 arm_smccc_hvc(fid
, a1
, a2
, a3
, a4
, a5
, a6
, a7
, &res
);
45 printf("Res: %ld %ld %ld %ld\n", res
.a0
, res
.a1
, res
.a2
, res
.a3
);
53 "Issue a Secure Monitor Call",
54 "<fid> [arg1 ... arg6] [id]\n"
55 " - fid Function ID\n"
56 " - arg SMC arguments, passed to X1-X6 (default to zero)\n"
57 " - id Secure OS ID / Session ID, passed to W7 (defaults to zero)\n"
64 "Issue a Hypervisor Call",
65 "<fid> [arg1...arg7] [id]\n"
66 " - fid Function ID\n"
67 " - arg HVC arguments, passed to X1-X6 (default to zero)\n"
68 " - id Session ID, passed to W7 (defaults to zero)\n"