]>
Commit | Line | Data |
---|---|---|
caff4cae IM |
1 | /* arch/arm/mach-msm/qdsp5/adsp_6210.h |
2 | * | |
3 | * Copyright (c) 2008 QUALCOMM Incorporated. | |
4 | * | |
5 | * This software is licensed under the terms of the GNU General Public | |
6 | * License version 2, as published by the Free Software Foundation, and | |
7 | * may be copied, distributed, and modified under those terms. | |
8 | * | |
9 | * This program is distributed in the hope that it will be useful, | |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | * GNU General Public License for more details. | |
13 | * | |
14 | */ | |
15 | ||
16 | #include "adsp.h" | |
17 | ||
18 | /* Firmware modules */ | |
19 | typedef enum { | |
20 | QDSP_MODULE_KERNEL, | |
21 | QDSP_MODULE_AFETASK, | |
22 | QDSP_MODULE_AUDPLAY0TASK, | |
23 | QDSP_MODULE_AUDPLAY1TASK, | |
24 | QDSP_MODULE_AUDPPTASK, | |
25 | QDSP_MODULE_VIDEOTASK, | |
26 | QDSP_MODULE_VIDEO_AAC_VOC, | |
27 | QDSP_MODULE_PCM_DEC, | |
28 | QDSP_MODULE_AUDIO_DEC_MP3, | |
29 | QDSP_MODULE_AUDIO_DEC_AAC, | |
30 | QDSP_MODULE_AUDIO_DEC_WMA, | |
31 | QDSP_MODULE_HOSTPCM, | |
32 | QDSP_MODULE_DTMF, | |
33 | QDSP_MODULE_AUDRECTASK, | |
34 | QDSP_MODULE_AUDPREPROCTASK, | |
35 | QDSP_MODULE_SBC_ENC, | |
36 | QDSP_MODULE_VOC, | |
37 | QDSP_MODULE_VOC_PCM, | |
38 | QDSP_MODULE_VOCENCTASK, | |
39 | QDSP_MODULE_VOCDECTASK, | |
40 | QDSP_MODULE_VOICEPROCTASK, | |
41 | QDSP_MODULE_VIDEOENCTASK, | |
42 | QDSP_MODULE_VFETASK, | |
43 | QDSP_MODULE_WAV_ENC, | |
44 | QDSP_MODULE_AACLC_ENC, | |
45 | QDSP_MODULE_VIDEO_AMR, | |
46 | QDSP_MODULE_VOC_AMR, | |
47 | QDSP_MODULE_VOC_EVRC, | |
48 | QDSP_MODULE_VOC_13K, | |
49 | QDSP_MODULE_VOC_FGV, | |
50 | QDSP_MODULE_DIAGTASK, | |
51 | QDSP_MODULE_JPEGTASK, | |
52 | QDSP_MODULE_LPMTASK, | |
53 | QDSP_MODULE_QCAMTASK, | |
54 | QDSP_MODULE_MODMATHTASK, | |
55 | QDSP_MODULE_AUDPLAY2TASK, | |
56 | QDSP_MODULE_AUDPLAY3TASK, | |
57 | QDSP_MODULE_AUDPLAY4TASK, | |
58 | QDSP_MODULE_GRAPHICSTASK, | |
59 | QDSP_MODULE_MIDI, | |
60 | QDSP_MODULE_GAUDIO, | |
61 | QDSP_MODULE_VDEC_LP_MODE, | |
62 | QDSP_MODULE_MAX, | |
63 | } qdsp_module_type; | |
64 | ||
65 | #define QDSP_RTOS_MAX_TASK_ID 19U | |
66 | ||
67 | /* Table of modules indexed by task ID for the GAUDIO image */ | |
68 | static qdsp_module_type qdsp_gaudio_task_to_module_table[] = { | |
69 | QDSP_MODULE_KERNEL, | |
70 | QDSP_MODULE_AFETASK, | |
71 | QDSP_MODULE_MAX, | |
72 | QDSP_MODULE_MAX, | |
73 | QDSP_MODULE_MAX, | |
74 | QDSP_MODULE_MAX, | |
75 | QDSP_MODULE_MAX, | |
76 | QDSP_MODULE_MAX, | |
77 | QDSP_MODULE_MAX, | |
78 | QDSP_MODULE_AUDPPTASK, | |
79 | QDSP_MODULE_AUDPLAY0TASK, | |
80 | QDSP_MODULE_AUDPLAY1TASK, | |
81 | QDSP_MODULE_AUDPLAY2TASK, | |
82 | QDSP_MODULE_AUDPLAY3TASK, | |
83 | QDSP_MODULE_AUDPLAY4TASK, | |
84 | QDSP_MODULE_MAX, | |
85 | QDSP_MODULE_AUDRECTASK, | |
86 | QDSP_MODULE_AUDPREPROCTASK, | |
87 | QDSP_MODULE_MAX, | |
88 | QDSP_MODULE_GRAPHICSTASK, | |
89 | QDSP_MODULE_MAX | |
90 | }; | |
91 | ||
92 | /* Queue offset table indexed by queue ID for the GAUDIO image */ | |
93 | static uint32_t qdsp_gaudio_queue_offset_table[] = { | |
94 | QDSP_RTOS_NO_QUEUE, /* QDSP_lpmCommandQueue */ | |
95 | 0x3be, /* QDSP_mpuAfeQueue */ | |
96 | 0x3ee, /* QDSP_mpuGraphicsCmdQueue */ | |
97 | QDSP_RTOS_NO_QUEUE, /* QDSP_mpuModmathCmdQueue */ | |
98 | QDSP_RTOS_NO_QUEUE, /* QDSP_mpuVDecCmdQueue */ | |
99 | QDSP_RTOS_NO_QUEUE, /* QDSP_mpuVDecPktQueue */ | |
100 | QDSP_RTOS_NO_QUEUE, /* QDSP_mpuVEncCmdQueue */ | |
101 | QDSP_RTOS_NO_QUEUE, /* QDSP_rxMpuDecCmdQueue */ | |
102 | QDSP_RTOS_NO_QUEUE, /* QDSP_rxMpuDecPktQueue */ | |
103 | QDSP_RTOS_NO_QUEUE, /* QDSP_txMpuEncQueue */ | |
104 | 0x3c2, /* QDSP_uPAudPPCmd1Queue */ | |
105 | 0x3c6, /* QDSP_uPAudPPCmd2Queue */ | |
106 | 0x3ca, /* QDSP_uPAudPPCmd3Queue */ | |
107 | 0x3da, /* QDSP_uPAudPlay0BitStreamCtrlQueue */ | |
108 | 0x3de, /* QDSP_uPAudPlay1BitStreamCtrlQueue */ | |
109 | 0x3e2, /* QDSP_uPAudPlay2BitStreamCtrlQueue */ | |
110 | 0x3e6, /* QDSP_uPAudPlay3BitStreamCtrlQueue */ | |
111 | 0x3ea, /* QDSP_uPAudPlay4BitStreamCtrlQueue */ | |
112 | 0x3ce, /* QDSP_uPAudPreProcCmdQueue */ | |
113 | 0x3d6, /* QDSP_uPAudRecBitStreamQueue */ | |
114 | 0x3d2, /* QDSP_uPAudRecCmdQueue */ | |
115 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPJpegActionCmdQueue */ | |
116 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPJpegCfgCmdQueue */ | |
117 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPVocProcQueue */ | |
118 | QDSP_RTOS_NO_QUEUE, /* QDSP_vfeCommandQueue */ | |
119 | QDSP_RTOS_NO_QUEUE, /* QDSP_vfeCommandScaleQueue */ | |
120 | QDSP_RTOS_NO_QUEUE /* QDSP_vfeCommandTableQueue */ | |
121 | }; | |
122 | ||
123 | /* Table of modules indexed by task ID for the COMBO image */ | |
124 | static qdsp_module_type qdsp_combo_task_to_module_table[] = { | |
125 | QDSP_MODULE_KERNEL, | |
126 | QDSP_MODULE_AFETASK, | |
127 | QDSP_MODULE_VOCDECTASK, | |
128 | QDSP_MODULE_VOCENCTASK, | |
129 | QDSP_MODULE_VIDEOTASK, | |
130 | QDSP_MODULE_VIDEOENCTASK, | |
131 | QDSP_MODULE_VOICEPROCTASK, | |
132 | QDSP_MODULE_VFETASK, | |
133 | QDSP_MODULE_JPEGTASK, | |
134 | QDSP_MODULE_AUDPPTASK, | |
135 | QDSP_MODULE_AUDPLAY0TASK, | |
136 | QDSP_MODULE_AUDPLAY1TASK, | |
137 | QDSP_MODULE_MAX, | |
138 | QDSP_MODULE_MAX, | |
139 | QDSP_MODULE_MAX, | |
140 | QDSP_MODULE_LPMTASK, | |
141 | QDSP_MODULE_AUDRECTASK, | |
142 | QDSP_MODULE_AUDPREPROCTASK, | |
143 | QDSP_MODULE_MODMATHTASK, | |
144 | QDSP_MODULE_MAX, | |
145 | QDSP_MODULE_MAX | |
146 | }; | |
147 | ||
148 | /* Queue offset table indexed by queue ID for the COMBO image */ | |
149 | static uint32_t qdsp_combo_queue_offset_table[] = { | |
150 | 0x585, /* QDSP_lpmCommandQueue */ | |
151 | 0x52d, /* QDSP_mpuAfeQueue */ | |
152 | QDSP_RTOS_NO_QUEUE, /* QDSP_mpuGraphicsCmdQueue */ | |
153 | 0x541, /* QDSP_mpuModmathCmdQueue */ | |
154 | 0x555, /* QDSP_mpuVDecCmdQueue */ | |
155 | 0x559, /* QDSP_mpuVDecPktQueue */ | |
156 | 0x551, /* QDSP_mpuVEncCmdQueue */ | |
157 | 0x535, /* QDSP_rxMpuDecCmdQueue */ | |
158 | 0x539, /* QDSP_rxMpuDecPktQueue */ | |
159 | 0x53d, /* QDSP_txMpuEncQueue */ | |
160 | 0x55d, /* QDSP_uPAudPPCmd1Queue */ | |
161 | 0x561, /* QDSP_uPAudPPCmd2Queue */ | |
162 | 0x565, /* QDSP_uPAudPPCmd3Queue */ | |
163 | 0x575, /* QDSP_uPAudPlay0BitStreamCtrlQueue */ | |
164 | 0x579, /* QDSP_uPAudPlay1BitStreamCtrlQueue */ | |
165 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPAudPlay2BitStreamCtrlQueue */ | |
166 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPAudPlay3BitStreamCtrlQueue */ | |
167 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPAudPlay4BitStreamCtrlQueue */ | |
168 | 0x569, /* QDSP_uPAudPreProcCmdQueue */ | |
169 | 0x571, /* QDSP_uPAudRecBitStreamQueue */ | |
170 | 0x56d, /* QDSP_uPAudRecCmdQueue */ | |
171 | 0x581, /* QDSP_uPJpegActionCmdQueue */ | |
172 | 0x57d, /* QDSP_uPJpegCfgCmdQueue */ | |
173 | 0x531, /* QDSP_uPVocProcQueue */ | |
174 | 0x545, /* QDSP_vfeCommandQueue */ | |
175 | 0x54d, /* QDSP_vfeCommandScaleQueue */ | |
176 | 0x549 /* QDSP_vfeCommandTableQueue */ | |
177 | }; | |
178 | ||
179 | /* Table of modules indexed by task ID for the QTV_LP image */ | |
180 | static qdsp_module_type qdsp_qtv_lp_task_to_module_table[] = { | |
181 | QDSP_MODULE_KERNEL, | |
182 | QDSP_MODULE_AFETASK, | |
183 | QDSP_MODULE_MAX, | |
184 | QDSP_MODULE_MAX, | |
185 | QDSP_MODULE_VIDEOTASK, | |
186 | QDSP_MODULE_MAX, | |
187 | QDSP_MODULE_MAX, | |
188 | QDSP_MODULE_MAX, | |
189 | QDSP_MODULE_MAX, | |
190 | QDSP_MODULE_AUDPPTASK, | |
191 | QDSP_MODULE_AUDPLAY0TASK, | |
192 | QDSP_MODULE_MAX, | |
193 | QDSP_MODULE_MAX, | |
194 | QDSP_MODULE_MAX, | |
195 | QDSP_MODULE_MAX, | |
196 | QDSP_MODULE_MAX, | |
197 | QDSP_MODULE_AUDRECTASK, | |
198 | QDSP_MODULE_AUDPREPROCTASK, | |
199 | QDSP_MODULE_MAX, | |
200 | QDSP_MODULE_MAX, | |
201 | QDSP_MODULE_MAX | |
202 | }; | |
203 | ||
204 | /* Queue offset table indexed by queue ID for the QTV_LP image */ | |
205 | static uint32_t qdsp_qtv_lp_queue_offset_table[] = { | |
206 | QDSP_RTOS_NO_QUEUE, /* QDSP_lpmCommandQueue */ | |
207 | 0x40c, /* QDSP_mpuAfeQueue */ | |
208 | QDSP_RTOS_NO_QUEUE, /* QDSP_mpuGraphicsCmdQueue */ | |
209 | QDSP_RTOS_NO_QUEUE, /* QDSP_mpuModmathCmdQueue */ | |
210 | 0x410, /* QDSP_mpuVDecCmdQueue */ | |
211 | 0x414, /* QDSP_mpuVDecPktQueue */ | |
212 | QDSP_RTOS_NO_QUEUE, /* QDSP_mpuVEncCmdQueue */ | |
213 | QDSP_RTOS_NO_QUEUE, /* QDSP_rxMpuDecCmdQueue */ | |
214 | QDSP_RTOS_NO_QUEUE, /* QDSP_rxMpuDecPktQueue */ | |
215 | QDSP_RTOS_NO_QUEUE, /* QDSP_txMpuEncQueue */ | |
216 | 0x41c, /* QDSP_uPAudPPCmd1Queue */ | |
217 | 0x420, /* QDSP_uPAudPPCmd2Queue */ | |
218 | 0x424, /* QDSP_uPAudPPCmd3Queue */ | |
219 | 0x430, /* QDSP_uPAudPlay0BitStreamCtrlQueue */ | |
220 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPAudPlay1BitStreamCtrlQueue */ | |
221 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPAudPlay2BitStreamCtrlQueue */ | |
222 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPAudPlay3BitStreamCtrlQueue */ | |
223 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPAudPlay4BitStreamCtrlQueue */ | |
224 | 0x418, /* QDSP_uPAudPreProcCmdQueue */ | |
225 | 0x42c, /* QDSP_uPAudRecBitStreamQueue */ | |
226 | 0x428, /* QDSP_uPAudRecCmdQueue */ | |
227 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPJpegActionCmdQueue */ | |
228 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPJpegCfgCmdQueue */ | |
229 | QDSP_RTOS_NO_QUEUE, /* QDSP_uPVocProcQueue */ | |
230 | QDSP_RTOS_NO_QUEUE, /* QDSP_vfeCommandQueue */ | |
231 | QDSP_RTOS_NO_QUEUE, /* QDSP_vfeCommandScaleQueue */ | |
232 | QDSP_RTOS_NO_QUEUE /* QDSP_vfeCommandTableQueue */ | |
233 | }; | |
234 | ||
235 | /* Tables to convert tasks to modules */ | |
236 | static uint32_t *qdsp_task_to_module[] = { | |
237 | qdsp_combo_task_to_module_table, | |
238 | qdsp_gaudio_task_to_module_table, | |
239 | qdsp_qtv_lp_task_to_module_table, | |
240 | }; | |
241 | ||
242 | /* Tables to retrieve queue offsets */ | |
243 | static uint32_t *qdsp_queue_offset_table[] = { | |
244 | qdsp_combo_queue_offset_table, | |
245 | qdsp_gaudio_queue_offset_table, | |
246 | qdsp_qtv_lp_queue_offset_table, | |
247 | }; | |
248 | ||
249 | #define QDSP_MODULE(n) \ | |
250 | { .name = #n, .pdev_name = "adsp_" #n, .id = QDSP_MODULE_##n } | |
251 | ||
252 | static struct adsp_module_info module_info[] = { | |
253 | QDSP_MODULE(AUDPPTASK), | |
254 | QDSP_MODULE(AUDRECTASK), | |
255 | QDSP_MODULE(AUDPREPROCTASK), | |
256 | QDSP_MODULE(VFETASK), | |
257 | QDSP_MODULE(QCAMTASK), | |
258 | QDSP_MODULE(LPMTASK), | |
259 | QDSP_MODULE(JPEGTASK), | |
260 | QDSP_MODULE(VIDEOTASK), | |
261 | QDSP_MODULE(VDEC_LP_MODE), | |
262 | }; | |
263 | ||
264 | int adsp_init_info(struct adsp_info *info) | |
265 | { | |
266 | info->send_irq = 0x00c00200; | |
267 | info->read_ctrl = 0x00400038; | |
268 | info->write_ctrl = 0x00400034; | |
269 | ||
270 | info->max_msg16_size = 193; | |
271 | info->max_msg32_size = 8; | |
272 | ||
273 | info->max_task_id = 16; | |
274 | info->max_module_id = QDSP_MODULE_MAX - 1; | |
275 | info->max_queue_id = QDSP_QUEUE_MAX; | |
276 | info->max_image_id = 2; | |
277 | info->queue_offset = qdsp_queue_offset_table; | |
278 | info->task_to_module = qdsp_task_to_module; | |
279 | ||
280 | info->module_count = ARRAY_SIZE(module_info); | |
281 | info->module = module_info; | |
282 | return 0; | |
283 | } |