misc: imx8: add scfw api impementation
[oweals/u-boot.git] / arch / arm / include / asm / arch-imx8 / sci / sci.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright 2018 NXP
4  */
5
6 #ifndef _SC_SCI_H
7 #define _SC_SCI_H
8
9 #include <asm/arch/sci/types.h>
10 #include <asm/arch/sci/svc/misc/api.h>
11 #include <asm/arch/sci/svc/pad/api.h>
12 #include <asm/arch/sci/svc/pm/api.h>
13 #include <asm/arch/sci/svc/rm/api.h>
14 #include <asm/arch/sci/rpc.h>
15 #include <dt-bindings/soc/imx_rsrc.h>
16 #include <linux/errno.h>
17
18 static inline int sc_err_to_linux(sc_err_t err)
19 {
20         int ret;
21
22         switch (err) {
23         case SC_ERR_NONE:
24                 return 0;
25         case SC_ERR_VERSION:
26         case SC_ERR_CONFIG:
27         case SC_ERR_PARM:
28                 ret = -EINVAL;
29                 break;
30         case SC_ERR_NOACCESS:
31         case SC_ERR_LOCKED:
32         case SC_ERR_UNAVAILABLE:
33                 ret = -EACCES;
34                 break;
35         case SC_ERR_NOTFOUND:
36         case SC_ERR_NOPOWER:
37                 ret = -ENODEV;
38                 break;
39         case SC_ERR_IPC:
40                 ret = -EIO;
41                 break;
42         case SC_ERR_BUSY:
43                 ret = -EBUSY;
44                 break;
45         case SC_ERR_FAIL:
46                 ret = -EIO;
47                 break;
48         default:
49                 ret = 0;
50                 break;
51         }
52
53         debug("%s %d %d\n", __func__, err, ret);
54
55         return ret;
56 }
57
58 /* PM API*/
59 int sc_pm_set_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource,
60                                   sc_pm_power_mode_t mode);
61 int sc_pm_set_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
62                          sc_pm_clock_rate_t *rate);
63 int sc_pm_get_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
64                          sc_pm_clock_rate_t *rate);
65 int sc_pm_set_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
66                          sc_pm_clock_rate_t *rate);
67 int sc_pm_get_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
68                          sc_pm_clock_rate_t *rate);
69 int sc_pm_clock_enable(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
70                        sc_bool_t enable, sc_bool_t autog);
71
72 /* MISC API */
73 int sc_misc_get_control(sc_ipc_t ipc, sc_rsrc_t resource, sc_ctrl_t ctrl,
74                         u32 *val);
75 void sc_misc_get_boot_dev(sc_ipc_t ipc, sc_rsrc_t *boot_dev);
76 void sc_misc_boot_status(sc_ipc_t ipc, sc_misc_boot_status_t status);
77 void sc_misc_build_info(sc_ipc_t ipc, u32 *build, u32 *commit);
78 int sc_misc_otp_fuse_read(sc_ipc_t ipc, u32 word, u32 *val);
79
80 /* RM API */
81 sc_bool_t sc_rm_is_memreg_owned(sc_ipc_t ipc, sc_rm_mr_t mr);
82 int sc_rm_get_memreg_info(sc_ipc_t ipc, sc_rm_mr_t mr, sc_faddr_t *addr_start,
83                           sc_faddr_t *addr_end);
84 sc_bool_t sc_rm_is_resource_owned(sc_ipc_t ipc, sc_rsrc_t resource);
85
86 /* PAD API */
87 int sc_pad_set(sc_ipc_t ipc, sc_pad_t pad, u32 val);
88 #endif