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

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

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

authored by

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

+7 -14
+7 -14
drivers/of/of_reserved_mem.c
··· 385 385 */ 386 386 static int __init __reserved_mem_alloc_size(unsigned long node, const char *uname) 387 387 { 388 - int t_len = (dt_root_addr_cells + dt_root_size_cells) * sizeof(__be32); 389 388 phys_addr_t start = 0, end = 0; 390 389 phys_addr_t base = 0, align = 0, size; 391 - int len; 390 + int i, len; 392 391 const __be32 *prop; 393 392 bool nomap; 394 393 int ret; ··· 421 422 && !nomap) 422 423 align = max_t(phys_addr_t, align, CMA_MIN_ALIGNMENT_BYTES); 423 424 424 - prop = of_get_flat_dt_prop(node, "alloc-ranges", &len); 425 + prop = of_flat_dt_get_addr_size_prop(node, "alloc-ranges", &len); 425 426 if (prop) { 427 + for (i = 0; i < len; i++) { 428 + u64 b, s; 426 429 427 - if (len % t_len != 0) { 428 - pr_err("invalid alloc-ranges property in '%s', skipping node.\n", 429 - uname); 430 - return -EINVAL; 431 - } 430 + of_flat_dt_read_addr_size(prop, i, &b, &s); 432 431 433 - while (len > 0) { 434 - start = dt_mem_next_cell(dt_root_addr_cells, &prop); 435 - end = start + dt_mem_next_cell(dt_root_size_cells, 436 - &prop); 432 + start = b; 433 + end = b + s; 437 434 438 435 base = 0; 439 436 ret = __reserved_mem_alloc_in_range(size, align, ··· 440 445 (unsigned long)(size / SZ_1M)); 441 446 break; 442 447 } 443 - len -= t_len; 444 448 } 445 - 446 449 } else { 447 450 ret = early_init_dt_alloc_reserved_memory_arch(size, align, 448 451 0, 0, nomap, &base);