diff options
| author | Viresh Kumar <viresh.kumar@st.com> | 2012-04-09 23:32:35 -0400 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2012-05-12 15:44:12 -0400 |
| commit | 5df33a62c4a028d6fc7f2dcc159827d09b7334b8 (patch) | |
| tree | f4da61ce3bf14e9bf4a1dae3188109a6de34f708 | |
| parent | f8abc080d33e69dfa2c3dd0f84c31832e2679091 (diff) | |
SPEAr: Switch to common clock framework
SPEAr SoCs used its own clock framework since now. From now on they will move to
use common clock framework.
This patch updates existing SPEAr machine support to adapt for common clock
framework.
Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Reviewed-by: Mike Turquette <mturquette@linaro.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>
| -rw-r--r-- | MAINTAINERS | 4 | ||||
| -rw-r--r-- | arch/arm/Kconfig | 1 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/Makefile | 2 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/clock.c | 760 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/include/mach/generic.h | 3 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/include/mach/misc_regs.h | 144 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/include/mach/spear.h | 13 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/spear320.c | 1 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/spear3xx.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-spear6xx/Makefile | 2 | ||||
| -rw-r--r-- | arch/arm/mach-spear6xx/clock.c | 683 | ||||
| -rw-r--r-- | arch/arm/mach-spear6xx/include/mach/misc_regs.h | 154 | ||||
| -rw-r--r-- | arch/arm/mach-spear6xx/spear6xx.c | 5 | ||||
| -rw-r--r-- | arch/arm/plat-spear/Makefile | 2 | ||||
| -rw-r--r-- | arch/arm/plat-spear/clock.c | 1005 | ||||
| -rw-r--r-- | arch/arm/plat-spear/include/plat/clock.h | 249 | ||||
| -rw-r--r-- | drivers/clk/spear/Makefile | 3 | ||||
| -rw-r--r-- | drivers/clk/spear/spear3xx_clock.c | 612 | ||||
| -rw-r--r-- | drivers/clk/spear/spear6xx_clock.c | 342 |
19 files changed, 983 insertions, 3004 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 164e9a1df0f6..cb5425e3cd42 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -6336,9 +6336,7 @@ L: spear-devel@list.st.com | |||
| 6336 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 6336 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
| 6337 | W: http://www.st.com/spear | 6337 | W: http://www.st.com/spear |
| 6338 | S: Maintained | 6338 | S: Maintained |
| 6339 | F: arch/arm/mach-spear*/clock.c | 6339 | F: drivers/clk/spear/ |
| 6340 | F: arch/arm/plat-spear/clock.c | ||
| 6341 | F: arch/arm/plat-spear/include/plat/clock.h | ||
| 6342 | 6340 | ||
| 6343 | SPEAR PAD MULTIPLEXING SUPPORT | 6341 | SPEAR PAD MULTIPLEXING SUPPORT |
| 6344 | M: Viresh Kumar <viresh.kumar@st.com> | 6342 | M: Viresh Kumar <viresh.kumar@st.com> |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index cf006d40342c..ce030c242644 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -980,6 +980,7 @@ config PLAT_SPEAR | |||
| 980 | select ARM_AMBA | 980 | select ARM_AMBA |
| 981 | select ARCH_REQUIRE_GPIOLIB | 981 | select ARCH_REQUIRE_GPIOLIB |
| 982 | select CLKDEV_LOOKUP | 982 | select CLKDEV_LOOKUP |
| 983 | select COMMON_CLK | ||
| 983 | select CLKSRC_MMIO | 984 | select CLKSRC_MMIO |
| 984 | select GENERIC_CLOCKEVENTS | 985 | select GENERIC_CLOCKEVENTS |
| 985 | select HAVE_CLK | 986 | select HAVE_CLK |
diff --git a/arch/arm/mach-spear3xx/Makefile b/arch/arm/mach-spear3xx/Makefile index b24862489704..5b30d0d10892 100644 --- a/arch/arm/mach-spear3xx/Makefile +++ b/arch/arm/mach-spear3xx/Makefile | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | # common files | 5 | # common files |
| 6 | obj-y += spear3xx.o clock.o | 6 | obj-y += spear3xx.o |
| 7 | 7 | ||
| 8 | # spear300 specific files | 8 | # spear300 specific files |
| 9 | obj-$(CONFIG_MACH_SPEAR300) += spear300.o | 9 | obj-$(CONFIG_MACH_SPEAR300) += spear300.o |
diff --git a/arch/arm/mach-spear3xx/clock.c b/arch/arm/mach-spear3xx/clock.c deleted file mode 100644 index 6c4841f55223..000000000000 --- a/arch/arm/mach-spear3xx/clock.c +++ /dev/null | |||
| @@ -1,760 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-spear3xx/clock.c | ||
| 3 | * | ||
| 4 | * SPEAr3xx machines clock framework source file | ||
| 5 | * | ||
| 6 | * Copyright (C) 2009 ST Microelectronics | ||
| 7 | * Viresh Kumar<viresh.kumar@st.com> | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <linux/init.h> | ||
| 15 | #include <linux/io.h> | ||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <asm/mach-types.h> | ||
| 18 | #include <plat/clock.h> | ||
| 19 | #include <mach/misc_regs.h> | ||
| 20 | |||
| 21 | /* root clks */ | ||
| 22 | /* 32 KHz oscillator clock */ | ||
| 23 | static struct clk osc_32k_clk = { | ||
| 24 | .flags = ALWAYS_ENABLED, | ||
| 25 | .rate = 32000, | ||
| 26 | }; | ||
| 27 | |||
| 28 | /* 24 MHz oscillator clock */ | ||
| 29 | static struct clk osc_24m_clk = { | ||
| 30 | .flags = ALWAYS_ENABLED, | ||
| 31 | .rate = 24000000, | ||
| 32 | }; | ||
| 33 | |||
| 34 | /* clock derived from 32 KHz osc clk */ | ||
| 35 | /* rtc clock */ | ||
| 36 | static struct clk rtc_clk = { | ||
| 37 | .pclk = &osc_32k_clk, | ||
| 38 | .en_reg = PERIP1_CLK_ENB, | ||
| 39 | .en_reg_bit = RTC_CLK_ENB, | ||
| 40 | .recalc = &follow_parent, | ||
| 41 | }; | ||
| 42 | |||
| 43 | /* clock derived from 24 MHz osc clk */ | ||
| 44 | /* pll masks structure */ | ||
| 45 | static struct pll_clk_masks pll1_masks = { | ||
| 46 | .mode_mask = PLL_MODE_MASK, | ||
| 47 | .mode_shift = PLL_MODE_SHIFT, | ||
| 48 | .norm_fdbk_m_mask = PLL_NORM_FDBK_M_MASK, | ||
| 49 | .norm_fdbk_m_shift = PLL_NORM_FDBK_M_SHIFT, | ||
| 50 | .dith_fdbk_m_mask = PLL_DITH_FDBK_M_MASK, | ||
| 51 | .dith_fdbk_m_shift = PLL_DITH_FDBK_M_SHIFT, | ||
| 52 | .div_p_mask = PLL_DIV_P_MASK, | ||
| 53 | .div_p_shift = PLL_DIV_P_SHIFT, | ||
| 54 | .div_n_mask = PLL_DIV_N_MASK, | ||
| 55 | .div_n_shift = PLL_DIV_N_SHIFT, | ||
| 56 | }; | ||
| 57 | |||
| 58 | /* pll1 configuration structure */ | ||
| 59 | static struct pll_clk_config pll1_config = { | ||
| 60 | .mode_reg = PLL1_CTR, | ||
| 61 | .cfg_reg = PLL1_FRQ, | ||
| 62 | .masks = &pll1_masks, | ||
| 63 | }; | ||
| 64 | |||
| 65 | /* pll rate configuration table, in ascending order of rates */ | ||
| 66 | struct pll_rate_tbl pll_rtbl[] = { | ||
| 67 | {.mode = 0, .m = 0x85, .n = 0x0C, .p = 0x1}, /* 266 MHz */ | ||
| 68 | {.mode = 0, .m = 0xA6, .n = 0x0C, .p = 0x1}, /* 332 MHz */ | ||
| 69 | }; | ||
| 70 | |||
| 71 | /* PLL1 clock */ | ||
| 72 | static struct clk pll1_clk = { | ||
| 73 | .flags = ENABLED_ON_INIT, | ||
| 74 | .pclk = &osc_24m_clk, | ||
| 75 | .en_reg = PLL1_CTR, | ||
| 76 | .en_reg_bit = PLL_ENABLE, | ||
| 77 | .calc_rate = &pll_calc_rate, | ||
| 78 | .recalc = &pll_clk_recalc, | ||
| 79 | .set_rate = &pll_clk_set_rate, | ||
| 80 | .rate_config = {pll_rtbl, ARRAY_SIZE(pll_rtbl), 1}, | ||
| 81 | .private_data = &pll1_config, | ||
| 82 | }; | ||
| 83 | |||
| 84 | /* PLL3 48 MHz clock */ | ||
| 85 | static struct clk pll3_48m_clk = { | ||
| 86 | .flags = ALWAYS_ENABLED, | ||
| 87 | .pclk = &osc_24m_clk, | ||
| 88 | .rate = 48000000, | ||
| 89 | }; | ||
| 90 | |||
| 91 | /* watch dog timer clock */ | ||
| 92 | static struct clk wdt_clk = { | ||
| 93 | .flags = ALWAYS_ENABLED, | ||
| 94 | .pclk = &osc_24m_clk, | ||
| 95 | .recalc = &follow_parent, | ||
| 96 | }; | ||
| 97 | |||
| 98 | /* clock derived from pll1 clk */ | ||
| 99 | /* cpu clock */ | ||
| 100 | static struct clk cpu_clk = { | ||
| 101 | .flags = ALWAYS_ENABLED, | ||
| 102 | .pclk = &pll1_clk, | ||
| 103 | .recalc = &follow_parent, | ||
| 104 | }; | ||
| 105 | |||
| 106 | /* ahb masks structure */ | ||
| 107 | static struct bus_clk_masks ahb_masks = { | ||
| 108 | .mask = PLL_HCLK_RATIO_MASK, | ||
| 109 | .shift = PLL_HCLK_RATIO_SHIFT, | ||
| 110 | }; | ||
| 111 | |||
| 112 | /* ahb configuration structure */ | ||
| 113 | static struct bus_clk_config ahb_config = { | ||
| 114 | .reg = CORE_CLK_CFG, | ||
| 115 | .masks = &ahb_masks, | ||
| 116 | }; | ||
| 117 | |||
| 118 | /* ahb rate configuration table, in ascending order of rates */ | ||
| 119 | struct bus_rate_tbl bus_rtbl[] = { | ||
| 120 | {.div = 3}, /* == parent divided by 4 */ | ||
| 121 | {.div = 2}, /* == parent divided by 3 */ | ||
| 122 | {.div = 1}, /* == parent divided by 2 */ | ||
| 123 | {.div = 0}, /* == parent divided by 1 */ | ||
| 124 | }; | ||
| 125 | |||
| 126 | /* ahb clock */ | ||
| 127 | static struct clk ahb_clk = { | ||
| 128 | .flags = ALWAYS_ENABLED, | ||
| 129 | .pclk = &pll1_clk, | ||
