1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * TI Wakeup M3 for AMx3 SoCs Power Management Routines |
4 | * |
5 | * Copyright (C) 2015 Texas Instruments Incorporated - https://www.ti.com/ |
6 | * Dave Gerlach <d-gerlach@ti.com> |
7 | */ |
8 | |
9 | #ifndef _LINUX_WKUP_M3_IPC_H |
10 | #define _LINUX_WKUP_M3_IPC_H |
11 | |
12 | #define WKUP_M3_DEEPSLEEP 1 |
13 | #define WKUP_M3_STANDBY 2 |
14 | #define WKUP_M3_IDLE 3 |
15 | |
16 | #include <linux/mailbox_client.h> |
17 | |
18 | struct wkup_m3_ipc_ops; |
19 | |
20 | struct wkup_m3_ipc { |
21 | struct rproc *rproc; |
22 | |
23 | void __iomem *ipc_mem_base; |
24 | struct device *dev; |
25 | |
26 | int mem_type; |
27 | unsigned long resume_addr; |
28 | int vtt_conf; |
29 | int isolation_conf; |
30 | int state; |
31 | u32 halt; |
32 | |
33 | unsigned long volt_scale_offsets; |
34 | const char *sd_fw_name; |
35 | |
36 | struct completion sync_complete; |
37 | struct mbox_client mbox_client; |
38 | struct mbox_chan *mbox; |
39 | |
40 | struct wkup_m3_ipc_ops *ops; |
41 | int is_rtc_only; |
42 | struct dentry *dbg_path; |
43 | }; |
44 | |
45 | struct wkup_m3_wakeup_src { |
46 | int irq_nr; |
47 | char src[10]; |
48 | }; |
49 | |
50 | struct { |
51 | u16 ; |
52 | u8 ; |
53 | u8 ; |
54 | } __packed; |
55 | |
56 | struct wkup_m3_ipc_ops { |
57 | void (*set_mem_type)(struct wkup_m3_ipc *m3_ipc, int mem_type); |
58 | void (*set_resume_address)(struct wkup_m3_ipc *m3_ipc, void *addr); |
59 | int (*prepare_low_power)(struct wkup_m3_ipc *m3_ipc, int state); |
60 | int (*finish_low_power)(struct wkup_m3_ipc *m3_ipc); |
61 | int (*request_pm_status)(struct wkup_m3_ipc *m3_ipc); |
62 | const char *(*request_wake_src)(struct wkup_m3_ipc *m3_ipc); |
63 | void (*set_rtc_only)(struct wkup_m3_ipc *m3_ipc); |
64 | }; |
65 | |
66 | struct wkup_m3_ipc *wkup_m3_ipc_get(void); |
67 | void wkup_m3_ipc_put(struct wkup_m3_ipc *m3_ipc); |
68 | void wkup_m3_set_rtc_only_mode(void); |
69 | #endif /* _LINUX_WKUP_M3_IPC_H */ |
70 | |