Merge tag 'u-boot-imx-20190426' of git://git.denx.de/u-boot-imx
[oweals/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 {
12         struct pt_regs regs;
13
14         regs.regs[0] = id;
15         regs.regs[1] = reg0;
16         regs.regs[2] = reg1;
17         regs.regs[3] = reg2;
18
19         smc_call(&regs);
20
21         return regs.regs[0];
22 }
23
24 /*
25  * Do an SMC call to return 2 registers by having reg1 passed in by reference
26  */
27 unsigned long call_imx_sip_ret2(unsigned long id, unsigned long reg0,
28                                 unsigned long *reg1, unsigned long reg2,
29                                 unsigned long reg3)
30 {
31         struct pt_regs regs;
32
33         regs.regs[0] = id;
34         regs.regs[1] = reg0;
35         regs.regs[2] = *reg1;
36         regs.regs[3] = reg2;
37         regs.regs[4] = reg3;
38
39         smc_call(&regs);
40
41         *reg1 = regs.regs[1];
42
43         return regs.regs[0];
44 }