init.c 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2012 Regents of the University of California
  4. * Copyright (C) 2019 Western Digital Corporation or its affiliates.
  5. * Copyright (C) 2020 FORTH-ICS/CARV
  6. * Nick Kossifidis <[email protected]>
  7. */
  8. #include <linux/init.h>
  9. #include <linux/mm.h>
  10. #include <linux/memblock.h>
  11. #include <linux/initrd.h>
  12. #include <linux/swap.h>
  13. #include <linux/swiotlb.h>
  14. #include <linux/sizes.h>
  15. #include <linux/of_fdt.h>
  16. #include <linux/of_reserved_mem.h>
  17. #include <linux/libfdt.h>
  18. #include <linux/set_memory.h>
  19. #include <linux/dma-map-ops.h>
  20. #include <linux/crash_dump.h>
  21. #include <linux/hugetlb.h>
  22. #include <asm/fixmap.h>
  23. #include <asm/tlbflush.h>
  24. #include <asm/sections.h>
  25. #include <asm/soc.h>
  26. #include <asm/io.h>
  27. #include <asm/ptdump.h>
  28. #include <asm/numa.h>
  29. #include "../kernel/head.h"
  30. struct kernel_mapping kernel_map __ro_after_init;
  31. EXPORT_SYMBOL(kernel_map);
  32. #ifdef CONFIG_XIP_KERNEL
  33. #define kernel_map (*(struct kernel_mapping *)XIP_FIXUP(&kernel_map))
  34. #endif
  35. #ifdef CONFIG_64BIT
  36. u64 satp_mode __ro_after_init = !IS_ENABLED(CONFIG_XIP_KERNEL) ? SATP_MODE_57 : SATP_MODE_39;
  37. #else
  38. u64 satp_mode __ro_after_init = SATP_MODE_32;
  39. #endif
  40. EXPORT_SYMBOL(satp_mode);
  41. bool pgtable_l4_enabled = IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_XIP_KERNEL);
  42. bool pgtable_l5_enabled = IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_XIP_KERNEL);
  43. EXPORT_SYMBOL(pgtable_l4_enabled);
  44. EXPORT_SYMBOL(pgtable_l5_enabled);
  45. phys_addr_t phys_ram_base __ro_after_init;
  46. EXPORT_SYMBOL(phys_ram_base);
  47. unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]
  48. __page_aligned_bss;
  49. EXPORT_SYMBOL(empty_zero_page);
  50. extern char _start[];
  51. void *_dtb_early_va __initdata;
  52. uintptr_t _dtb_early_pa __initdata;
  53. static phys_addr_t dma32_phys_limit __initdata;
  54. static void __init zone_sizes_init(void)
  55. {
  56. unsigned long max_zone_pfns[MAX_NR_ZONES] = { 0, };
  57. #ifdef CONFIG_ZONE_DMA32
  58. max_zone_pfns[ZONE_DMA32] = PFN_DOWN(dma32_phys_limit);
  59. #endif
  60. max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
  61. free_area_init(max_zone_pfns);
  62. }
  63. #if defined(CONFIG_MMU) && defined(CONFIG_DEBUG_VM)
  64. #define LOG2_SZ_1K ilog2(SZ_1K)
  65. #define LOG2_SZ_1M ilog2(SZ_1M)
  66. #define LOG2_SZ_1G ilog2(SZ_1G)
  67. #define LOG2_SZ_1T ilog2(SZ_1T)
  68. static inline void print_mlk(char *name, unsigned long b, unsigned long t)
  69. {
  70. pr_notice("%12s : 0x%08lx - 0x%08lx (%4ld kB)\n", name, b, t,
  71. (((t) - (b)) >> LOG2_SZ_1K));
  72. }
  73. static inline void print_mlm(char *name, unsigned long b, unsigned long t)
  74. {
  75. pr_notice("%12s : 0x%08lx - 0x%08lx (%4ld MB)\n", name, b, t,
  76. (((t) - (b)) >> LOG2_SZ_1M));
  77. }
  78. static inline void print_mlg(char *name, unsigned long b, unsigned long t)
  79. {
  80. pr_notice("%12s : 0x%08lx - 0x%08lx (%4ld GB)\n", name, b, t,
  81. (((t) - (b)) >> LOG2_SZ_1G));
  82. }
  83. #ifdef CONFIG_64BIT
  84. static inline void print_mlt(char *name, unsigned long b, unsigned long t)
  85. {
  86. pr_notice("%12s : 0x%08lx - 0x%08lx (%4ld TB)\n", name, b, t,
  87. (((t) - (b)) >> LOG2_SZ_1T));
  88. }
  89. #else
  90. #define print_mlt(n, b, t) do {} while (0)
  91. #endif
  92. static inline void print_ml(char *name, unsigned long b, unsigned long t)
  93. {
  94. unsigned long diff = t - b;
  95. if (IS_ENABLED(CONFIG_64BIT) && (diff >> LOG2_SZ_1T) >= 10)
  96. print_mlt(name, b, t);
  97. else if ((diff >> LOG2_SZ_1G) >= 10)
  98. print_mlg(name, b, t);
  99. else if ((diff >> LOG2_SZ_1M) >= 10)
  100. print_mlm(name, b, t);
  101. else
  102. print_mlk(name, b, t);
  103. }
  104. static void __init print_vm_layout(void)
  105. {
  106. pr_notice("Virtual kernel memory layout:\n");
  107. print_ml("fixmap", (unsigned long)FIXADDR_START,
  108. (unsigned long)FIXADDR_TOP);
  109. print_ml("pci io", (unsigned long)PCI_IO_START,
  110. (unsigned long)PCI_IO_END);
  111. print_ml("vmemmap", (unsigned long)VMEMMAP_START,
  112. (unsigned long)VMEMMAP_END);
  113. print_ml("vmalloc", (unsigned long)VMALLOC_START,
  114. (unsigned long)VMALLOC_END);
  115. #ifdef CONFIG_64BIT
  116. print_ml("modules", (unsigned long)MODULES_VADDR,
  117. (unsigned long)MODULES_END);
  118. #endif
  119. print_ml("lowmem", (unsigned long)PAGE_OFFSET,
  120. (unsigned long)high_memory);
  121. if (IS_ENABLED(CONFIG_64BIT)) {
  122. #ifdef CONFIG_KASAN
  123. print_ml("kasan", KASAN_SHADOW_START, KASAN_SHADOW_END);
  124. #endif
  125. print_ml("kernel", (unsigned long)KERNEL_LINK_ADDR,
  126. (unsigned long)ADDRESS_SPACE_END);
  127. }
  128. }
  129. #else
  130. static void print_vm_layout(void) { }
  131. #endif /* CONFIG_DEBUG_VM */
  132. void __init mem_init(void)
  133. {
  134. #ifdef CONFIG_FLATMEM
  135. BUG_ON(!mem_map);
  136. #endif /* CONFIG_FLATMEM */
  137. swiotlb_init(max_pfn > PFN_DOWN(dma32_phys_limit), SWIOTLB_VERBOSE);
  138. memblock_free_all();
  139. print_vm_layout();
  140. }
  141. /* Limit the memory size via mem. */
  142. static phys_addr_t memory_limit;
  143. static int __init early_mem(char *p)
  144. {
  145. u64 size;
  146. if (!p)
  147. return 1;
  148. size = memparse(p, &p) & PAGE_MASK;
  149. memory_limit = min_t(u64, size, memory_limit);
  150. pr_notice("Memory limited to %lldMB\n", (u64)memory_limit >> 20);
  151. return 0;
  152. }
  153. early_param("mem", early_mem);
  154. static void __init setup_bootmem(void)
  155. {
  156. phys_addr_t vmlinux_end = __pa_symbol(&_end);
  157. phys_addr_t max_mapped_addr;
  158. phys_addr_t phys_ram_end, vmlinux_start;
  159. if (IS_ENABLED(CONFIG_XIP_KERNEL))
  160. vmlinux_start = __pa_symbol(&_sdata);
  161. else
  162. vmlinux_start = __pa_symbol(&_start);
  163. memblock_enforce_memory_limit(memory_limit);
  164. /*
  165. * Make sure we align the reservation on PMD_SIZE since we will
  166. * map the kernel in the linear mapping as read-only: we do not want
  167. * any allocation to happen between _end and the next pmd aligned page.
  168. */
  169. if (IS_ENABLED(CONFIG_64BIT) && IS_ENABLED(CONFIG_STRICT_KERNEL_RWX))
  170. vmlinux_end = (vmlinux_end + PMD_SIZE - 1) & PMD_MASK;
  171. /*
  172. * Reserve from the start of the kernel to the end of the kernel
  173. */
  174. memblock_reserve(vmlinux_start, vmlinux_end - vmlinux_start);
  175. phys_ram_end = memblock_end_of_DRAM();
  176. if (!IS_ENABLED(CONFIG_XIP_KERNEL))
  177. phys_ram_base = memblock_start_of_DRAM();
  178. /*
  179. * memblock allocator is not aware of the fact that last 4K bytes of
  180. * the addressable memory can not be mapped because of IS_ERR_VALUE
  181. * macro. Make sure that last 4k bytes are not usable by memblock
  182. * if end of dram is equal to maximum addressable memory. For 64-bit
  183. * kernel, this problem can't happen here as the end of the virtual
  184. * address space is occupied by the kernel mapping then this check must
  185. * be done as soon as the kernel mapping base address is determined.
  186. */
  187. if (!IS_ENABLED(CONFIG_64BIT)) {
  188. max_mapped_addr = __pa(~(ulong)0);
  189. if (max_mapped_addr == (phys_ram_end - 1))
  190. memblock_set_current_limit(max_mapped_addr - 4096);
  191. }
  192. min_low_pfn = PFN_UP(phys_ram_base);
  193. max_low_pfn = max_pfn = PFN_DOWN(phys_ram_end);
  194. high_memory = (void *)(__va(PFN_PHYS(max_low_pfn)));
  195. dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
  196. set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET);
  197. reserve_initrd_mem();
  198. /*
  199. * No allocation should be done before reserving the memory as defined
  200. * in the device tree, otherwise the allocation could end up in a
  201. * reserved region.
  202. */
  203. early_init_fdt_scan_reserved_mem();
  204. /*
  205. * If DTB is built in, no need to reserve its memblock.
  206. * Otherwise, do reserve it but avoid using
  207. * early_init_fdt_reserve_self() since __pa() does
  208. * not work for DTB pointers that are fixmap addresses
  209. */
  210. if (!IS_ENABLED(CONFIG_BUILTIN_DTB))
  211. memblock_reserve(dtb_early_pa, fdt_totalsize(dtb_early_va));
  212. dma_contiguous_reserve(dma32_phys_limit);
  213. if (IS_ENABLED(CONFIG_64BIT))
  214. hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
  215. }
  216. #ifdef CONFIG_MMU
  217. struct pt_alloc_ops pt_ops __initdata;
  218. unsigned long riscv_pfn_base __ro_after_init;
  219. EXPORT_SYMBOL(riscv_pfn_base);
  220. pgd_t swapper_pg_dir[PTRS_PER_PGD] __page_aligned_bss;
  221. pgd_t trampoline_pg_dir[PTRS_PER_PGD] __page_aligned_bss;
  222. static pte_t fixmap_pte[PTRS_PER_PTE] __page_aligned_bss;
  223. pgd_t early_pg_dir[PTRS_PER_PGD] __initdata __aligned(PAGE_SIZE);
  224. #ifdef CONFIG_XIP_KERNEL
  225. #define pt_ops (*(struct pt_alloc_ops *)XIP_FIXUP(&pt_ops))
  226. #define riscv_pfn_base (*(unsigned long *)XIP_FIXUP(&riscv_pfn_base))
  227. #define trampoline_pg_dir ((pgd_t *)XIP_FIXUP(trampoline_pg_dir))
  228. #define fixmap_pte ((pte_t *)XIP_FIXUP(fixmap_pte))
  229. #define early_pg_dir ((pgd_t *)XIP_FIXUP(early_pg_dir))
  230. #endif /* CONFIG_XIP_KERNEL */
  231. static const pgprot_t protection_map[16] = {
  232. [VM_NONE] = PAGE_NONE,
  233. [VM_READ] = PAGE_READ,
  234. [VM_WRITE] = PAGE_COPY,
  235. [VM_WRITE | VM_READ] = PAGE_COPY,
  236. [VM_EXEC] = PAGE_EXEC,
  237. [VM_EXEC | VM_READ] = PAGE_READ_EXEC,
  238. [VM_EXEC | VM_WRITE] = PAGE_COPY_EXEC,
  239. [VM_EXEC | VM_WRITE | VM_READ] = PAGE_COPY_EXEC,
  240. [VM_SHARED] = PAGE_NONE,
  241. [VM_SHARED | VM_READ] = PAGE_READ,
  242. [VM_SHARED | VM_WRITE] = PAGE_SHARED,
  243. [VM_SHARED | VM_WRITE | VM_READ] = PAGE_SHARED,
  244. [VM_SHARED | VM_EXEC] = PAGE_EXEC,
  245. [VM_SHARED | VM_EXEC | VM_READ] = PAGE_READ_EXEC,
  246. [VM_SHARED | VM_EXEC | VM_WRITE] = PAGE_SHARED_EXEC,
  247. [VM_SHARED | VM_EXEC | VM_WRITE | VM_READ] = PAGE_SHARED_EXEC
  248. };
  249. DECLARE_VM_GET_PAGE_PROT
  250. void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot)
  251. {
  252. unsigned long addr = __fix_to_virt(idx);
  253. pte_t *ptep;
  254. BUG_ON(idx <= FIX_HOLE || idx >= __end_of_fixed_addresses);
  255. ptep = &fixmap_pte[pte_index(addr)];
  256. if (pgprot_val(prot))
  257. set_pte(ptep, pfn_pte(phys >> PAGE_SHIFT, prot));
  258. else
  259. pte_clear(&init_mm, addr, ptep);
  260. local_flush_tlb_page(addr);
  261. }
  262. static inline pte_t *__init get_pte_virt_early(phys_addr_t pa)
  263. {
  264. return (pte_t *)((uintptr_t)pa);
  265. }
  266. static inline pte_t *__init get_pte_virt_fixmap(phys_addr_t pa)
  267. {
  268. clear_fixmap(FIX_PTE);
  269. return (pte_t *)set_fixmap_offset(FIX_PTE, pa);
  270. }
  271. static inline pte_t *__init get_pte_virt_late(phys_addr_t pa)
  272. {
  273. return (pte_t *) __va(pa);
  274. }
  275. static inline phys_addr_t __init alloc_pte_early(uintptr_t va)
  276. {
  277. /*
  278. * We only create PMD or PGD early mappings so we
  279. * should never reach here with MMU disabled.
  280. */
  281. BUG();
  282. }
  283. static inline phys_addr_t __init alloc_pte_fixmap(uintptr_t va)
  284. {
  285. return memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE);
  286. }
  287. static phys_addr_t __init alloc_pte_late(uintptr_t va)
  288. {
  289. unsigned long vaddr;
  290. vaddr = __get_free_page(GFP_KERNEL);
  291. BUG_ON(!vaddr || !pgtable_pte_page_ctor(virt_to_page(vaddr)));
  292. return __pa(vaddr);
  293. }
  294. static void __init create_pte_mapping(pte_t *ptep,
  295. uintptr_t va, phys_addr_t pa,
  296. phys_addr_t sz, pgprot_t prot)
  297. {
  298. uintptr_t pte_idx = pte_index(va);
  299. BUG_ON(sz != PAGE_SIZE);
  300. if (pte_none(ptep[pte_idx]))
  301. ptep[pte_idx] = pfn_pte(PFN_DOWN(pa), prot);
  302. }
  303. #ifndef __PAGETABLE_PMD_FOLDED
  304. static pmd_t trampoline_pmd[PTRS_PER_PMD] __page_aligned_bss;
  305. static pmd_t fixmap_pmd[PTRS_PER_PMD] __page_aligned_bss;
  306. static pmd_t early_pmd[PTRS_PER_PMD] __initdata __aligned(PAGE_SIZE);
  307. #ifdef CONFIG_XIP_KERNEL
  308. #define trampoline_pmd ((pmd_t *)XIP_FIXUP(trampoline_pmd))
  309. #define fixmap_pmd ((pmd_t *)XIP_FIXUP(fixmap_pmd))
  310. #define early_pmd ((pmd_t *)XIP_FIXUP(early_pmd))
  311. #endif /* CONFIG_XIP_KERNEL */
  312. static p4d_t trampoline_p4d[PTRS_PER_P4D] __page_aligned_bss;
  313. static p4d_t fixmap_p4d[PTRS_PER_P4D] __page_aligned_bss;
  314. static p4d_t early_p4d[PTRS_PER_P4D] __initdata __aligned(PAGE_SIZE);
  315. #ifdef CONFIG_XIP_KERNEL
  316. #define trampoline_p4d ((p4d_t *)XIP_FIXUP(trampoline_p4d))
  317. #define fixmap_p4d ((p4d_t *)XIP_FIXUP(fixmap_p4d))
  318. #define early_p4d ((p4d_t *)XIP_FIXUP(early_p4d))
  319. #endif /* CONFIG_XIP_KERNEL */
  320. static pud_t trampoline_pud[PTRS_PER_PUD] __page_aligned_bss;
  321. static pud_t fixmap_pud[PTRS_PER_PUD] __page_aligned_bss;
  322. static pud_t early_pud[PTRS_PER_PUD] __initdata __aligned(PAGE_SIZE);
  323. #ifdef CONFIG_XIP_KERNEL
  324. #define trampoline_pud ((pud_t *)XIP_FIXUP(trampoline_pud))
  325. #define fixmap_pud ((pud_t *)XIP_FIXUP(fixmap_pud))
  326. #define early_pud ((pud_t *)XIP_FIXUP(early_pud))
  327. #endif /* CONFIG_XIP_KERNEL */
  328. static pmd_t *__init get_pmd_virt_early(phys_addr_t pa)
  329. {
  330. /* Before MMU is enabled */
  331. return (pmd_t *)((uintptr_t)pa);
  332. }
  333. static pmd_t *__init get_pmd_virt_fixmap(phys_addr_t pa)
  334. {
  335. clear_fixmap(FIX_PMD);
  336. return (pmd_t *)set_fixmap_offset(FIX_PMD, pa);
  337. }
  338. static pmd_t *__init get_pmd_virt_late(phys_addr_t pa)
  339. {
  340. return (pmd_t *) __va(pa);
  341. }
  342. static phys_addr_t __init alloc_pmd_early(uintptr_t va)
  343. {
  344. BUG_ON((va - kernel_map.virt_addr) >> PUD_SHIFT);
  345. return (uintptr_t)early_pmd;
  346. }
  347. static phys_addr_t __init alloc_pmd_fixmap(uintptr_t va)
  348. {
  349. return memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE);
  350. }
  351. static phys_addr_t __init alloc_pmd_late(uintptr_t va)
  352. {
  353. unsigned long vaddr;
  354. vaddr = __get_free_page(GFP_KERNEL);
  355. BUG_ON(!vaddr || !pgtable_pmd_page_ctor(virt_to_page(vaddr)));
  356. return __pa(vaddr);
  357. }
  358. static void __init create_pmd_mapping(pmd_t *pmdp,
  359. uintptr_t va, phys_addr_t pa,
  360. phys_addr_t sz, pgprot_t prot)
  361. {
  362. pte_t *ptep;
  363. phys_addr_t pte_phys;
  364. uintptr_t pmd_idx = pmd_index(va);
  365. if (sz == PMD_SIZE) {
  366. if (pmd_none(pmdp[pmd_idx]))
  367. pmdp[pmd_idx] = pfn_pmd(PFN_DOWN(pa), prot);
  368. return;
  369. }
  370. if (pmd_none(pmdp[pmd_idx])) {
  371. pte_phys = pt_ops.alloc_pte(va);
  372. pmdp[pmd_idx] = pfn_pmd(PFN_DOWN(pte_phys), PAGE_TABLE);
  373. ptep = pt_ops.get_pte_virt(pte_phys);
  374. memset(ptep, 0, PAGE_SIZE);
  375. } else {
  376. pte_phys = PFN_PHYS(_pmd_pfn(pmdp[pmd_idx]));
  377. ptep = pt_ops.get_pte_virt(pte_phys);
  378. }
  379. create_pte_mapping(ptep, va, pa, sz, prot);
  380. }
  381. static pud_t *__init get_pud_virt_early(phys_addr_t pa)
  382. {
  383. return (pud_t *)((uintptr_t)pa);
  384. }
  385. static pud_t *__init get_pud_virt_fixmap(phys_addr_t pa)
  386. {
  387. clear_fixmap(FIX_PUD);
  388. return (pud_t *)set_fixmap_offset(FIX_PUD, pa);
  389. }
  390. static pud_t *__init get_pud_virt_late(phys_addr_t pa)
  391. {
  392. return (pud_t *)__va(pa);
  393. }
  394. static phys_addr_t __init alloc_pud_early(uintptr_t va)
  395. {
  396. /* Only one PUD is available for early mapping */
  397. BUG_ON((va - kernel_map.virt_addr) >> PGDIR_SHIFT);
  398. return (uintptr_t)early_pud;
  399. }
  400. static phys_addr_t __init alloc_pud_fixmap(uintptr_t va)
  401. {
  402. return memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE);
  403. }
  404. static phys_addr_t alloc_pud_late(uintptr_t va)
  405. {
  406. unsigned long vaddr;
  407. vaddr = __get_free_page(GFP_KERNEL);
  408. BUG_ON(!vaddr);
  409. return __pa(vaddr);
  410. }
  411. static p4d_t *__init get_p4d_virt_early(phys_addr_t pa)
  412. {
  413. return (p4d_t *)((uintptr_t)pa);
  414. }
  415. static p4d_t *__init get_p4d_virt_fixmap(phys_addr_t pa)
  416. {
  417. clear_fixmap(FIX_P4D);
  418. return (p4d_t *)set_fixmap_offset(FIX_P4D, pa);
  419. }
  420. static p4d_t *__init get_p4d_virt_late(phys_addr_t pa)
  421. {
  422. return (p4d_t *)__va(pa);
  423. }
  424. static phys_addr_t __init alloc_p4d_early(uintptr_t va)
  425. {
  426. /* Only one P4D is available for early mapping */
  427. BUG_ON((va - kernel_map.virt_addr) >> PGDIR_SHIFT);
  428. return (uintptr_t)early_p4d;
  429. }
  430. static phys_addr_t __init alloc_p4d_fixmap(uintptr_t va)
  431. {
  432. return memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE);
  433. }
  434. static phys_addr_t alloc_p4d_late(uintptr_t va)
  435. {
  436. unsigned long vaddr;
  437. vaddr = __get_free_page(GFP_KERNEL);
  438. BUG_ON(!vaddr);
  439. return __pa(vaddr);
  440. }
  441. static void __init create_pud_mapping(pud_t *pudp,
  442. uintptr_t va, phys_addr_t pa,
  443. phys_addr_t sz, pgprot_t prot)
  444. {
  445. pmd_t *nextp;
  446. phys_addr_t next_phys;
  447. uintptr_t pud_index = pud_index(va);
  448. if (sz == PUD_SIZE) {
  449. if (pud_val(pudp[pud_index]) == 0)
  450. pudp[pud_index] = pfn_pud(PFN_DOWN(pa), prot);
  451. return;
  452. }
  453. if (pud_val(pudp[pud_index]) == 0) {
  454. next_phys = pt_ops.alloc_pmd(va);
  455. pudp[pud_index] = pfn_pud(PFN_DOWN(next_phys), PAGE_TABLE);
  456. nextp = pt_ops.get_pmd_virt(next_phys);
  457. memset(nextp, 0, PAGE_SIZE);
  458. } else {
  459. next_phys = PFN_PHYS(_pud_pfn(pudp[pud_index]));
  460. nextp = pt_ops.get_pmd_virt(next_phys);
  461. }
  462. create_pmd_mapping(nextp, va, pa, sz, prot);
  463. }
  464. static void __init create_p4d_mapping(p4d_t *p4dp,
  465. uintptr_t va, phys_addr_t pa,
  466. phys_addr_t sz, pgprot_t prot)
  467. {
  468. pud_t *nextp;
  469. phys_addr_t next_phys;
  470. uintptr_t p4d_index = p4d_index(va);
  471. if (sz == P4D_SIZE) {
  472. if (p4d_val(p4dp[p4d_index]) == 0)
  473. p4dp[p4d_index] = pfn_p4d(PFN_DOWN(pa), prot);
  474. return;
  475. }
  476. if (p4d_val(p4dp[p4d_index]) == 0) {
  477. next_phys = pt_ops.alloc_pud(va);
  478. p4dp[p4d_index] = pfn_p4d(PFN_DOWN(next_phys), PAGE_TABLE);
  479. nextp = pt_ops.get_pud_virt(next_phys);
  480. memset(nextp, 0, PAGE_SIZE);
  481. } else {
  482. next_phys = PFN_PHYS(_p4d_pfn(p4dp[p4d_index]));
  483. nextp = pt_ops.get_pud_virt(next_phys);
  484. }
  485. create_pud_mapping(nextp, va, pa, sz, prot);
  486. }
  487. #define pgd_next_t p4d_t
  488. #define alloc_pgd_next(__va) (pgtable_l5_enabled ? \
  489. pt_ops.alloc_p4d(__va) : (pgtable_l4_enabled ? \
  490. pt_ops.alloc_pud(__va) : pt_ops.alloc_pmd(__va)))
  491. #define get_pgd_next_virt(__pa) (pgtable_l5_enabled ? \
  492. pt_ops.get_p4d_virt(__pa) : (pgd_next_t *)(pgtable_l4_enabled ? \
  493. pt_ops.get_pud_virt(__pa) : (pud_t *)pt_ops.get_pmd_virt(__pa)))
  494. #define create_pgd_next_mapping(__nextp, __va, __pa, __sz, __prot) \
  495. (pgtable_l5_enabled ? \
  496. create_p4d_mapping(__nextp, __va, __pa, __sz, __prot) : \
  497. (pgtable_l4_enabled ? \
  498. create_pud_mapping((pud_t *)__nextp, __va, __pa, __sz, __prot) : \
  499. create_pmd_mapping((pmd_t *)__nextp, __va, __pa, __sz, __prot)))
  500. #define fixmap_pgd_next (pgtable_l5_enabled ? \
  501. (uintptr_t)fixmap_p4d : (pgtable_l4_enabled ? \
  502. (uintptr_t)fixmap_pud : (uintptr_t)fixmap_pmd))
  503. #define trampoline_pgd_next (pgtable_l5_enabled ? \
  504. (uintptr_t)trampoline_p4d : (pgtable_l4_enabled ? \
  505. (uintptr_t)trampoline_pud : (uintptr_t)trampoline_pmd))
  506. #else
  507. #define pgd_next_t pte_t
  508. #define alloc_pgd_next(__va) pt_ops.alloc_pte(__va)
  509. #define get_pgd_next_virt(__pa) pt_ops.get_pte_virt(__pa)
  510. #define create_pgd_next_mapping(__nextp, __va, __pa, __sz, __prot) \
  511. create_pte_mapping(__nextp, __va, __pa, __sz, __prot)
  512. #define fixmap_pgd_next ((uintptr_t)fixmap_pte)
  513. #define create_p4d_mapping(__pmdp, __va, __pa, __sz, __prot) do {} while(0)
  514. #define create_pud_mapping(__pmdp, __va, __pa, __sz, __prot) do {} while(0)
  515. #define create_pmd_mapping(__pmdp, __va, __pa, __sz, __prot) do {} while(0)
  516. #endif /* __PAGETABLE_PMD_FOLDED */
  517. void __init create_pgd_mapping(pgd_t *pgdp,
  518. uintptr_t va, phys_addr_t pa,
  519. phys_addr_t sz, pgprot_t prot)
  520. {
  521. pgd_next_t *nextp;
  522. phys_addr_t next_phys;
  523. uintptr_t pgd_idx = pgd_index(va);
  524. if (sz == PGDIR_SIZE) {
  525. if (pgd_val(pgdp[pgd_idx]) == 0)
  526. pgdp[pgd_idx] = pfn_pgd(PFN_DOWN(pa), prot);
  527. return;
  528. }
  529. if (pgd_val(pgdp[pgd_idx]) == 0) {
  530. next_phys = alloc_pgd_next(va);
  531. pgdp[pgd_idx] = pfn_pgd(PFN_DOWN(next_phys), PAGE_TABLE);
  532. nextp = get_pgd_next_virt(next_phys);
  533. memset(nextp, 0, PAGE_SIZE);
  534. } else {
  535. next_phys = PFN_PHYS(_pgd_pfn(pgdp[pgd_idx]));
  536. nextp = get_pgd_next_virt(next_phys);
  537. }
  538. create_pgd_next_mapping(nextp, va, pa, sz, prot);
  539. }
  540. static uintptr_t __init best_map_size(phys_addr_t base, phys_addr_t size)
  541. {
  542. /* Upgrade to PMD_SIZE mappings whenever possible */
  543. if ((base & (PMD_SIZE - 1)) || (size & (PMD_SIZE - 1)))
  544. return PAGE_SIZE;
  545. return PMD_SIZE;
  546. }
  547. #ifdef CONFIG_XIP_KERNEL
  548. #define phys_ram_base (*(phys_addr_t *)XIP_FIXUP(&phys_ram_base))
  549. extern char _xiprom[], _exiprom[], __data_loc;
  550. /* called from head.S with MMU off */
  551. asmlinkage void __init __copy_data(void)
  552. {
  553. void *from = (void *)(&__data_loc);
  554. void *to = (void *)CONFIG_PHYS_RAM_BASE;
  555. size_t sz = (size_t)((uintptr_t)(&_end) - (uintptr_t)(&_sdata));
  556. memcpy(to, from, sz);
  557. }
  558. #endif
  559. #ifdef CONFIG_STRICT_KERNEL_RWX
  560. static __init pgprot_t pgprot_from_va(uintptr_t va)
  561. {
  562. if (is_va_kernel_text(va))
  563. return PAGE_KERNEL_READ_EXEC;
  564. /*
  565. * In 64-bit kernel, the kernel mapping is outside the linear mapping so
  566. * we must protect its linear mapping alias from being executed and
  567. * written.
  568. * And rodata section is marked readonly in mark_rodata_ro.
  569. */
  570. if (IS_ENABLED(CONFIG_64BIT) && is_va_kernel_lm_alias_text(va))
  571. return PAGE_KERNEL_READ;
  572. return PAGE_KERNEL;
  573. }
  574. void mark_rodata_ro(void)
  575. {
  576. set_kernel_memory(__start_rodata, _data, set_memory_ro);
  577. if (IS_ENABLED(CONFIG_64BIT))
  578. set_kernel_memory(lm_alias(__start_rodata), lm_alias(_data),
  579. set_memory_ro);
  580. debug_checkwx();
  581. }
  582. #else
  583. static __init pgprot_t pgprot_from_va(uintptr_t va)
  584. {
  585. if (IS_ENABLED(CONFIG_64BIT) && !is_kernel_mapping(va))
  586. return PAGE_KERNEL;
  587. return PAGE_KERNEL_EXEC;
  588. }
  589. #endif /* CONFIG_STRICT_KERNEL_RWX */
  590. #if defined(CONFIG_64BIT) && !defined(CONFIG_XIP_KERNEL)
  591. static void __init disable_pgtable_l5(void)
  592. {
  593. pgtable_l5_enabled = false;
  594. kernel_map.page_offset = PAGE_OFFSET_L4;
  595. satp_mode = SATP_MODE_48;
  596. }
  597. static void __init disable_pgtable_l4(void)
  598. {
  599. pgtable_l4_enabled = false;
  600. kernel_map.page_offset = PAGE_OFFSET_L3;
  601. satp_mode = SATP_MODE_39;
  602. }
  603. /*
  604. * There is a simple way to determine if 4-level is supported by the
  605. * underlying hardware: establish 1:1 mapping in 4-level page table mode
  606. * then read SATP to see if the configuration was taken into account
  607. * meaning sv48 is supported.
  608. */
  609. static __init void set_satp_mode(void)
  610. {
  611. u64 identity_satp, hw_satp;
  612. uintptr_t set_satp_mode_pmd = ((unsigned long)set_satp_mode) & PMD_MASK;
  613. bool check_l4 = false;
  614. create_p4d_mapping(early_p4d,
  615. set_satp_mode_pmd, (uintptr_t)early_pud,
  616. P4D_SIZE, PAGE_TABLE);
  617. create_pud_mapping(early_pud,
  618. set_satp_mode_pmd, (uintptr_t)early_pmd,
  619. PUD_SIZE, PAGE_TABLE);
  620. /* Handle the case where set_satp_mode straddles 2 PMDs */
  621. create_pmd_mapping(early_pmd,
  622. set_satp_mode_pmd, set_satp_mode_pmd,
  623. PMD_SIZE, PAGE_KERNEL_EXEC);
  624. create_pmd_mapping(early_pmd,
  625. set_satp_mode_pmd + PMD_SIZE,
  626. set_satp_mode_pmd + PMD_SIZE,
  627. PMD_SIZE, PAGE_KERNEL_EXEC);
  628. retry:
  629. create_pgd_mapping(early_pg_dir,
  630. set_satp_mode_pmd,
  631. check_l4 ? (uintptr_t)early_pud : (uintptr_t)early_p4d,
  632. PGDIR_SIZE, PAGE_TABLE);
  633. identity_satp = PFN_DOWN((uintptr_t)&early_pg_dir) | satp_mode;
  634. local_flush_tlb_all();
  635. csr_write(CSR_SATP, identity_satp);
  636. hw_satp = csr_swap(CSR_SATP, 0ULL);
  637. local_flush_tlb_all();
  638. if (hw_satp != identity_satp) {
  639. if (!check_l4) {
  640. disable_pgtable_l5();
  641. check_l4 = true;
  642. memset(early_pg_dir, 0, PAGE_SIZE);
  643. goto retry;
  644. }
  645. disable_pgtable_l4();
  646. }
  647. memset(early_pg_dir, 0, PAGE_SIZE);
  648. memset(early_p4d, 0, PAGE_SIZE);
  649. memset(early_pud, 0, PAGE_SIZE);
  650. memset(early_pmd, 0, PAGE_SIZE);
  651. }
  652. #endif
  653. /*
  654. * setup_vm() is called from head.S with MMU-off.
  655. *
  656. * Following requirements should be honoured for setup_vm() to work
  657. * correctly:
  658. * 1) It should use PC-relative addressing for accessing kernel symbols.
  659. * To achieve this we always use GCC cmodel=medany.
  660. * 2) The compiler instrumentation for FTRACE will not work for setup_vm()
  661. * so disable compiler instrumentation when FTRACE is enabled.
  662. *
  663. * Currently, the above requirements are honoured by using custom CFLAGS
  664. * for init.o in mm/Makefile.
  665. */
  666. #ifndef __riscv_cmodel_medany
  667. #error "setup_vm() is called from head.S before relocate so it should not use absolute addressing."
  668. #endif
  669. #ifdef CONFIG_XIP_KERNEL
  670. static void __init create_kernel_page_table(pgd_t *pgdir,
  671. __always_unused bool early)
  672. {
  673. uintptr_t va, end_va;
  674. /* Map the flash resident part */
  675. end_va = kernel_map.virt_addr + kernel_map.xiprom_sz;
  676. for (va = kernel_map.virt_addr; va < end_va; va += PMD_SIZE)
  677. create_pgd_mapping(pgdir, va,
  678. kernel_map.xiprom + (va - kernel_map.virt_addr),
  679. PMD_SIZE, PAGE_KERNEL_EXEC);
  680. /* Map the data in RAM */
  681. end_va = kernel_map.virt_addr + XIP_OFFSET + kernel_map.size;
  682. for (va = kernel_map.virt_addr + XIP_OFFSET; va < end_va; va += PMD_SIZE)
  683. create_pgd_mapping(pgdir, va,
  684. kernel_map.phys_addr + (va - (kernel_map.virt_addr + XIP_OFFSET)),
  685. PMD_SIZE, PAGE_KERNEL);
  686. }
  687. #else
  688. static void __init create_kernel_page_table(pgd_t *pgdir, bool early)
  689. {
  690. uintptr_t va, end_va;
  691. end_va = kernel_map.virt_addr + kernel_map.size;
  692. for (va = kernel_map.virt_addr; va < end_va; va += PMD_SIZE)
  693. create_pgd_mapping(pgdir, va,
  694. kernel_map.phys_addr + (va - kernel_map.virt_addr),
  695. PMD_SIZE,
  696. early ?
  697. PAGE_KERNEL_EXEC : pgprot_from_va(va));
  698. }
  699. #endif
  700. /*
  701. * Setup a 4MB mapping that encompasses the device tree: for 64-bit kernel,
  702. * this means 2 PMD entries whereas for 32-bit kernel, this is only 1 PGDIR
  703. * entry.
  704. */
  705. static void __init create_fdt_early_page_table(uintptr_t fix_fdt_va,
  706. uintptr_t dtb_pa)
  707. {
  708. #ifndef CONFIG_BUILTIN_DTB
  709. uintptr_t pa = dtb_pa & ~(PMD_SIZE - 1);
  710. /* Make sure the fdt fixmap address is always aligned on PMD size */
  711. BUILD_BUG_ON(FIX_FDT % (PMD_SIZE / PAGE_SIZE));
  712. /* In 32-bit only, the fdt lies in its own PGD */
  713. if (!IS_ENABLED(CONFIG_64BIT)) {
  714. create_pgd_mapping(early_pg_dir, fix_fdt_va,
  715. pa, MAX_FDT_SIZE, PAGE_KERNEL);
  716. } else {
  717. create_pmd_mapping(fixmap_pmd, fix_fdt_va,
  718. pa, PMD_SIZE, PAGE_KERNEL);
  719. create_pmd_mapping(fixmap_pmd, fix_fdt_va + PMD_SIZE,
  720. pa + PMD_SIZE, PMD_SIZE, PAGE_KERNEL);
  721. }
  722. dtb_early_va = (void *)fix_fdt_va + (dtb_pa & (PMD_SIZE - 1));
  723. #else
  724. /*
  725. * For 64-bit kernel, __va can't be used since it would return a linear
  726. * mapping address whereas dtb_early_va will be used before
  727. * setup_vm_final installs the linear mapping. For 32-bit kernel, as the
  728. * kernel is mapped in the linear mapping, that makes no difference.
  729. */
  730. dtb_early_va = kernel_mapping_pa_to_va(XIP_FIXUP(dtb_pa));
  731. #endif
  732. dtb_early_pa = dtb_pa;
  733. }
  734. /*
  735. * MMU is not enabled, the page tables are allocated directly using
  736. * early_pmd/pud/p4d and the address returned is the physical one.
  737. */
  738. static void __init pt_ops_set_early(void)
  739. {
  740. pt_ops.alloc_pte = alloc_pte_early;
  741. pt_ops.get_pte_virt = get_pte_virt_early;
  742. #ifndef __PAGETABLE_PMD_FOLDED
  743. pt_ops.alloc_pmd = alloc_pmd_early;
  744. pt_ops.get_pmd_virt = get_pmd_virt_early;
  745. pt_ops.alloc_pud = alloc_pud_early;
  746. pt_ops.get_pud_virt = get_pud_virt_early;
  747. pt_ops.alloc_p4d = alloc_p4d_early;
  748. pt_ops.get_p4d_virt = get_p4d_virt_early;
  749. #endif
  750. }
  751. /*
  752. * MMU is enabled but page table setup is not complete yet.
  753. * fixmap page table alloc functions must be used as a means to temporarily
  754. * map the allocated physical pages since the linear mapping does not exist yet.
  755. *
  756. * Note that this is called with MMU disabled, hence kernel_mapping_pa_to_va,
  757. * but it will be used as described above.
  758. */
  759. static void __init pt_ops_set_fixmap(void)
  760. {
  761. pt_ops.alloc_pte = kernel_mapping_pa_to_va((uintptr_t)alloc_pte_fixmap);
  762. pt_ops.get_pte_virt = kernel_mapping_pa_to_va((uintptr_t)get_pte_virt_fixmap);
  763. #ifndef __PAGETABLE_PMD_FOLDED
  764. pt_ops.alloc_pmd = kernel_mapping_pa_to_va((uintptr_t)alloc_pmd_fixmap);
  765. pt_ops.get_pmd_virt = kernel_mapping_pa_to_va((uintptr_t)get_pmd_virt_fixmap);
  766. pt_ops.alloc_pud = kernel_mapping_pa_to_va((uintptr_t)alloc_pud_fixmap);
  767. pt_ops.get_pud_virt = kernel_mapping_pa_to_va((uintptr_t)get_pud_virt_fixmap);
  768. pt_ops.alloc_p4d = kernel_mapping_pa_to_va((uintptr_t)alloc_p4d_fixmap);
  769. pt_ops.get_p4d_virt = kernel_mapping_pa_to_va((uintptr_t)get_p4d_virt_fixmap);
  770. #endif
  771. }
  772. /*
  773. * MMU is enabled and page table setup is complete, so from now, we can use
  774. * generic page allocation functions to setup page table.
  775. */
  776. static void __init pt_ops_set_late(void)
  777. {
  778. pt_ops.alloc_pte = alloc_pte_late;
  779. pt_ops.get_pte_virt = get_pte_virt_late;
  780. #ifndef __PAGETABLE_PMD_FOLDED
  781. pt_ops.alloc_pmd = alloc_pmd_late;
  782. pt_ops.get_pmd_virt = get_pmd_virt_late;
  783. pt_ops.alloc_pud = alloc_pud_late;
  784. pt_ops.get_pud_virt = get_pud_virt_late;
  785. pt_ops.alloc_p4d = alloc_p4d_late;
  786. pt_ops.get_p4d_virt = get_p4d_virt_late;
  787. #endif
  788. }
  789. asmlinkage void __init setup_vm(uintptr_t dtb_pa)
  790. {
  791. pmd_t __maybe_unused fix_bmap_spmd, fix_bmap_epmd;
  792. kernel_map.virt_addr = KERNEL_LINK_ADDR;
  793. kernel_map.page_offset = _AC(CONFIG_PAGE_OFFSET, UL);
  794. #ifdef CONFIG_XIP_KERNEL
  795. kernel_map.xiprom = (uintptr_t)CONFIG_XIP_PHYS_ADDR;
  796. kernel_map.xiprom_sz = (uintptr_t)(&_exiprom) - (uintptr_t)(&_xiprom);
  797. phys_ram_base = CONFIG_PHYS_RAM_BASE;
  798. kernel_map.phys_addr = (uintptr_t)CONFIG_PHYS_RAM_BASE;
  799. kernel_map.size = (uintptr_t)(&_end) - (uintptr_t)(&_sdata);
  800. kernel_map.va_kernel_xip_pa_offset = kernel_map.virt_addr - kernel_map.xiprom;
  801. #else
  802. kernel_map.phys_addr = (uintptr_t)(&_start);
  803. kernel_map.size = (uintptr_t)(&_end) - kernel_map.phys_addr;
  804. #endif
  805. #if defined(CONFIG_64BIT) && !defined(CONFIG_XIP_KERNEL)
  806. set_satp_mode();
  807. #endif
  808. kernel_map.va_pa_offset = PAGE_OFFSET - kernel_map.phys_addr;
  809. kernel_map.va_kernel_pa_offset = kernel_map.virt_addr - kernel_map.phys_addr;
  810. riscv_pfn_base = PFN_DOWN(kernel_map.phys_addr);
  811. /*
  812. * The default maximal physical memory size is KERN_VIRT_SIZE for 32-bit
  813. * kernel, whereas for 64-bit kernel, the end of the virtual address
  814. * space is occupied by the modules/BPF/kernel mappings which reduces
  815. * the available size of the linear mapping.
  816. */
  817. memory_limit = KERN_VIRT_SIZE - (IS_ENABLED(CONFIG_64BIT) ? SZ_4G : 0);
  818. /* Sanity check alignment and size */
  819. BUG_ON((PAGE_OFFSET % PGDIR_SIZE) != 0);
  820. BUG_ON((kernel_map.phys_addr % PMD_SIZE) != 0);
  821. #ifdef CONFIG_64BIT
  822. /*
  823. * The last 4K bytes of the addressable memory can not be mapped because
  824. * of IS_ERR_VALUE macro.
  825. */
  826. BUG_ON((kernel_map.virt_addr + kernel_map.size) > ADDRESS_SPACE_END - SZ_4K);
  827. #endif
  828. apply_early_boot_alternatives();
  829. pt_ops_set_early();
  830. /* Setup early PGD for fixmap */
  831. create_pgd_mapping(early_pg_dir, FIXADDR_START,
  832. fixmap_pgd_next, PGDIR_SIZE, PAGE_TABLE);
  833. #ifndef __PAGETABLE_PMD_FOLDED
  834. /* Setup fixmap P4D and PUD */
  835. if (pgtable_l5_enabled)
  836. create_p4d_mapping(fixmap_p4d, FIXADDR_START,
  837. (uintptr_t)fixmap_pud, P4D_SIZE, PAGE_TABLE);
  838. /* Setup fixmap PUD and PMD */
  839. if (pgtable_l4_enabled)
  840. create_pud_mapping(fixmap_pud, FIXADDR_START,
  841. (uintptr_t)fixmap_pmd, PUD_SIZE, PAGE_TABLE);
  842. create_pmd_mapping(fixmap_pmd, FIXADDR_START,
  843. (uintptr_t)fixmap_pte, PMD_SIZE, PAGE_TABLE);
  844. /* Setup trampoline PGD and PMD */
  845. create_pgd_mapping(trampoline_pg_dir, kernel_map.virt_addr,
  846. trampoline_pgd_next, PGDIR_SIZE, PAGE_TABLE);
  847. if (pgtable_l5_enabled)
  848. create_p4d_mapping(trampoline_p4d, kernel_map.virt_addr,
  849. (uintptr_t)trampoline_pud, P4D_SIZE, PAGE_TABLE);
  850. if (pgtable_l4_enabled)
  851. create_pud_mapping(trampoline_pud, kernel_map.virt_addr,
  852. (uintptr_t)trampoline_pmd, PUD_SIZE, PAGE_TABLE);
  853. #ifdef CONFIG_XIP_KERNEL
  854. create_pmd_mapping(trampoline_pmd, kernel_map.virt_addr,
  855. kernel_map.xiprom, PMD_SIZE, PAGE_KERNEL_EXEC);
  856. #else
  857. create_pmd_mapping(trampoline_pmd, kernel_map.virt_addr,
  858. kernel_map.phys_addr, PMD_SIZE, PAGE_KERNEL_EXEC);
  859. #endif
  860. #else
  861. /* Setup trampoline PGD */
  862. create_pgd_mapping(trampoline_pg_dir, kernel_map.virt_addr,
  863. kernel_map.phys_addr, PGDIR_SIZE, PAGE_KERNEL_EXEC);
  864. #endif
  865. /*
  866. * Setup early PGD covering entire kernel which will allow
  867. * us to reach paging_init(). We map all memory banks later
  868. * in setup_vm_final() below.
  869. */
  870. create_kernel_page_table(early_pg_dir, true);
  871. /* Setup early mapping for FDT early scan */
  872. create_fdt_early_page_table(__fix_to_virt(FIX_FDT), dtb_pa);
  873. /*
  874. * Bootime fixmap only can handle PMD_SIZE mapping. Thus, boot-ioremap
  875. * range can not span multiple pmds.
  876. */
  877. BUG_ON((__fix_to_virt(FIX_BTMAP_BEGIN) >> PMD_SHIFT)
  878. != (__fix_to_virt(FIX_BTMAP_END) >> PMD_SHIFT));
  879. #ifndef __PAGETABLE_PMD_FOLDED
  880. /*
  881. * Early ioremap fixmap is already created as it lies within first 2MB
  882. * of fixmap region. We always map PMD_SIZE. Thus, both FIX_BTMAP_END
  883. * FIX_BTMAP_BEGIN should lie in the same pmd. Verify that and warn
  884. * the user if not.
  885. */
  886. fix_bmap_spmd = fixmap_pmd[pmd_index(__fix_to_virt(FIX_BTMAP_BEGIN))];
  887. fix_bmap_epmd = fixmap_pmd[pmd_index(__fix_to_virt(FIX_BTMAP_END))];
  888. if (pmd_val(fix_bmap_spmd) != pmd_val(fix_bmap_epmd)) {
  889. WARN_ON(1);
  890. pr_warn("fixmap btmap start [%08lx] != end [%08lx]\n",
  891. pmd_val(fix_bmap_spmd), pmd_val(fix_bmap_epmd));
  892. pr_warn("fix_to_virt(FIX_BTMAP_BEGIN): %08lx\n",
  893. fix_to_virt(FIX_BTMAP_BEGIN));
  894. pr_warn("fix_to_virt(FIX_BTMAP_END): %08lx\n",
  895. fix_to_virt(FIX_BTMAP_END));
  896. pr_warn("FIX_BTMAP_END: %d\n", FIX_BTMAP_END);
  897. pr_warn("FIX_BTMAP_BEGIN: %d\n", FIX_BTMAP_BEGIN);
  898. }
  899. #endif
  900. pt_ops_set_fixmap();
  901. }
  902. static void __init setup_vm_final(void)
  903. {
  904. uintptr_t va, map_size;
  905. phys_addr_t pa, start, end;
  906. u64 i;
  907. /* Setup swapper PGD for fixmap */
  908. #if !defined(CONFIG_64BIT)
  909. /*
  910. * In 32-bit, the device tree lies in a pgd entry, so it must be copied
  911. * directly in swapper_pg_dir in addition to the pgd entry that points
  912. * to fixmap_pte.
  913. */
  914. unsigned long idx = pgd_index(__fix_to_virt(FIX_FDT));
  915. set_pgd(&swapper_pg_dir[idx], early_pg_dir[idx]);
  916. #endif
  917. create_pgd_mapping(swapper_pg_dir, FIXADDR_START,
  918. __pa_symbol(fixmap_pgd_next),
  919. PGDIR_SIZE, PAGE_TABLE);
  920. /* Map all memory banks in the linear mapping */
  921. for_each_mem_range(i, &start, &end) {
  922. if (start >= end)
  923. break;
  924. if (start <= __pa(PAGE_OFFSET) &&
  925. __pa(PAGE_OFFSET) < end)
  926. start = __pa(PAGE_OFFSET);
  927. if (end >= __pa(PAGE_OFFSET) + memory_limit)
  928. end = __pa(PAGE_OFFSET) + memory_limit;
  929. map_size = best_map_size(start, end - start);
  930. for (pa = start; pa < end; pa += map_size) {
  931. va = (uintptr_t)__va(pa);
  932. create_pgd_mapping(swapper_pg_dir, va, pa, map_size,
  933. pgprot_from_va(va));
  934. }
  935. }
  936. /* Map the kernel */
  937. if (IS_ENABLED(CONFIG_64BIT))
  938. create_kernel_page_table(swapper_pg_dir, false);
  939. #ifdef CONFIG_KASAN
  940. kasan_swapper_init();
  941. #endif
  942. /* Clear fixmap PTE and PMD mappings */
  943. clear_fixmap(FIX_PTE);
  944. clear_fixmap(FIX_PMD);
  945. clear_fixmap(FIX_PUD);
  946. clear_fixmap(FIX_P4D);
  947. /* Move to swapper page table */
  948. csr_write(CSR_SATP, PFN_DOWN(__pa_symbol(swapper_pg_dir)) | satp_mode);
  949. local_flush_tlb_all();
  950. pt_ops_set_late();
  951. }
  952. #else
  953. asmlinkage void __init setup_vm(uintptr_t dtb_pa)
  954. {
  955. dtb_early_va = (void *)dtb_pa;
  956. dtb_early_pa = dtb_pa;
  957. }
  958. static inline void setup_vm_final(void)
  959. {
  960. }
  961. #endif /* CONFIG_MMU */
  962. /*
  963. * reserve_crashkernel() - reserves memory for crash kernel
  964. *
  965. * This function reserves memory area given in "crashkernel=" kernel command
  966. * line parameter. The memory reserved is used by dump capture kernel when
  967. * primary kernel is crashing.
  968. */
  969. static void __init reserve_crashkernel(void)
  970. {
  971. unsigned long long crash_base = 0;
  972. unsigned long long crash_size = 0;
  973. unsigned long search_start = memblock_start_of_DRAM();
  974. unsigned long search_end = memblock_end_of_DRAM();
  975. int ret = 0;
  976. if (!IS_ENABLED(CONFIG_KEXEC_CORE))
  977. return;
  978. /*
  979. * Don't reserve a region for a crash kernel on a crash kernel
  980. * since it doesn't make much sense and we have limited memory
  981. * resources.
  982. */
  983. if (is_kdump_kernel()) {
  984. pr_info("crashkernel: ignoring reservation request\n");
  985. return;
  986. }
  987. ret = parse_crashkernel(boot_command_line, memblock_phys_mem_size(),
  988. &crash_size, &crash_base);
  989. if (ret || !crash_size)
  990. return;
  991. crash_size = PAGE_ALIGN(crash_size);
  992. if (crash_base) {
  993. search_start = crash_base;
  994. search_end = crash_base + crash_size;
  995. }
  996. /*
  997. * Current riscv boot protocol requires 2MB alignment for
  998. * RV64 and 4MB alignment for RV32 (hugepage size)
  999. *
  1000. * Try to alloc from 32bit addressible physical memory so that
  1001. * swiotlb can work on the crash kernel.
  1002. */
  1003. crash_base = memblock_phys_alloc_range(crash_size, PMD_SIZE,
  1004. search_start,
  1005. min(search_end, (unsigned long)(SZ_4G - 1)));
  1006. if (crash_base == 0) {
  1007. /* Try again without restricting region to 32bit addressible memory */
  1008. crash_base = memblock_phys_alloc_range(crash_size, PMD_SIZE,
  1009. search_start, search_end);
  1010. if (crash_base == 0) {
  1011. pr_warn("crashkernel: couldn't allocate %lldKB\n",
  1012. crash_size >> 10);
  1013. return;
  1014. }
  1015. }
  1016. pr_info("crashkernel: reserved 0x%016llx - 0x%016llx (%lld MB)\n",
  1017. crash_base, crash_base + crash_size, crash_size >> 20);
  1018. crashk_res.start = crash_base;
  1019. crashk_res.end = crash_base + crash_size - 1;
  1020. }
  1021. void __init paging_init(void)
  1022. {
  1023. setup_bootmem();
  1024. setup_vm_final();
  1025. /* Depend on that Linear Mapping is ready */
  1026. memblock_allow_resize();
  1027. }
  1028. void __init misc_mem_init(void)
  1029. {
  1030. early_memtest(min_low_pfn << PAGE_SHIFT, max_low_pfn << PAGE_SHIFT);
  1031. arch_numa_init();
  1032. sparse_init();
  1033. zone_sizes_init();
  1034. reserve_crashkernel();
  1035. memblock_dump_all();
  1036. }
  1037. #ifdef CONFIG_SPARSEMEM_VMEMMAP
  1038. int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
  1039. struct vmem_altmap *altmap)
  1040. {
  1041. return vmemmap_populate_basepages(start, end, node, NULL);
  1042. }
  1043. #endif