diff options
author | Lucas Stach <dev@lynxeye.de> | 2015-03-05 22:49:55 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-03-06 07:51:47 +0100 |
commit | e05f9586b302d0dba5e9c98d849596cad1716a6f (patch) | |
tree | e4f8aa0b3e0dd5c3899d09e6d46746a37baf4635 /drivers/video | |
parent | 6c583d0e327deecaea026cf47576fbe42274bd8c (diff) | |
download | barebox-e05f9586b302d0dba5e9c98d849596cad1716a6f.tar.gz barebox-e05f9586b302d0dba5e9c98d849596cad1716a6f.tar.xz |
ARM: change dma_alloc/free_coherent to match other architectures
As a lot drivers currently rely on the 1:1 virt->phys mapping on ARM
we define DMA_ADDRESS_BROKEN to mark them. In order to use them on
other architectures with a different mapping they need proper fixing.
Signed-off-by: Lucas Stach <dev@lynxeye.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/atmel_lcdfb_core.c | 5 | ||||
-rw-r--r-- | drivers/video/imx-ipu-fb.c | 3 | ||||
-rw-r--r-- | drivers/video/imx-ipu-v3/ipufb.c | 3 | ||||
-rw-r--r-- | drivers/video/omap.c | 6 | ||||
-rw-r--r-- | drivers/video/pxa.c | 7 |
5 files changed, 14 insertions, 10 deletions
diff --git a/drivers/video/atmel_lcdfb_core.c b/drivers/video/atmel_lcdfb_core.c index 420ccbedf1..a0a822c240 100644 --- a/drivers/video/atmel_lcdfb_core.c +++ b/drivers/video/atmel_lcdfb_core.c @@ -200,7 +200,7 @@ static int atmel_lcdfb_alloc_video_memory(struct atmel_lcdfb_info *sinfo) * ((info->bits_per_pixel + 7) / 8)); smem_len = max(smem_len, sinfo->smem_len); - info->screen_base = dma_alloc_coherent(smem_len); + info->screen_base = dma_alloc_coherent(smem_len, DMA_ADDRESS_BROKEN); if (!info->screen_base) return -ENOMEM; @@ -289,7 +289,8 @@ int atmel_lcdc_register(struct device_d *dev, struct atmel_lcdfb_devdata *data) atmel_lcdfb_start_clock(sinfo); if (data->dma_desc_size) - sinfo->dma_desc = dma_alloc_coherent(data->dma_desc_size); + sinfo->dma_desc = dma_alloc_coherent(data->dma_desc_size, + DMA_ADDRESS_BROKEN); ret = register_framebuffer(info); if (ret != 0) { diff --git a/drivers/video/imx-ipu-fb.c b/drivers/video/imx-ipu-fb.c index a69df50811..eb913b1b4c 100644 --- a/drivers/video/imx-ipu-fb.c +++ b/drivers/video/imx-ipu-fb.c @@ -1030,7 +1030,8 @@ static int imxfb_probe(struct device_d *dev) fbi->info.screen_size, mmu_get_pte_uncached_flags()); } else { - fbi->info.screen_base = dma_alloc_coherent(fbi->info.screen_size); + fbi->info.screen_base = dma_alloc_coherent(fbi->info.screen_size, + DMA_ADDRESS_BROKEN); if (!fbi->info.screen_base) return -ENOMEM; } diff --git a/drivers/video/imx-ipu-v3/ipufb.c b/drivers/video/imx-ipu-v3/ipufb.c index 14a099e14a..d9c81b25e8 100644 --- a/drivers/video/imx-ipu-v3/ipufb.c +++ b/drivers/video/imx-ipu-v3/ipufb.c @@ -203,7 +203,8 @@ static int ipufb_activate_var(struct fb_info *info) struct ipufb_info *fbi = container_of(info, struct ipufb_info, info); info->line_length = info->xres * (info->bits_per_pixel >> 3); - fbi->info.screen_base = dma_alloc_coherent(info->line_length * info->yres); + fbi->info.screen_base = dma_alloc_coherent(info->line_length * info->yres, + DMA_ADDRESS_BROKEN); if (!fbi->info.screen_base) return -ENOMEM; diff --git a/drivers/video/omap.c b/drivers/video/omap.c index bd66c92f10..91f9e24d7d 100644 --- a/drivers/video/omap.c +++ b/drivers/video/omap.c @@ -126,7 +126,7 @@ static void omapfb_disable(struct fb_info *info) /* free frame buffer; but only when screen is not * preallocated */ if (info->screen_base) - dma_free_coherent(info->screen_base, fbi->dma_size); + dma_free_coherent(info->screen_base, 0, fbi->dma_size); } info->screen_base = NULL; @@ -270,13 +270,13 @@ static int omapfb_activate_var(struct fb_info *info) /*Free old screen buf*/ if (!fbi->prealloc_screen.addr && info->screen_base) - dma_free_coherent(info->screen_base, fbi->dma_size); + dma_free_coherent(info->screen_base, 0, fbi->dma_size); fbi->dma_size = PAGE_ALIGN(size); if (!fbi->prealloc_screen.addr) { /* case 1: no preallocated screen */ - info->screen_base = dma_alloc_coherent(size); + info->screen_base = dma_alloc_coherent(size, DMA_ADDRESS_BROKEN); } else if (fbi->prealloc_screen.size < fbi->dma_size) { /* case 2: preallocated screen, but too small */ dev_err(fbi->dev, diff --git a/drivers/video/pxa.c b/drivers/video/pxa.c index d6d11ae610..61ce0a5d33 100644 --- a/drivers/video/pxa.c +++ b/drivers/video/pxa.c @@ -522,11 +522,12 @@ static int pxafb_probe(struct device_d *dev) else fbi->info.screen_base = PTR_ALIGN(dma_alloc_coherent(info->xres * info->yres * - (info->bits_per_pixel >> 3) + PAGE_SIZE), + (info->bits_per_pixel >> 3) + PAGE_SIZE, + DMA_ADDRESS_BROKEN), PAGE_SIZE); - fbi->dma_buff = PTR_ALIGN(dma_alloc_coherent(sizeof(struct pxafb_dma_buff) + 16), - 16); + fbi->dma_buff = PTR_ALIGN(dma_alloc_coherent(sizeof(struct pxafb_dma_buff) + 16, + DMA_ADDRESS_BROKEN), 16); pxafb_activate_var(fbi); |