void s3c_mfc_get_reserved_memory(struct s3c_platform_mfc *npd) { #if (defined(CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC) || defined(CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC0)) npd->buf_phy_base[0] = s5p_get_media_memory_bank(S5P_MDEV_MFC, 0); npd->buf_phy_size[0] = s5p_get_media_memsize_bank(S5P_MDEV_MFC, 0); #endif #ifdef CONFIG_VIDEO_SAMSUNG_MEMSIZE_MFC1 npd->buf_phy_base[1] = s5p_get_media_memory_bank(S5P_MDEV_MFC, 1); npd->buf_phy_size[1] = s5p_get_media_memsize_bank(S5P_MDEV_MFC, 1); #endif }
void __init s3c_mfc_set_platdata(struct s3c_platform_mfc *pd) { s3c_mfc_pdata.buf_phy_base[0] = (u32)s5p_get_media_memory_bank(S5P_MDEV_MFC, 0); s3c_mfc_pdata.buf_phy_size[0] = (u32)s5p_get_media_memsize_bank(S5P_MDEV_MFC, 0); s3c_mfc_pdata.buf_phy_base[1] = (u32)s5p_get_media_memory_bank(S5P_MDEV_MFC, 1); s3c_mfc_pdata.buf_phy_size[1] = (u32)s5p_get_media_memsize_bank(S5P_MDEV_MFC, 1); }
static void __init android_pmem_set_platdata(void) { pmem_pdata.start = (u32)s5p_get_media_memory_bank(S5P_MDEV_PMEM, 0); pmem_pdata.size = (u32)s5p_get_media_memsize_bank(S5P_MDEV_PMEM, 0); pmem_gpu1_pdata.start = (u32)s5p_get_media_memory_bank(S5P_MDEV_PMEM_GPU1, 0); pmem_gpu1_pdata.size = (u32)s5p_get_media_memsize_bank(S5P_MDEV_PMEM_GPU1, 0); pmem_adsp_pdata.start = (u32)s5p_get_media_memory_bank(S5P_MDEV_PMEM_ADSP, 0); pmem_adsp_pdata.size = (u32)s5p_get_media_memsize_bank(S5P_MDEV_PMEM_ADSP, 0); }
void __init s3c_fimc2_set_platdata(struct s3c_platform_fimc *pd) { struct s3c_platform_fimc *npd; if (!pd) pd = &default_fimc2_data; npd = kmemdup(pd, sizeof(struct s3c_platform_fimc), GFP_KERNEL); if (!npd) printk(KERN_ERR "%s: no memory for platform data\n", __func__); else { if (!npd->cfg_gpio) npd->cfg_gpio = s3c_fimc2_cfg_gpio; if (!npd->clk_on) npd->clk_on = s3c_fimc_clk_on; if (!npd->clk_off) npd->clk_off = s3c_fimc_clk_off; npd->hw_ver = 0x45; /* starting physical address of memory region */ npd->pmem_start = s5p_get_media_memory_bank(S5P_MDEV_FIMC2, 1); /* size of memory region */ npd->pmem_size = s5p_get_media_memsize_bank(S5P_MDEV_FIMC2, 1); s3c_device_fimc2.dev.platform_data = npd; } }
void __init s3cfb_set_platdata(struct s3c_platform_fb *pd) { struct s3c_platform_fb *npd; int i; if (!pd) pd = &default_fb_data; npd = kmemdup(pd, sizeof(struct s3c_platform_fb), GFP_KERNEL); if (!npd) printk(KERN_ERR "%s: no memory for platform data\n", __func__); else { for (i = 0; i < npd->nr_wins; i++) npd->nr_buffers[i] = 1; npd->nr_buffers[npd->default_win] = CONFIG_FB_S3C_NR_BUFFERS; s3cfb_get_clk_name(npd->clk_name); npd->backlight_onoff = NULL; npd->clk_on = s3cfb_clk_on; npd->clk_off = s3cfb_clk_off; /* starting physical address of memory region */ npd->pmem_start = s5p_get_media_memory_bank(S5P_MDEV_FIMD, 1); /* size of memory region */ npd->pmem_size = s5p_get_media_memsize_bank(S5P_MDEV_FIMD, 1); s3c_device_fb.dev.platform_data = npd; } }
int g2d_init_mem(struct device *dev, unsigned int *base, unsigned int *size) { #ifdef CONFIG_S5P_MEM_CMA struct cma_info mem_info; int err; char cma_name[8]; #endif #ifdef CONFIG_S5P_MEM_CMA /* CMA */ sprintf(cma_name, "fimg2d"); err = cma_info(&mem_info, dev, 0); FIMG2D_DEBUG("[cma_info] start_addr : 0x%x, end_addr : 0x%x, " "total_size : 0x%x, free_size : 0x%x\n", mem_info.lower_bound, mem_info.upper_bound, mem_info.total_size, mem_info.free_size); if (err) { FIMG2D_ERROR("%s: get cma info failed\n", __func__); return -1; } *size = mem_info.total_size; *base = (dma_addr_t)cma_alloc (dev, cma_name, (size_t)(*size), 0); FIMG2D_DEBUG("size = 0x%x\n", *size); FIMG2D_DEBUG("*base phys= 0x%x\n", *base); FIMG2D_DEBUG("*base virt = 0x%x\n", (u32)phys_to_virt(*base)); #else *base = s5p_get_media_memory_bank(S5P_MDEV_FIMG2D, 0); #endif return 0; }
void __init s3cfb_set_platdata(struct s3c_platform_fb *pd) { struct s3c_platform_fb *npd; struct s3cfb_lcd *lcd; phys_addr_t pmem_start; int i, default_win, num_overlay_win; int frame_size; if (!pd) pd = &default_fb_data; npd = kmemdup(pd, sizeof(struct s3c_platform_fb), GFP_KERNEL); if (!npd) printk(KERN_ERR "%s: no memory for platform data\n", __func__); else { for (i = 0; i < npd->nr_wins; i++) npd->nr_buffers[i] = 1; default_win = npd->default_win; num_overlay_win = CONFIG_FB_S3C_NUM_OVLY_WIN; if (num_overlay_win >= default_win) { printk(KERN_WARNING "%s: NUM_OVLY_WIN should be less than default \ window number. set to 0.\n", __func__); num_overlay_win = 0; } for (i = 0; i < num_overlay_win; i++) npd->nr_buffers[i] = CONFIG_FB_S3C_NUM_BUF_OVLY_WIN; npd->nr_buffers[default_win] = CONFIG_FB_S3C_NR_BUFFERS; lcd = (struct s3cfb_lcd *)npd->lcd; frame_size = (lcd->width * lcd->height * 4); s3cfb_get_clk_name(npd->clk_name); npd->backlight_onoff = NULL; npd->clk_on = s3cfb_clk_on; npd->clk_off = s3cfb_clk_off; /* set starting physical address & size of memory region for overlay * window */ pmem_start = s5p_get_media_memory_bank(S5P_MDEV_FIMD, 1); for (i = 0; i < num_overlay_win; i++) { npd->pmem_start[i] = pmem_start; npd->pmem_size[i] = frame_size * npd->nr_buffers[i]; pmem_start += npd->pmem_size[i]; } /* set starting physical address & size of memory region for default * window */ npd->pmem_start[default_win] = pmem_start; npd->pmem_size[default_win] = frame_size * npd->nr_buffers[default_win]; s3c_device_fb.dev.platform_data = npd; }
int s3cfb_map_default_video_memory(struct s3cfb_global *fbdev, struct fb_info *fb, int fimd_id) { struct fb_fix_screeninfo *fix = &fb->fix; struct s3cfb_window *win = fb->par; #ifdef CONFIG_CMA struct cma_info mem_info; int err; #endif if (win->owner == DMA_MEM_OTHER) return 0; #ifdef CONFIG_CMA err = cma_info(&mem_info, fbdev->dev, CMA_REGION_FIMD); if (err) return err; fix->smem_start = (dma_addr_t)cma_alloc (fbdev->dev, CMA_REGION_FIMD, (size_t)fix->smem_len, 0); if (IS_ERR_VALUE(fix->smem_start)) { return -EBUSY; } fb->screen_base = cma_get_virt(fix->smem_start, fix->smem_len, 1); #elif defined(CONFIG_S5P_MEM_BOOTMEM) fix->smem_start = s5p_get_media_memory_bank(S5P_MDEV_FIMD, 1); fix->smem_len = s5p_get_media_memsize_bank(S5P_MDEV_FIMD, 1); fb->screen_base = ioremap_wc(fix->smem_start, fix->smem_len); #else fb->screen_base = dma_alloc_writecombine(fbdev->dev, PAGE_ALIGN(fix->smem_len), (unsigned int *) &fix->smem_start, GFP_KERNEL); #endif if (!fb->screen_base) return -ENOMEM; else dev_info(fbdev->dev, "[fb%d] dma: 0x%08x, cpu: 0x%08x, " "size: 0x%08x\n", win->id, (unsigned int)fix->smem_start, (unsigned int)fb->screen_base, fix->smem_len); memset(fb->screen_base, 0, fix->smem_len); win->owner = DMA_MEM_FIMD; return 0; }
int s3cfb_map_default_video_memory(struct s3cfb_global *fbdev, struct fb_info *fb, int fimd_id) { struct fb_fix_screeninfo *fix = &fb->fix; struct s3cfb_window *win = fb->par; #ifdef CONFIG_S5P_MEM_CMA struct cma_info mem_info; unsigned int reserved_size; int err; #endif #if MALI_USE_UNIFIED_MEMORY_PROVIDER unsigned int arg = 0; #endif if (win->owner == DMA_MEM_OTHER) return 0; #ifdef CONFIG_S5P_MEM_CMA err = cma_info(&mem_info, fbdev->dev, 0); if (ERR_PTR(err)) return -ENOMEM; reserved_size = mem_info.total_size; fix->smem_start = (dma_addr_t)cma_alloc (fbdev->dev, "fimd", (size_t)reserved_size, 0); fb->screen_base = cma_get_virt(fix->smem_start, reserved_size, 1); #elif defined(CONFIG_S5P_MEM_BOOTMEM) fix->smem_start = s5p_get_media_memory_bank(S5P_MDEV_FIMD, 0); fix->smem_len = s5p_get_media_memsize_bank(S5P_MDEV_FIMD, 0); fb->screen_base = phys_to_virt(fix->smem_start); #endif memset(fb->screen_base, 0, fix->smem_len); win->owner = DMA_MEM_FIMD; #if MALI_USE_UNIFIED_MEMORY_PROVIDER if (s3cfb_ump_wrapper(win, fix, arg)) { dev_info(fbdev->dev, "[fb%d] : Wrapped UMP memory : %x\n" , win->id, (unsigned int)ump_wrapped_buffer); s3cfb_unmap_video_memory(fbdev, fb); return -ENOMEM; } #endif return 0; }
int s3cfb_map_default_video_memory(struct s3cfb_global *fbdev, struct fb_info *fb, int fimd_id) { struct fb_fix_screeninfo *fix = &fb->fix; struct s3cfb_window *win = fb->par; #ifdef CONFIG_VCM struct cma_info mem_info; unsigned int reserved_size; int err; struct vcm_phys *phys = NULL; ump_dd_physical_block ump_memory_description; unsigned int device_virt_start = 0; int frame_size = fix->smem_len / CONFIG_FB_S3C_NR_BUFFERS; struct vcm_res *fb_dev_vcm_res[CONFIG_FB_S3C_NR_BUFFERS]; enum vcm_dev_id id; #else #ifdef CONFIG_S5P_MEM_CMA struct cma_info mem_info; unsigned int reserved_size; int err; #endif #endif #ifdef MALI_USE_UNIFIED_MEMORY_PROVIDER #ifdef CONFIG_VCM int i; unsigned int arg = 0; #ifdef CONFIG_UMP_VCM_ALLOC struct ump_vcm ump_vcm; #endif unsigned int arg = 0; #endif #endif if (win->owner == DMA_MEM_OTHER) return 0; #ifdef CONFIG_VCM phys = kmalloc(sizeof(*phys) + sizeof(*phys->parts), GFP_KERNEL); memset(phys, 0, sizeof(*phys) + sizeof(*phys->parts)); if (fimd_id == 0) id = VCM_DEV_FIMD0; else id = VCM_DEV_FIMD1; err = cma_info(&mem_info, fbdev->dev, 0); if (ERR_PTR(err)) return -ENOMEM; reserved_size = fix->smem_len; fix->smem_start = (dma_addr_t)cma_alloc (fbdev->dev, "fimd", (size_t)reserved_size, 0); fb->screen_base = cma_get_virt(fix->smem_start, reserved_size, 1); fbdev->s5p_vcm = vcm_create_unified((SZ_64M), id, &s3cfb_vcm_driver); if (IS_ERR(fbdev->s5p_vcm)) return PTR_ERR(fbdev->s5p_vcm); if (vcm_activate(fbdev->s5p_vcm)) dev_info(fbdev->dev, "[fb%d] : VCM activated", win->id); phys->count = 1; phys->size = fix->smem_len; phys->free = NULL; phys->parts[0].size = fix->smem_len; phys->parts[0].start = fix->smem_start; win->s5p_vcm_res = vcm_map(fbdev->s5p_vcm, phys, 0); device_virt_start = win->s5p_vcm_res->start; for (i = 0; i < CONFIG_FB_S3C_NR_BUFFERS; i++) { fb_dev_vcm_res[i] = kzalloc(sizeof(struct vcm_res), GFP_KERNEL); win->s3cfb_vcm[i].dev_vcm_res = fb_dev_vcm_res[i]; win->s3cfb_vcm[i].dev_vcm_res->start = device_virt_start + frame_size * i; win->s3cfb_vcm[i].dev_vcm_res->bound_size = frame_size; win->s3cfb_vcm[i].dev_vcm_res->res_size = frame_size; win->s3cfb_vcm[i].dev_vcm = fbdev->s5p_vcm; win->s3cfb_vcm[i].dev_vcm_res->vcm = fbdev->s5p_vcm; if (IS_ERR(win->s3cfb_vcm[i].dev_vcm_res)) return -ENOMEM; } #else #ifdef CONFIG_S5P_MEM_CMA err = cma_info(&mem_info, fbdev->dev, 0); if (ERR_PTR(err)) return -ENOMEM; reserved_size = mem_info.total_size; fix->smem_start = (dma_addr_t)cma_alloc (fbdev->dev, "fimd", (size_t)reserved_size, 0); fb->screen_base = cma_get_virt(fix->smem_start, reserved_size, 1); #elif defined(CONFIG_S5P_MEM_BOOTMEM) fix->smem_start = s5p_get_media_memory_bank(S5P_MDEV_FIMD, 1); fix->smem_len = s5p_get_media_memsize_bank(S5P_MDEV_FIMD, 1); fb->screen_base = ioremap_wc(fix->smem_start, fix->smem_len); #endif #endif memset(fb->screen_base, 0, fix->smem_len); win->owner = DMA_MEM_FIMD; #if MALI_USE_UNIFIED_MEMORY_PROVIDER #ifdef CONFIG_VCM #ifdef CONFIG_UMP_VCM_ALLOC for (i = 0; i < CONFIG_FB_S3C_NR_BUFFERS; i++) { ump_vcm.vcm = win->s3cfb_vcm[i].dev_vcm; ump_vcm.vcm_res = win->s3cfb_vcm[i].dev_vcm_res; ump_vcm.dev_id = id; arg = (unsigned int)&ump_vcm; ump_memory_description.addr = fix->smem_start + ((fix->smem_len / CONFIG_FB_S3C_NR_BUFFERS) * i); ump_memory_description.size = fix->smem_len / CONFIG_FB_S3C_NR_BUFFERS; win->ump_wrapped_buffer[i] = ump_dd_handle_create_from_phys_blocks (&ump_memory_description, 1); if (ump_dd_vcm_attribute_set(win->ump_wrapped_buffer[i], arg)) return -ENOMEM; } #else if (s3cfb_ump_wrapper(fix, arg, 0, win)) { dev_info(fbdev->dev, "[fb%d] : Wrapped UMP memory : %x\n" , win->id, (unsigned int)ump_wrapped_buffer); s3cfb_unmap_video_memory(fbdev, fb); return -ENOMEM; } #endif #endif #endif return 0; }
void __init s3c_fb_set_platdata(struct s3c_platform_fb *pd) { struct s3c_platform_fb *npd; struct s3cfb_lcd *lcd; phys_addr_t pmem_start; int i, default_win, num_overlay_win; int frame_size; if (!pd) pd = &default_fb_data; npd = kmemdup(pd, sizeof(struct s3c_platform_fb), GFP_KERNEL); if (!npd) { printk(KERN_ERR "%s: no memory for platform data\n", __func__); } else { // for (i = 0; i < npd->nr_wins; i++) { for (i = 0; i < npd->nr_wins && i < NR_BUFFERS; i++) { npd->nr_buffers[i] = 1; } default_win = npd->default_win; num_overlay_win = CONFIG_FB_S3C_NUM_OVLY_WIN; if (num_overlay_win >= default_win) { printk(KERN_WARNING "%s: NUM_OVLY_WIN should be less than default \ window number. set to 0.\n", __func__); num_overlay_win = 0; } #if 0 for (i = 0; i < num_overlay_win; i++) npd->nr_buffers[i] = CONFIG_FB_S3C_NUM_BUF_OVLY_WIN; npd->nr_buffers[default_win] = CONFIG_FB_S3C_NR_BUFFERS; #endif lcd = (struct s3cfb_lcd *)npd->lcd; // frame_size = (lcd->width * lcd->height * 4); frame_size = ALIGN(lcd->width * lcd->height * 4, PAGE_SIZE); s3cfb_get_clk_name(npd->clk_name); npd->backlight_onoff = NULL; npd->clk_on = s3cfb_clk_on; npd->clk_off = s3cfb_clk_off; /* set starting physical address & size of memory region for overlay * window */ pmem_start = s5p_get_media_memory_bank(S5P_MDEV_FIMD, 1); // printk("---pmem_start is 0x%x\n",pmem_start); for (i = 0; i < num_overlay_win; i++) { npd->nr_buffers[i] = CONFIG_FB_S3C_NUM_BUF_OVLY_WIN; npd->pmem_start[i] = pmem_start; npd->pmem_size[i] = frame_size * npd->nr_buffers[i]; pmem_start += npd->pmem_size[i]; } npd->nr_buffers[default_win] = CONFIG_FB_S3C_NR_BUFFERS; /* set starting physical address & size of memory region for default * * window */ npd->pmem_start[default_win] = pmem_start; npd->pmem_size[default_win] = frame_size * npd->nr_buffers[default_win]; #if defined(CONFIG_MACH_TQ210) npd->pmem_size[default_win] += ALIGN(1280*720, PAGE_SIZE) * 3; npd->pmem_size[default_win] += ALIGN(1280*360, PAGE_SIZE) * 3 + PAGE_SIZE; if (frame_size > 0x200000) { pmem_start += npd->pmem_size[default_win]; for (; i < npd->nr_wins; i++) { if (i != default_win) { npd->nr_buffers[i] = 2; npd->pmem_start[i] = pmem_start; npd->pmem_size[i] = frame_size * npd->nr_buffers[i]; break; } } } #endif s3c_device_fb.dev.platform_data = npd; }
static int mfc_probe(struct platform_device *pdev) { struct resource *res; size_t size; int ret; #if ENABLE_MONITORING_MFC_DD mfc_info("MFC mfc_probe..dev_id(%d)\n",S5P_MDEV_MFC); #endif /* mfc clock enable should be here */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (res == NULL) { dev_err(&pdev->dev, "failed to get memory region resource\n"); ret = -ENOENT; goto probe_out; } // 60K is required for mfc register (0x0 ~ 0xe008) size = (res->end - res->start) + 1; mfc_mem = request_mem_region(res->start, size, pdev->name); if (mfc_mem == NULL) { dev_err(&pdev->dev, "failed to get memory region\n"); ret = -ENOENT; goto probe_out; } mfc_sfr_base_vaddr = ioremap(mfc_mem->start, mfc_mem->end - mfc_mem->start + 1); if (mfc_sfr_base_vaddr == NULL) { dev_err(&pdev->dev, "failed to ioremap address region\n"); ret = -ENOENT; goto probe_out; } res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); if (res == NULL) { dev_err(&pdev->dev, "failed to get irq resource\n"); ret = -ENOENT; goto probe_out; } #if !defined(MFC_POLLING) ret = request_irq(res->start, mfc_irq, IRQF_DISABLED, pdev->name, pdev); if (ret != 0) { dev_err(&pdev->dev, "failed to install irq (%d)\n", ret); goto probe_out; } #endif mutex_init(&mfc_mutex); /* * buffer memory secure */ mfc_port0_base_paddr = s5p_get_media_memory_bank(S5P_MDEV_MFC, 0); mfc_port0_base_paddr = ALIGN_TO_128KB(mfc_port0_base_paddr); mfc_port0_base_vaddr = phys_to_virt(mfc_port0_base_paddr); if (mfc_port0_base_vaddr == NULL) { mfc_err("fail to mapping port0 buffer\n"); ret = -EPERM; goto probe_out; } mfc_port1_base_paddr = s5p_get_media_memory_bank(S5P_MDEV_MFC, 1); mfc_port1_base_paddr = ALIGN_TO_128KB(mfc_port1_base_paddr); mfc_port1_base_vaddr = phys_to_virt(mfc_port1_base_paddr); if (mfc_port1_base_vaddr == NULL) { mfc_err("fail to mapping port1 buffer\n"); ret = -EPERM; goto probe_out; } // mfc_debug("mfc_port0_base_paddr = 0x%08x, mfc_port1_base_paddr = 0x%08x <<\n", // (unsigned int)mfc_port0_base_paddr, (unsigned int)mfc_port1_base_paddr); // mfc_debug("mfc_port0_base_vaddr = 0x%08x, mfc_port1_base_vaddr = 0x%08x <<\n", // (unsigned int)mfc_port0_base_vaddr, (unsigned int)mfc_port1_base_vaddr); /* * MFC FW downloading */ if (mfc_load_firmware() < 0) { mfc_err("MFCINST_ERR_FW_INIT_FAIL\n"); ret = -EPERM; goto probe_out; } mfc_init_mem_inst_no(); mfc_init_buffer(); mfc_clk = clk_get(&pdev->dev, "mfc"); if (mfc_clk == NULL) { printk(KERN_ERR "failed to find mfc clock source\n"); return -ENOENT; } ret = misc_register(&mfc_miscdev); return 0; probe_out: dev_err(&pdev->dev, "not found (%d). \n", ret); return ret; }
static int mfc_mmap(struct file *filp, struct vm_area_struct *vma) { unsigned long vir_size = vma->vm_end - vma->vm_start; unsigned long phy_size, firmware_size; unsigned long page_frame_no = 0; mfc_inst_ctx *mfc_ctx; #if ENABLE_MONITORING_MFC_DD mfc_info("MFC mfc_mmap..dev_id(%d)\n",S5P_MDEV_MFC); #endif mfc_debug("vma->vm_start = 0x%08x, vma->vm_end = 0x%08x\n", (unsigned int)vma->vm_start, (unsigned int)vma->vm_end); mfc_debug("vma->vm_end - vma->vm_start = %ld\n", vir_size); mfc_ctx = (mfc_inst_ctx *)filp->private_data; firmware_size = mfc_get_port0_buff_paddr() - mfc_get_fw_buff_paddr(); phy_size = (unsigned long)(s5p_get_media_memory_bank(S5P_MDEV_MFC, 0) - firmware_size + s5p_get_media_memory_bank(S5P_MDEV_MFC, 1)); /* if memory size required from appl. mmap() is bigger than max data memory * size allocated in the driver */ if (vir_size > phy_size) { mfc_err("virtual requested mem(%ld) is bigger than physical mem(%ld)\n", vir_size, phy_size); return -EINVAL; } mfc_ctx->port0_mmap_size = (vir_size / 2); vma->vm_flags |= VM_RESERVED | VM_IO; vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); /* * port0 mapping for stream buf & frame buf (chroma + MV) */ page_frame_no = __phys_to_pfn(mfc_get_port0_buff_paddr()); if (remap_pfn_range(vma, vma->vm_start, page_frame_no, mfc_ctx->port0_mmap_size, vma->vm_page_prot)) { mfc_err("mfc remap port0 error\n"); return -EAGAIN; } vma->vm_flags |= VM_RESERVED | VM_IO; vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); /* * port1 mapping for frame buf (luma) */ page_frame_no = __phys_to_pfn(mfc_get_port1_buff_paddr()); if (remap_pfn_range(vma, vma->vm_start + mfc_ctx->port0_mmap_size, page_frame_no, vir_size - mfc_ctx->port0_mmap_size, vma->vm_page_prot)) { mfc_err("mfc remap port1 error\n"); return -EAGAIN; } mfc_debug("virtual requested mem = %ld, physical reserved data mem = %ld\n", vir_size, phy_size); return 0; }