18c2ecf20Sopenharmony_ci/*
28c2ecf20Sopenharmony_ci * TI Wakeup M3 for AMx3 SoCs Power Management Routines
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * Copyright (C) 2015 Texas Instruments Incorporated - https://www.ti.com/
58c2ecf20Sopenharmony_ci * Dave Gerlach <d-gerlach@ti.com>
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or
88c2ecf20Sopenharmony_ci * modify it under the terms of the GNU General Public License as
98c2ecf20Sopenharmony_ci * published by the Free Software Foundation version 2.
108c2ecf20Sopenharmony_ci *
118c2ecf20Sopenharmony_ci * This program is distributed "as is" WITHOUT ANY WARRANTY of any
128c2ecf20Sopenharmony_ci * kind, whether express or implied; without even the implied warranty
138c2ecf20Sopenharmony_ci * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
148c2ecf20Sopenharmony_ci * GNU General Public License for more details.
158c2ecf20Sopenharmony_ci */
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci#ifndef _LINUX_WKUP_M3_IPC_H
188c2ecf20Sopenharmony_ci#define _LINUX_WKUP_M3_IPC_H
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#define WKUP_M3_DEEPSLEEP	1
218c2ecf20Sopenharmony_ci#define WKUP_M3_STANDBY		2
228c2ecf20Sopenharmony_ci#define WKUP_M3_IDLE		3
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci#include <linux/mailbox_client.h>
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cistruct wkup_m3_ipc_ops;
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistruct wkup_m3_ipc {
298c2ecf20Sopenharmony_ci	struct rproc *rproc;
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	void __iomem *ipc_mem_base;
328c2ecf20Sopenharmony_ci	struct device *dev;
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci	int mem_type;
358c2ecf20Sopenharmony_ci	unsigned long resume_addr;
368c2ecf20Sopenharmony_ci	int state;
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	struct completion sync_complete;
398c2ecf20Sopenharmony_ci	struct mbox_client mbox_client;
408c2ecf20Sopenharmony_ci	struct mbox_chan *mbox;
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci	struct wkup_m3_ipc_ops *ops;
438c2ecf20Sopenharmony_ci	int is_rtc_only;
448c2ecf20Sopenharmony_ci};
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_cistruct wkup_m3_wakeup_src {
478c2ecf20Sopenharmony_ci	int irq_nr;
488c2ecf20Sopenharmony_ci	char src[10];
498c2ecf20Sopenharmony_ci};
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_cistruct wkup_m3_ipc_ops {
528c2ecf20Sopenharmony_ci	void (*set_mem_type)(struct wkup_m3_ipc *m3_ipc, int mem_type);
538c2ecf20Sopenharmony_ci	void (*set_resume_address)(struct wkup_m3_ipc *m3_ipc, void *addr);
548c2ecf20Sopenharmony_ci	int (*prepare_low_power)(struct wkup_m3_ipc *m3_ipc, int state);
558c2ecf20Sopenharmony_ci	int (*finish_low_power)(struct wkup_m3_ipc *m3_ipc);
568c2ecf20Sopenharmony_ci	int (*request_pm_status)(struct wkup_m3_ipc *m3_ipc);
578c2ecf20Sopenharmony_ci	const char *(*request_wake_src)(struct wkup_m3_ipc *m3_ipc);
588c2ecf20Sopenharmony_ci	void (*set_rtc_only)(struct wkup_m3_ipc *m3_ipc);
598c2ecf20Sopenharmony_ci};
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_cistruct wkup_m3_ipc *wkup_m3_ipc_get(void);
628c2ecf20Sopenharmony_civoid wkup_m3_ipc_put(struct wkup_m3_ipc *m3_ipc);
638c2ecf20Sopenharmony_civoid wkup_m3_set_rtc_only_mode(void);
648c2ecf20Sopenharmony_ci#endif /* _LINUX_WKUP_M3_IPC_H */
65