Exemple #1
0
static int __init k3v2_register_ion(void)
{
#ifdef CONFIG_CMA //added by qijiwen
	if (!get_cma_type()) {
		struct page *cma_pages;
		u32 size = (u32)hisi_get_reserve_mem_size();
		
		cma_pages = dma_alloc_from_contiguous(NULL, size>>PAGE_SHIFT, 0);
		cma_log(CMA_LOG_INFO, "%s: 101 pages:0x%08x phy:0x%08x\n", 
					__FUNCTION__, size>>PAGE_SHIFT, page_to_phys(cma_pages));
		if(cma_pages== NULL)
		{
			cma_log(CMA_LOG_INFO, "%s: error: dma_alloc_from_contiguous return NULL\n", __FUNCTION__);
			return -ENOMEM;
		}
	}
#endif //added by qijiwen end
    printk("=====ion device register");
    platform_device_register(&k3v2_ion_device);
    return 0;
}
void __init k3v2_allocate_memory_regions(void)
{
    unsigned long reserved_base = HISI_BASE_MEMORY_SIZE;
    unsigned long reserved_size;
    unsigned long size;

    edb_trace(1);

    reserved_size = hisi_get_reserve_mem_size();

    reserved_base -= (reserved_size - SZ_1M);

    /* GPU memory */
    size = hisi_media_mem.gpu_size;
    hisi_reserved_gpu_phymem = reserved_base;
    printk("ion allocating %lu bytes at (%lx physical) for gpu "
        "pmem area\n", size, reserved_base);

    reserved_base += size;

    /* CODEC memory */
    size = hisi_media_mem.codec_size;
    /*Revived by y44207 ,V200 64 byte align*/
    hisi_reserved_codec_phymem = reserved_base;
    printk("codec ion allocating %lu bytes at (%lx physical) for codec "
        "pcodec area\n", size, reserved_base);
	reserved_base += size;
	/* VPP memory */
	size = hisi_media_mem.vpp_size;
	hisi_reserved_vpp_phymem = reserved_base;
	printk("vpp ion allocating %lu bytes at (%lx physical) for vpp "
		"pmem area\n", size, reserved_base);

    reserved_base += size;

    /* CAMERA memory pmem */
    size = hisi_media_mem.camera_size;
    if (size) {
        k3v2_ion_data.heaps[0].base = reserved_base;
        k3v2_ion_data.heaps[0].size	= size;
        hisi_reserved_camera_phymem = k3v2_ion_data.heaps[0].base;
        printk("camera ion allocating %lu bytes at (%lx physical) for camera pic\n",
            size, reserved_base);
    }

    reserved_base += size;

    /* video decoder display && camera preview + Thumbnail */
    size = hisi_media_mem.gralloc_size;
    if (size) {
        k3v2_ion_data.heaps[1].base = reserved_base;
        k3v2_ion_data.heaps[1].size	= size;
        printk("camera ion allocating %lu bytes at (%lx physical) for gralloc "
            "pmem area\n", size, reserved_base);
    }

    reserved_base += size;

#if defined(CONFIG_OVERLAY_COMPOSE)
    size = hisi_media_mem.overlay_size;
    if (size) {
        k3v2_ion_data.heaps[2].base = reserved_base;
        k3v2_ion_data.heaps[2].size	= size;
        printk("overlay ion allocating %lu bytes at (%lx physical) for overlay "
            "pmem area\n", size, reserved_base);
    }

    reserved_base += size;
#endif

	/*FB memory*/
	size = hisi_media_mem.fb_size;
	hisi_reserved_fb_phymem = reserved_base;
	printk("fb ion allocating %lu bytes at (%lx physical) for fb "
		"pmem area\n",size,reserved_base);

	reserved_base += size;

    /* dumplog memory */
    //size = HISI_PMEM_DUMPLOG_SIZE;
    /*Revived by y44207 ,V200 64 byte align*/
    //hisi_reserved_dumplog_phymem = reserved_base;
    //printk("dumplog ion allocating %lu bytes at (%lx physical) for dumplog"
    //    "area\n", size, reserved_base);

    //reserved_base += size;

}