PCI: tegra: Use helper function for_each_child_of_node_scoped()
authorZhang Zekun <zhangzekun11@huawei.com>
Sat, 31 Aug 2024 04:04:13 +0000 (12:04 +0800)
committerKrzysztof Wilczyński <kwilczynski@kernel.org>
Thu, 6 Mar 2025 09:31:45 +0000 (09:31 +0000)
The for_each_available_child_of_node_scoped() helper provides
a scope-based clean-up functionality to put the device_node
automatically, and as such, there is no need to call of_node_put()
directly.

Thus, use this helper to simplify the code.

Signed-off-by: Zhang Zekun <zhangzekun11@huawei.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/20240831040413.126417-7-zhangzekun11@huawei.com
[kwilczynski: commit log]
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
drivers/pci/controller/pci-tegra.c

index b3cdbc5927de3742161310610dc5dcb836f5dd69..d2f88997283aed63df49ed2e0eb5ae9f2ab2b001 100644 (file)
@@ -2106,47 +2106,39 @@ static int tegra_pcie_get_regulators(struct tegra_pcie *pcie, u32 lane_mask)
 static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
 {
        struct device *dev = pcie->dev;
-       struct device_node *np = dev->of_node, *port;
+       struct device_node *np = dev->of_node;
        const struct tegra_pcie_soc *soc = pcie->soc;
        u32 lanes = 0, mask = 0;
        unsigned int lane = 0;
        int err;
 
        /* parse root ports */
-       for_each_child_of_node(np, port) {
+       for_each_child_of_node_scoped(np, port) {
                struct tegra_pcie_port *rp;
                unsigned int index;
                u32 value;
                char *label;
 
                err = of_pci_get_devfn(port);
-               if (err < 0) {
-                       dev_err(dev, "failed to parse address: %d\n", err);
-                       goto err_node_put;
-               }
+               if (err < 0)
+                       return dev_err_probe(dev, err, "failed to parse address\n");
 
                index = PCI_SLOT(err);
 
-               if (index < 1 || index > soc->num_ports) {
-                       dev_err(dev, "invalid port number: %d\n", index);
-                       err = -EINVAL;
-                       goto err_node_put;
-               }
+               if (index < 1 || index > soc->num_ports)
+                       return dev_err_probe(dev, -EINVAL,
+                                            "invalid port number: %d\n", index);
 
                index--;
 
                err = of_property_read_u32(port, "nvidia,num-lanes", &value);
-               if (err < 0) {
-                       dev_err(dev, "failed to parse # of lanes: %d\n",
-                               err);
-                       goto err_node_put;
-               }
+               if (err < 0)
+                       return dev_err_probe(dev, err,
+                                            "failed to parse # of lanes\n");
 
-               if (value > 16) {
-                       dev_err(dev, "invalid # of lanes: %u\n", value);
-                       err = -EINVAL;
-                       goto err_node_put;
-               }
+               if (value > 16)
+                       return dev_err_probe(dev, -EINVAL,
+                                            "invalid # of lanes: %u\n", value);
 
                lanes |= value << (index << 3);
 
@@ -2159,16 +2151,12 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
                lane += value;
 
                rp = devm_kzalloc(dev, sizeof(*rp), GFP_KERNEL);
-               if (!rp) {
-                       err = -ENOMEM;
-                       goto err_node_put;
-               }
+               if (!rp)
+                       return -ENOMEM;
 
                err = of_address_to_resource(port, 0, &rp->regs);
-               if (err < 0) {
-                       dev_err(dev, "failed to parse address: %d\n", err);
-                       goto err_node_put;
-               }
+               if (err < 0)
+                       return dev_err_probe(dev, err, "failed to parse address\n");
 
                INIT_LIST_HEAD(&rp->list);
                rp->index = index;
@@ -2177,16 +2165,12 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
                rp->np = port;
 
                rp->base = devm_pci_remap_cfg_resource(dev, &rp->regs);
-               if (IS_ERR(rp->base)) {
-                       err = PTR_ERR(rp->base);
-                       goto err_node_put;
-               }
+               if (IS_ERR(rp->base))
+                       return PTR_ERR(rp->base);
 
                label = devm_kasprintf(dev, GFP_KERNEL, "pex-reset-%u", index);
-               if (!label) {
-                       err = -ENOMEM;
-                       goto err_node_put;
-               }
+               if (!label)
+                       return -ENOMEM;
 
                /*
                 * Returns -ENOENT if reset-gpios property is not populated
@@ -2199,34 +2183,26 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
                                                       GPIOD_OUT_LOW,
                                                       label);
                if (IS_ERR(rp->reset_gpio)) {
-                       if (PTR_ERR(rp->reset_gpio) == -ENOENT) {
+                       if (PTR_ERR(rp->reset_gpio) == -ENOENT)
                                rp->reset_gpio = NULL;
-                       } else {
-                               dev_err(dev, "failed to get reset GPIO: %ld\n",
-                                       PTR_ERR(rp->reset_gpio));
-                               err = PTR_ERR(rp->reset_gpio);
-                               goto err_node_put;
-                       }
+                       else
+                               return dev_err_probe(dev, PTR_ERR(rp->reset_gpio),
+                                                    "failed to get reset GPIO\n");
                }
 
                list_add_tail(&rp->list, &pcie->ports);
        }
 
        err = tegra_pcie_get_xbar_config(pcie, lanes, &pcie->xbar_config);
-       if (err < 0) {
-               dev_err(dev, "invalid lane configuration\n");
-               return err;
-       }
+       if (err < 0)
+               return dev_err_probe(dev, err,
+                                    "invalid lane configuration\n");
 
        err = tegra_pcie_get_regulators(pcie, mask);
        if (err < 0)
                return err;
 
        return 0;
-
-err_node_put:
-       of_node_put(port);
-       return err;
 }
 
 /*