Lines Matching +full:non +full:- +full:linear
1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (C) 1995-2005 Russell King
24 #include <linux/dma-direct.h>
25 #include <linux/dma-map-ops.h>
40 #include <asm/kernel-pgtable.h>
50 #include <asm/xen/swiotlb-xen.h>
58 s64 memstart_addr __ro_after_init = -1;
63 * and ZONE_DMA32. By default ZONE_DMA covers the 32-bit addressable memory
64 * unless restricted on specific platforms (e.g. 30-bit on Raspberry Pi 4).
65 * In such case, ZONE_DMA32 covers the rest of the 32-bit addressable memory,
71 * To make optimal use of block mappings when laying out the linear
120 return min(zone_limit, memblock_end_of_DRAM() - 1) + 1; in max_zone_phys()
136 * Information we get from firmware (e.g. DT dma-ranges) describe DMA in zone_sizes_init()
138 * Some of them rely on DMA zone in low 32-bit memory. Keep low RAM in zone_sizes_init()
189 s64 linear_region_size = PAGE_END - _PAGE_OFFSET(vabits_actual); in arm64_memblock_init()
192 * Corner case: 52-bit VA capable systems running KVM in nVHE mode may in arm64_memblock_init()
193 * be limited in their ability to support a linear map that exceeds 51 in arm64_memblock_init()
196 * limit the kernel's linear map to 51 bits as well if we detect this in arm64_memblock_init()
201 pr_info("Capping linear region to 51 bits for KVM in nVHE mode on LVA capable hardware.\n"); in arm64_memblock_init()
214 if ((memblock_end_of_DRAM() - memstart_addr) > linear_region_size) in arm64_memblock_init()
215 pr_warn("Memory doesn't fit in the linear mapping, VA_BITS too small\n"); in arm64_memblock_init()
219 * linear mapping. Take care not to clip the kernel which may be in arm64_memblock_init()
226 memstart_addr = round_up(memblock_end_of_DRAM() - linear_region_size, in arm64_memblock_init()
232 * If we are running with a 52-bit kernel VA config on a system that in arm64_memblock_init()
234 * memory in the 48-bit addressable part of the linear region, i.e., in arm64_memblock_init()
239 memstart_addr -= _PAGE_OFFSET(vabits_actual) - _PAGE_OFFSET(52); in arm64_memblock_init()
244 * via the linear mapping. in arm64_memblock_init()
248 memblock_add(__pa_symbol(_text), (u64)(_end - _text)); in arm64_memblock_init()
254 * initrd to become inaccessible via the linear mapping. in arm64_memblock_init()
255 * Otherwise, this is a no-op in arm64_memblock_init()
258 u64 size = PAGE_ALIGN(phys_initrd_start + phys_initrd_size) - base; in arm64_memblock_init()
262 * with more memory than we can address via the linear mapping. in arm64_memblock_init()
271 "initrd not fully accessible via the linear mapping -- please check your bootloader ...\n")) { in arm64_memblock_init()
285 s64 range = linear_region_size - in arm64_memblock_init()
289 * If the size of the linear region exceeds, by a sufficient in arm64_memblock_init()
291 * span, randomize the linear region as well. in arm64_memblock_init()
295 memstart_addr -= ARM64_MEMSTART_ALIGN * in arm64_memblock_init()
304 memblock_reserve(__pa_symbol(_stext), _end - _stext); in arm64_memblock_init()
313 high_memory = __va(memblock_end_of_DRAM() - 1) + 1; in arm64_memblock_init()
428 memblock_free(lm_init_begin, lm_init_end - lm_init_begin); in free_initmem()
454 * Choose a random page-aligned base address for a window of 'size' bytes which
455 * entirely contains the interval [start, end - 1].
461 if ((end - start) >= size) in random_bounding_box()
464 max_pgoff = (size - (end - start)) / PAGE_SIZE; in random_bounding_box()
467 return start - pgoff * PAGE_SIZE; in random_bounding_box()
472 * image and other modules. References using PREL32 relocations have a +/-2G
478 * CALL26/JUMP26 relocations with a +/-128M range. Without PLTs, we must ensure
494 u64 kernel_size = kernel_end - kernel_start; in module_init_limits()
505 module_direct_base = kernel_end - SZ_128M; in module_init_limits()
507 module_plt_base = kernel_end - SZ_2G; in module_init_limits()
525 pr_info("%llu pages in range for non-PLT usage", in module_init_limits()
526 module_direct_base ? (SZ_128M - kernel_size) / PAGE_SIZE : 0); in module_init_limits()
528 module_plt_base ? (SZ_2G - kernel_size) / PAGE_SIZE : 0); in module_init_limits()