Lines Matching +full:performance +full:- +full:domain

1 // SPDX-License-Identifier: GPL-2.0
3 * SCMI performance domain support.
32 if (!pd->info->set_perf) in scmi_pd_set_perf_state()
36 return -EINVAL; in scmi_pd_set_perf_state()
38 ret = pd->perf_ops->level_set(pd->ph, pd->domain_id, state, false); in scmi_pd_set_perf_state()
40 dev_warn(&genpd->dev, "Failed with %d when trying to set %d perf level", in scmi_pd_set_perf_state()
54 * the performance level can be changed. in scmi_pd_attach_dev()
56 if (!pd->info->set_perf) in scmi_pd_attach_dev()
59 ret = pd->perf_ops->device_opps_add(pd->ph, dev, pd->domain_id); in scmi_pd_attach_dev()
71 if (!pd->info->set_perf) in scmi_pd_detach_dev()
79 struct device *dev = &sdev->dev; in scmi_perf_domain_probe()
80 const struct scmi_handle *handle = sdev->handle; in scmi_perf_domain_probe()
89 return -ENODEV; in scmi_perf_domain_probe()
91 /* The OF node must specify us as a power-domain provider. */ in scmi_perf_domain_probe()
92 if (!of_find_property(dev->of_node, "#power-domain-cells", NULL)) in scmi_perf_domain_probe()
95 perf_ops = handle->devm_protocol_get(sdev, SCMI_PROTOCOL_PERF, &ph); in scmi_perf_domain_probe()
99 num_domains = perf_ops->num_domains_get(ph); in scmi_perf_domain_probe()
110 return -ENOMEM; in scmi_perf_domain_probe()
114 return -ENOMEM; in scmi_perf_domain_probe()
118 return -ENOMEM; in scmi_perf_domain_probe()
121 scmi_pd->info = perf_ops->info_get(ph, i); in scmi_perf_domain_probe()
123 scmi_pd->domain_id = i; in scmi_perf_domain_probe()
124 scmi_pd->perf_ops = perf_ops; in scmi_perf_domain_probe()
125 scmi_pd->ph = ph; in scmi_perf_domain_probe()
126 scmi_pd->genpd.name = scmi_pd->info->name; in scmi_perf_domain_probe()
127 scmi_pd->genpd.flags = GENPD_FLAG_ALWAYS_ON | in scmi_perf_domain_probe()
130 scmi_pd->genpd.set_performance_state = scmi_pd_set_perf_state; in scmi_perf_domain_probe()
131 scmi_pd->genpd.attach_dev = scmi_pd_attach_dev; in scmi_perf_domain_probe()
132 scmi_pd->genpd.detach_dev = scmi_pd_detach_dev; in scmi_perf_domain_probe()
134 ret = pm_genpd_init(&scmi_pd->genpd, NULL, false); in scmi_perf_domain_probe()
138 domains[i] = &scmi_pd->genpd; in scmi_perf_domain_probe()
141 scmi_pd_data->domains = domains; in scmi_perf_domain_probe()
142 scmi_pd_data->num_domains = num_domains; in scmi_perf_domain_probe()
144 ret = of_genpd_add_provider_onecell(dev->of_node, scmi_pd_data); in scmi_perf_domain_probe()
149 dev_info(dev, "Initialized %d performance domains", num_domains); in scmi_perf_domain_probe()
152 for (i--; i >= 0; i--) in scmi_perf_domain_probe()
159 struct device *dev = &sdev->dev; in scmi_perf_domain_remove()
166 of_genpd_del_provider(dev->of_node); in scmi_perf_domain_remove()
168 for (i = 0; i < scmi_pd_data->num_domains; i++) in scmi_perf_domain_remove()
169 pm_genpd_remove(scmi_pd_data->domains[i]); in scmi_perf_domain_remove()
179 .name = "scmi-perf-domain",
187 MODULE_DESCRIPTION("ARM SCMI perf domain driver");