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

of: Simplify of_dma_set_restricted_buffer() to use of_for_each_phandle()

Simplify of_dma_set_restricted_buffer() by using of_property_present()
and of_for_each_phandle() iterator.

Acked-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Link: https://lore.kernel.org/r/20250423-dt-memory-region-v2-v2-2-2fbd6ebd3c88@kernel.org
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>

+11 -20
+11 -20
drivers/of/device.c
··· 35 35 static void 36 36 of_dma_set_restricted_buffer(struct device *dev, struct device_node *np) 37 37 { 38 - struct device_node *node, *of_node = dev->of_node; 39 - int count, i; 38 + struct device_node *of_node = dev->of_node; 39 + struct of_phandle_iterator it; 40 + int rc, i = 0; 40 41 41 42 if (!IS_ENABLED(CONFIG_DMA_RESTRICTED_POOL)) 42 43 return; 43 44 44 - count = of_property_count_elems_of_size(of_node, "memory-region", 45 - sizeof(u32)); 46 45 /* 47 46 * If dev->of_node doesn't exist or doesn't contain memory-region, try 48 47 * the OF node having DMA configuration. 49 48 */ 50 - if (count <= 0) { 49 + if (!of_property_present(of_node, "memory-region")) 51 50 of_node = np; 52 - count = of_property_count_elems_of_size( 53 - of_node, "memory-region", sizeof(u32)); 54 - } 55 51 56 - for (i = 0; i < count; i++) { 57 - node = of_parse_phandle(of_node, "memory-region", i); 52 + of_for_each_phandle(&it, rc, of_node, "memory-region", NULL, 0) { 58 53 /* 59 54 * There might be multiple memory regions, but only one 60 55 * restricted-dma-pool region is allowed. 61 56 */ 62 - if (of_device_is_compatible(node, "restricted-dma-pool") && 63 - of_device_is_available(node)) { 64 - of_node_put(node); 57 + if (of_device_is_compatible(it.node, "restricted-dma-pool") && 58 + of_device_is_available(it.node)) { 59 + if (of_reserved_mem_device_init_by_idx(dev, of_node, i)) 60 + dev_warn(dev, "failed to initialise \"restricted-dma-pool\" memory node\n"); 61 + of_node_put(it.node); 65 62 break; 66 63 } 67 - of_node_put(node); 64 + i++; 68 65 } 69 66 70 - /* 71 - * Attempt to initialize a restricted-dma-pool region if one was found. 72 - * Note that count can hold a negative error code. 73 - */ 74 - if (i < count && of_reserved_mem_device_init_by_idx(dev, of_node, i)) 75 - dev_warn(dev, "failed to initialise \"restricted-dma-pool\" memory node\n"); 76 67 } 77 68 78 69 /**