.. | .. |
---|
78 | 78 | } |
---|
79 | 79 | #endif |
---|
80 | 80 | |
---|
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) |
---|
91 | 82 | { |
---|
92 | | - uint64_t addr, size; |
---|
93 | | - int i, total; |
---|
94 | 83 | int rsv_offset, offset; |
---|
95 | 84 | fdt_size_t rsv_size; |
---|
96 | 85 | fdt_addr_t rsv_addr; |
---|
97 | | - /* we needn't repeat do reserve, do_bootm_linux would call this again */ |
---|
98 | | - static int rsv_done; |
---|
99 | 86 | const void *prop; |
---|
| 87 | + int i = 0; |
---|
100 | 88 | |
---|
101 | | - if (fdt_check_header(fdt_blob) != 0 || rsv_done) |
---|
| 89 | + if (fdt_check_header(fdt_blob) != 0) |
---|
102 | 90 | 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 | | - } |
---|
114 | 91 | |
---|
115 | 92 | rsv_offset = fdt_subnode_offset(fdt_blob, 0, "reserved-memory"); |
---|
116 | 93 | if (rsv_offset == -FDT_ERR_NOTFOUND) |
---|
.. | .. |
---|
128 | 105 | &rsv_size, false); |
---|
129 | 106 | if (rsv_addr == FDT_ADDR_T_NONE || !rsv_size) |
---|
130 | 107 | 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 | + } |
---|
135 | 121 | } |
---|
136 | 122 | } |
---|
137 | 123 | |
---|
| 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 | + |
---|
138 | 158 | #ifdef CONFIG_SYSMEM |
---|
139 | 159 | /** |
---|
140 | 160 | * boot_fdt_add_mem_rsv_regions - Mark the memreserve sections as unusable |
---|