We should hold the reference returned by of_get_parent() and use it
to call of_node_put() for refcount balance.
Fixes: 3efe64ef5186 ("clk: st: clkgen-fsyn: search reg within node or parent")
Fixes: 810251b0d36a ("clk: st: clkgen-mux: search reg within node or parent")
Signed-off-by: Liang He <windhl@126.com>
Link: https://lore.kernel.org/r/20220628142416.169808-1-windhl@126.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
 
        const char *pll_name, *clk_parent_name;
        void __iomem *reg;
        spinlock_t *lock;
+       struct device_node *parent_np;
 
        /*
         * First check for reg property within the node to keep backward
         */
        reg = of_iomap(np, 0);
        if (!reg) {
-               reg = of_iomap(of_get_parent(np), 0);
+               parent_np = of_get_parent(np);
+               reg = of_iomap(parent_np, 0);
+               of_node_put(parent_np);
                if (!reg) {
                        pr_err("%s: Failed to get base address\n", __func__);
                        return;
 
        void __iomem *reg;
        const char **parents;
        int num_parents = 0;
+       struct device_node *parent_np;
 
        /*
         * First check for reg property within the node to keep backward
         */
        reg = of_iomap(np, 0);
        if (!reg) {
-               reg = of_iomap(of_get_parent(np), 0);
+               parent_np = of_get_parent(np);
+               reg = of_iomap(parent_np, 0);
+               of_node_put(parent_np);
                if (!reg) {
                        pr_err("%s: Failed to get base address\n", __func__);
                        return;