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