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 fdt_scan_reserved_mem_reg_nodes()

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

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

authored by

Yuntao Wang and committed by
Rob Herring (Arm)
85a8a30c 8c0f6068

+7 -18
+7 -18
drivers/of/of_reserved_mem.c
··· 225 225 */ 226 226 void __init fdt_scan_reserved_mem_reg_nodes(void) 227 227 { 228 - int t_len = (dt_root_addr_cells + dt_root_size_cells) * sizeof(__be32); 229 228 const void *fdt = initial_boot_params; 230 229 phys_addr_t base, size; 231 - const __be32 *prop; 232 230 int node, child; 233 - int len; 234 231 235 232 if (!fdt) 236 233 return; ··· 248 251 249 252 fdt_for_each_subnode(child, fdt, node) { 250 253 const char *uname; 254 + u64 b, s; 251 255 252 - prop = of_get_flat_dt_prop(child, "reg", &len); 253 - if (!prop) 254 - continue; 255 256 if (!of_fdt_device_is_available(fdt, child)) 256 257 continue; 257 258 258 - uname = fdt_get_name(fdt, child, NULL); 259 - if (len && len % t_len != 0) { 260 - pr_err("Reserved memory: invalid reg property in '%s', skipping node.\n", 261 - uname); 259 + if (!of_flat_dt_get_addr_size(child, "reg", &b, &s)) 262 260 continue; 263 - } 264 261 265 - if (len > t_len) 266 - pr_warn("%s() ignores %d regions in node '%s'\n", 267 - __func__, len / t_len - 1, uname); 262 + base = b; 263 + size = s; 268 264 269 - base = dt_mem_next_cell(dt_root_addr_cells, &prop); 270 - size = dt_mem_next_cell(dt_root_size_cells, &prop); 271 - 272 - if (size) 265 + if (size) { 266 + uname = fdt_get_name(fdt, child, NULL); 273 267 fdt_reserved_mem_save_node(child, uname, base, size); 268 + } 274 269 } 275 270 276 271 /* check for overlapping reserved regions */