162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * AM43xx Clock domains framework 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2013 Texas Instruments, Inc. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/kernel.h> 962306a36Sopenharmony_ci#include <linux/io.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "clockdomain.h" 1262306a36Sopenharmony_ci#include "prcm44xx.h" 1362306a36Sopenharmony_ci#include "prcm43xx.h" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistatic struct clockdomain l4_cefuse_43xx_clkdm = { 1662306a36Sopenharmony_ci .name = "l4_cefuse_clkdm", 1762306a36Sopenharmony_ci .pwrdm = { .name = "cefuse_pwrdm" }, 1862306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 1962306a36Sopenharmony_ci .cm_inst = AM43XX_CM_CEFUSE_INST, 2062306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_CEFUSE_CEFUSE_CDOFFS, 2162306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 2262306a36Sopenharmony_ci}; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistatic struct clockdomain mpu_43xx_clkdm = { 2562306a36Sopenharmony_ci .name = "mpu_clkdm", 2662306a36Sopenharmony_ci .pwrdm = { .name = "mpu_pwrdm" }, 2762306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 2862306a36Sopenharmony_ci .cm_inst = AM43XX_CM_MPU_INST, 2962306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_MPU_MPU_CDOFFS, 3062306a36Sopenharmony_ci .flags = CLKDM_CAN_HWSUP_SWSUP, 3162306a36Sopenharmony_ci}; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistatic struct clockdomain l4ls_43xx_clkdm = { 3462306a36Sopenharmony_ci .name = "l4ls_clkdm", 3562306a36Sopenharmony_ci .pwrdm = { .name = "per_pwrdm" }, 3662306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 3762306a36Sopenharmony_ci .cm_inst = AM43XX_CM_PER_INST, 3862306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_PER_L4LS_CDOFFS, 3962306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 4062306a36Sopenharmony_ci}; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistatic struct clockdomain tamper_43xx_clkdm = { 4362306a36Sopenharmony_ci .name = "tamper_clkdm", 4462306a36Sopenharmony_ci .pwrdm = { .name = "tamper_pwrdm" }, 4562306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 4662306a36Sopenharmony_ci .cm_inst = AM43XX_CM_TAMPER_INST, 4762306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_TAMPER_TAMPER_CDOFFS, 4862306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cistatic struct clockdomain l4_rtc_43xx_clkdm = { 5262306a36Sopenharmony_ci .name = "l4_rtc_clkdm", 5362306a36Sopenharmony_ci .pwrdm = { .name = "rtc_pwrdm" }, 5462306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 5562306a36Sopenharmony_ci .cm_inst = AM43XX_CM_RTC_INST, 5662306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_RTC_RTC_CDOFFS, 5762306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 5862306a36Sopenharmony_ci}; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistatic struct clockdomain pruss_ocp_43xx_clkdm = { 6162306a36Sopenharmony_ci .name = "pruss_ocp_clkdm", 6262306a36Sopenharmony_ci .pwrdm = { .name = "per_pwrdm" }, 6362306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 6462306a36Sopenharmony_ci .cm_inst = AM43XX_CM_PER_INST, 6562306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_PER_ICSS_CDOFFS, 6662306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 6762306a36Sopenharmony_ci}; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cistatic struct clockdomain ocpwp_l3_43xx_clkdm = { 7062306a36Sopenharmony_ci .name = "ocpwp_l3_clkdm", 7162306a36Sopenharmony_ci .pwrdm = { .name = "per_pwrdm" }, 7262306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 7362306a36Sopenharmony_ci .cm_inst = AM43XX_CM_PER_INST, 7462306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_PER_OCPWP_L3_CDOFFS, 7562306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 7662306a36Sopenharmony_ci}; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cistatic struct clockdomain l3s_tsc_43xx_clkdm = { 7962306a36Sopenharmony_ci .name = "l3s_tsc_clkdm", 8062306a36Sopenharmony_ci .pwrdm = { .name = "wkup_pwrdm" }, 8162306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 8262306a36Sopenharmony_ci .cm_inst = AM43XX_CM_WKUP_INST, 8362306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_WKUP_L3S_TSC_CDOFFS, 8462306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 8562306a36Sopenharmony_ci}; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_cistatic struct clockdomain lcdc_43xx_clkdm = { 8862306a36Sopenharmony_ci .name = "lcdc_clkdm", 8962306a36Sopenharmony_ci .pwrdm = { .name = "per_pwrdm" }, 9062306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 9162306a36Sopenharmony_ci .cm_inst = AM43XX_CM_PER_INST, 9262306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_PER_LCDC_CDOFFS, 9362306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 9462306a36Sopenharmony_ci}; 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_cistatic struct clockdomain dss_43xx_clkdm = { 9762306a36Sopenharmony_ci .name = "dss_clkdm", 9862306a36Sopenharmony_ci .pwrdm = { .name = "per_pwrdm" }, 9962306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 10062306a36Sopenharmony_ci .cm_inst = AM43XX_CM_PER_INST, 10162306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_PER_DSS_CDOFFS, 10262306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 10362306a36Sopenharmony_ci}; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cistatic struct clockdomain l3_aon_43xx_clkdm = { 10662306a36Sopenharmony_ci .name = "l3_aon_clkdm", 10762306a36Sopenharmony_ci .pwrdm = { .name = "wkup_pwrdm" }, 10862306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 10962306a36Sopenharmony_ci .cm_inst = AM43XX_CM_WKUP_INST, 11062306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_WKUP_L3_AON_CDOFFS, 11162306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 11262306a36Sopenharmony_ci}; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_cistatic struct clockdomain emif_43xx_clkdm = { 11562306a36Sopenharmony_ci .name = "emif_clkdm", 11662306a36Sopenharmony_ci .pwrdm = { .name = "per_pwrdm" }, 11762306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 11862306a36Sopenharmony_ci .cm_inst = AM43XX_CM_PER_INST, 11962306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_PER_EMIF_CDOFFS, 12062306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 12162306a36Sopenharmony_ci}; 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_cistatic struct clockdomain l4_wkup_aon_43xx_clkdm = { 12462306a36Sopenharmony_ci .name = "l4_wkup_aon_clkdm", 12562306a36Sopenharmony_ci .pwrdm = { .name = "wkup_pwrdm" }, 12662306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 12762306a36Sopenharmony_ci .cm_inst = AM43XX_CM_WKUP_INST, 12862306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_WKUP_L4_WKUP_AON_CDOFFS, 12962306a36Sopenharmony_ci}; 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_cistatic struct clockdomain l3_43xx_clkdm = { 13262306a36Sopenharmony_ci .name = "l3_clkdm", 13362306a36Sopenharmony_ci .pwrdm = { .name = "per_pwrdm" }, 13462306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 13562306a36Sopenharmony_ci .cm_inst = AM43XX_CM_PER_INST, 13662306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_PER_L3_CDOFFS, 13762306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 13862306a36Sopenharmony_ci}; 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_cistatic struct clockdomain l4_wkup_43xx_clkdm = { 14162306a36Sopenharmony_ci .name = "l4_wkup_clkdm", 14262306a36Sopenharmony_ci .pwrdm = { .name = "wkup_pwrdm" }, 14362306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 14462306a36Sopenharmony_ci .cm_inst = AM43XX_CM_WKUP_INST, 14562306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_WKUP_WKUP_CDOFFS, 14662306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 14762306a36Sopenharmony_ci}; 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_cistatic struct clockdomain cpsw_125mhz_43xx_clkdm = { 15062306a36Sopenharmony_ci .name = "cpsw_125mhz_clkdm", 15162306a36Sopenharmony_ci .pwrdm = { .name = "per_pwrdm" }, 15262306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 15362306a36Sopenharmony_ci .cm_inst = AM43XX_CM_PER_INST, 15462306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_PER_CPSW_CDOFFS, 15562306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 15662306a36Sopenharmony_ci}; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_cistatic struct clockdomain gfx_l3_43xx_clkdm = { 15962306a36Sopenharmony_ci .name = "gfx_l3_clkdm", 16062306a36Sopenharmony_ci .pwrdm = { .name = "gfx_pwrdm" }, 16162306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 16262306a36Sopenharmony_ci .cm_inst = AM43XX_CM_GFX_INST, 16362306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_GFX_GFX_L3_CDOFFS, 16462306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 16562306a36Sopenharmony_ci}; 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_cistatic struct clockdomain l3s_43xx_clkdm = { 16862306a36Sopenharmony_ci .name = "l3s_clkdm", 16962306a36Sopenharmony_ci .pwrdm = { .name = "per_pwrdm" }, 17062306a36Sopenharmony_ci .prcm_partition = AM43XX_CM_PARTITION, 17162306a36Sopenharmony_ci .cm_inst = AM43XX_CM_PER_INST, 17262306a36Sopenharmony_ci .clkdm_offs = AM43XX_CM_PER_L3S_CDOFFS, 17362306a36Sopenharmony_ci .flags = CLKDM_CAN_SWSUP, 17462306a36Sopenharmony_ci}; 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_cistatic struct clockdomain *clockdomains_am43xx[] __initdata = { 17762306a36Sopenharmony_ci &l4_cefuse_43xx_clkdm, 17862306a36Sopenharmony_ci &mpu_43xx_clkdm, 17962306a36Sopenharmony_ci &l4ls_43xx_clkdm, 18062306a36Sopenharmony_ci &tamper_43xx_clkdm, 18162306a36Sopenharmony_ci &l4_rtc_43xx_clkdm, 18262306a36Sopenharmony_ci &pruss_ocp_43xx_clkdm, 18362306a36Sopenharmony_ci &ocpwp_l3_43xx_clkdm, 18462306a36Sopenharmony_ci &l3s_tsc_43xx_clkdm, 18562306a36Sopenharmony_ci &lcdc_43xx_clkdm, 18662306a36Sopenharmony_ci &dss_43xx_clkdm, 18762306a36Sopenharmony_ci &l3_aon_43xx_clkdm, 18862306a36Sopenharmony_ci &emif_43xx_clkdm, 18962306a36Sopenharmony_ci &l4_wkup_aon_43xx_clkdm, 19062306a36Sopenharmony_ci &l3_43xx_clkdm, 19162306a36Sopenharmony_ci &l4_wkup_43xx_clkdm, 19262306a36Sopenharmony_ci &cpsw_125mhz_43xx_clkdm, 19362306a36Sopenharmony_ci &gfx_l3_43xx_clkdm, 19462306a36Sopenharmony_ci &l3s_43xx_clkdm, 19562306a36Sopenharmony_ci NULL 19662306a36Sopenharmony_ci}; 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_civoid __init am43xx_clockdomains_init(void) 19962306a36Sopenharmony_ci{ 20062306a36Sopenharmony_ci clkdm_register_platform_funcs(&am43xx_clkdm_operations); 20162306a36Sopenharmony_ci clkdm_register_clkdms(clockdomains_am43xx); 20262306a36Sopenharmony_ci clkdm_complete_init(); 20362306a36Sopenharmony_ci} 204