Lines Matching +full:12 +full:- +full:bit
24 #include <dt-bindings/power/mt2701-power.h>
25 #include <dt-bindings/power/mt2712-power.h>
26 #include <dt-bindings/power/mt6797-power.h>
27 #include <dt-bindings/power/mt7622-power.h>
28 #include <dt-bindings/power/mt7623a-power.h>
29 #include <dt-bindings/power/mt8173-power.h>
34 #define MTK_SCPD_ACTIVE_WAKEUP BIT(0)
35 #define MTK_SCPD_FWAIT_SRAM BIT(1)
36 #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x))
62 #define PWR_RST_B_BIT BIT(0)
63 #define PWR_ISO_BIT BIT(1)
64 #define PWR_ON_BIT BIT(2)
65 #define PWR_ON_2ND_BIT BIT(3)
66 #define PWR_CLK_DIS_BIT BIT(4)
68 #define PWR_STATUS_CONN BIT(1)
69 #define PWR_STATUS_DISP BIT(3)
70 #define PWR_STATUS_MFG BIT(4)
71 #define PWR_STATUS_ISP BIT(5)
72 #define PWR_STATUS_VDEC BIT(7)
73 #define PWR_STATUS_BDP BIT(14)
74 #define PWR_STATUS_ETH BIT(15)
75 #define PWR_STATUS_HIF BIT(16)
76 #define PWR_STATUS_IFR_MSC BIT(17)
77 #define PWR_STATUS_USB2 BIT(19) /* MT2712 */
78 #define PWR_STATUS_VENC_LT BIT(20)
79 #define PWR_STATUS_VENC BIT(21)
80 #define PWR_STATUS_MFG_2D BIT(22) /* MT8173 */
81 #define PWR_STATUS_MFG_ASYNC BIT(23) /* MT8173 */
82 #define PWR_STATUS_AUDIO BIT(24) /* MT8173, MT2712 */
83 #define PWR_STATUS_USB BIT(25) /* MT8173, MT2712 */
84 #define PWR_STATUS_ETHSYS BIT(24) /* MT7622 */
85 #define PWR_STATUS_HIF0 BIT(25) /* MT7622 */
86 #define PWR_STATUS_HIF1 BIT(26) /* MT7622 */
87 #define PWR_STATUS_WB BIT(27) /* MT7622 */
171 struct scp *scp = scpd->scp; in scpsys_domain_is_on()
173 u32 status = readl(scp->base + scp->ctrl_reg.pwr_sta_offs) & in scpsys_domain_is_on()
174 scpd->data->sta_mask; in scpsys_domain_is_on()
175 u32 status2 = readl(scp->base + scp->ctrl_reg.pwr_sta2nd_offs) & in scpsys_domain_is_on()
176 scpd->data->sta_mask; in scpsys_domain_is_on()
188 return -EINVAL; in scpsys_domain_is_on()
194 struct scp *scp = scpd->scp; in scpsys_power_on()
195 void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs; in scpsys_power_on()
196 u32 pdn_ack = scpd->data->sram_pdn_ack_bits; in scpsys_power_on()
201 if (scpd->supply) { in scpsys_power_on()
202 ret = regulator_enable(scpd->supply); in scpsys_power_on()
207 for (i = 0; i < MAX_CLKS && scpd->clk[i]; i++) { in scpsys_power_on()
208 ret = clk_prepare_enable(scpd->clk[i]); in scpsys_power_on()
210 for (--i; i >= 0; i--) in scpsys_power_on()
211 clk_disable_unprepare(scpd->clk[i]); in scpsys_power_on()
238 val &= ~scpd->data->sram_pdn_bits; in scpsys_power_on()
257 if (scpd->data->bus_prot_mask) { in scpsys_power_on()
258 ret = mtk_infracfg_clear_bus_protection(scp->infracfg, in scpsys_power_on()
259 scpd->data->bus_prot_mask, in scpsys_power_on()
260 scp->bus_prot_reg_update); in scpsys_power_on()
268 for (i = MAX_CLKS - 1; i >= 0; i--) { in scpsys_power_on()
269 if (scpd->clk[i]) in scpsys_power_on()
270 clk_disable_unprepare(scpd->clk[i]); in scpsys_power_on()
273 if (scpd->supply) in scpsys_power_on()
274 regulator_disable(scpd->supply); in scpsys_power_on()
276 dev_err(scp->dev, "Failed to power on domain %s\n", genpd->name); in scpsys_power_on()
284 struct scp *scp = scpd->scp; in scpsys_power_off()
285 void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs; in scpsys_power_off()
286 u32 pdn_ack = scpd->data->sram_pdn_ack_bits; in scpsys_power_off()
291 if (scpd->data->bus_prot_mask) { in scpsys_power_off()
292 ret = mtk_infracfg_set_bus_protection(scp->infracfg, in scpsys_power_off()
293 scpd->data->bus_prot_mask, in scpsys_power_off()
294 scp->bus_prot_reg_update); in scpsys_power_off()
300 val |= scpd->data->sram_pdn_bits; in scpsys_power_off()
330 for (i = 0; i < MAX_CLKS && scpd->clk[i]; i++) in scpsys_power_off()
331 clk_disable_unprepare(scpd->clk[i]); in scpsys_power_off()
333 if (scpd->supply) in scpsys_power_off()
334 regulator_disable(scpd->supply); in scpsys_power_off()
339 dev_err(scp->dev, "Failed to power off domain %s\n", genpd->name); in scpsys_power_off()
349 clk[i] = devm_clk_get(&pdev->dev, clk_names[i]); in init_clks()
363 scp = devm_kzalloc(&pdev->dev, sizeof(*scp), GFP_KERNEL); in init_scp()
365 return ERR_PTR(-ENOMEM); in init_scp()
367 scp->ctrl_reg.pwr_sta_offs = scp_ctrl_reg->pwr_sta_offs; in init_scp()
368 scp->ctrl_reg.pwr_sta2nd_offs = scp_ctrl_reg->pwr_sta2nd_offs; in init_scp()
370 scp->bus_prot_reg_update = bus_prot_reg_update; in init_scp()
372 scp->dev = &pdev->dev; in init_scp()
375 scp->base = devm_ioremap_resource(&pdev->dev, res); in init_scp()
376 if (IS_ERR(scp->base)) in init_scp()
377 return ERR_CAST(scp->base); in init_scp()
379 scp->domains = devm_kcalloc(&pdev->dev, in init_scp()
380 num, sizeof(*scp->domains), GFP_KERNEL); in init_scp()
381 if (!scp->domains) in init_scp()
382 return ERR_PTR(-ENOMEM); in init_scp()
384 pd_data = &scp->pd_data; in init_scp()
386 pd_data->domains = devm_kcalloc(&pdev->dev, in init_scp()
387 num, sizeof(*pd_data->domains), GFP_KERNEL); in init_scp()
388 if (!pd_data->domains) in init_scp()
389 return ERR_PTR(-ENOMEM); in init_scp()
391 scp->infracfg = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, in init_scp()
393 if (IS_ERR(scp->infracfg)) { in init_scp()
394 dev_err(&pdev->dev, "Cannot find infracfg controller: %ld\n", in init_scp()
395 PTR_ERR(scp->infracfg)); in init_scp()
396 return ERR_CAST(scp->infracfg); in init_scp()
400 struct scp_domain *scpd = &scp->domains[i]; in init_scp()
403 scpd->supply = devm_regulator_get_optional(&pdev->dev, data->name); in init_scp()
404 if (IS_ERR(scpd->supply)) { in init_scp()
405 if (PTR_ERR(scpd->supply) == -ENODEV) in init_scp()
406 scpd->supply = NULL; in init_scp()
408 return ERR_CAST(scpd->supply); in init_scp()
412 pd_data->num_domains = num; in init_scp()
417 struct scp_domain *scpd = &scp->domains[i]; in init_scp()
418 struct generic_pm_domain *genpd = &scpd->genpd; in init_scp()
421 pd_data->domains[i] = genpd; in init_scp()
422 scpd->scp = scp; in init_scp()
424 scpd->data = data; in init_scp()
426 for (j = 0; j < MAX_CLKS && data->clk_id[j]; j++) { in init_scp()
427 struct clk *c = clk[data->clk_id[j]]; in init_scp()
430 dev_err(&pdev->dev, "%s: clk unavailable\n", in init_scp()
431 data->name); in init_scp()
435 scpd->clk[j] = c; in init_scp()
438 genpd->name = data->name; in init_scp()
439 genpd->power_off = scpsys_power_off; in init_scp()
440 genpd->power_on = scpsys_power_on; in init_scp()
442 genpd->flags |= GENPD_FLAG_ACTIVE_WAKEUP; in init_scp()
455 struct scp_domain *scpd = &scp->domains[i]; in mtk_register_power_domains()
456 struct generic_pm_domain *genpd = &scpd->genpd; in mtk_register_power_domains()
464 genpd->power_on(genpd); in mtk_register_power_domains()
475 pd_data = &scp->pd_data; in mtk_register_power_domains()
477 ret = of_genpd_add_provider_onecell(pdev->dev.of_node, pd_data); in mtk_register_power_domains()
479 dev_err(&pdev->dev, "Failed to add OF provider: %d\n", ret); in mtk_register_power_domains()
510 .sram_pdn_ack_bits = GENMASK(12, 12),
519 .sram_pdn_ack_bits = GENMASK(12, 12),
528 .sram_pdn_ack_bits = GENMASK(13, 12),
545 .sram_pdn_ack_bits = GENMASK(15, 12),
554 .sram_pdn_ack_bits = GENMASK(15, 12),
576 .sram_pdn_ack_bits = GENMASK(12, 12),
585 .sram_pdn_ack_bits = GENMASK(12, 12),
594 .sram_pdn_ack_bits = GENMASK(15, 12),
603 .sram_pdn_ack_bits = GENMASK(13, 12),
612 .sram_pdn_ack_bits = GENMASK(15, 12),
621 .sram_pdn_ack_bits = GENMASK(14, 12),
630 .sram_pdn_ack_bits = GENMASK(14, 12),
641 .bus_prot_mask = BIT(14) | BIT(21) | BIT(23),
646 .sta_mask = BIT(22),
655 .sta_mask = BIT(23),
664 .sta_mask = BIT(30),
689 .sta_mask = BIT(7),
692 .sram_pdn_ack_bits = GENMASK(12, 12),
697 .sta_mask = BIT(21),
700 .sram_pdn_ack_bits = GENMASK(15, 12),
705 .sta_mask = BIT(5),
708 .sram_pdn_ack_bits = GENMASK(13, 12),
713 .sta_mask = BIT(3),
716 .sram_pdn_ack_bits = GENMASK(12, 12),
718 .bus_prot_mask = (BIT(1) | BIT(2)),
722 .sta_mask = BIT(24),
725 .sram_pdn_ack_bits = GENMASK(15, 12),
730 .sta_mask = BIT(13),
738 .sta_mask = BIT(20),
741 .sram_pdn_ack_bits = GENMASK(12, 12),
766 .sram_pdn_ack_bits = GENMASK(15, 12),
776 .sram_pdn_ack_bits = GENMASK(15, 12),
786 .sram_pdn_ack_bits = GENMASK(15, 12),
822 .sram_pdn_ack_bits = GENMASK(15, 12),
831 .sram_pdn_ack_bits = GENMASK(15, 12),
854 .sram_pdn_ack_bits = GENMASK(12, 12),
862 .sram_pdn_ack_bits = GENMASK(15, 12),
870 .sram_pdn_ack_bits = GENMASK(13, 12),
878 .sram_pdn_ack_bits = GENMASK(12, 12),
888 .sram_pdn_ack_bits = GENMASK(15, 12),
896 .sram_pdn_ack_bits = GENMASK(15, 12),
904 .sram_pdn_ack_bits = GENMASK(15, 12),
921 .sram_pdn_ack_bits = GENMASK(13, 12),
1015 .compatible = "mediatek,mt2701-scpsys",
1018 .compatible = "mediatek,mt2712-scpsys",
1021 .compatible = "mediatek,mt6797-scpsys",
1024 .compatible = "mediatek,mt7622-scpsys",
1027 .compatible = "mediatek,mt7623a-scpsys",
1030 .compatible = "mediatek,mt8173-scpsys",
1045 soc = of_device_get_match_data(&pdev->dev); in scpsys_probe()
1047 scp = init_scp(pdev, soc->domains, soc->num_domains, &soc->regs, in scpsys_probe()
1048 soc->bus_prot_reg_update); in scpsys_probe()
1052 mtk_register_power_domains(pdev, scp, soc->num_domains); in scpsys_probe()
1054 pd_data = &scp->pd_data; in scpsys_probe()
1056 for (i = 0, sd = soc->subdomains; i < soc->num_subdomains; i++, sd++) { in scpsys_probe()
1057 ret = pm_genpd_add_subdomain(pd_data->domains[sd->origin], in scpsys_probe()
1058 pd_data->domains[sd->subdomain]); in scpsys_probe()
1060 dev_err(&pdev->dev, "Failed to add subdomain: %d\n", in scpsys_probe()
1070 .name = "mtk-scpsys",