From e05f9586b302d0dba5e9c98d849596cad1716a6f Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Thu, 5 Mar 2015 22:49:55 +0100 Subject: 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 Signed-off-by: Sascha Hauer --- drivers/video/atmel_lcdfb_core.c | 5 +++-- drivers/video/imx-ipu-fb.c | 3 ++- drivers/video/imx-ipu-v3/ipufb.c | 3 ++- drivers/video/omap.c | 6 +++--- drivers/video/pxa.c | 7 ++++--- 5 files changed, 14 insertions(+), 10 deletions(-) (limited to 'drivers/video') 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); -- cgit v1.2.3