Revision d7585251 hw/pxa2xx_lcd.c
b/hw/pxa2xx_lcd.c | ||
---|---|---|
283 | 283 |
/* Load new Frame Descriptors from DMA */ |
284 | 284 |
static void pxa2xx_descriptor_load(struct pxa2xx_lcdc_s *s) |
285 | 285 |
{ |
286 |
struct pxa_frame_descriptor_s *desc[PXA_LCDDMA_CHANS];
|
|
286 |
struct pxa_frame_descriptor_s desc;
|
|
287 | 287 |
target_phys_addr_t descptr; |
288 | 288 |
int i; |
289 | 289 |
|
290 | 290 |
for (i = 0; i < PXA_LCDDMA_CHANS; i ++) { |
291 |
desc[i] = 0; |
|
292 | 291 |
s->dma_ch[i].source = 0; |
293 | 292 |
|
294 | 293 |
if (!s->dma_ch[i].up) |
... | ... | |
303 | 302 |
descptr = s->dma_ch[i].descriptor; |
304 | 303 |
|
305 | 304 |
if (!(descptr >= PXA2XX_SDRAM_BASE && descptr + |
306 |
sizeof(*desc[i]) <= PXA2XX_SDRAM_BASE + phys_ram_size))
|
|
305 |
sizeof(desc) <= PXA2XX_SDRAM_BASE + phys_ram_size))
|
|
307 | 306 |
continue; |
308 | 307 |
|
309 |
descptr -= PXA2XX_SDRAM_BASE; |
|
310 |
desc[i] = (struct pxa_frame_descriptor_s *) (phys_ram_base + descptr); |
|
311 |
s->dma_ch[i].descriptor = desc[i]->fdaddr; |
|
312 |
s->dma_ch[i].source = desc[i]->fsaddr; |
|
313 |
s->dma_ch[i].id = desc[i]->fidr; |
|
314 |
s->dma_ch[i].command = desc[i]->ldcmd; |
|
308 |
cpu_physical_memory_read(descptr, (void *)&desc, sizeof(desc)); |
|
309 |
s->dma_ch[i].descriptor = tswap32(desc.fdaddr); |
|
310 |
s->dma_ch[i].source = tswap32(desc.fsaddr); |
|
311 |
s->dma_ch[i].id = tswap32(desc.fidr); |
|
312 |
s->dma_ch[i].command = tswap32(desc.ldcmd); |
|
315 | 313 |
} |
316 | 314 |
} |
317 | 315 |
|
Also available in: Unified diff