1
2
3
4
5
6#ifndef IOSM_IPC_MMIO_H
7#define IOSM_IPC_MMIO_H
8
9
10#define IOSM_CP_VERSION 0x0100UL
11
12
13#define DL_AGGR BIT(9)
14
15
16#define UL_AGGR BIT(8)
17
18
19#define UL_FLOW_CREDIT BIT(21)
20
21
22enum ipc_mem_device_ipc_state {
23 IPC_MEM_DEVICE_IPC_UNINIT,
24 IPC_MEM_DEVICE_IPC_INIT,
25 IPC_MEM_DEVICE_IPC_RUNNING,
26 IPC_MEM_DEVICE_IPC_RECOVERY,
27 IPC_MEM_DEVICE_IPC_ERROR,
28 IPC_MEM_DEVICE_IPC_DONT_CARE,
29 IPC_MEM_DEVICE_IPC_INVALID = -1
30};
31
32
33enum rom_exit_code {
34 IMEM_ROM_EXIT_OPEN_EXT = 0x01,
35 IMEM_ROM_EXIT_OPEN_MEM = 0x02,
36 IMEM_ROM_EXIT_CERT_EXT = 0x10,
37 IMEM_ROM_EXIT_CERT_MEM = 0x20,
38 IMEM_ROM_EXIT_FAIL = 0xFF
39};
40
41
42enum ipc_mem_exec_stage {
43 IPC_MEM_EXEC_STAGE_RUN = 0x600DF00D,
44 IPC_MEM_EXEC_STAGE_CRASH = 0x8BADF00D,
45 IPC_MEM_EXEC_STAGE_CD_READY = 0xBADC0DED,
46 IPC_MEM_EXEC_STAGE_BOOT = 0xFEEDB007,
47 IPC_MEM_EXEC_STAGE_PSI = 0xFEEDBEEF,
48 IPC_MEM_EXEC_STAGE_EBL = 0xFEEDCAFE,
49 IPC_MEM_EXEC_STAGE_INVALID = 0xFFFFFFFF
50};
51
52
53struct mmio_offset {
54 int exec_stage;
55 int chip_info;
56 int rom_exit_code;
57 int psi_address;
58 int psi_size;
59 int ipc_status;
60 int context_info;
61 int ap_win_base;
62 int ap_win_end;
63 int cp_version;
64 int cp_capability;
65};
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80struct iosm_mmio {
81 unsigned char __iomem *base;
82 struct device *dev;
83 struct mmio_offset offset;
84 phys_addr_t context_info_addr;
85 unsigned int chip_info_version;
86 unsigned int chip_info_size;
87 u8 has_mux_lite:1,
88 has_ul_flow_credit:1,
89 has_slp_no_prot:1,
90 has_mcr_support:1;
91};
92
93
94
95
96
97
98
99
100struct iosm_mmio *ipc_mmio_init(void __iomem *mmio_addr, struct device *dev);
101
102
103
104
105
106
107
108
109
110void ipc_mmio_set_psi_addr_and_size(struct iosm_mmio *ipc_mmio, dma_addr_t addr,
111 u32 size);
112
113
114
115
116
117
118
119
120void ipc_mmio_set_contex_info_addr(struct iosm_mmio *ipc_mmio,
121 phys_addr_t addr);
122
123
124
125
126
127
128
129int ipc_mmio_get_cp_version(struct iosm_mmio *ipc_mmio);
130
131
132
133
134
135
136
137enum rom_exit_code ipc_mmio_get_rom_exit_code(struct iosm_mmio *ipc_mmio);
138
139
140
141
142
143
144
145enum ipc_mem_exec_stage ipc_mmio_get_exec_stage(struct iosm_mmio *ipc_mmio);
146
147
148
149
150
151
152
153enum ipc_mem_device_ipc_state
154ipc_mmio_get_ipc_state(struct iosm_mmio *ipc_mmio);
155
156
157
158
159
160
161
162
163void ipc_mmio_copy_chip_info(struct iosm_mmio *ipc_mmio, void *dest,
164 size_t size);
165
166
167
168
169
170
171
172
173void ipc_mmio_config(struct iosm_mmio *ipc_mmio);
174
175
176
177
178
179
180
181void ipc_mmio_update_cp_capability(struct iosm_mmio *ipc_mmio);
182
183#endif
184