void __init msm_msm7627a_allocate_memory_regions(void) { /*Add 4 framebuffer and delete the mem adapter strategy*/ void *addr; unsigned long fb_size; #ifndef CONFIG_HUAWEI_KERNEL if (machine_is_msm7625a_surf() || machine_is_msm7625a_ffa()) fb_size = MSM7x25A_MSM_FB_SIZE; else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) fb_size = MSM8x25_MSM_FB_SIZE; else fb_size = MSM_FB_SIZE; #else fb_size = get_framebuffer_size(); #endif addr = alloc_bootmem_align(fb_size, 0x1000); msm_fb_resources[0].start = __pa(addr); msm_fb_resources[0].end = msm_fb_resources[0].start + fb_size - 1; pr_info("allocating %lu bytes at %p (%lx physical) for fb\n", fb_size, addr, __pa(addr)); #ifdef CONFIG_MSM_V4L2_VIDEO_OVERLAY_DEVICE fb_size = MSM_V4L2_VIDEO_OVERLAY_BUF_SIZE; addr = alloc_bootmem_align(fb_size, 0x1000); msm_v4l2_video_overlay_resources[0].start = __pa(addr); msm_v4l2_video_overlay_resources[0].end = msm_v4l2_video_overlay_resources[0].start + fb_size - 1; pr_debug("allocating %lu bytes at %p (%lx physical) for v4l2\n", fb_size, addr, __pa(addr)); #endif }
static void check_framebuffer_size(int screen, int mode, int bytes_per_pixel) { struct fb_var_screeninfo var_screeninfo; int framebuffer_size_in_bytes = get_framebuffer_size(screen); if (bytes_per_pixel == 0) { ioctl(fd_fb[screen], FBIOGET_VSCREENINFO, &var_screeninfo); bytes_per_pixel = (var_screeninfo.bits_per_pixel + 7) / 8; } int mode_size_in_bytes; if (mode == DISP_TV_MODE_EDID) { int tmp, width, height; tmp = screen; width = ioctl(fd_disp, DISP_CMD_SCN_GET_WIDTH, &tmp); tmp = screen; height = ioctl(fd_disp, DISP_CMD_SCN_GET_HEIGHT, &tmp); mode_size_in_bytes = width * height * bytes_per_pixel; } else mode_size_in_bytes = mode_size[mode] * bytes_per_pixel; if (mode_size_in_bytes * nu_framebuffer_buffers > framebuffer_size_in_bytes) { printf("Reported framebuffer size is too small to fit mode (%.2f MB available; %.2f MB required).\n", (float)framebuffer_size_in_bytes / (1024 * 1024), (float)mode_size_in_bytes * nu_framebuffer_buffers / (1024 * 1024)); if (nu_framebuffer_buffers == 1) printf("Increase the default framebuffer size allocated at boot.\n"); else printf("Increase the default framebuffer size allocated at boot, or if you " "don't need double buffering (used by Mali and video acceleration) " "use the --nodoublebuffer option.\n"); exit(- 1); } }