Lines Matching defs:scpsys

42 	struct scpsys *scpsys;
52 struct scpsys {
64 struct scpsys *scpsys = pd->scpsys;
67 regmap_read(scpsys->base, pd->data->pwr_sta_offs, &status);
70 regmap_read(scpsys->base, pd->data->pwr_sta2nd_offs, &status2);
80 struct scpsys *scpsys = pd->scpsys;
84 regmap_clear_bits(scpsys->base, pd->data->ctl_offs, pd->data->sram_pdn_bits);
87 ret = regmap_read_poll_timeout(scpsys->base, pd->data->ctl_offs, tmp,
93 regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_ISOINT_B_BIT);
95 regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_CLKISO_BIT);
104 struct scpsys *scpsys = pd->scpsys;
108 regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_CLKISO_BIT);
110 regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_SRAM_ISOINT_B_BIT);
113 regmap_set_bits(scpsys->base, pd->data->ctl_offs, pd->data->sram_pdn_bits);
116 return regmap_read_poll_timeout(scpsys->base, pd->data->ctl_offs, tmp,
210 struct scpsys *scpsys = pd->scpsys;
223 regmap_clear_bits(scpsys->base, pd->data->ext_buck_iso_offs,
227 regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_BIT);
228 regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_2ND_BIT);
236 regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_CLK_DIS_BIT);
237 regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT);
238 regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT);
268 struct scpsys *scpsys = pd->scpsys;
281 regmap_set_bits(scpsys->base, pd->data->ext_buck_iso_offs,
287 regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT);
288 regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_CLK_DIS_BIT);
289 regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT);
290 regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_2ND_BIT);
291 regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ON_BIT);
307 generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_node *node)
311 struct device_node *root_node = scpsys->dev->of_node;
322 dev_err(scpsys->dev, "%pOF: failed to retrieve domain id from reg: %d\n",
327 if (id >= scpsys->soc_data->num_domains) {
328 dev_err(scpsys->dev, "%pOF: invalid domain id %d\n", node, id);
332 domain_data = &scpsys->soc_data->domains_data[id];
334 dev_err(scpsys->dev, "%pOF: undefined domain id %d\n", node, id);
338 pd = devm_kzalloc(scpsys->dev, sizeof(*pd), GFP_KERNEL);
343 pd->scpsys = scpsys;
353 scpsys->dev->of_node = node;
354 pd->supply = devm_regulator_get(scpsys->dev, "domain");
355 scpsys->dev->of_node = root_node;
357 dev_err_probe(scpsys->dev, PTR_ERR(pd->supply),
389 pd->clks = devm_kcalloc(scpsys->dev, pd->num_clks, sizeof(*pd->clks), GFP_KERNEL);
393 pd->subsys_clks = devm_kcalloc(scpsys->dev, pd->num_subsys_clks,
404 dev_err_probe(scpsys->dev, ret,
416 dev_err_probe(scpsys->dev, ret,
433 dev_warn(scpsys->dev,
438 dev_err(scpsys->dev, "%pOF: failed to power on domain: %d\n", node, ret);
446 if (scpsys->domains[id]) {
448 dev_err(scpsys->dev,
469 scpsys->domains[id] = &pd->genpd;
471 return scpsys->pd_data.domains[id];
480 static int scpsys_add_subdomain(struct scpsys *scpsys, struct device_node *parent)
491 dev_err(scpsys->dev, "%pOF: failed to get parent domain id\n", child);
495 if (!scpsys->pd_data.domains[id]) {
497 dev_err(scpsys->dev, "power domain with id %d does not exist\n", id);
501 parent_pd = scpsys->pd_data.domains[id];
503 child_pd = scpsys_add_one_domain(scpsys, child);
506 dev_err_probe(scpsys->dev, ret, "%pOF: failed to get child domain id\n",
512 ret = scpsys_add_subdomain(scpsys, child);
518 dev_err(scpsys->dev, "failed to add %s subdomain to parent %s\n",
522 dev_dbg(scpsys->dev, "%s add subdomain: %s\n", parent_pd->name,
544 dev_err(pd->scpsys->dev,
554 static void scpsys_domain_cleanup(struct scpsys *scpsys)
560 for (i = scpsys->pd_data.num_domains - 1; i >= 0; i--) {
561 genpd = scpsys->pd_data.domains[i];
612 struct scpsys *scpsys;
621 scpsys = devm_kzalloc(dev, struct_size(scpsys, domains, soc->num_domains), GFP_KERNEL);
622 if (!scpsys)
625 scpsys->dev = dev;
626 scpsys->soc_data = soc;
628 scpsys->pd_data.domains = scpsys->domains;
629 scpsys->pd_data.num_domains = soc->num_domains;
637 scpsys->base = syscon_node_to_regmap(parent->of_node);
638 if (IS_ERR(scpsys->base)) {
640 return PTR_ERR(scpsys->base);
647 domain = scpsys_add_one_domain(scpsys, node);
654 ret = scpsys_add_subdomain(scpsys, node);
666 ret = of_genpd_add_provider_onecell(np, &scpsys->pd_data);
675 scpsys_domain_cleanup(scpsys);