]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00279373 epdc: add GFP_KERNEL flag to make dma memory allocated from cma
authorRobby Cai <R63905@freescale.com>
Thu, 12 Sep 2013 06:39:57 +0000 (14:39 +0800)
committerJason Liu <r64343@freescale.com>
Wed, 30 Oct 2013 01:55:43 +0000 (09:55 +0800)
Add GFP_KERNEL flag for dma_alloc_writecombine() and dma_alloc_coherent()
to make dma memory allocated via cma. Otherwise it's from dma pool whose
size is too small by default (256KB) and will cause allocation failure unless
use 'coherent_pool=xxM' in cmdline. We prefer cma now.

Signed-off-by: Robby Cai <R63905@freescale.com>
drivers/video/mxc/mxc_epdc_fb.c

index 1deae3339458fcefd2857e06cea6e72c53fe692a..7bc0e4f981a1ba3b5378a6cf242e258caf01e736 100644 (file)
@@ -4283,7 +4283,7 @@ static void mxc_epdc_fb_fw_handler(const struct firmware *fw,
        fb_data->waveform_buffer_virt = dma_alloc_coherent(fb_data->dev,
                                                fb_data->waveform_buffer_size,
                                                &fb_data->waveform_buffer_phys,
-                                               GFP_DMA);
+                                               GFP_DMA | GFP_KERNEL);
        if (fb_data->waveform_buffer_virt == NULL) {
                dev_err(fb_data->dev, "Can't allocate mem for waveform!\n");
                return;
@@ -4578,7 +4578,7 @@ int mxc_epdc_fb_probe(struct platform_device *pdev)
        info->screen_base = dma_alloc_writecombine(&pdev->dev,
                                                  fb_data->map_size,
                                                  &fb_data->phys_start,
-                                                 GFP_DMA);
+                                                 GFP_DMA | GFP_KERNEL);
 
        if (info->screen_base == NULL) {
                ret = -ENOMEM;
@@ -4773,7 +4773,8 @@ int mxc_epdc_fb_probe(struct platform_device *pdev)
         */
        fb_data->virt_addr_copybuf =
            dma_alloc_coherent(fb_data->info.device, fb_data->max_pix_size*2,
-                              &fb_data->phys_addr_copybuf, GFP_DMA);
+                              &fb_data->phys_addr_copybuf,
+                              GFP_DMA | GFP_KERNEL);
        if (fb_data->virt_addr_copybuf == NULL) {
                ret = -ENOMEM;
                goto out_upd_buffers;
@@ -4783,7 +4784,8 @@ int mxc_epdc_fb_probe(struct platform_device *pdev)
        /* Allocate memory for EPDC working buffer */
        fb_data->working_buffer_virt =
            dma_alloc_coherent(&pdev->dev, fb_data->working_buffer_size,
-                              &fb_data->working_buffer_phys, GFP_DMA);
+                              &fb_data->working_buffer_phys,
+                              GFP_DMA | GFP_KERNEL);
        if (fb_data->working_buffer_virt == NULL) {
                dev_err(&pdev->dev, "Can't allocate mem for working buf!\n");
                ret = -ENOMEM;