|
@@ -35,6 +35,7 @@ struct DMAChannel {
|
|
|
struct PXA2xxLCDState {
|
|
|
MemoryRegion *sysmem;
|
|
|
MemoryRegion iomem;
|
|
|
+ MemoryRegionSection fbsection;
|
|
|
qemu_irq irq;
|
|
|
int irqlevel;
|
|
|
|
|
@@ -687,8 +688,11 @@ static void pxa2xx_lcdc_dma0_redraw_rot0(PXA2xxLCDState *s,
|
|
|
|
|
|
dest_width = s->xres * s->dest_width;
|
|
|
*miny = 0;
|
|
|
- framebuffer_update_display(surface, s->sysmem,
|
|
|
- addr, s->xres, s->yres,
|
|
|
+ if (s->invalidated) {
|
|
|
+ framebuffer_update_memory_section(&s->fbsection, s->sysmem,
|
|
|
+ addr, s->yres, src_width);
|
|
|
+ }
|
|
|
+ framebuffer_update_display(surface, &s->fbsection, s->xres, s->yres,
|
|
|
src_width, dest_width, s->dest_width,
|
|
|
s->invalidated,
|
|
|
fn, s->dma_ch[0].palette, miny, maxy);
|
|
@@ -715,8 +719,11 @@ static void pxa2xx_lcdc_dma0_redraw_rot90(PXA2xxLCDState *s,
|
|
|
|
|
|
dest_width = s->yres * s->dest_width;
|
|
|
*miny = 0;
|
|
|
- framebuffer_update_display(surface, s->sysmem,
|
|
|
- addr, s->xres, s->yres,
|
|
|
+ if (s->invalidated) {
|
|
|
+ framebuffer_update_memory_section(&s->fbsection, s->sysmem,
|
|
|
+ addr, s->yres, src_width);
|
|
|
+ }
|
|
|
+ framebuffer_update_display(surface, &s->fbsection, s->xres, s->yres,
|
|
|
src_width, s->dest_width, -dest_width,
|
|
|
s->invalidated,
|
|
|
fn, s->dma_ch[0].palette,
|
|
@@ -747,8 +754,11 @@ static void pxa2xx_lcdc_dma0_redraw_rot180(PXA2xxLCDState *s,
|
|
|
|
|
|
dest_width = s->xres * s->dest_width;
|
|
|
*miny = 0;
|
|
|
- framebuffer_update_display(surface, s->sysmem,
|
|
|
- addr, s->xres, s->yres,
|
|
|
+ if (s->invalidated) {
|
|
|
+ framebuffer_update_memory_section(&s->fbsection, s->sysmem,
|
|
|
+ addr, s->yres, src_width);
|
|
|
+ }
|
|
|
+ framebuffer_update_display(surface, &s->fbsection, s->xres, s->yres,
|
|
|
src_width, -dest_width, -s->dest_width,
|
|
|
s->invalidated,
|
|
|
fn, s->dma_ch[0].palette, miny, maxy);
|
|
@@ -778,8 +788,11 @@ static void pxa2xx_lcdc_dma0_redraw_rot270(PXA2xxLCDState *s,
|
|
|
|
|
|
dest_width = s->yres * s->dest_width;
|
|
|
*miny = 0;
|
|
|
- framebuffer_update_display(surface, s->sysmem,
|
|
|
- addr, s->xres, s->yres,
|
|
|
+ if (s->invalidated) {
|
|
|
+ framebuffer_update_memory_section(&s->fbsection, s->sysmem,
|
|
|
+ addr, s->yres, src_width);
|
|
|
+ }
|
|
|
+ framebuffer_update_display(surface, &s->fbsection, s->xres, s->yres,
|
|
|
src_width, -s->dest_width, dest_width,
|
|
|
s->invalidated,
|
|
|
fn, s->dma_ch[0].palette,
|