/** * This initializes a per-CPU area for each CPU. * * TODO: The PDA and per-CPU areas are pretty tightly wound. It should be * possible to make the per-CPU area *be* the PDA, or put another way, * point %GS at the per-CPU area rather than the PDA. All of the PDA's * current contents would become normal per-CPU variables. */ static void __init setup_per_cpu_areas(void) { int i; size_t size; /* * There is an ELF section containing all per-CPU variables * surrounded by __per_cpu_start and __per_cpu_end symbols. * We create a copy of this ELF section for each CPU. */ size = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES); for_each_cpu_mask (i, cpu_present_map) { char *ptr; ptr = alloc_bootmem_aligned(size, PAGE_SIZE); if (!ptr) panic("Cannot allocate cpu data for CPU %d\n", i); /* * Pre-bias data_offset by subtracting its offset from * __per_cpu_start. Later, per_cpu() will calculate a * per_cpu variable's address with: * * addr = offset_in_percpu_ELF_section + data_offset * = (__per_cpu_start + offset) + (ptr - __per_cpu_start) * = offset + ptr */ cpu_pda(i)->data_offset = ptr - __per_cpu_start; memcpy(ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start); }
void __init msm_msm7x2x_allocate_memory_regions(void) { void *addr; unsigned long size; size = pmem_mdp_size; if (size) { addr = alloc_bootmem(size); android_pmem_pdata.start = __pa(addr); android_pmem_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for mdp " "pmem arena\n", size, addr, __pa(addr)); } size = pmem_adsp_size; if (size) { addr = alloc_bootmem(size); android_pmem_adsp_pdata.start = __pa(addr); android_pmem_adsp_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for adsp " "pmem arena\n", size, addr, __pa(addr)); } size = pmem_audio_size; if (size) { addr = alloc_bootmem(size); android_pmem_audio_pdata.start = __pa(addr); android_pmem_audio_pdata.size = size; pr_info("allocating %lu bytes (at %lx physical) for audio " "pmem arena\n", size , __pa(addr)); } size = pmem_fb_size ? : MSM_FB_SIZE; addr = alloc_bootmem(size); msm_fb_resources[0].start = __pa(addr); msm_fb_resources[0].end = msm_fb_resources[0].start + size - 1; pr_info("allocating %lu bytes at %p (%lx physical) for fb\n", size, addr, __pa(addr)); size = pmem_kernel_ebi1_size; if (size) { addr = alloc_bootmem_aligned(size, 0x100000); android_pmem_kernel_ebi1_pdata.start = __pa(addr); android_pmem_kernel_ebi1_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for kernel" " ebi1 pmem arena\n", size, addr, __pa(addr)); } /* #ifdef CONFIG_ARCH_MSM7X27 size = MSM_GPU_PHYS_SIZE; addr = alloc_bootmem(size); kgsl_resources[1].start = __pa(addr); kgsl_resources[1].end = kgsl_resources[1].start + size - 1; pr_info("allocating %lu bytes at %p (at %lx physical) for KGSL\n", size, addr, __pa(addr)); #endif */ }
static void __init msm_msm7x27_allocate_memory_regions(void) { void *addr; unsigned long size; size = pmem_kernel_ebi1_size; if (size) { addr = alloc_bootmem_aligned(size, 0x100000); android_pmem_kernel_ebi1_pdata.start = __pa(addr); android_pmem_kernel_ebi1_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for kernel" " ebi1 pmem arena\n", size, addr, __pa(addr)); } size = pmem_mdp_size; if (size) { addr = alloc_bootmem(size); android_pmem_pdata.start = __pa(addr); android_pmem_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for mdp " "pmem arena\n", size, addr, __pa(addr)); } size = pmem_adsp_size; if (size) { addr = alloc_bootmem(size); android_pmem_adsp_pdata.start = __pa(addr); android_pmem_adsp_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for adsp " "pmem arena\n", size, addr, __pa(addr)); } size = pmem_gpu1_size; if (size) { addr = alloc_bootmem(size); android_pmem_gpu1_pdata.start = __pa(addr); android_pmem_gpu1_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for gpu1 " "pmem arena\n", size, addr, __pa(addr)); } size = fb_size ? : MSM_FB_SIZE; addr = alloc_bootmem(size); msm_fb_resources[0].start = __pa(addr); msm_fb_resources[0].end = msm_fb_resources[0].start + size - 1; pr_info("allocating %lu bytes at %p (%lx physical) for fb\n", size, addr, __pa(addr)); size = gpu_phys_size ? : MSM_GPU_PHYS_SIZE; addr = alloc_bootmem(size); kgsl_resources[1].start = __pa(addr); kgsl_resources[1].end = kgsl_resources[1].start + size - 1; pr_info("allocating %lu bytes at %p (%lx physical) for KGSL\n", size, addr, __pa(addr)); }
static void __init msm7x30_allocate_memory_regions(void) { void *addr; unsigned long size; /* Request allocation of Hardware accessible PMEM regions at the beginning to make sure they are allocated in EBI-0. This will allow 7x30 with two mem banks enter the second mem bank into Self-Refresh State during Idle Power Collapse. The current HW accessible PMEM regions are 1. Frame Buffer. LCDC HW can access msm_fb_resources during Idle-PC. 2. Audio LPA HW can access android_pmem_audio_pdata during Idle-PC. */ size = fb_size ? : MSM_FB_SIZE; addr = alloc_bootmem(size); msm_fb_resources[0].start = __pa(addr); msm_fb_resources[0].end = msm_fb_resources[0].start + size - 1; pr_info("allocating %lu bytes at %p (%lx physical) for fb\n", size, addr, __pa(addr)); size = pmem_audio_size; if (size) { addr = alloc_bootmem(size); android_pmem_audio_pdata.start = __pa(addr); android_pmem_audio_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for audio " "pmem arena\n", size, addr, __pa(addr)); } size = pmem_kernel_ebi1_size; if (size) { addr = alloc_bootmem_aligned(size, 0x100000); android_pmem_kernel_ebi1_pdata.start = __pa(addr); android_pmem_kernel_ebi1_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for kernel" " ebi1 pmem arena\n", size, addr, __pa(addr)); } size = pmem_sf_size; if (size) { addr = alloc_bootmem(size); android_pmem_pdata.start = __pa(addr); android_pmem_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for sf " "pmem arena\n", size, addr, __pa(addr)); } if machine_is_msm7x30_fluid() size = fluid_pmem_adsp_size; else
static void __init qsd8x50_allocate_memory_regions(void) { void *addr; unsigned long size; size = MSM_PMEM_CAMERA_SIZE; addr = alloc_bootmem(size); android_pmem_camera_pdata.start = __pa(addr); android_pmem_camera_pdata.size = size; printk(KERN_INFO "allocating %lu bytes at %p (%lx physical)" "for camera pmem\n", size, addr, __pa(addr)); size = MSM_PMEM_MDP_SIZE; addr = alloc_bootmem(size); android_pmem_pdata.start = __pa(addr); android_pmem_pdata.size = size; printk(KERN_INFO "allocating %lu bytes at %p (%lx physical)" "for pmem\n", size, addr, __pa(addr)); size = MSM_PMEM_ADSP_SIZE; addr = alloc_bootmem(size); android_pmem_adsp_pdata.start = __pa(addr); android_pmem_adsp_pdata.size = size; printk(KERN_INFO "allocating %lu bytes at %p (%lx physical)" "for adsp pmem\n", size, addr, __pa(addr)); size = MSM_PMEM_GPU1_SIZE; addr = alloc_bootmem_aligned(size, 0x100000); android_pmem_gpu1_pdata.start = __pa(addr); android_pmem_gpu1_pdata.size = size; printk(KERN_INFO "allocating %lu bytes at %p (%lx physical)" "for gpu1 pmem\n", size, addr, __pa(addr)); size = MSM_FB_SIZE; addr = MSM_FB_BASE; msm_fb_resources[0].start = addr; msm_fb_resources[0].end = msm_fb_resources[0].start + size - 1; printk(KERN_INFO "using %lu bytes of SMI at %lx physical for fb\n", size, addr); size = MSM_AUDIO_SIZE; addr = alloc_bootmem(size); msm_audio_resources[0].start = __pa(addr); msm_audio_resources[0].end = __pa(addr) + MSM_AUDIO_SIZE; printk(KERN_INFO "allocating %lu bytes at %p (%lx physical)" "for audio\n", size, addr, __pa(addr)); }
void __init msm_msm7x2x_allocate_memory_regions(void) { void *addr; unsigned long size; size = pmem_mdp_size; if (size) { addr = alloc_bootmem(size); android_pmem_pdata.start = __pa(addr); android_pmem_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for mdp " "pmem arena\n", size, addr, __pa(addr)); } size = pmem_adsp_size; if (size) { addr = alloc_bootmem(size); android_pmem_adsp_pdata.start = __pa(addr); android_pmem_adsp_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for adsp " "pmem arena\n", size, addr, __pa(addr)); } size = pmem_audio_size; if (size) { addr = alloc_bootmem(size); android_pmem_audio_pdata.start = __pa(addr); android_pmem_audio_pdata.size = size; pr_info("allocating %lu bytes (at %lx physical) for audio " "pmem arena\n", size , __pa(addr)); } size = pmem_fb_size ? : MSM_FB_SIZE; addr = alloc_bootmem(size); msm_fb_resources[0].start = __pa(addr); msm_fb_resources[0].end = msm_fb_resources[0].start + size - 1; pr_info("allocating %lu bytes at %p (%lx physical) for fb\n", size, addr, __pa(addr)); size = pmem_kernel_ebi1_size; if (size) { addr = alloc_bootmem_aligned(size, 0x100000); android_pmem_kernel_ebi1_pdata.start = __pa(addr); android_pmem_kernel_ebi1_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for kernel" " ebi1 pmem arena\n", size, addr, __pa(addr)); } #ifdef CONFIG_ARCH_MSM7X27 size = MSM_GPU_PHYS_SIZE; addr = alloc_bootmem(size); kgsl_resources[1].start = __pa(addr); kgsl_resources[1].end = kgsl_resources[1].start + size - 1; pr_info("allocating %lu bytes at %p (at %lx physical) for KGSL\n", size, addr, __pa(addr)); #endif // LGE_CHANGE_S [[email protected]] 2010-08-06, lge_mtd_direct_access #ifdef CONFIG_MACH_MSM7X27_THUNDERC // PAGE_NUM_PER_BLK*PAGE_SIZE_BYTE lge_mtd_direct_access_addr = alloc_bootmem(64*2048); #endif // LGE_CHANGE_E [[email protected]] 2010-08-06 }
void __init msm7x30_allocate_memory_regions(void) { void *addr; unsigned long size; /* Request allocation of Hardware accessible PMEM regions at the beginning to make sure they are allocated in EBI-0. This will allow 7x30 with two mem banks enter the second mem bank into Self-Refresh State during Idle Power Collapse. The current HW accessible PMEM regions are 1. Frame Buffer. LCDC HW can access msm_fb_resources during Idle-PC. 2. Audio LPA HW can access android_pmem_audio_pdata during Idle-PC. */ size = fb_size ? : MSM_FB_SIZE; addr = alloc_bootmem(size); msm_fb_resources[0].start = __pa(addr); msm_fb_resources[0].end = msm_fb_resources[0].start + size - 1; pr_info("allocating %lu bytes at %p (%lx physical) for fb\n", size, addr, __pa(addr)); #ifdef CONFIG_LGE_HIDDEN_RESET_PATCH fb_phys_addr = __pa(addr); #endif #ifdef CONFIG_FB_MSM_LCDC_LGDISPLAY_WVGA_OLED /* LGE_CHANGE * Copy the oled display screen to oled frame buffer * 2011-03-22, [email protected] */ #ifdef CONFIG_FB_MSM_DEFAULT_DEPTH_RGB565 memcpy(addr, __va(0x2FD00000), 480*800*2); #elif defined (CONFIG_FB_MSM_DEFAULT_DEPTH_RGBA8888) \ | defined (CONFIG_FB_MSM_DEFAULT_DEPTH_ARGB8888) // memcpy(addr, __va(0x2FD00000), 480*800*4); #endif #endif size = pmem_audio_size; if (size) { addr = alloc_bootmem(size); android_pmem_audio_pdata.start = __pa(addr); android_pmem_audio_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for audio " "pmem arena\n", size, addr, __pa(addr)); } size = pmem_kernel_ebi1_size; if (size) { addr = alloc_bootmem_aligned(size, 0x100000); android_pmem_kernel_ebi1_pdata.start = __pa(addr); android_pmem_kernel_ebi1_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for kernel" " ebi1 pmem arena\n", size, addr, __pa(addr)); } size = pmem_sf_size; if (size) { addr = alloc_bootmem(size); android_pmem_pdata.start = __pa(addr); android_pmem_pdata.size = size; pr_info("allocating %lu bytes at %p (%lx physical) for sf " "pmem arena\n", size, addr, __pa(addr)); } if machine_is_msm7x30_fluid() size = fluid_pmem_adsp_size; else