On Fri, 14 Apr 2023 at 07:55, Maulik Shah <quic_mkshah@xxxxxxxxxxx> wrote: > > Genpd parent and child domain topology created using dt_idle_pd_init_topology() > needs to be removed during error cases. > > Add new helper function dt_idle_pd_remove_topology() for same. Except for the missing s-o-b line, this looks good to me. Reviewed-by: Ulf Hanssson <ulf.hansson@xxxxxxxxxx> Kind regards Uffe > --- > drivers/cpuidle/dt_idle_genpd.c | 24 ++++++++++++++++++++++++ > drivers/cpuidle/dt_idle_genpd.h | 7 +++++++ > 2 files changed, 31 insertions(+) > > diff --git a/drivers/cpuidle/dt_idle_genpd.c b/drivers/cpuidle/dt_idle_genpd.c > index b37165514d4e..1af63c189039 100644 > --- a/drivers/cpuidle/dt_idle_genpd.c > +++ b/drivers/cpuidle/dt_idle_genpd.c > @@ -152,6 +152,30 @@ int dt_idle_pd_init_topology(struct device_node *np) > return 0; > } > > +int dt_idle_pd_remove_topology(struct device_node *np) > +{ > + struct device_node *node; > + struct of_phandle_args child, parent; > + int ret; > + > + for_each_child_of_node(np, node) { > + if (of_parse_phandle_with_args(node, "power-domains", > + "#power-domain-cells", 0, &parent)) > + continue; > + > + child.np = node; > + child.args_count = 0; > + ret = of_genpd_remove_subdomain(&parent, &child); > + of_node_put(parent.np); > + if (ret) { > + of_node_put(node); > + return ret; > + } > + } > + > + return 0; > +} > + > struct device *dt_idle_attach_cpu(int cpu, const char *name) > { > struct device *dev; > diff --git a/drivers/cpuidle/dt_idle_genpd.h b/drivers/cpuidle/dt_idle_genpd.h > index a95483d08a02..3be1f70f55b5 100644 > --- a/drivers/cpuidle/dt_idle_genpd.h > +++ b/drivers/cpuidle/dt_idle_genpd.h > @@ -14,6 +14,8 @@ struct generic_pm_domain *dt_idle_pd_alloc(struct device_node *np, > > int dt_idle_pd_init_topology(struct device_node *np); > > +int dt_idle_pd_remove_topology(struct device_node *np); > + > struct device *dt_idle_attach_cpu(int cpu, const char *name); > > void dt_idle_detach_cpu(struct device *dev); > @@ -36,6 +38,11 @@ static inline int dt_idle_pd_init_topology(struct device_node *np) > return 0; > } > > +static inline int dt_idle_pd_remove_topology(struct device_node *np) > +{ > + return 0; > +} > + > static inline struct device *dt_idle_attach_cpu(int cpu, const char *name) > { > return NULL; > -- > 2.17.1 >