]> git.ipfire.org Git - thirdparty/u-boot.git/blob - arch/arm/mach-imx/sip.c
fca520c671ba581964e011da057b8a0711427a6d
[thirdparty/u-boot.git] / arch / arm / mach-imx / sip.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Copyright 2017 NXP
4 */
5
6 #include <common.h>
7 #include <asm/arch/sys_proto.h>
8
9 unsigned long call_imx_sip(unsigned long id, unsigned long reg0,
10 unsigned long reg1, unsigned long reg2,
11 unsigned long reg3)
12 {
13 struct pt_regs regs;
14
15 regs.regs[0] = id;
16 regs.regs[1] = reg0;
17 regs.regs[2] = reg1;
18 regs.regs[3] = reg2;
19 regs.regs[4] = reg3;
20
21 smc_call(&regs);
22
23 return regs.regs[0];
24 }
25
26 /*
27 * Do an SMC call to return 2 registers by having reg1 passed in by reference
28 */
29 unsigned long call_imx_sip_ret2(unsigned long id, unsigned long reg0,
30 unsigned long *reg1, unsigned long reg2,
31 unsigned long reg3)
32 {
33 struct pt_regs regs;
34
35 regs.regs[0] = id;
36 regs.regs[1] = reg0;
37 regs.regs[2] = *reg1;
38 regs.regs[3] = reg2;
39 regs.regs[4] = reg3;
40
41 smc_call(&regs);
42
43 *reg1 = regs.regs[1];
44
45 return regs.regs[0];
46 }