bus: uniphier-system-bus: Remove open coded "ranges" parsing
authorRob Herring <robh@kernel.org>
Mon, 6 Feb 2023 19:45:04 +0000 (13:45 -0600)
committerRob Herring <robh@kernel.org>
Thu, 30 Mar 2023 18:37:21 +0000 (13:37 -0500)
"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>
drivers/bus/uniphier-system-bus.c

index f70dedace20b4ec4c06535453d419f7d00b9e1c2..cb5c89ce7b86366bde3c8c232df02c62f580eee5 100644 (file)
@@ -176,10 +176,9 @@ static int uniphier_system_bus_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
        struct uniphier_system_bus_priv *priv;
-       const __be32 *ranges;
-       u32 cells, addr, size;
-       u64 paddr;
-       int pna, bank, rlen, rone, ret;
+       struct of_range_parser parser;
+       struct of_range range;
+       int ret;
 
        priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
        if (!priv)
@@ -191,48 +190,17 @@ static int uniphier_system_bus_probe(struct platform_device *pdev)
 
        priv->dev = dev;
 
-       pna = of_n_addr_cells(dev->of_node);
-
-       ret = of_property_read_u32(dev->of_node, "#address-cells", &cells);
-       if (ret) {
-               dev_err(dev, "failed to get #address-cells\n");
-               return ret;
-       }
-       if (cells != 2) {
-               dev_err(dev, "#address-cells must be 2\n");
-               return -EINVAL;
-       }
-
-       ret = of_property_read_u32(dev->of_node, "#size-cells", &cells);
-       if (ret) {
-               dev_err(dev, "failed to get #size-cells\n");
+       ret = of_range_parser_init(&parser, dev->of_node);
+       if (ret)
                return ret;
-       }
-       if (cells != 1) {
-               dev_err(dev, "#size-cells must be 1\n");
-               return -EINVAL;
-       }
 
-       ranges = of_get_property(dev->of_node, "ranges", &rlen);
-       if (!ranges) {
-               dev_err(dev, "failed to get ranges property\n");
-               return -ENOENT;
-       }
-
-       rlen /= sizeof(*ranges);
-       rone = pna + 2;
-
-       for (; rlen >= rone; rlen -= rone) {
-               bank = be32_to_cpup(ranges++);
-               addr = be32_to_cpup(ranges++);
-               paddr = of_translate_address(dev->of_node, ranges);
-               if (paddr == OF_BAD_ADDR)
+       for_each_of_range(&parser, &range) {
+               if (range.cpu_addr == OF_BAD_ADDR)
                        return -EINVAL;
-               ranges += pna;
-               size = be32_to_cpup(ranges++);
-
-               ret = uniphier_system_bus_add_bank(priv, bank, addr,
-                                                  paddr, size);
+               ret = uniphier_system_bus_add_bank(priv,
+                                                  upper_32_bits(range.bus_addr),
+                                                  lower_32_bits(range.bus_addr),
+                                                  range.cpu_addr, range.size);
                if (ret)
                        return ret;
        }