| .. | .. |
|---|
| 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 |
|---|