• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
call_imx_sip(unsigned long id,unsigned long reg0,unsigned long reg1,unsigned long reg2,unsigned long reg3)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  */
call_imx_sip_ret2(unsigned long id,unsigned long reg0,unsigned long * reg1,unsigned long reg2,unsigned long reg3)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 }
47