Lines Matching +full:io +full:- +full:domains

1 // SPDX-License-Identifier: GPL-2.0-only
5 #include <linux/io.h>
53 u32 status = readl(pd->base + PD_STATUS_REG); in sun20i_ppu_pd_is_on()
67 ret = readl_poll_timeout(pd->base + PD_STATUS_REG, status, in sun20i_ppu_pd_set_power()
73 writel(state, pd->base + PD_COMMAND_REG); in sun20i_ppu_pd_set_power()
76 ret = readl_poll_timeout(pd->base + PD_STATUS_REG, status, in sun20i_ppu_pd_set_power()
83 writel(status, pd->base + PD_STATUS_REG); in sun20i_ppu_pd_set_power()
105 struct device *dev = &pdev->dev; in sun20i_ppu_probe()
115 return -EINVAL; in sun20i_ppu_probe()
117 pds = devm_kcalloc(dev, desc->num_domains, sizeof(*pds), GFP_KERNEL); in sun20i_ppu_probe()
119 return -ENOMEM; in sun20i_ppu_probe()
123 return -ENOMEM; in sun20i_ppu_probe()
125 ppu->domains = devm_kcalloc(dev, desc->num_domains, in sun20i_ppu_probe()
126 sizeof(*ppu->domains), GFP_KERNEL); in sun20i_ppu_probe()
127 if (!ppu->domains) in sun20i_ppu_probe()
128 return -ENOMEM; in sun20i_ppu_probe()
130 ppu->num_domains = desc->num_domains; in sun20i_ppu_probe()
149 for (unsigned int i = 0; i < ppu->num_domains; ++i) { in sun20i_ppu_probe()
152 pd->genpd.name = desc->names[i]; in sun20i_ppu_probe()
153 pd->genpd.power_off = sun20i_ppu_pd_power_off; in sun20i_ppu_probe()
154 pd->genpd.power_on = sun20i_ppu_pd_power_on; in sun20i_ppu_probe()
155 pd->base = base + PD_REGS_SIZE * i; in sun20i_ppu_probe()
157 ret = pm_genpd_init(&pd->genpd, NULL, sun20i_ppu_pd_is_on(pd)); in sun20i_ppu_probe()
160 pd->genpd.name, ret); in sun20i_ppu_probe()
164 ppu->domains[i] = &pd->genpd; in sun20i_ppu_probe()
167 ret = of_genpd_add_provider_onecell(dev->of_node, ppu); in sun20i_ppu_probe()
187 .compatible = "allwinner,sun20i-d1-ppu",
197 .name = "sun20i-ppu",
199 /* Power domains cannot be removed while they are in use. */