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; }