lkml.org 
[lkml]   [2011]   [Nov]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 11/11] ARM: Samsung: use CMA for 2 memory banks for s5p-mfc device
    Replace custom memory bank initialization using memblock_reserve and
    dma_declare_coherent with a single call to CMA's dma_declare_contiguous.

    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
    ---
    arch/arm/plat-s5p/dev-mfc.c | 51 ++++++-------------------------------------
    1 files changed, 7 insertions(+), 44 deletions(-)

    diff --git a/arch/arm/plat-s5p/dev-mfc.c b/arch/arm/plat-s5p/dev-mfc.c
    index a30d36b..fcb8400 100644
    --- a/arch/arm/plat-s5p/dev-mfc.c
    +++ b/arch/arm/plat-s5p/dev-mfc.c
    @@ -14,6 +14,7 @@
    #include <linux/interrupt.h>
    #include <linux/platform_device.h>
    #include <linux/dma-mapping.h>
    +#include <linux/dma-contiguous.h>
    #include <linux/memblock.h>
    #include <linux/ioport.h>

    @@ -22,52 +23,14 @@
    #include <plat/irqs.h>
    #include <plat/mfc.h>

    -struct s5p_mfc_reserved_mem {
    - phys_addr_t base;
    - unsigned long size;
    - struct device *dev;
    -};
    -
    -static struct s5p_mfc_reserved_mem s5p_mfc_mem[2] __initdata;
    -
    void __init s5p_mfc_reserve_mem(phys_addr_t rbase, unsigned int rsize,
    phys_addr_t lbase, unsigned int lsize)
    {
    - int i;
    -
    - s5p_mfc_mem[0].dev = &s5p_device_mfc_r.dev;
    - s5p_mfc_mem[0].base = rbase;
    - s5p_mfc_mem[0].size = rsize;
    -
    - s5p_mfc_mem[1].dev = &s5p_device_mfc_l.dev;
    - s5p_mfc_mem[1].base = lbase;
    - s5p_mfc_mem[1].size = lsize;
    -
    - for (i = 0; i < ARRAY_SIZE(s5p_mfc_mem); i++) {
    - struct s5p_mfc_reserved_mem *area = &s5p_mfc_mem[i];
    - if (memblock_remove(area->base, area->size)) {
    - printk(KERN_ERR "Failed to reserve memory for MFC device (%ld bytes at 0x%08lx)\n",
    - area->size, (unsigned long) area->base);
    - area->base = 0;
    - }
    - }
    -}
    -
    -static int __init s5p_mfc_memory_init(void)
    -{
    - int i;
    -
    - for (i = 0; i < ARRAY_SIZE(s5p_mfc_mem); i++) {
    - struct s5p_mfc_reserved_mem *area = &s5p_mfc_mem[i];
    - if (!area->base)
    - continue;
    + if (dma_declare_contiguous(&s5p_device_mfc_r.dev, rsize, rbase, 0))
    + printk(KERN_ERR "Failed to reserve memory for MFC device (%u bytes at 0x%08lx)\n",
    + rsize, (unsigned long) rbase);

    - if (dma_declare_coherent_memory(area->dev, area->base,
    - area->base, area->size,
    - DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE) == 0)
    - printk(KERN_ERR "Failed to declare coherent memory for MFC device (%ld bytes at 0x%08lx)\n",
    - area->size, (unsigned long) area->base);
    - }
    - return 0;
    + if (dma_declare_contiguous(&s5p_device_mfc_l.dev, lsize, lbase, 0))
    + printk(KERN_ERR "Failed to reserve memory for MFC device (%u bytes at 0x%08lx)\n",
    + rsize, (unsigned long) rbase);
    }
    -device_initcall(s5p_mfc_memory_init);
    --
    1.7.1.569.g6f426


    \
     
     \ /
      Last update: 2011-11-18 17:47    [W:0.022 / U:64.508 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site