152e6676eSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
29c80f3aaSVaibhav Hiremath /*
39c80f3aaSVaibhav Hiremath * AM33XX Clock Domain data.
49c80f3aaSVaibhav Hiremath *
588ca7bfbSAlexander A. Klimov * Copyright (C) 2011-2012 Texas Instruments Incorporated - https://www.ti.com/
69c80f3aaSVaibhav Hiremath * Vaibhav Hiremath <hvaibhav@ti.com>
79c80f3aaSVaibhav Hiremath */
89c80f3aaSVaibhav Hiremath
99c80f3aaSVaibhav Hiremath #include <linux/kernel.h>
109c80f3aaSVaibhav Hiremath #include <linux/io.h>
119c80f3aaSVaibhav Hiremath
129c80f3aaSVaibhav Hiremath #include "clockdomain.h"
139c80f3aaSVaibhav Hiremath #include "cm.h"
149c80f3aaSVaibhav Hiremath #include "cm33xx.h"
159c80f3aaSVaibhav Hiremath #include "cm-regbits-33xx.h"
169c80f3aaSVaibhav Hiremath
179c80f3aaSVaibhav Hiremath static struct clockdomain l4ls_am33xx_clkdm = {
189c80f3aaSVaibhav Hiremath .name = "l4ls_clkdm",
199c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
209c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
219c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_L4LS_CLKSTCTRL_OFFSET,
22*47fe7409SSukrut Bellary .flags = CLKDM_CAN_SWSUP | CLKDM_STANDBY_FORCE_WAKEUP,
239c80f3aaSVaibhav Hiremath };
249c80f3aaSVaibhav Hiremath
259c80f3aaSVaibhav Hiremath static struct clockdomain l3s_am33xx_clkdm = {
269c80f3aaSVaibhav Hiremath .name = "l3s_clkdm",
279c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
289c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
299c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_L3S_CLKSTCTRL_OFFSET,
309c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
319c80f3aaSVaibhav Hiremath };
329c80f3aaSVaibhav Hiremath
339c80f3aaSVaibhav Hiremath static struct clockdomain l4fw_am33xx_clkdm = {
349c80f3aaSVaibhav Hiremath .name = "l4fw_clkdm",
359c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
369c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
379c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_L4FW_CLKSTCTRL_OFFSET,
389c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
399c80f3aaSVaibhav Hiremath };
409c80f3aaSVaibhav Hiremath
419c80f3aaSVaibhav Hiremath static struct clockdomain l3_am33xx_clkdm = {
429c80f3aaSVaibhav Hiremath .name = "l3_clkdm",
439c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
449c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
459c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_L3_CLKSTCTRL_OFFSET,
469c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
479c80f3aaSVaibhav Hiremath };
489c80f3aaSVaibhav Hiremath
499c80f3aaSVaibhav Hiremath static struct clockdomain l4hs_am33xx_clkdm = {
509c80f3aaSVaibhav Hiremath .name = "l4hs_clkdm",
519c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
529c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
539c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_L4HS_CLKSTCTRL_OFFSET,
549c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
559c80f3aaSVaibhav Hiremath };
569c80f3aaSVaibhav Hiremath
579c80f3aaSVaibhav Hiremath static struct clockdomain ocpwp_l3_am33xx_clkdm = {
589c80f3aaSVaibhav Hiremath .name = "ocpwp_l3_clkdm",
599c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
609c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
619c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_OCPWP_L3_CLKSTCTRL_OFFSET,
629c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
639c80f3aaSVaibhav Hiremath };
649c80f3aaSVaibhav Hiremath
659c80f3aaSVaibhav Hiremath static struct clockdomain pruss_ocp_am33xx_clkdm = {
669c80f3aaSVaibhav Hiremath .name = "pruss_ocp_clkdm",
679c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
689c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
699c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_PRUSS_CLKSTCTRL_OFFSET,
709c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
719c80f3aaSVaibhav Hiremath };
729c80f3aaSVaibhav Hiremath
739c80f3aaSVaibhav Hiremath static struct clockdomain cpsw_125mhz_am33xx_clkdm = {
749c80f3aaSVaibhav Hiremath .name = "cpsw_125mhz_clkdm",
759c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
769c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
779c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_CPSW_CLKSTCTRL_OFFSET,
789c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
799c80f3aaSVaibhav Hiremath };
809c80f3aaSVaibhav Hiremath
819c80f3aaSVaibhav Hiremath static struct clockdomain lcdc_am33xx_clkdm = {
829c80f3aaSVaibhav Hiremath .name = "lcdc_clkdm",
839c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
849c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
859c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_LCDC_CLKSTCTRL_OFFSET,
869c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
879c80f3aaSVaibhav Hiremath };
889c80f3aaSVaibhav Hiremath
899c80f3aaSVaibhav Hiremath static struct clockdomain clk_24mhz_am33xx_clkdm = {
909c80f3aaSVaibhav Hiremath .name = "clk_24mhz_clkdm",
919c80f3aaSVaibhav Hiremath .pwrdm = { .name = "per_pwrdm" },
929c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_PER_MOD,
939c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_PER_CLK_24MHZ_CLKSTCTRL_OFFSET,
949c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
959c80f3aaSVaibhav Hiremath };
969c80f3aaSVaibhav Hiremath
979c80f3aaSVaibhav Hiremath static struct clockdomain l4_wkup_am33xx_clkdm = {
989c80f3aaSVaibhav Hiremath .name = "l4_wkup_clkdm",
999c80f3aaSVaibhav Hiremath .pwrdm = { .name = "wkup_pwrdm" },
1009c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_WKUP_MOD,
1019c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_WKUP_CLKSTCTRL_OFFSET,
1029c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
1039c80f3aaSVaibhav Hiremath };
1049c80f3aaSVaibhav Hiremath
1059c80f3aaSVaibhav Hiremath static struct clockdomain l3_aon_am33xx_clkdm = {
1069c80f3aaSVaibhav Hiremath .name = "l3_aon_clkdm",
1079c80f3aaSVaibhav Hiremath .pwrdm = { .name = "wkup_pwrdm" },
1089c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_WKUP_MOD,
1099c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_L3_AON_CLKSTCTRL_OFFSET,
1109c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
1119c80f3aaSVaibhav Hiremath };
1129c80f3aaSVaibhav Hiremath
1139c80f3aaSVaibhav Hiremath static struct clockdomain l4_wkup_aon_am33xx_clkdm = {
1149c80f3aaSVaibhav Hiremath .name = "l4_wkup_aon_clkdm",
1159c80f3aaSVaibhav Hiremath .pwrdm = { .name = "wkup_pwrdm" },
1169c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_WKUP_MOD,
1179c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_L4_WKUP_AON_CLKSTCTRL_OFFSET,
1189c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
1199c80f3aaSVaibhav Hiremath };
1209c80f3aaSVaibhav Hiremath
1219c80f3aaSVaibhav Hiremath static struct clockdomain mpu_am33xx_clkdm = {
1229c80f3aaSVaibhav Hiremath .name = "mpu_clkdm",
1239c80f3aaSVaibhav Hiremath .pwrdm = { .name = "mpu_pwrdm" },
1249c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_MPU_MOD,
1259c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_MPU_CLKSTCTRL_OFFSET,
1269c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
1279c80f3aaSVaibhav Hiremath };
1289c80f3aaSVaibhav Hiremath
1299c80f3aaSVaibhav Hiremath static struct clockdomain l4_rtc_am33xx_clkdm = {
1309c80f3aaSVaibhav Hiremath .name = "l4_rtc_clkdm",
1319c80f3aaSVaibhav Hiremath .pwrdm = { .name = "rtc_pwrdm" },
1329c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_RTC_MOD,
1339c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_RTC_CLKSTCTRL_OFFSET,
1349c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
1359c80f3aaSVaibhav Hiremath };
1369c80f3aaSVaibhav Hiremath
1379c80f3aaSVaibhav Hiremath static struct clockdomain gfx_l3_am33xx_clkdm = {
1389c80f3aaSVaibhav Hiremath .name = "gfx_l3_clkdm",
1399c80f3aaSVaibhav Hiremath .pwrdm = { .name = "gfx_pwrdm" },
1409c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_GFX_MOD,
1419c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_GFX_L3_CLKSTCTRL_OFFSET,
1429c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
1439c80f3aaSVaibhav Hiremath };
1449c80f3aaSVaibhav Hiremath
1459c80f3aaSVaibhav Hiremath static struct clockdomain gfx_l4ls_gfx_am33xx_clkdm = {
1469c80f3aaSVaibhav Hiremath .name = "gfx_l4ls_gfx_clkdm",
1479c80f3aaSVaibhav Hiremath .pwrdm = { .name = "gfx_pwrdm" },
1489c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_GFX_MOD,
1499c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_GFX_L4LS_GFX_CLKSTCTRL__1_OFFSET,
1509c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
1519c80f3aaSVaibhav Hiremath };
1529c80f3aaSVaibhav Hiremath
1539c80f3aaSVaibhav Hiremath static struct clockdomain l4_cefuse_am33xx_clkdm = {
1549c80f3aaSVaibhav Hiremath .name = "l4_cefuse_clkdm",
1559c80f3aaSVaibhav Hiremath .pwrdm = { .name = "cefuse_pwrdm" },
1569c80f3aaSVaibhav Hiremath .cm_inst = AM33XX_CM_CEFUSE_MOD,
1579c80f3aaSVaibhav Hiremath .clkdm_offs = AM33XX_CM_CEFUSE_CLKSTCTRL_OFFSET,
1589c80f3aaSVaibhav Hiremath .flags = CLKDM_CAN_SWSUP,
1599c80f3aaSVaibhav Hiremath };
1609c80f3aaSVaibhav Hiremath
1619c80f3aaSVaibhav Hiremath static struct clockdomain *clockdomains_am33xx[] __initdata = {
1629c80f3aaSVaibhav Hiremath &l4ls_am33xx_clkdm,
1639c80f3aaSVaibhav Hiremath &l3s_am33xx_clkdm,
1649c80f3aaSVaibhav Hiremath &l4fw_am33xx_clkdm,
1659c80f3aaSVaibhav Hiremath &l3_am33xx_clkdm,
1669c80f3aaSVaibhav Hiremath &l4hs_am33xx_clkdm,
1679c80f3aaSVaibhav Hiremath &ocpwp_l3_am33xx_clkdm,
1689c80f3aaSVaibhav Hiremath &pruss_ocp_am33xx_clkdm,
1699c80f3aaSVaibhav Hiremath &cpsw_125mhz_am33xx_clkdm,
1709c80f3aaSVaibhav Hiremath &lcdc_am33xx_clkdm,
1719c80f3aaSVaibhav Hiremath &clk_24mhz_am33xx_clkdm,
1729c80f3aaSVaibhav Hiremath &l4_wkup_am33xx_clkdm,
1739c80f3aaSVaibhav Hiremath &l3_aon_am33xx_clkdm,
1749c80f3aaSVaibhav Hiremath &l4_wkup_aon_am33xx_clkdm,
1759c80f3aaSVaibhav Hiremath &mpu_am33xx_clkdm,
1769c80f3aaSVaibhav Hiremath &l4_rtc_am33xx_clkdm,
1779c80f3aaSVaibhav Hiremath &gfx_l3_am33xx_clkdm,
1789c80f3aaSVaibhav Hiremath &gfx_l4ls_gfx_am33xx_clkdm,
1799c80f3aaSVaibhav Hiremath &l4_cefuse_am33xx_clkdm,
1809c80f3aaSVaibhav Hiremath NULL,
1819c80f3aaSVaibhav Hiremath };
1829c80f3aaSVaibhav Hiremath
am33xx_clockdomains_init(void)1839c80f3aaSVaibhav Hiremath void __init am33xx_clockdomains_init(void)
1849c80f3aaSVaibhav Hiremath {
1859c80f3aaSVaibhav Hiremath clkdm_register_platform_funcs(&am33xx_clkdm_operations);
1869c80f3aaSVaibhav Hiremath clkdm_register_clkdms(clockdomains_am33xx);
1879c80f3aaSVaibhav Hiremath clkdm_complete_init();
1889c80f3aaSVaibhav Hiremath }
189