Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

of/reserved_mem: Simplify the logic of __reserved_mem_reserve_reg()

Use the existing helper functions to simplify the logic of
__reserved_mem_reserve_reg()

Signed-off-by: Yuntao Wang <yuntao.wang@linux.dev>
Link: https://patch.msgid.link/20251115134753.179931-7-yuntao.wang@linux.dev
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>

authored by

Yuntao Wang and committed by
Rob Herring (Arm)
8c0f6068 46a8b019

+9 -14
+9 -14
drivers/of/of_reserved_mem.c
··· 154 154 static int __init __reserved_mem_reserve_reg(unsigned long node, 155 155 const char *uname) 156 156 { 157 - int t_len = (dt_root_addr_cells + dt_root_size_cells) * sizeof(__be32); 158 157 phys_addr_t base, size; 159 - int len; 158 + int i, len; 160 159 const __be32 *prop; 161 160 bool nomap; 162 161 163 - prop = of_get_flat_dt_prop(node, "reg", &len); 162 + prop = of_flat_dt_get_addr_size_prop(node, "reg", &len); 164 163 if (!prop) 165 164 return -ENOENT; 166 165 167 - if (len && len % t_len != 0) { 168 - pr_err("Reserved memory: invalid reg property in '%s', skipping node.\n", 169 - uname); 170 - return -EINVAL; 171 - } 172 - 173 166 nomap = of_get_flat_dt_prop(node, "no-map", NULL) != NULL; 174 167 175 - while (len >= t_len) { 176 - base = dt_mem_next_cell(dt_root_addr_cells, &prop); 177 - size = dt_mem_next_cell(dt_root_size_cells, &prop); 168 + for (i = 0; i < len; i++) { 169 + u64 b, s; 170 + 171 + of_flat_dt_read_addr_size(prop, i, &b, &s); 172 + 173 + base = b; 174 + size = s; 178 175 179 176 if (size && early_init_dt_reserve_memory(base, size, nomap) == 0) { 180 177 /* Architecture specific contiguous memory fixup. */ ··· 184 187 pr_err("Reserved memory: failed to reserve memory for node '%s': base %pa, size %lu MiB\n", 185 188 uname, &base, (unsigned long)(size / SZ_1M)); 186 189 } 187 - 188 - len -= t_len; 189 190 } 190 191 return 0; 191 192 }