diff options
| author | Aida Mynzhasova <aida.mynzhasova@skitlab.ru> | 2015-01-26 12:26:32 -0500 |
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2015-01-26 12:26:32 -0500 |
| commit | a64459c42d744c765b4d38ae908c318635aaa697 (patch) | |
| tree | 9063a447e41c1f0bbd617107c7bc9d96bcef97b6 | |
| parent | abf8cc1d5bc8babf9ac5410d50089f0004ec5593 (diff) | |
ARM: OMAP2+: Add clock domain support for dm816x
This patch adds required definitions and structures for clockdomain
initialization, so omap3xxx_clockdomains_init() was substituted by
new ti81xx_clockdomains_init() while early initialization of
TI81XX platform.
Note that we now need to have 81xx in a separate CONFIG_SOC_TI81XX
block instead inside the ifdef block for omap3 to avoid make
randconfig build errors.
This code is based on the TI81XX-LINUX-PSP-04.04.00.02 patches
published at:
http://downloads.ti.com/dsps/dsps_public_sw/psp/LinuxPSP/TI81XX_04_04/04_04_00_02/index_FDS.html
Cc: Brian Hutchinson <b.hutchman@gmail.com>
Cc: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Aida Mynzhasova <aida.mynzhasova@skitlab.ru>
[tony@atomide.com: updated to apply, renamed to clockdomains81xx.c,
fixed to use am33xx_clkdm_operations, various fixes suggested by
Paul Walmsley]
Reviewed-by: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
| -rw-r--r-- | arch/arm/mach-omap2/Makefile | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/clockdomain.h | 1 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/clockdomains81xx_data.c | 194 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/cm81xx.h | 61 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/io.c | 78 |
5 files changed, 298 insertions, 38 deletions
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 3a6463f88ea2..352873c7a6a6 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
| @@ -171,6 +171,8 @@ obj-$(CONFIG_ARCH_OMAP4) += $(clockdomain-common) | |||
| 171 | obj-$(CONFIG_ARCH_OMAP4) += clockdomains44xx_data.o | 171 | obj-$(CONFIG_ARCH_OMAP4) += clockdomains44xx_data.o |
| 172 | obj-$(CONFIG_SOC_AM33XX) += $(clockdomain-common) | 172 | obj-$(CONFIG_SOC_AM33XX) += $(clockdomain-common) |
| 173 | obj-$(CONFIG_SOC_AM33XX) += clockdomains33xx_data.o | 173 | obj-$(CONFIG_SOC_AM33XX) += clockdomains33xx_data.o |
| 174 | obj-$(CONFIG_SOC_TI81XX) += $(clockdomain-common) | ||
| 175 | obj-$(CONFIG_SOC_TI81XX) += clockdomains81xx_data.o | ||
| 174 | obj-$(CONFIG_SOC_AM43XX) += $(clockdomain-common) | 176 | obj-$(CONFIG_SOC_AM43XX) += $(clockdomain-common) |
| 175 | obj-$(CONFIG_SOC_AM43XX) += clockdomains43xx_data.o | 177 | obj-$(CONFIG_SOC_AM43XX) += clockdomains43xx_data.o |
| 176 | obj-$(CONFIG_SOC_OMAP5) += $(clockdomain-common) | 178 | obj-$(CONFIG_SOC_OMAP5) += $(clockdomain-common) |
diff --git a/arch/arm/mach-omap2/clockdomain.h b/arch/arm/mach-omap2/clockdomain.h index 82c37b1becc4..77bab5fb6814 100644 --- a/arch/arm/mach-omap2/clockdomain.h +++ b/arch/arm/mach-omap2/clockdomain.h | |||
| @@ -216,6 +216,7 @@ extern void __init omap242x_clockdomains_init(void); | |||
| 216 | extern void __init omap243x_clockdomains_init(void); | 216 | extern void __init omap243x_clockdomains_init(void); |
| 217 | extern void __init omap3xxx_clockdomains_init(void); | 217 | extern void __init omap3xxx_clockdomains_init(void); |
| 218 | extern void __init am33xx_clockdomains_init(void); | 218 | extern void __init am33xx_clockdomains_init(void); |
| 219 | extern void __init ti81xx_clockdomains_init(void); | ||
| 219 | extern void __init omap44xx_clockdomains_init(void); | 220 | extern void __init omap44xx_clockdomains_init(void); |
| 220 | extern void __init omap54xx_clockdomains_init(void); | 221 | extern void __init omap54xx_clockdomains_init(void); |
| 221 | extern void __init dra7xx_clockdomains_init(void); | 222 | extern void __init dra7xx_clockdomains_init(void); |
diff --git a/arch/arm/mach-omap2/clockdomains81xx_data.c b/arch/arm/mach-omap2/clockdomains81xx_data.c new file mode 100644 index 000000000000..ce2a82001d0d --- /dev/null +++ b/arch/arm/mach-omap2/clockdomains81xx_data.c | |||
| @@ -0,0 +1,194 @@ | |||
| 1 | /* | ||
| 2 | * TI81XX Clock Domain data. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Texas Instruments, Inc. - http://www.ti.com/ | ||
| 5 | * Copyright (C) 2013 SKTB SKiT, http://www.skitlab.ru/ | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License as | ||
| 9 | * published by the Free Software Foundation version 2. | ||
| 10 | * | ||
| 11 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any | ||
| 12 | * kind, whether express or implied; without even the implied warranty | ||
| 13 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_81XX_H | ||
| 18 | #define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_81XX_H | ||
| 19 | |||
| 20 | #include <linux/kernel.h> | ||
| 21 | #include <linux/io.h> | ||
| 22 | |||
| 23 | #include "clockdomain.h" | ||
| 24 | #include "cm81xx.h" | ||
| 25 | |||
| 26 | /* | ||
| 27 | * Note that 814x seems to have HWSUP_SWSUP for many clockdomains | ||
| 28 | * while 816x does not. According to the TRM, 816x only has HWSUP | ||
| 29 | * for ALWON_L3_FAST. Also note that the TI tree clockdomains81xx.h | ||
| 30 | * seems to have the related ifdef the wrong way around claiming | ||
| 31 | * 816x supports HWSUP while 814x does not. For now, we only set | ||
| 32 | * HWSUP for ALWON_L3_FAST as that seems to be supported for both | ||
| 33 | * dm814x and dm816x. | ||
| 34 | */ | ||
| 35 | |||
| 36 | /* Common for 81xx */ | ||
| 37 | |||
| 38 | static struct clockdomain alwon_l3_slow_81xx_clkdm = { | ||
| 39 | .name = "alwon_l3s_clkdm", | ||
| 40 | .pwrdm = { .name = "alwon_pwrdm" }, | ||
| 41 | .cm_inst = TI81XX_CM_ALWON_MOD, | ||
| 42 | .clkdm_offs = TI81XX_CM_ALWON_L3_SLOW_CLKDM, | ||
| 43 | .flags = CLKDM_CAN_SWSUP, | ||
| 44 | }; | ||
| 45 | |||
| 46 | static struct clockdomain alwon_l3_med_81xx_clkdm = { | ||
| 47 | .name = "alwon_l3_med_clkdm", | ||
| 48 | .pwrdm = { .name = "alwon_pwrdm" }, | ||
| 49 | .cm_inst = TI81XX_CM_ALWON_MOD, | ||
| 50 | .clkdm_offs = TI81XX_CM_ALWON_L3_MED_CLKDM, | ||
| 51 | .flags = CLKDM_CAN_SWSUP, | ||
| 52 | }; | ||
| 53 | |||
| 54 | static struct clockdomain alwon_l3_fast_81xx_clkdm = { | ||
| 55 | .name = "alwon_l3_fast_clkdm", | ||
| 56 | .pwrdm = { .name = "alwon_pwrdm" }, | ||
| 57 | .cm_inst = TI81XX_CM_ALWON_MOD, | ||
| 58 | .clkdm_offs = TI81XX_CM_ALWON_L3_FAST_CLKDM, | ||
| 59 | .flags = CLKDM_CAN_HWSUP_SWSUP, | ||
| 60 | }; | ||
| 61 | |||
| 62 | static struct clockdomain alwon_ethernet_81xx_clkdm = { | ||
| 63 | .name = "alwon_ethernet_clkdm", | ||
| 64 | .pwrdm = { .name = "alwon_pwrdm" }, | ||
| 65 | .cm_inst = TI81XX_CM_ALWON_MOD, | ||
| 66 | .clkdm_offs = TI81XX_CM_ETHERNET_CLKDM, | ||
| 67 | .flags = CLKDM_CAN_SWSUP, | ||
| 68 | }; | ||
| 69 | |||
| 70 | static struct clockdomain mmu_81xx_clkdm = { | ||
| 71 | .name = "mmu_clkdm", | ||
| 72 | .pwrdm = { .name = "alwon_pwrdm" }, | ||
| 73 | .cm_inst = TI81XX_CM_ALWON_MOD, | ||
| 74 | .clkdm_offs = TI81XX_CM_MMU_CLKDM, | ||
| 75 | .flags = CLKDM_CAN_SWSUP, | ||
| 76 | }; | ||
| 77 | |||
| 78 | static struct clockdomain mmu_cfg_81xx_clkdm = { | ||
| 79 | .name = "mmu_cfg_clkdm", | ||
| 80 | .pwrdm = { .name = "alwon_pwrdm" }, | ||
| 81 | .cm_inst = TI81XX_CM_ALWON_MOD, | ||
| 82 | .clkdm_offs = TI81XX_CM_MMUCFG_CLKDM, | ||
| 83 | .flags = CLKDM_CAN_SWSUP, | ||
| 84 | }; | ||
| 85 | |||
| 86 | /* 816x only */ | ||
| 87 | |||
| 88 | static struct clockdomain alwon_mpu_816x_clkdm = { | ||
| 89 | .name = "alwon_mpu_clkdm", | ||
| 90 | .pwrdm = { .name = "alwon_pwrdm" }, | ||
| 91 | .cm_inst = TI81XX_CM_ALWON_MOD, | ||
| 92 | .clkdm_offs = TI81XX_CM_ALWON_MPU_CLKDM, | ||
| 93 | .flags = CLKDM_CAN_SWSUP, | ||
| 94 | }; | ||
| 95 | |||
| 96 | static struct clockdomain active_gem_816x_clkdm = { | ||
| 97 | .name = "active_gem_clkdm", | ||
| 98 | .pwrdm = { .name = "active_pwrdm" }, | ||
| 99 | .cm_inst = TI816X_CM_ACTIVE_MOD, | ||
| 100 | .clkdm_offs = TI816X_CM_ACTIVE_GEM_CLKDM, | ||
| 101 | .flags = CLKDM_CAN_SWSUP, | ||
| 102 | }; | ||
| 103 | |||
| 104 | static struct clockdomain ivahd0_816x_clkdm = { | ||
| 105 | .name = "ivahd0_clkdm", | ||
| 106 | .pwrdm = { .name = "ivahd0_pwrdm" }, | ||
| 107 | .cm_inst = TI816X_CM_IVAHD0_MOD, | ||
| 108 | .clkdm_offs = TI816X_CM_IVAHD0_CLKDM, | ||
| 109 | .flags = CLKDM_CAN_SWSUP, | ||
| 110 | }; | ||
| 111 | |||
| 112 | static struct clockdomain ivahd1_816x_clkdm = { | ||
| 113 | .name = "ivahd1_clkdm", | ||
| 114 | .pwrdm = { .name = "ivahd1_pwrdm" }, | ||
| 115 | .cm_inst = TI816X_CM_IVAHD1_MOD, | ||
| 116 | .clkdm_offs = TI816X_CM_IVAHD1_CLKDM, | ||
| 117 | .flags = CLKDM_CAN_SWSUP, | ||
| 118 | }; | ||
| 119 | |||
| 120 | static struct clockdomain ivahd2_816x_clkdm = { | ||
| 121 | .name = "ivahd2_clkdm", | ||
| 122 | .pwrdm = { .name = "ivahd2_pwrdm" }, | ||
| 123 | .cm_inst = TI816X_CM_IVAHD2_MOD, | ||
| 124 | .clkdm_offs = TI816X_CM_IVAHD2_CLKDM, | ||
| 125 | .flags = CLKDM_CAN_SWSUP, | ||
| 126 | }; | ||
| 127 | |||
| 128 | static struct clockdomain sgx_816x_clkdm = { | ||
| 129 | .name = "sgx_clkdm", | ||
| 130 | .pwrdm = { .name = "sgx_pwrdm" }, | ||
| 131 | .cm_inst = TI816X_CM_SGX_MOD, | ||
| 132 | .clkdm_offs = TI816X_CM_SGX_CLKDM, | ||
| 133 | .flags = CLKDM_CAN_SWSUP, | ||
| 134 | }; | ||
| 135 | |||
| 136 | static struct clockdomain default_l3_med_816x_clkdm = { | ||
| 137 | .name = "default_l3_med_clkdm", | ||
| 138 | .pwrdm = { .name = "default_pwrdm" }, | ||
| 139 | .cm_inst = TI816X_CM_DEFAULT_MOD, | ||
| 140 | .clkdm_offs = TI816X_CM_DEFAULT_L3_MED_CLKDM, | ||
| 141 | .flags = CLKDM_CAN_SWSUP, | ||
| 142 | }; | ||
| 143 | |||
| 144 | static struct clockdomain default_ducati_816x_clkdm = { | ||
| 145 | .name = "default_ducati_clkdm", | ||
| 146 | .pwrdm = { .name = "default_pwrdm" }, | ||
| 147 | .cm_inst = TI816X_CM_DEFAULT_MOD, | ||
