forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/arch/xtensa/mm/init.c
....@@ -18,7 +18,7 @@
1818
1919 #include <linux/kernel.h>
2020 #include <linux/errno.h>
21
-#include <linux/bootmem.h>
21
+#include <linux/memblock.h>
2222 #include <linux/gfp.h>
2323 #include <linux/highmem.h>
2424 #include <linux/swap.h>
....@@ -26,7 +26,7 @@
2626 #include <linux/nodemask.h>
2727 #include <linux/mm.h>
2828 #include <linux/of_fdt.h>
29
-#include <linux/dma-contiguous.h>
29
+#include <linux/dma-map-ops.h>
3030
3131 #include <asm/bootparam.h>
3232 #include <asm/page.h>
....@@ -45,10 +45,7 @@
4545 * If PHYS_OFFSET is zero reserve page at address 0:
4646 * successfull allocations should never return NULL.
4747 */
48
- if (PHYS_OFFSET)
49
- memblock_reserve(0, PHYS_OFFSET);
50
- else
51
- memblock_reserve(0, 1);
48
+ memblock_reserve(0, PHYS_OFFSET ? PHYS_OFFSET : 1);
5249
5350 early_init_fdt_scan_reserved_mem();
5451
....@@ -60,6 +57,9 @@
6057 max_pfn = PFN_DOWN(memblock_end_of_DRAM());
6158 max_low_pfn = min(max_pfn, MAX_LOW_PFN);
6259
60
+ early_memtest((phys_addr_t)min_low_pfn << PAGE_SHIFT,
61
+ (phys_addr_t)max_low_pfn << PAGE_SHIFT);
62
+
6363 memblock_set_current_limit(PFN_PHYS(max_low_pfn));
6464 dma_contiguous_reserve(PFN_PHYS(max_low_pfn));
6565
....@@ -70,76 +70,41 @@
7070 void __init zones_init(void)
7171 {
7272 /* All pages are DMA-able, so we put them all in the DMA zone. */
73
- unsigned long zones_size[MAX_NR_ZONES] = {
74
- [ZONE_DMA] = max_low_pfn - ARCH_PFN_OFFSET,
73
+ unsigned long max_zone_pfn[MAX_NR_ZONES] = {
74
+ [ZONE_NORMAL] = max_low_pfn,
7575 #ifdef CONFIG_HIGHMEM
76
- [ZONE_HIGHMEM] = max_pfn - max_low_pfn,
76
+ [ZONE_HIGHMEM] = max_pfn,
7777 #endif
7878 };
79
- free_area_init_node(0, zones_size, ARCH_PFN_OFFSET, NULL);
80
-}
81
-
82
-#ifdef CONFIG_HIGHMEM
83
-static void __init free_area_high(unsigned long pfn, unsigned long end)
84
-{
85
- for (; pfn < end; pfn++)
86
- free_highmem_page(pfn_to_page(pfn));
79
+ free_area_init(max_zone_pfn);
8780 }
8881
8982 static void __init free_highpages(void)
9083 {
84
+#ifdef CONFIG_HIGHMEM
9185 unsigned long max_low = max_low_pfn;
92
- struct memblock_region *mem, *res;
86
+ phys_addr_t range_start, range_end;
87
+ u64 i;
9388
94
- reset_all_zones_managed_pages();
9589 /* set highmem page free */
96
- for_each_memblock(memory, mem) {
97
- unsigned long start = memblock_region_memory_base_pfn(mem);
98
- unsigned long end = memblock_region_memory_end_pfn(mem);
90
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
91
+ &range_start, &range_end, NULL) {
92
+ unsigned long start = PFN_UP(range_start);
93
+ unsigned long end = PFN_DOWN(range_end);
9994
10095 /* Ignore complete lowmem entries */
10196 if (end <= max_low)
102
- continue;
103
-
104
- if (memblock_is_nomap(mem))
10597 continue;
10698
10799 /* Truncate partial highmem entries */
108100 if (start < max_low)
109101 start = max_low;
110102
111
- /* Find and exclude any reserved regions */
112
- for_each_memblock(reserved, res) {
113
- unsigned long res_start, res_end;
114
-
115
- res_start = memblock_region_reserved_base_pfn(res);
116
- res_end = memblock_region_reserved_end_pfn(res);
117
-
118
- if (res_end < start)
119
- continue;
120
- if (res_start < start)
121
- res_start = start;
122
- if (res_start > end)
123
- res_start = end;
124
- if (res_end > end)
125
- res_end = end;
126
- if (res_start != start)
127
- free_area_high(start, res_start);
128
- start = res_end;
129
- if (start == end)
130
- break;
131
- }
132
-
133
- /* And now free anything which remains */
134
- if (start < end)
135
- free_area_high(start, end);
103
+ for (; start < end; start++)
104
+ free_highmem_page(pfn_to_page(start));
136105 }
137
-}
138
-#else
139
-static void __init free_highpages(void)
140
-{
141
-}
142106 #endif
107
+}
143108
144109 /*
145110 * Initialize memory pages.
....@@ -152,7 +117,7 @@
152117 max_mapnr = max_pfn - ARCH_PFN_OFFSET;
153118 high_memory = (void *)__va(max_low_pfn << PAGE_SHIFT);
154119
155
- free_all_bootmem();
120
+ memblock_free_all();
156121
157122 mem_init_print_info(NULL);
158123 pr_info("virtual kernel memory layout:\n"
....@@ -193,29 +158,14 @@
193158 ((max_low_pfn - min_low_pfn) * PAGE_SIZE) >> 20,
194159 (unsigned long)_text, (unsigned long)_etext,
195160 (unsigned long)(_etext - _text) >> 10,
196
- (unsigned long)__start_rodata, (unsigned long)_sdata,
197
- (unsigned long)(_sdata - __start_rodata) >> 10,
161
+ (unsigned long)__start_rodata, (unsigned long)__end_rodata,
162
+ (unsigned long)(__end_rodata - __start_rodata) >> 10,
198163 (unsigned long)_sdata, (unsigned long)_edata,
199164 (unsigned long)(_edata - _sdata) >> 10,
200165 (unsigned long)__init_begin, (unsigned long)__init_end,
201166 (unsigned long)(__init_end - __init_begin) >> 10,
202167 (unsigned long)__bss_start, (unsigned long)__bss_stop,
203168 (unsigned long)(__bss_stop - __bss_start) >> 10);
204
-}
205
-
206
-#ifdef CONFIG_BLK_DEV_INITRD
207
-extern int initrd_is_mapped;
208
-
209
-void free_initrd_mem(unsigned long start, unsigned long end)
210
-{
211
- if (initrd_is_mapped)
212
- free_reserved_area((void *)start, (void *)end, -1, "initrd");
213
-}
214
-#endif
215
-
216
-void free_initmem(void)
217
-{
218
- free_initmem_default(-1);
219169 }
220170
221171 static void __init parse_memmap_one(char *p)