hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
u-boot/common/image-fdt.c
....@@ -78,39 +78,16 @@
7878 }
7979 #endif
8080
81
-/**
82
- * boot_fdt_add_mem_rsv_regions - Mark the memreserve sections as unusable
83
- * @lmb: pointer to lmb handle, will be used for memory mgmt
84
- * @fdt_blob: pointer to fdt blob base address
85
- *
86
- * Adds the memreserve regions in the dtb to the lmb block. Adding the
87
- * memreserve regions prevents u-boot from using them to store the initrd
88
- * or the fdt blob.
89
- */
90
-void boot_fdt_add_mem_rsv_regions(struct lmb *lmb, void *fdt_blob)
81
+void boot_mem_rsv_regions(struct lmb *lmb, void *fdt_blob)
9182 {
92
- uint64_t addr, size;
93
- int i, total;
9483 int rsv_offset, offset;
9584 fdt_size_t rsv_size;
9685 fdt_addr_t rsv_addr;
97
- /* we needn't repeat do reserve, do_bootm_linux would call this again */
98
- static int rsv_done;
9986 const void *prop;
87
+ int i = 0;
10088
101
- if (fdt_check_header(fdt_blob) != 0 || rsv_done)
89
+ if (fdt_check_header(fdt_blob) != 0)
10290 return;
103
-
104
- rsv_done = 1;
105
-
106
- total = fdt_num_mem_rsv(fdt_blob);
107
- for (i = 0; i < total; i++) {
108
- if (fdt_get_mem_rsv(fdt_blob, i, &addr, &size) != 0)
109
- continue;
110
- printf(" reserving fdt memory region: addr=%llx size=%llx\n",
111
- (unsigned long long)addr, (unsigned long long)size);
112
- lmb_reserve(lmb, addr, size);
113
- }
11491
11592 rsv_offset = fdt_subnode_offset(fdt_blob, 0, "reserved-memory");
11693 if (rsv_offset == -FDT_ERR_NOTFOUND)
....@@ -128,13 +105,56 @@
128105 &rsv_size, false);
129106 if (rsv_addr == FDT_ADDR_T_NONE || !rsv_size)
130107 continue;
131
- printf(" 'reserved-memory' %s: addr=%llx size=%llx\n",
132
- fdt_get_name(fdt_blob, offset, NULL),
133
- (unsigned long long)rsv_addr, (unsigned long long)rsv_size);
134
- lmb_reserve(lmb, rsv_addr, rsv_size);
108
+
109
+ i++;
110
+ /* be quiet while reserve */
111
+ if (lmb) {
112
+ lmb_reserve(lmb, rsv_addr, rsv_size);
113
+ } else {
114
+ if (i == 1)
115
+ printf("## reserved-memory:\n");
116
+
117
+ printf(" %s: addr=%llx size=%llx\n",
118
+ fdt_get_name(fdt_blob, offset, NULL),
119
+ (unsigned long long)rsv_addr, (unsigned long long)rsv_size);
120
+ }
135121 }
136122 }
137123
124
+/**
125
+ * boot_fdt_add_mem_rsv_regions - Mark the memreserve sections as unusable
126
+ * @lmb: pointer to lmb handle, will be used for memory mgmt
127
+ * @fdt_blob: pointer to fdt blob base address
128
+ *
129
+ * Adds the memreserve regions in the dtb to the lmb block. Adding the
130
+ * memreserve regions prevents u-boot from using them to store the initrd
131
+ * or the fdt blob.
132
+ */
133
+void boot_fdt_add_mem_rsv_regions(struct lmb *lmb, void *fdt_blob)
134
+{
135
+ uint64_t addr, size;
136
+ int i, total;
137
+ /* we needn't repeat do reserve, do_bootm_linux would call this again */
138
+ static int rsv_done;
139
+
140
+ if (fdt_check_header(fdt_blob) != 0 || rsv_done)
141
+ return;
142
+
143
+ rsv_done = 1;
144
+
145
+ total = fdt_num_mem_rsv(fdt_blob);
146
+ for (i = 0; i < total; i++) {
147
+ if (fdt_get_mem_rsv(fdt_blob, i, &addr, &size) != 0)
148
+ continue;
149
+ printf(" reserving fdt memory region: addr=%llx size=%llx\n",
150
+ (unsigned long long)addr, (unsigned long long)size);
151
+ lmb_reserve(lmb, addr, size);
152
+ }
153
+
154
+ /* lmb_reserve() for "reserved-memory" */
155
+ boot_mem_rsv_regions(lmb, fdt_blob);
156
+}
157
+
138158 #ifdef CONFIG_SYSMEM
139159 /**
140160 * boot_fdt_add_mem_rsv_regions - Mark the memreserve sections as unusable