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