diff options
Diffstat (limited to 'firmware/target/arm/imx31/sdma-imx31.c')
-rw-r--r-- | firmware/target/arm/imx31/sdma-imx31.c | 143 |
1 files changed, 33 insertions, 110 deletions
diff --git a/firmware/target/arm/imx31/sdma-imx31.c b/firmware/target/arm/imx31/sdma-imx31.c index 381e589c08..39f4e29554 100644 --- a/firmware/target/arm/imx31/sdma-imx31.c +++ b/firmware/target/arm/imx31/sdma-imx31.c | |||
@@ -35,8 +35,6 @@ | |||
35 | 35 | ||
36 | /* Cut down to bare bones essentials */ | 36 | /* Cut down to bare bones essentials */ |
37 | 37 | ||
38 | /* Script information that depends on system revision */ | ||
39 | static struct sdma_script_start_addrs script_info; | ||
40 | /* Mask of channels with callback enabled */ | 38 | /* Mask of channels with callback enabled */ |
41 | static unsigned long sdma_enabled_ints = 0; | 39 | static unsigned long sdma_enabled_ints = 0; |
42 | /* One channel control block per channel in physically mapped device RAM */ | 40 | /* One channel control block per channel in physically mapped device RAM */ |
@@ -71,79 +69,6 @@ static void __attribute__((interrupt("IRQ"))) SDMA_HANDLER(void) | |||
71 | } | 69 | } |
72 | } | 70 | } |
73 | 71 | ||
74 | /* Initialize script information based upon the system revision */ | ||
75 | static void init_script_info(void) | ||
76 | { | ||
77 | if (iim_system_rev() == IIM_SREV_1_0) | ||
78 | { | ||
79 | /* Channel script info */ | ||
80 | script_info.app_2_mcu_addr = app_2_mcu_ADDR_1; | ||
81 | script_info.ap_2_ap_addr = ap_2_ap_ADDR_1; | ||
82 | script_info.ap_2_bp_addr = -1; | ||
83 | script_info.bp_2_ap_addr = -1; | ||
84 | script_info.loopback_on_dsp_side_addr = -1; | ||
85 | script_info.mcu_2_app_addr = mcu_2_app_ADDR_1; | ||
86 | script_info.mcu_2_shp_addr = mcu_2_shp_ADDR_1; | ||
87 | script_info.mcu_interrupt_only_addr = -1; | ||
88 | script_info.shp_2_mcu_addr = shp_2_mcu_ADDR_1; | ||
89 | script_info.uartsh_2_mcu_addr = uartsh_2_mcu_ADDR_1; | ||
90 | script_info.uart_2_mcu_addr = uart_2_mcu_ADDR_1; | ||
91 | script_info.dptc_dvfs_addr = dptc_dvfs_ADDR_1; | ||
92 | script_info.firi_2_mcu_addr = firi_2_mcu_ADDR_1; | ||
93 | script_info.firi_2_per_addr = -1; | ||
94 | script_info.mshc_2_mcu_addr = mshc_2_mcu_ADDR_1; | ||
95 | script_info.per_2_app_addr = -1; | ||
96 | script_info.per_2_firi_addr = -1; | ||
97 | script_info.per_2_shp_addr = -1; | ||
98 | script_info.mcu_2_ata_addr = mcu_2_ata_ADDR_1; | ||
99 | script_info.mcu_2_firi_addr = mcu_2_firi_ADDR_1; | ||
100 | script_info.mcu_2_mshc_addr = mcu_2_mshc_ADDR_1; | ||
101 | script_info.ata_2_mcu_addr = ata_2_mcu_ADDR_1; | ||
102 | script_info.uartsh_2_per_addr = -1; | ||
103 | script_info.shp_2_per_addr = -1; | ||
104 | script_info.uart_2_per_addr = -1; | ||
105 | script_info.app_2_per_addr = -1; | ||
106 | /* Main code block info */ | ||
107 | script_info.ram_code_size = RAM_CODE_SIZE_1; | ||
108 | script_info.ram_code_start_addr = RAM_CODE_START_ADDR_1; | ||
109 | script_info.mcu_start_addr = (unsigned long)sdma_code_1; | ||
110 | } | ||
111 | else | ||
112 | { | ||
113 | /* Channel script info */ | ||
114 | script_info.app_2_mcu_addr = app_2_mcu_patched_ADDR_2; | ||
115 | script_info.ap_2_ap_addr = ap_2_ap_ADDR_2; | ||
116 | script_info.ap_2_bp_addr = ap_2_bp_ADDR_2; | ||
117 | script_info.bp_2_ap_addr = bp_2_ap_ADDR_2; | ||
118 | script_info.loopback_on_dsp_side_addr = -1; | ||
119 | script_info.mcu_2_app_addr = mcu_2_app_patched_ADDR_2; | ||
120 | script_info.mcu_2_shp_addr = mcu_2_shp_patched_ADDR_2; | ||
121 | script_info.mcu_interrupt_only_addr = -1; | ||
122 | script_info.shp_2_mcu_addr = shp_2_mcu_patched_ADDR_2; | ||
123 | script_info.uartsh_2_mcu_addr = uartsh_2_mcu_patched_ADDR_2; | ||
124 | script_info.uart_2_mcu_addr = uart_2_mcu_patched_ADDR_2; | ||
125 | script_info.dptc_dvfs_addr = -1; | ||
126 | script_info.firi_2_mcu_addr = firi_2_mcu_ADDR_2; | ||
127 | script_info.firi_2_per_addr = -1; | ||
128 | script_info.mshc_2_mcu_addr = -1; | ||
129 | script_info.per_2_app_addr = -1; | ||
130 | script_info.per_2_firi_addr = -1; | ||
131 | script_info.per_2_shp_addr = per_2_shp_ADDR_2; | ||
132 | script_info.mcu_2_ata_addr = mcu_2_ata_ADDR_2; | ||
133 | script_info.mcu_2_firi_addr = mcu_2_firi_ADDR_2; | ||
134 | script_info.mcu_2_mshc_addr = -1; | ||
135 | script_info.ata_2_mcu_addr = ata_2_mcu_ADDR_2; | ||
136 | script_info.uartsh_2_per_addr = -1; | ||
137 | script_info.shp_2_per_addr = shp_2_per_ADDR_2; | ||
138 | script_info.uart_2_per_addr = -1; | ||
139 | script_info.app_2_per_addr = -1; | ||
140 | /* Main code block info */ | ||
141 | script_info.ram_code_size = RAM_CODE_SIZE_2; | ||
142 | script_info.ram_code_start_addr = RAM_CODE_START_ADDR_2; | ||
143 | script_info.mcu_start_addr = (unsigned long)sdma_code_2; | ||
144 | } | ||
145 | } | ||
146 | |||
147 | /* Return pc of SDMA script in SDMA halfword space according to peripheral | 72 | /* Return pc of SDMA script in SDMA halfword space according to peripheral |
148 | * and transfer type */ | 73 | * and transfer type */ |
149 | static unsigned long get_script_pc(unsigned int peripheral_type, | 74 | static unsigned long get_script_pc(unsigned int peripheral_type, |
@@ -159,7 +84,7 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
159 | case SDMA_TRAN_EMI_2_INT: | 84 | case SDMA_TRAN_EMI_2_INT: |
160 | case SDMA_TRAN_EMI_2_EMI: | 85 | case SDMA_TRAN_EMI_2_EMI: |
161 | case SDMA_TRAN_INT_2_EMI: | 86 | case SDMA_TRAN_INT_2_EMI: |
162 | res = script_info.ap_2_ap_addr; | 87 | res = AP_2_AP_ADDR; |
163 | break; | 88 | break; |
164 | } | 89 | } |
165 | break; | 90 | break; |
@@ -169,16 +94,16 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
169 | switch (transfer_type) | 94 | switch (transfer_type) |
170 | { | 95 | { |
171 | case SDMA_TRAN_EMI_2_DSP: | 96 | case SDMA_TRAN_EMI_2_DSP: |
172 | res = script_info.ap_2_bp_addr; | 97 | res = AP_2_BP_ADDR; |
173 | break; | 98 | break; |
174 | case SDMA_TRAN_DSP_2_EMI: | 99 | case SDMA_TRAN_DSP_2_EMI: |
175 | res = script_info.bp_2_ap_addr; | 100 | res = BP_2_AP_ADDR; |
176 | break; | 101 | break; |
177 | case SDMA_TRAN_DSP_2_EMI_LOOP: | 102 | case SDMA_TRAN_DSP_2_EMI_LOOP: |
178 | res = script_info.loopback_on_dsp_side_addr; | 103 | res = LOOPBACK_ON_DSP_SIDE_ADDR; |
179 | break; | 104 | break; |
180 | case SDMA_TRAN_EMI_2_DSP_LOOP: | 105 | case SDMA_TRAN_EMI_2_DSP_LOOP: |
181 | res = script_info.mcu_interrupt_only_addr; | 106 | res = MCU_INTERRUPT_ONLY_ADDR; |
182 | break; | 107 | break; |
183 | } | 108 | } |
184 | break; | 109 | break; |
@@ -189,16 +114,16 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
189 | switch (transfer_type) | 114 | switch (transfer_type) |
190 | { | 115 | { |
191 | case SDMA_TRAN_PER_2_INT: | 116 | case SDMA_TRAN_PER_2_INT: |
192 | res = script_info.firi_2_per_addr; | 117 | res = FIRI_2_PER_ADDR; |
193 | break; | 118 | break; |
194 | case SDMA_TRAN_PER_2_EMI: | 119 | case SDMA_TRAN_PER_2_EMI: |
195 | res = script_info.firi_2_mcu_addr; | 120 | res = FIRI_2_MCU_ADDR; |
196 | break; | 121 | break; |
197 | case SDMA_TRAN_INT_2_PER: | 122 | case SDMA_TRAN_INT_2_PER: |
198 | res = script_info.per_2_firi_addr; | 123 | res = PER_2_FIRI_ADDR; |
199 | break; | 124 | break; |
200 | case SDMA_TRAN_EMI_2_PER: | 125 | case SDMA_TRAN_EMI_2_PER: |
201 | res = script_info.mcu_2_firi_addr; | 126 | res = MCU_2_FIRI_ADDR; |
202 | break; | 127 | break; |
203 | } | 128 | } |
204 | break; | 129 | break; |
@@ -209,16 +134,16 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
209 | switch (transfer_type) | 134 | switch (transfer_type) |
210 | { | 135 | { |
211 | case SDMA_TRAN_PER_2_INT: | 136 | case SDMA_TRAN_PER_2_INT: |
212 | res = script_info.uart_2_per_addr; | 137 | res = UART_2_PER_ADDR; |
213 | break; | 138 | break; |
214 | case SDMA_TRAN_PER_2_EMI: | 139 | case SDMA_TRAN_PER_2_EMI: |
215 | res = script_info.uart_2_mcu_addr; | 140 | res = UART_2_MCU_ADDR; |
216 | break; | 141 | break; |
217 | case SDMA_TRAN_INT_2_PER: | 142 | case SDMA_TRAN_INT_2_PER: |
218 | res = script_info.per_2_app_addr; | 143 | res = PER_2_APP_ADDR; |
219 | break; | 144 | break; |
220 | case SDMA_TRAN_EMI_2_PER: | 145 | case SDMA_TRAN_EMI_2_PER: |
221 | res = script_info.mcu_2_app_addr; | 146 | res = MCU_2_APP_ADDR; |
222 | break; | 147 | break; |
223 | } | 148 | } |
224 | break; | 149 | break; |
@@ -229,16 +154,16 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
229 | switch (transfer_type) | 154 | switch (transfer_type) |
230 | { | 155 | { |
231 | case SDMA_TRAN_PER_2_INT: | 156 | case SDMA_TRAN_PER_2_INT: |
232 | res = script_info.uartsh_2_per_addr; | 157 | res = UARTSH_2_PER_ADDR; |
233 | break; | 158 | break; |
234 | case SDMA_TRAN_PER_2_EMI: | 159 | case SDMA_TRAN_PER_2_EMI: |
235 | res = script_info.uartsh_2_mcu_addr; | 160 | res = UARTSH_2_MCU_ADDR; |
236 | break; | 161 | break; |
237 | case SDMA_TRAN_INT_2_PER: | 162 | case SDMA_TRAN_INT_2_PER: |
238 | res = script_info.per_2_shp_addr; | 163 | res = PER_2_SHP_ADDR; |
239 | break; | 164 | break; |
240 | case SDMA_TRAN_EMI_2_PER: | 165 | case SDMA_TRAN_EMI_2_PER: |
241 | res = script_info.mcu_2_shp_addr; | 166 | res = MCU_2_SHP_ADDR; |
242 | break; | 167 | break; |
243 | } | 168 | } |
244 | break; | 169 | break; |
@@ -248,10 +173,10 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
248 | switch (transfer_type) | 173 | switch (transfer_type) |
249 | { | 174 | { |
250 | case SDMA_TRAN_PER_2_EMI: | 175 | case SDMA_TRAN_PER_2_EMI: |
251 | res = script_info.ata_2_mcu_addr; | 176 | res = ATA_2_MCU_ADDR; |
252 | break; | 177 | break; |
253 | case SDMA_TRAN_EMI_2_PER: | 178 | case SDMA_TRAN_EMI_2_PER: |
254 | res = script_info.mcu_2_ata_addr; | 179 | res = MCU_2_ATA_ADDR; |
255 | break; | 180 | break; |
256 | } | 181 | } |
257 | break; | 182 | break; |
@@ -262,16 +187,16 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
262 | switch (transfer_type) | 187 | switch (transfer_type) |
263 | { | 188 | { |
264 | case SDMA_TRAN_PER_2_INT: | 189 | case SDMA_TRAN_PER_2_INT: |
265 | res = script_info.app_2_per_addr; | 190 | res = APP_2_PER_ADDR; |
266 | break; | 191 | break; |
267 | case SDMA_TRAN_PER_2_EMI: | 192 | case SDMA_TRAN_PER_2_EMI: |
268 | res = script_info.app_2_mcu_addr; | 193 | res = APP_2_MCU_ADDR; |
269 | break; | 194 | break; |
270 | case SDMA_TRAN_INT_2_PER: | 195 | case SDMA_TRAN_INT_2_PER: |
271 | res = script_info.per_2_app_addr; | 196 | res = PER_2_APP_ADDR; |
272 | break; | 197 | break; |
273 | case SDMA_TRAN_EMI_2_PER: | 198 | case SDMA_TRAN_EMI_2_PER: |
274 | res = script_info.mcu_2_app_addr; | 199 | res = MCU_2_APP_ADDR; |
275 | break; | 200 | break; |
276 | } | 201 | } |
277 | break; | 202 | break; |
@@ -285,16 +210,16 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
285 | switch (transfer_type) | 210 | switch (transfer_type) |
286 | { | 211 | { |
287 | case SDMA_TRAN_PER_2_INT: | 212 | case SDMA_TRAN_PER_2_INT: |
288 | res = script_info.shp_2_per_addr; | 213 | res = SHP_2_PER_ADDR; |
289 | break; | 214 | break; |
290 | case SDMA_TRAN_PER_2_EMI: | 215 | case SDMA_TRAN_PER_2_EMI: |
291 | res = script_info.shp_2_mcu_addr; | 216 | res = SHP_2_MCU_ADDR; |
292 | break; | 217 | break; |
293 | case SDMA_TRAN_INT_2_PER: | 218 | case SDMA_TRAN_INT_2_PER: |
294 | res = script_info.per_2_shp_addr; | 219 | res = PER_2_SHP_ADDR; |
295 | break; | 220 | break; |
296 | case SDMA_TRAN_EMI_2_PER: | 221 | case SDMA_TRAN_EMI_2_PER: |
297 | res = script_info.mcu_2_shp_addr; | 222 | res = MCU_2_SHP_ADDR; |
298 | break; | 223 | break; |
299 | } | 224 | } |
300 | break; | 225 | break; |
@@ -303,10 +228,10 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
303 | switch (transfer_type) | 228 | switch (transfer_type) |
304 | { | 229 | { |
305 | case SDMA_TRAN_PER_2_EMI: | 230 | case SDMA_TRAN_PER_2_EMI: |
306 | res = script_info.mshc_2_mcu_addr; | 231 | res = MSHC_2_MCU_ADDR; |
307 | break; | 232 | break; |
308 | case SDMA_TRAN_EMI_2_PER: | 233 | case SDMA_TRAN_EMI_2_PER: |
309 | res = script_info.mcu_2_mshc_addr; | 234 | res = MCU_2_MSHC_ADDR; |
310 | break; | 235 | break; |
311 | } | 236 | } |
312 | break; | 237 | break; |
@@ -315,7 +240,7 @@ static unsigned long get_script_pc(unsigned int peripheral_type, | |||
315 | switch (transfer_type) | 240 | switch (transfer_type) |
316 | { | 241 | { |
317 | case SDMA_TRAN_PER_2_EMI: | 242 | case SDMA_TRAN_PER_2_EMI: |
318 | res = script_info.dptc_dvfs_addr; | 243 | res = DPTC_DVFS_ADDR; |
319 | break; | 244 | break; |
320 | } | 245 | } |
321 | break; | 246 | break; |
@@ -511,8 +436,6 @@ void INIT_ATTR sdma_init(void) | |||
511 | SDMA_RESET |= SDMA_RESET_RESET; | 436 | SDMA_RESET |= SDMA_RESET_RESET; |
512 | while (SDMA_RESET & SDMA_RESET_RESET); | 437 | while (SDMA_RESET & SDMA_RESET_RESET); |
513 | 438 | ||
514 | init_script_info(); | ||
515 | |||
516 | /* No channel enabled, all priorities 0 */ | 439 | /* No channel enabled, all priorities 0 */ |
517 | for (i = 0; i < CH_NUM; i++) | 440 | for (i = 0; i < CH_NUM; i++) |
518 | { | 441 | { |
@@ -561,9 +484,9 @@ void INIT_ATTR sdma_init(void) | |||
561 | set_buffer_descriptor(&c0_buffer_desc.bd, | 484 | set_buffer_descriptor(&c0_buffer_desc.bd, |
562 | C0_SETPM, | 485 | C0_SETPM, |
563 | BD_DONE | BD_WRAP | BD_EXTD, | 486 | BD_DONE | BD_WRAP | BD_EXTD, |
564 | script_info.ram_code_size, | 487 | RAM_CODE_SIZE, |
565 | (void *)addr_virt_to_phys(script_info.mcu_start_addr), | 488 | (void *)addr_virt_to_phys(MCU_START_ADDR), |
566 | (void *)(unsigned long)script_info.ram_code_start_addr); | 489 | (void *)RAM_CODE_START_ADDR); |
567 | 490 | ||
568 | SDMA_HSTART = 1ul; | 491 | SDMA_HSTART = 1ul; |
569 | sdma_channel_wait_nonblocking(0); | 492 | sdma_channel_wait_nonblocking(0); |