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