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

bus: uniphier-system-bus: Remove open coded "ranges" parsing

"ranges" is a standard property and we have common helper functions for
parsing it, so let's use them.

Tested-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
Link: https://lore.kernel.org/r/20230206194503.1162108-1-robh@kernel.org
Signed-off-by: Rob Herring <robh@kernel.org>

+11 -43
+11 -43
drivers/bus/uniphier-system-bus.c
··· 176 176 { 177 177 struct device *dev = &pdev->dev; 178 178 struct uniphier_system_bus_priv *priv; 179 - const __be32 *ranges; 180 - u32 cells, addr, size; 181 - u64 paddr; 182 - int pna, bank, rlen, rone, ret; 179 + struct of_range_parser parser; 180 + struct of_range range; 181 + int ret; 183 182 184 183 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); 185 184 if (!priv) ··· 190 191 191 192 priv->dev = dev; 192 193 193 - pna = of_n_addr_cells(dev->of_node); 194 - 195 - ret = of_property_read_u32(dev->of_node, "#address-cells", &cells); 196 - if (ret) { 197 - dev_err(dev, "failed to get #address-cells\n"); 194 + ret = of_range_parser_init(&parser, dev->of_node); 195 + if (ret) 198 196 return ret; 199 - } 200 - if (cells != 2) { 201 - dev_err(dev, "#address-cells must be 2\n"); 202 - return -EINVAL; 203 - } 204 197 205 - ret = of_property_read_u32(dev->of_node, "#size-cells", &cells); 206 - if (ret) { 207 - dev_err(dev, "failed to get #size-cells\n"); 208 - return ret; 209 - } 210 - if (cells != 1) { 211 - dev_err(dev, "#size-cells must be 1\n"); 212 - return -EINVAL; 213 - } 214 - 215 - ranges = of_get_property(dev->of_node, "ranges", &rlen); 216 - if (!ranges) { 217 - dev_err(dev, "failed to get ranges property\n"); 218 - return -ENOENT; 219 - } 220 - 221 - rlen /= sizeof(*ranges); 222 - rone = pna + 2; 223 - 224 - for (; rlen >= rone; rlen -= rone) { 225 - bank = be32_to_cpup(ranges++); 226 - addr = be32_to_cpup(ranges++); 227 - paddr = of_translate_address(dev->of_node, ranges); 228 - if (paddr == OF_BAD_ADDR) 198 + for_each_of_range(&parser, &range) { 199 + if (range.cpu_addr == OF_BAD_ADDR) 229 200 return -EINVAL; 230 - ranges += pna; 231 - size = be32_to_cpup(ranges++); 232 - 233 - ret = uniphier_system_bus_add_bank(priv, bank, addr, 234 - paddr, size); 201 + ret = uniphier_system_bus_add_bank(priv, 202 + upper_32_bits(range.bus_addr), 203 + lower_32_bits(range.bus_addr), 204 + range.cpu_addr, range.size); 235 205 if (ret) 236 206 return ret; 237 207 }