Lines Matching +full:pd +full:- +full:node

1 // SPDX-License-Identifier: GPL-2.0
3 * PM domains for CPUs via genpd - managed by cpuidle-psci.
22 #include "cpuidle-psci.h"
27 struct device_node *node; member
32 static int psci_pd_power_off(struct generic_pm_domain *pd) in psci_pd_power_off() argument
34 struct genpd_power_state *state = &pd->states[pd->state_idx]; in psci_pd_power_off()
37 if (!state->data) in psci_pd_power_off()
41 pd_state = state->data; in psci_pd_power_off()
42 psci_set_domain_state(pd, pd->state_idx, *pd_state); in psci_pd_power_off()
49 struct generic_pm_domain *pd; in psci_pd_init() local
52 int ret = -ENOMEM; in psci_pd_init()
54 pd = dt_idle_pd_alloc(np, psci_dt_parse_state_node); in psci_pd_init()
55 if (!pd) in psci_pd_init()
62 pd->flags |= GENPD_FLAG_IRQ_SAFE | GENPD_FLAG_CPU_DOMAIN; in psci_pd_init()
67 * supported, but only during system-wide suspend. in psci_pd_init()
70 pd->power_off = psci_pd_power_off; in psci_pd_init()
71 pd->flags |= GENPD_FLAG_ACTIVE_WAKEUP; in psci_pd_init()
73 pd->flags |= GENPD_FLAG_RPM_ALWAYS_ON; in psci_pd_init()
75 pd->flags |= GENPD_FLAG_ALWAYS_ON; in psci_pd_init()
79 pd_gov = pd->states ? &pm_domain_cpu_gov : NULL; in psci_pd_init()
81 ret = pm_genpd_init(pd, pd_gov, false); in psci_pd_init()
85 ret = of_genpd_add_provider_simple(np, pd); in psci_pd_init()
89 pd_provider->node = of_node_get(np); in psci_pd_init()
90 list_add(&pd_provider->link, &psci_pd_providers); in psci_pd_init()
92 pr_debug("init PM domain %s\n", pd->name); in psci_pd_init()
96 pm_genpd_remove(pd); in psci_pd_init()
100 dt_idle_pd_free(pd); in psci_pd_init()
113 of_genpd_del_provider(pd_provider->node); in psci_pd_remove()
115 genpd = of_genpd_remove_last(pd_provider->node); in psci_pd_remove()
119 of_node_put(pd_provider->node); in psci_pd_remove()
120 list_del(&pd_provider->link); in psci_pd_remove()
126 { .compatible = "arm,psci-1.0" },
132 struct device_node *np = pdev->dev.of_node; in psci_cpuidle_domain_probe()
137 return -ENODEV; in psci_cpuidle_domain_probe()
140 * Parse child nodes for the "#power-domain-cells" property and in psci_cpuidle_domain_probe()
141 * initialize a genpd/genpd-of-provider pair when it's found. in psci_cpuidle_domain_probe()
143 for_each_child_of_node_scoped(np, node) { in psci_cpuidle_domain_probe()
144 if (!of_property_present(node, "#power-domain-cells")) in psci_cpuidle_domain_probe()
147 ret = psci_pd_init(node, use_osi); in psci_cpuidle_domain_probe()
183 .name = "psci-cpuidle-domain",