Lines Matching refs:pmu
95 struct rockchip_pmu *pmu; member
250 struct rockchip_pmu *pmu; in rockchip_pmu_block() local
260 pmu = dmc_pmu; in rockchip_pmu_block()
267 mutex_lock(&pmu->mutex); in rockchip_pmu_block()
279 for (i = 0; i < pmu->genpd_data.num_domains; i++) { in rockchip_pmu_block()
280 genpd = pmu->genpd_data.domains[i]; in rockchip_pmu_block()
285 dev_err(pmu->dev, in rockchip_pmu_block()
297 genpd = pmu->genpd_data.domains[i]; in rockchip_pmu_block()
303 mutex_unlock(&pmu->mutex); in rockchip_pmu_block()
313 struct rockchip_pmu *pmu; in rockchip_pmu_unblock() local
319 pmu = dmc_pmu; in rockchip_pmu_unblock()
320 for (i = 0; i < pmu->genpd_data.num_domains; i++) { in rockchip_pmu_unblock()
321 genpd = pmu->genpd_data.domains[i]; in rockchip_pmu_unblock()
328 mutex_unlock(&pmu->mutex); in rockchip_pmu_unblock()
340 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_domain_is_idle() local
344 regmap_read(pmu->regmap, pmu->info->idle_offset, &val); in rockchip_pmu_domain_is_idle()
348 static unsigned int rockchip_pmu_read_ack(struct rockchip_pmu *pmu) in rockchip_pmu_read_ack() argument
352 regmap_read(pmu->regmap, pmu->info->ack_offset, &val); in rockchip_pmu_read_ack()
359 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_ungate_clk() local
366 if (!pmu->info->clk_ungate_offset) in rockchip_pmu_ungate_clk()
371 regmap_write(pmu->regmap, pmu->info->clk_ungate_offset, val); in rockchip_pmu_ungate_clk()
381 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_set_idle_request() local
391 regmap_write(pmu->regmap, pmu->info->req_offset + pd_req_offset, in rockchip_pmu_set_idle_request()
395 regmap_update_bits(pmu->regmap, pmu->info->req_offset + pd_req_offset, in rockchip_pmu_set_idle_request()
402 ret = readx_poll_timeout_atomic(rockchip_pmu_read_ack, pmu, val, in rockchip_pmu_set_idle_request()
406 dev_err(pmu->dev, in rockchip_pmu_set_idle_request()
415 dev_err(pmu->dev, in rockchip_pmu_set_idle_request()
475 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_domain_is_on() local
479 regmap_read(pmu->regmap, pmu->info->repair_status_offset, &val); in rockchip_pmu_domain_is_on()
488 regmap_read(pmu->regmap, pmu->info->status_offset, &val); in rockchip_pmu_domain_is_on()
496 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_domain_is_mem_on() local
499 regmap_read(pmu->regmap, in rockchip_pmu_domain_is_mem_on()
500 pmu->info->mem_status_offset + pd->info->mem_offset, &val); in rockchip_pmu_domain_is_mem_on()
508 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_domain_is_chain_on() local
511 regmap_read(pmu->regmap, in rockchip_pmu_domain_is_chain_on()
512 pmu->info->chain_status_offset + pd->info->mem_offset, &val); in rockchip_pmu_domain_is_chain_on()
520 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_domain_mem_reset() local
528 dev_err(pmu->dev, in rockchip_pmu_domain_mem_reset()
536 regmap_write(pmu->regmap, pmu->info->mem_pwr_offset + pd->info->pwr_offset, in rockchip_pmu_domain_mem_reset()
543 dev_err(pmu->dev, in rockchip_pmu_domain_mem_reset()
549 regmap_write(pmu->regmap, pmu->info->mem_pwr_offset + pd->info->pwr_offset, in rockchip_pmu_domain_mem_reset()
556 dev_err(pmu->dev, in rockchip_pmu_domain_mem_reset()
568 struct rockchip_pmu *pmu = pd->pmu; in rockchip_do_pmu_set_power_domain() local
582 regmap_write(pmu->regmap, pmu->info->pwr_offset + pd_pwr_offset, in rockchip_do_pmu_set_power_domain()
586 regmap_update_bits(pmu->regmap, pmu->info->pwr_offset + pd_pwr_offset, in rockchip_do_pmu_set_power_domain()
601 dev_err(pmu->dev, "failed to set domain '%s' %s, val=%d\n", in rockchip_do_pmu_set_power_domain()
609 pmu->info->pwr_offset + pd_pwr_offset, in rockchip_do_pmu_set_power_domain()
617 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pd_power() local
620 guard(mutex)(&pmu->mutex); in rockchip_pd_power()
627 dev_err(pmu->dev, "failed to enable clocks\n"); in rockchip_pd_power()
669 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pd_regulator_enable() local
675 pd->supply = devm_of_regulator_get(pmu->dev, pd->node, "domain"); in rockchip_pd_regulator_enable()
691 dev_err(pd->pmu->dev, "Failed to enable supply: %d\n", ret); in rockchip_pd_power_on()
753 static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu, in rockchip_pm_add_one_domain() argument
765 dev_err(pmu->dev, in rockchip_pm_add_one_domain()
771 if (id >= pmu->info->num_domains) { in rockchip_pm_add_one_domain()
772 dev_err(pmu->dev, "%pOFn: invalid domain id %d\n", in rockchip_pm_add_one_domain()
777 if (pmu->genpd_data.domains[id]) in rockchip_pm_add_one_domain()
780 pd_info = &pmu->info->domain_info[id]; in rockchip_pm_add_one_domain()
782 dev_err(pmu->dev, "%pOFn: undefined domain id %d\n", in rockchip_pm_add_one_domain()
787 pd = devm_kzalloc(pmu->dev, sizeof(*pd), GFP_KERNEL); in rockchip_pm_add_one_domain()
792 pd->pmu = pmu; in rockchip_pm_add_one_domain()
797 pd->clks = devm_kcalloc(pmu->dev, pd->num_clks, in rockchip_pm_add_one_domain()
802 dev_dbg(pmu->dev, "%pOFn: doesn't have clocks: %d\n", in rockchip_pm_add_one_domain()
811 dev_err(pmu->dev, in rockchip_pm_add_one_domain()
826 pd->qos_regmap = devm_kcalloc(pmu->dev, pd->num_qos, in rockchip_pm_add_one_domain()
835 pd->qos_save_regs[j] = devm_kcalloc(pmu->dev, in rockchip_pm_add_one_domain()
875 pmu->genpd_data.domains[id] = &pd->genpd; in rockchip_pm_add_one_domain()
895 dev_err(pd->pmu->dev, "failed to remove domain '%s' : %d - state may be inconsistent\n", in rockchip_pm_remove_one_domain()
902 mutex_lock(&pd->pmu->mutex); in rockchip_pm_remove_one_domain()
904 mutex_unlock(&pd->pmu->mutex); in rockchip_pm_remove_one_domain()
909 static void rockchip_pm_domain_cleanup(struct rockchip_pmu *pmu) in rockchip_pm_domain_cleanup() argument
915 for (i = 0; i < pmu->genpd_data.num_domains; i++) { in rockchip_pm_domain_cleanup()
916 genpd = pmu->genpd_data.domains[i]; in rockchip_pm_domain_cleanup()
926 static void rockchip_configure_pd_cnt(struct rockchip_pmu *pmu, in rockchip_configure_pd_cnt() argument
931 regmap_write(pmu->regmap, domain_reg_offset, count); in rockchip_configure_pd_cnt()
933 regmap_write(pmu->regmap, domain_reg_offset + 4, count); in rockchip_configure_pd_cnt()
936 static int rockchip_pm_add_subdomain(struct rockchip_pmu *pmu, in rockchip_pm_add_subdomain() argument
947 dev_err(pmu->dev, in rockchip_pm_add_subdomain()
952 parent_domain = pmu->genpd_data.domains[idx]; in rockchip_pm_add_subdomain()
954 error = rockchip_pm_add_one_domain(pmu, np); in rockchip_pm_add_subdomain()
956 dev_err(pmu->dev, "failed to handle node %pOFn: %d\n", in rockchip_pm_add_subdomain()
963 dev_err(pmu->dev, in rockchip_pm_add_subdomain()
968 child_domain = pmu->genpd_data.domains[idx]; in rockchip_pm_add_subdomain()
972 dev_err(pmu->dev, "%s failed to add subdomain %s: %d\n", in rockchip_pm_add_subdomain()
976 dev_dbg(pmu->dev, "%s add subdomain: %s\n", in rockchip_pm_add_subdomain()
980 rockchip_pm_add_subdomain(pmu, np); in rockchip_pm_add_subdomain()
991 struct rockchip_pmu *pmu; in rockchip_pm_domain_probe() local
1002 pmu = devm_kzalloc(dev, in rockchip_pm_domain_probe()
1003 struct_size(pmu, domains, pmu_info->num_domains), in rockchip_pm_domain_probe()
1005 if (!pmu) in rockchip_pm_domain_probe()
1008 pmu->dev = &pdev->dev; in rockchip_pm_domain_probe()
1009 mutex_init(&pmu->mutex); in rockchip_pm_domain_probe()
1011 pmu->info = pmu_info; in rockchip_pm_domain_probe()
1013 pmu->genpd_data.domains = pmu->domains; in rockchip_pm_domain_probe()
1014 pmu->genpd_data.num_domains = pmu_info->num_domains; in rockchip_pm_domain_probe()
1022 pmu->regmap = syscon_node_to_regmap(parent->of_node); in rockchip_pm_domain_probe()
1023 if (IS_ERR(pmu->regmap)) { in rockchip_pm_domain_probe()
1025 return PTR_ERR(pmu->regmap); in rockchip_pm_domain_probe()
1033 rockchip_configure_pd_cnt(pmu, pmu_info->core_pwrcnt_offset, in rockchip_pm_domain_probe()
1036 rockchip_configure_pd_cnt(pmu, pmu_info->gpu_pwrcnt_offset, in rockchip_pm_domain_probe()
1048 error = rockchip_pm_add_one_domain(pmu, node); in rockchip_pm_domain_probe()
1055 error = rockchip_pm_add_subdomain(pmu, node); in rockchip_pm_domain_probe()
1068 error = of_genpd_add_provider_onecell(np, &pmu->genpd_data); in rockchip_pm_domain_probe()
1076 dmc_pmu = pmu; in rockchip_pm_domain_probe()
1081 rockchip_pm_domain_cleanup(pmu); in rockchip_pm_domain_probe()