ARM: OMAP2+: clock code move under clk driver
Subsystems (6)
v3 cover ARM: OMAP2+: clock code move under clk driver
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor Makefile changes compared to v2, these were discussed under that set.
Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-move
Previous testing results still valid for this branch.
-Tero
Tero Kristo (27):
ARM: OMAP2+: clock: export driver API to setup/get clock features
clk: ti: move generic OMAP DPLL implementation under drivers/clk
clk: ti: move OMAP4+ DPLL implementation under drivers/clk
clk: ti: move interface clock implementation under drivers/clk
ARM: OMAP3: dpll3-m2: get rid of obsolete clksel access
ARM: OMAP2+: clk: remove obsolete clksel support code
ARM: OMAP2+: clock: remove clock_common_data.c file
ARM: OMAP36xx: remove clock36xx.c/.h files
clk: ti: autoidle: move generic autoidle handling code to clock
driver
clk: ti: move omap2_clk_enable_init_clocks under clock driver
ARM: OMAP2+: clock: remove support for legacy mpurate command line
param
ARM: OMAP2+: clock: add support for clkdm ops to the low level clk
ops
ARM: OMAP2+: clock: add support for specific CM ops to ti_clk_ll_ops
clk: ti: dpll: move omap3 DPLL functionality to clock driver
ARM: OMAP3: clock: remove clock3xxx.c file
ARM: OMAP2+: clock: remove clkdm_control static boolean from code
clk: ti: dflt: move support for default gate clock to clock driver
clk: ti: omap2430: move clock support code under clock driver
clk: ti: clkdm: move clkdm gate clock support code to clock driver
clk: ti: omap34xx: move omap34xx clock type support code to clock
driver
ARM: OMAP4: clock: remove clock44xx.h header
clk: ti: am3517: move remaining am3517 clock support code to clock
driver
clk: ti: move some public definitions to private header
ARM: OMAP2+: clock: remove dead definitions from the clock header
file
clk: ti: remove exported ll_ops struct, instead add an API for
registration
ARM: OMAP2+: clock: remove legacy omap2_clk_readl/writel APIs
clk: ti: move low-level access and init code under clock driver
arch/arm/mach-omap2/Makefile | 22 +-
arch/arm/mach-omap2/clkt34xx_dpll3m2.c | 7 +-
arch/arm/mach-omap2/clkt_clksel.c | 466 --------------
arch/arm/mach-omap2/clkt_iclk.c | 68 --
arch/arm/mach-omap2/clock.c | 675 +-------------------
arch/arm/mach-omap2/clock.h | 205 +-----
arch/arm/mach-omap2/clock2430.c | 57 --
arch/arm/mach-omap2/clock2xxx.c | 57 --
arch/arm/mach-omap2/clock34xx.c | 138 ----
arch/arm/mach-omap2/clock34xx.h | 18 -
arch/arm/mach-omap2/clock3517.c | 118 ----
arch/arm/mach-omap2/clock3517.h | 14 -
arch/arm/mach-omap2/clock36xx.c | 69 --
arch/arm/mach-omap2/clock36xx.h | 13 -
arch/arm/mach-omap2/clock3xxx.c | 135 ----
arch/arm/mach-omap2/clock44xx.h | 20 -
arch/arm/mach-omap2/clock_common_data.c | 115 ----
arch/arm/mach-omap2/io.c | 3 +-
drivers/clk/ti/Makefile | 10 +-
drivers/clk/ti/apll.c | 2 +
drivers/clk/ti/autoidle.c | 121 +++-
drivers/clk/ti/clk-2xxx.c | 2 +
drivers/clk/ti/clk-33xx.c | 2 +
drivers/clk/ti/clk-3xxx.c | 244 +++++++
drivers/clk/ti/clk-43xx.c | 2 +
drivers/clk/ti/clk-44xx.c | 2 +
drivers/clk/ti/clk-54xx.c | 2 +
drivers/clk/ti/clk-7xx.c | 3 +-
drivers/clk/ti/clk-816x.c | 2 +
drivers/clk/ti/clk.c | 145 ++++-
drivers/clk/ti/clkt_dflt.c | 316 +++++++++
.../arm/mach-omap2 => drivers/clk/ti}/clkt_dpll.c | 27 +-
drivers/clk/ti/clkt_iclk.c | 101 +++
drivers/clk/ti/clock.h | 113 ++++
drivers/clk/ti/clockdomain.c | 78 +++
{arch/arm/mach-omap2 => drivers/clk/ti}/dpll3xxx.c | 157 ++---
{arch/arm/mach-omap2 => drivers/clk/ti}/dpll44xx.c | 23 +-
drivers/clk/ti/fixed-factor.c | 2 +
include/linux/clk/ti.h | 157 ++---
39 files changed, 1324 insertions(+), 2387 deletions(-)
delete mode 100644 arch/arm/mach-omap2/clkt_clksel.c
delete mode 100644 arch/arm/mach-omap2/clkt_iclk.c
delete mode 100644 arch/arm/mach-omap2/clock2430.c
delete mode 100644 arch/arm/mach-omap2/clock2xxx.c
delete mode 100644 arch/arm/mach-omap2/clock34xx.c
delete mode 100644 arch/arm/mach-omap2/clock34xx.h
delete mode 100644 arch/arm/mach-omap2/clock3517.c
delete mode 100644 arch/arm/mach-omap2/clock3517.h
delete mode 100644 arch/arm/mach-omap2/clock36xx.c
delete mode 100644 arch/arm/mach-omap2/clock36xx.h
delete mode 100644 arch/arm/mach-omap2/clock3xxx.c
delete mode 100644 arch/arm/mach-omap2/clock44xx.h
delete mode 100644 arch/arm/mach-omap2/clock_common_data.c
create mode 100644 drivers/clk/ti/clkt_dflt.c
rename {arch/arm/mach-omap2 => drivers/clk/ti}/clkt_dpll.c (94%)
create mode 100644 drivers/clk/ti/clkt_iclk.c
rename {arch/arm/mach-omap2 => drivers/clk/ti}/dpll3xxx.c (84%)
rename {arch/arm/mach-omap2 => drivers/clk/ti}/dpll44xx.c (91%)Signature · 1 line
1.7.9.5
PATCH v3 1/27 ARM: OMAP2+: clock: export driver API to setup/get clock features
As most of the clock driver support code is going to be moved under drivers/clk/ti, an API for setting / getting the SoC specific clock features is needed. This patch provides this API and changes the existing code to use it.
--- arch/arm/mach-omap2/clkt_dpll.c | 14 +++++++------- arch/arm/mach-omap2/clock.c | 36 +++++++++++++++++------------------- arch/arm/mach-omap2/clock.h | 18 ------------------ arch/arm/mach-omap2/clock3xxx.c | 4 ++-- arch/arm/mach-omap2/dpll3xxx.c | 4 ++-- drivers/clk/ti/clk.c | 25 +++++++++++++++++++++++++ include/linux/clk/ti.h | 16 ++++++++++++++++ 7 files changed, 69 insertions(+), 48 deletions(-)
arch/arm/mach-omap2/clkt_dpll.c +7 -7
@@ -80,8 +80,8 @@ static int _dpll_test_fint(struct clk_hw_omap *clk, unsigned int n) fint_min =OMAP3PLUS_DPLL_FINT_JTYPE_MIN ; fint_max =OMAP3PLUS_DPLL_FINT_JTYPE_MAX ; }else { - fint_min = ti_clk_features.fint_min; - fint_max = ti_clk_features.fint_max; + fint_min =ti_clk_get_features ()->fint_min; + fint_max =ti_clk_get_features ()->fint_max; }if (!fint_min || !fint_max) {
@@ -89,18 +89,18 @@ static int _dpll_test_fint(struct clk_hw_omap *clk, unsigned int n)return DPLL_FINT_INVALID ; } -if (fint < ti_clk_features.fint_min) { +if (fint <ti_clk_get_features ()->fint_min) {pr_debug ("rejecting n=%d due to Fint failure, lowering max_divider\n" , n); dd->max_divider = n; ret =DPLL_FINT_UNDERFLOW ; - }else if (fint > ti_clk_features.fint_max) { + }else if (fint >ti_clk_get_features ()->fint_max) {pr_debug ("rejecting n=%d due to Fint failure, boosting min_divider\n" , n); dd->min_divider = n; ret =DPLL_FINT_INVALID ; - }else if (fint > ti_clk_features.fint_band1_max && - fint < ti_clk_features.fint_band2_min) { + }else if (fint >ti_clk_get_features ()->fint_band1_max && + fint <ti_clk_get_features ()->fint_band2_min) {pr_debug ("rejecting n=%d due to Fint failure\n" , n); ret =DPLL_FINT_INVALID ; }
@@ -183,7 +183,7 @@ static int _omap2_dpll_is_in_bypass(u32 v) {u8 mask, val; - mask = ti_clk_features.dpll_bypass_vals; + mask =ti_clk_get_features ()->dpll_bypass_vals;/* * Each set bit in the mask corresponds to a bypass value equal
arch/arm/mach-omap2/clock.c +17 -19
@@ -48,11 +48,6 @@u16 cpu_mask; -/* -* Clock features setup. Used instead of CPU type checks. -*/ -struct ti_clk_features ti_clk_features; -/* DPLL valid Fint frequency band limits - from 34xx TRM Section 4.7.6.2 */ #define OMAP3430_DPLL_FINT_BAND1_MIN 750000#define OMAP3430_DPLL_FINT_BAND1_MAX 2100000
@@ -367,7 +362,7 @@ void omap2_clk_dflt_find_idlest(struct clk_hw_omap *clk,* 34xx reverses this, just to keep us on our toes * AM35xx uses both, depending on the module. */ - *idlest_val = ti_clk_features.cm_idlest_val; + *idlest_val =ti_clk_get_features ()->cm_idlest_val; }/**
@@ -801,29 +796,30 @@ void __init omap2_clk_print_new_rates(const char *hfclkin_ck_name,*/ void __init ti_clk_init_features (void ) { +struct ti_clk_features features = {0 };/* Fint setup for DPLLs */ if (cpu_is_omap3430 ()) { - ti_clk_features.fint_min =OMAP3430_DPLL_FINT_BAND1_MIN ; - ti_clk_features.fint_max =OMAP3430_DPLL_FINT_BAND2_MAX ; - ti_clk_features.fint_band1_max =OMAP3430_DPLL_FINT_BAND1_MAX ; - ti_clk_features.fint_band2_min =OMAP3430_DPLL_FINT_BAND2_MIN ; + features.fint_min =OMAP3430_DPLL_FINT_BAND1_MIN ; + features.fint_max =OMAP3430_DPLL_FINT_BAND2_MAX ; + features.fint_band1_max =OMAP3430_DPLL_FINT_BAND1_MAX ; + features.fint_band2_min =OMAP3430_DPLL_FINT_BAND2_MIN ; }else { - ti_clk_features.fint_min =OMAP3PLUS_DPLL_FINT_MIN ; - ti_clk_features.fint_max =OMAP3PLUS_DPLL_FINT_MAX ; + features.fint_min =OMAP3PLUS_DPLL_FINT_MIN ; + features.fint_max =OMAP3PLUS_DPLL_FINT_MAX ; }/* Bypass value setup for DPLLs */ if (cpu_is_omap24xx ()) { - ti_clk_features.dpll_bypass_vals |= + features.dpll_bypass_vals |= (1 <<OMAP2XXX_EN_DPLL_LPBYPASS ) | (1 <<OMAP2XXX_EN_DPLL_FRBYPASS ); }else if (cpu_is_omap34xx ()) { - ti_clk_features.dpll_bypass_vals |= + features.dpll_bypass_vals |= (1 <<OMAP3XXX_EN_DPLL_LPBYPASS ) | (1 <<OMAP3XXX_EN_DPLL_FRBYPASS ); }else if (soc_is_am33xx () ||cpu_is_omap44xx () ||soc_is_am43xx () ||soc_is_omap54xx () ||soc_is_dra7xx ()) { - ti_clk_features.dpll_bypass_vals |= + features.dpll_bypass_vals |= (1 <<OMAP4XXX_EN_DPLL_LPBYPASS ) | (1 <<OMAP4XXX_EN_DPLL_FRBYPASS ) | (1 <<OMAP4XXX_EN_DPLL_MNBYPASS );
@@ -831,7 +827,7 @@ void __init ti_clk_init_features(void)/* Jitter correction only available on OMAP343X */ if (cpu_is_omap343x ()) - ti_clk_features.flags |=TI_CLK_DPLL_HAS_FREQSEL ; + features.flags |=TI_CLK_DPLL_HAS_FREQSEL ;/* Idlest value for interface clocks. * 24xx uses 0 to indicate not ready, and 1 to indicate ready.
@@ -839,11 +835,13 @@ void __init ti_clk_init_features(void)* AM35xx uses both, depending on the module. */ if (cpu_is_omap24xx ()) - ti_clk_features.cm_idlest_val =OMAP24XX_CM_IDLEST_VAL ; + features.cm_idlest_val =OMAP24XX_CM_IDLEST_VAL ;else if (cpu_is_omap34xx ()) - ti_clk_features.cm_idlest_val =OMAP34XX_CM_IDLEST_VAL ; + features.cm_idlest_val =OMAP34XX_CM_IDLEST_VAL ;/* On OMAP3430 ES1.0, DPLL4 can't be re-programmed */ if (omap_rev () ==OMAP3430_REV_ES1_0 ) - ti_clk_features.flags |=TI_CLK_DPLL4_DENY_REPROGRAM ; + features.flags |=TI_CLK_DPLL4_DENY_REPROGRAM ; + +ti_clk_setup_features (&features); }
arch/arm/mach-omap2/clock.h +0 -18
@@ -225,24 +225,6 @@ void omap2_clk_writel(u32 val, struct clk_hw_omap *clk, void __iomem *reg);extern u16 cpu_mask; -/* -* Clock features setup. Used instead of CPU type checks. -*/ -struct ti_clk_features { -u32 flags; -long fint_min; -long fint_max; -long fint_band1_max; -long fint_band2_min; -u8 dpll_bypass_vals; -u8 cm_idlest_val; -}; - -#define TI_CLK_DPLL_HAS_FREQSEL (1 << 0) -#define TI_CLK_DPLL4_DENY_REPROGRAM (1 << 1) - -extern struct ti_clk_features ti_clk_features; -extern const struct clkops clkops_omap2_dflt_wait;extern const struct clkops clkops_omap2_dflt;
arch/arm/mach-omap2/clock3xxx.c +2 -2
@@ -58,7 +58,7 @@ int omap3_dpll4_set_rate(struct clk_hw *hw, unsigned long rate,* on 3430ES1 prevents us from changing DPLL multipliers or dividers * on DPLL4. */ -if (ti_clk_features.flags &TI_CLK_DPLL4_DENY_REPROGRAM ) { +if (ti_clk_get_features ()->flags &TI_CLK_DPLL4_DENY_REPROGRAM ) {pr_err ("clock: DPLL4 cannot change rate due to silicon 'Limitation 2.5' on 3430ES1.\n" );return -EINVAL ; }
@@ -81,7 +81,7 @@ int omap3_dpll4_set_rate(struct clk_hw *hw, unsigned long rate,int omap3_dpll4_set_rate_and_parent (struct clk_hw *hw,unsigned long rate,unsigned long parent_rate,u8 index) { -if (ti_clk_features.flags &TI_CLK_DPLL4_DENY_REPROGRAM ) { +if (ti_clk_get_features ()->flags &TI_CLK_DPLL4_DENY_REPROGRAM ) {pr_err ("clock: DPLL4 cannot change rate due to silicon 'Limitation 2.5' on 3430ES1.\n" );return -EINVAL ; }
arch/arm/mach-omap2/dpll3xxx.c +2 -2
@@ -307,7 +307,7 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel)* Set jitter correction. Jitter correction applicable for OMAP343X * only since freqsel field is no longer present on other devices. */ -if (ti_clk_features.flags &TI_CLK_DPLL_HAS_FREQSEL ) { +if (ti_clk_get_features ()->flags &TI_CLK_DPLL_HAS_FREQSEL ) { v =omap2_clk_readl (clk, dd->control_reg); v &= ~dd->freqsel_mask; v |= freqsel <<__ffs (dd->freqsel_mask);
@@ -559,7 +559,7 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate,return -EINVAL ;/* Freqsel is available only on OMAP343X devices */ -if (ti_clk_features.flags &TI_CLK_DPLL_HAS_FREQSEL ) { +if (ti_clk_get_features ()->flags &TI_CLK_DPLL_HAS_FREQSEL ) { freqsel =_omap3_dpll_compute_freqsel (clk, dd->last_rounded_n);WARN_ON (!freqsel); }
drivers/clk/ti/clk.c +25 -0
@@ -30,6 +30,8 @@struct ti_clk_ll_ops *ti_clk_ll_ops;static struct device_node *clocks_node_ptr[CLK_MAX_MEMMAPS ]; +struct ti_clk_features ti_clk_features; +/** * ti_dt_clocks_register - register DT alias clocks during boot * @oclks: list of clocks to register
@@ -310,4 +312,27 @@ int __init ti_clk_register_legacy_clks(struct ti_clk_alias *clks) return 0; } + +/** +* ti_clk_setup_features - setup clock features flags +* @features: features definition to use +* +* Initializes the clock driver features flags based on platform +* provided data. No return value. +*/ +void __init ti_clk_setup_features (struct ti_clk_features *features) +{ +memcpy (&ti_clk_features, features,sizeof (*features)); +} + +/** +* ti_clk_get_features - get clock driver features flags +* +* Get TI clock driver features description. Returns a pointer +* to the current feature setup. +*/ +struct ti_clk_features *ti_clk_get_features (void ) +{ +return &ti_clk_features; +}#endif
include/linux/clk/ti.h +16 -0
@@ -338,6 +338,22 @@ int am43xx_dt_clk_init(void);int omap2420_dt_clk_init (void );int omap2430_dt_clk_init (void ); +struct ti_clk_features { +u32 flags; +long fint_min; +long fint_max; +long fint_band1_max; +long fint_band2_min; +u8 dpll_bypass_vals; +u8 cm_idlest_val; +}; + +#define TI_CLK_DPLL_HAS_FREQSEL BIT(0) +#define TI_CLK_DPLL4_DENY_REPROGRAM BIT(1) + +void ti_clk_setup_features (struct ti_clk_features *features); +struct ti_clk_features *ti_clk_get_features (void ); +#ifdef CONFIG_OF void of_ti_clk_allow_autoidle_all (void );void of_ti_clk_deny_autoidle_all (void );
Signature · 1 line
1.7.9.5
PATCH v3 1/27 ARM: OMAP2+: clock: export driver API to setup/get clock features
drivers/clk/ti/clk.c int __init ti_clk_register_legacy_clks(struct ti_clk_alias *clks) · line 334
Quoted 8 lines · Tero Kristo
drivers/clk/ti/clk.c +8
-0+ +/** +* ti_clk_get_features - get clock driver features flags +* +* Get TI clock driver features description. Returns a pointer +* to the current feature setup. +*/ +struct ti_clk_features *ti_clk_get_features (void )
const?
Quoted 4 lines
drivers/clk/ti/clk.c +3
-0+{ +return &ti_clk_features; +}#endif
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 1/27 ARM: OMAP2+: clock: export driver API to setup/get clock features
Quoted 11 lines · Stephen Boyd
drivers/clk/ti/clk.c int __init ti_clk_register_legacy_clks(struct ti_clk_alias *clks) · line 334
Quoted 8 lines · Tero Kristo
drivers/clk/ti/clk.c +8
-0+ +/** +* ti_clk_get_features - get clock driver features flags +* +* Get TI clock driver features description. Returns a pointer +* to the current feature setup. +*/ +struct ti_clk_features *ti_clk_get_features (void )const?
Ok changed locally in the branch.
-Tero
Quoted 6 lines
Quoted 5 lines
drivers/clk/ti/clk.c +3
-0+{ +return &ti_clk_features; +}#endif
PATCH v3 2/27 clk: ti: move generic OMAP DPLL implementation under drivers/clk
In reply to Tero KristoWith the legacy clock data now gone, we can start moving OMAP clock type implementations under clock driver. Start this with moving the generic OMAP DPLL clock type under TI clock driver.
---
arch/arm/mach-omap2/Makefile | 2 +-
drivers/clk/ti/Makefile | 3 ++-
.../arm/mach-omap2 => drivers/clk/ti}/clkt_dpll.c | 13 ++++++-------
drivers/clk/ti/clock.h | 2 ++
include/linux/clk/ti.h | 1 -
5 files changed, 11 insertions(+), 10 deletions(-)
rename {arch/arm/mach-omap2 => drivers/clk/ti}/clkt_dpll.c (97%)arch/arm/mach-omap2/Makefile +1 -1
@@ -13,7 +13,7 @@ obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o timer.o pm.o \ hwmod-common = omap_hwmod.o omap_hwmod_reset.o \ omap_hwmod_common_data.o clock-common = clock.o clock_common_data.o \ - clkt_dpll.o clkt_clksel.o + clkt_clksel.o secure-common = omap-smc.o omap-secure.o obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common)
drivers/clk/ti/Makefile +2 -1
@@ -1,6 +1,7 @@ obj-y += clk.o autoidle.o clockdomain.o clk-common = dpll.o composite.o divider.o gate.o \ - fixed-factor.o mux.o apll.o + fixed-factor.o mux.o apll.o \ + clkt_dpll.o obj-$(CONFIG_SOC_AM33XX) += $(clk-common) clk-33xx.o obj-$(CONFIG_SOC_TI81XX) += $(clk-common) fapll.o clk-816x.o obj-$(CONFIG_ARCH_OMAP2) += $(clk-common) interface.o clk-2xxx.o
drivers/clk/ti/clkt_dpll.c renamed from arch/arm/mach-omap2/clkt_dpll.c +6 -7
@@ -18,6 +18,7 @@#include <linux/errno.h> #include <linux/clk-provider.h> #include <linux/io.h> +#include <linux/clk/ti.h> #include <asm/div64.h>
@@ -211,7 +212,7 @@ u8 omap2_init_dpll_parent(struct clk_hw *hw)if (!dd)return -EINVAL ; - v =omap2_clk_readl (clk, dd->control_reg); + v = ti_clk_ll_ops->clk_readl (dd->control_reg); v &= dd->enable_mask; v >>=__ffs (dd->enable_mask);
@@ -247,20 +248,20 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk)return 0 ;/* Return bypass rate if DPLL is bypassed */ - v =omap2_clk_readl (clk, dd->control_reg); + v = ti_clk_ll_ops->clk_readl (dd->control_reg); v &= dd->enable_mask; v >>=__ffs (dd->enable_mask);if (_omap2_dpll_is_in_bypass (v))return __clk_get_rate (dd->clk_bypass); - v =omap2_clk_readl (clk, dd->mult_div1_reg); + v = ti_clk_ll_ops->clk_readl (dd->mult_div1_reg); dpll_mult = v & dd->mult_mask; dpll_mult >>=__ffs (dd->mult_mask); dpll_div = v & dd->div1_mask; dpll_div >>=__ffs (dd->div1_mask); - dpll_clk = (long long )__clk_get_rate (dd->clk_ref) * dpll_mult; + dpll_clk = (long long )__clk_get_rate (dd->clk_ref) * dpll_mult;do_div (dpll_clk, dpll_div +1 );return dpll_clk;
@@ -281,7 +282,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk)* be rounded, or the rounded rate upon success. */ long omap2_dpll_round_rate (struct clk_hw *hw,unsigned long target_rate, -unsigned long *parent_rate) +unsigned long *parent_rate) {struct clk_hw_omap *clk =to_clk_hw_omap (hw);int m, n, r, scaled_max_m;
@@ -310,7 +311,6 @@ long omap2_dpll_round_rate(struct clk_hw *hw, unsigned long target_rate, dd->last_rounded_rate =0 ;for (n = dd->min_divider; n <= dd->max_divider; n++) { -/* Is the (input clk, divider) pair valid for the DPLL? */ r =_dpll_test_fint (clk, n);if (r ==DPLL_FINT_UNDERFLOW )
@@ -367,4 +367,3 @@ long omap2_dpll_round_rate(struct clk_hw *hw, unsigned long target_rate,return dd->last_rounded_rate; } -
drivers/clk/ti/clock.h +2 -0
@@ -169,4 +169,6 @@ void ti_clk_patch_legacy_clks(struct ti_clk **patch);struct clk *ti_clk_register_clk (struct ti_clk *setup);int ti_clk_register_legacy_clks (struct ti_clk_alias *clks); +u8 omap2_init_dpll_parent (struct clk_hw *hw); +#endif
include/linux/clk/ti.h +0 -1
@@ -286,7 +286,6 @@ long omap4_dpll_regm4xen_determine_rate(struct clk_hw *hw,unsigned long max_rate, unsigned long *best_parent_rate, struct clk_hw **best_parent_clk); -u8 omap2_init_dpll_parent (struct clk_hw *hw);unsigned long omap3_dpll_recalc (struct clk_hw *hw,unsigned long parent_rate);long omap2_dpll_round_rate (struct clk_hw *hw,unsigned long target_rate,unsigned long *parent_rate);
Signature · 1 line
1.7.9.5
PATCH v3 2/27 clk: ti: move generic OMAP DPLL implementation under drivers/clk
Quoted 18 lines · Tero Kristo
drivers/clk/ti/clkt_dpll.c renamed from arch/arm/mach-omap2/clkt_dpll.c +1
-2@@ -281,7 +282,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk)* be rounded, or the rounded rate upon success. */ long omap2_dpll_round_rate (struct clk_hw *hw,unsigned long target_rate, -unsigned long *parent_rate) +unsigned long *parent_rate) {struct clk_hw_omap *clk =to_clk_hw_omap (hw);int m, n, r, scaled_max_m;@@ -310,7 +311,6 @@ long omap2_dpll_round_rate(struct clk_hw *hw, unsigned long target_rate, dd->last_rounded_rate =0 ;for (n = dd->min_divider; n <= dd->max_divider; n++) { -/* Is the (input clk, divider) pair valid for the DPLL? */ r =_dpll_test_fint (clk, n);if (r ==DPLL_FINT_UNDERFLOW )
drivers/clk/ti/clkt_dpll.c long omap2_dpll_round_rate(struct clk_hw *hw, unsigned long target_rate, · line 370
Quoted 4 lines
drivers/clk/ti/clkt_dpll.c renamed from arch/arm/mach-omap2/clkt_dpll.c +0
-1@@ -367,4 +367,3 @@ long omap2_dpll_round_rate(struct clk_hw *hw, unsigned long target_rate,return dd->last_rounded_rate; } -
It's a lot easier to see the cleanup that happened while copying code over. Thanks.
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v3 3/27 clk: ti: move OMAP4+ DPLL implementation under drivers/clk
In reply to Tero KristoWith the legacy clock support gone, the OMAP4 specific DPLL implementations can be moved under the clock driver. Change some of the function prototypes to be static at the same time, and remove some exports from the global TI clock driver header.
---
arch/arm/mach-omap2/Makefile | 6 ++---
arch/arm/mach-omap2/clock.h | 4 ----
drivers/clk/ti/Makefile | 6 ++---
drivers/clk/ti/clock.h | 14 ++++++++++++
{arch/arm/mach-omap2 => drivers/clk/ti}/dpll44xx.c | 23 ++++++++++----------
include/linux/clk/ti.h | 13 +----------
6 files changed, 33 insertions(+), 33 deletions(-)
rename {arch/arm/mach-omap2 => drivers/clk/ti}/dpll44xx.c (91%)arch/arm/mach-omap2/Makefile +3 -3
@@ -193,12 +193,12 @@ obj-$(CONFIG_ARCH_OMAP3) += clock3517.o clock36xx.o obj-$(CONFIG_ARCH_OMAP3) += dpll3xxx.o obj-$(CONFIG_ARCH_OMAP3) += clkt_iclk.o obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) -obj-$(CONFIG_ARCH_OMAP4) += dpll3xxx.o dpll44xx.o +obj-$(CONFIG_ARCH_OMAP4) += dpll3xxx.o obj-$(CONFIG_SOC_AM33XX) += $(clock-common) dpll3xxx.o obj-$(CONFIG_SOC_OMAP5) += $(clock-common) -obj-$(CONFIG_SOC_OMAP5) += dpll3xxx.o dpll44xx.o +obj-$(CONFIG_SOC_OMAP5) += dpll3xxx.o obj-$(CONFIG_SOC_DRA7XX) += $(clock-common) -obj-$(CONFIG_SOC_DRA7XX) += dpll3xxx.o dpll44xx.o +obj-$(CONFIG_SOC_DRA7XX) += dpll3xxx.o obj-$(CONFIG_SOC_AM43XX) += $(clock-common) dpll3xxx.o # OMAP2 clock rate set data (old "OPP" data)
arch/arm/mach-omap2/clock.h +0 -4
@@ -183,8 +183,6 @@ struct clksel {u32 omap3_dpll_autoidle_read (struct clk_hw_omap *clk);void omap3_dpll_allow_idle (struct clk_hw_omap *clk);void omap3_dpll_deny_idle (struct clk_hw_omap *clk); -void omap4_dpllmx_allow_gatectrl (struct clk_hw_omap *clk); -void omap4_dpllmx_deny_gatectrl (struct clk_hw_omap *clk);void __init omap2_clk_disable_clkdm_control (void );
@@ -204,8 +202,6 @@ int omap2_clksel_set_parent(struct clk_hw *hw, u8 field_val);extern void omap2_clkt_iclk_allow_idle (struct clk_hw_omap *clk);extern void omap2_clkt_iclk_deny_idle (struct clk_hw_omap *clk); -unsigned long omap2_get_dpll_rate (struct clk_hw_omap *clk); -void omap2_clk_dflt_find_companion (struct clk_hw_omap *clk,void __iomem **other_reg,u8 *other_bit);
drivers/clk/ti/Makefile +3 -3
@@ -7,10 +7,10 @@ obj-$(CONFIG_SOC_TI81XX) += $(clk-common) fapll.o clk-816x.o obj-$(CONFIG_ARCH_OMAP2) += $(clk-common) interface.o clk-2xxx.o obj-$(CONFIG_ARCH_OMAP3) += $(clk-common) interface.o \ clk-3xxx.o -obj-$(CONFIG_ARCH_OMAP4) += $(clk-common) clk-44xx.o -obj-$(CONFIG_SOC_OMAP5) += $(clk-common) clk-54xx.o +obj-$(CONFIG_ARCH_OMAP4) += $(clk-common) clk-44xx.o dpll44xx.o +obj-$(CONFIG_SOC_OMAP5) += $(clk-common) clk-54xx.o dpll44xx.o obj-$(CONFIG_SOC_DRA7XX) += $(clk-common) clk-7xx.o \ - clk-dra7-atl.o + clk-dra7-atl.o dpll44xx.o obj-$(CONFIG_SOC_AM43XX) += $(clk-common) clk-43xx.o ifdef CONFIG_ATAGS
drivers/clk/ti/clock.h +14 -0
@@ -169,6 +169,20 @@ void ti_clk_patch_legacy_clks(struct ti_clk **patch);struct clk *ti_clk_register_clk (struct ti_clk *setup);int ti_clk_register_legacy_clks (struct ti_clk_alias *clks); +extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx; +u8 omap2_init_dpll_parent (struct clk_hw *hw); +unsigned long omap4_dpll_regm4xen_recalc (struct clk_hw *hw, +unsigned long parent_rate); +long omap4_dpll_regm4xen_round_rate (struct clk_hw *hw, +unsigned long target_rate, +unsigned long *parent_rate); +long omap4_dpll_regm4xen_determine_rate (struct clk_hw *hw, +unsigned long rate, +unsigned long min_rate, +unsigned long max_rate, +unsigned long *best_parent_rate, +struct clk_hw **best_parent_clk); +#endif
drivers/clk/ti/dpll44xx.c renamed from arch/arm/mach-omap2/dpll44xx.c +12 -11
@@ -14,6 +14,7 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/bitops.h> +#include <linux/clk/ti.h> #include "clock.h"
@@ -29,14 +30,14 @@/* * Bitfield declarations */ -#define OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK (1 << 8) -#define OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK (1 << 10) -#define OMAP4430_DPLL_REGM4XEN_MASK (1 << 11) +#define OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK BIT(8) +#define OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK BIT(10) +#define OMAP4430_DPLL_REGM4XEN_MASK BIT(11)/* Static rate multiplier for OMAP4 REGM4XEN clocks */ #define OMAP4430_REGM4XEN_MULT 4 -void omap4_dpllmx_allow_gatectrl (struct clk_hw_omap *clk) +static void omap4_dpllmx_allow_gatectrl (struct clk_hw_omap *clk) {u32 v;u32 mask;
@@ -48,13 +49,13 @@ void omap4_dpllmx_allow_gatectrl(struct clk_hw_omap *clk) OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK ; - v =omap2_clk_readl (clk, clk->clksel_reg); + v = ti_clk_ll_ops->clk_readl (clk->clksel_reg);/* Clear the bit to allow gatectrl */ v &= ~mask; -omap2_clk_writel (v, clk, clk->clksel_reg); + ti_clk_ll_ops->clk_writel (v, clk->clksel_reg); } -void omap4_dpllmx_deny_gatectrl (struct clk_hw_omap *clk) +static void omap4_dpllmx_deny_gatectrl (struct clk_hw_omap *clk) {u32 v;u32 mask;
@@ -66,10 +67,10 @@ void omap4_dpllmx_deny_gatectrl(struct clk_hw_omap *clk) OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK ; - v =omap2_clk_readl (clk, clk->clksel_reg); + v = ti_clk_ll_ops->clk_readl (clk->clksel_reg);/* Set the bit to deny gatectrl */ v |= mask; -omap2_clk_writel (v, clk, clk->clksel_reg); + ti_clk_ll_ops->clk_writel (v, clk->clksel_reg); }const struct clk_hw_omap_ops clkhwops_omap4_dpllmx = {
@@ -112,7 +113,7 @@ static void omap4_dpll_lpmode_recalc(struct dpll_data *dd)* upon success, or 0 upon error. */ unsigned long omap4_dpll_regm4xen_recalc (struct clk_hw *hw, -unsigned long parent_rate) +unsigned long parent_rate) {struct clk_hw_omap *clk =to_clk_hw_omap (hw);u32 v;
@@ -127,7 +128,7 @@ unsigned long omap4_dpll_regm4xen_recalc(struct clk_hw *hw, rate =omap2_get_dpll_rate (clk);/* regm4xen adds a multiplier of 4 to DPLL calculations */ - v =omap2_clk_readl (clk, dd->control_reg); + v = ti_clk_ll_ops->clk_readl (dd->control_reg);if (v &OMAP4430_DPLL_REGM4XEN_MASK ) rate *=OMAP4430_REGM4XEN_MULT ;
include/linux/clk/ti.h +1 -12
@@ -275,17 +275,6 @@ long omap3_noncore_dpll_determine_rate(struct clk_hw *hw,unsigned long max_rate, unsigned long *best_parent_rate, struct clk_hw **best_parent_clk); -unsigned long omap4_dpll_regm4xen_recalc (struct clk_hw *hw, -unsigned long parent_rate); -long omap4_dpll_regm4xen_round_rate (struct clk_hw *hw, -unsigned long target_rate, -unsigned long *parent_rate); -long omap4_dpll_regm4xen_determine_rate (struct clk_hw *hw, -unsigned long rate, -unsigned long min_rate, -unsigned long max_rate, -unsigned long *best_parent_rate, -struct clk_hw **best_parent_clk);unsigned long omap3_dpll_recalc (struct clk_hw *hw,unsigned long parent_rate);long omap2_dpll_round_rate (struct clk_hw *hw,unsigned long target_rate,unsigned long *parent_rate);
@@ -314,6 +303,7 @@ int omap2_reprogram_dpllcore(struct clk_hw *clk, unsigned long rate, unsigned long parent_rate);void omap2xxx_clkt_dpllcore_init (struct clk_hw *hw);void omap2xxx_clkt_vps_init (void ); +unsigned long omap2_get_dpll_rate (struct clk_hw_omap *clk);void __iomem *ti_clk_get_reg_addr (struct device_node *node,int index);void ti_dt_clocks_register (struct ti_dt_clk *oclks);
@@ -364,7 +354,6 @@ static inline void of_ti_clk_deny_autoidle_all(void) { }extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll;extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait;extern const struct clk_hw_omap_ops clkhwops_omap3_dpll; -extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx;extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait;
Signature · 1 line
1.7.9.5
PATCH v3 4/27 clk: ti: move interface clock implementation under drivers/clk
In reply to Tero KristoWith the legacy clock support gone, the OMAP interface clock implementation can be moved under the clock driver. Some temporary header file tweaks are also needed to make this change work properly.
---
arch/arm/mach-omap2/Makefile | 3 +--
arch/arm/mach-omap2/clock.h | 11 -----------
drivers/clk/ti/Makefile | 2 +-
.../arm/mach-omap2 => drivers/clk/ti}/clkt_iclk.c | 12 +++++-------
drivers/clk/ti/clock.h | 2 ++
include/linux/clk/ti.h | 10 ++++++++--
6 files changed, 17 insertions(+), 23 deletions(-)
rename {arch/arm/mach-omap2 => drivers/clk/ti}/clkt_iclk.c (89%)arch/arm/mach-omap2/Makefile +1 -2
@@ -185,13 +185,12 @@ obj-$(CONFIG_SOC_DRA7XX) += clockdomains7xx_data.o obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) clock2xxx.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpllcore.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_virt_prcm_set.o -obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o clkt_iclk.o +obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o obj-$(CONFIG_SOC_OMAP2430) += clock2430.o obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) clock3xxx.o obj-$(CONFIG_ARCH_OMAP3) += clock34xx.o clkt34xx_dpll3m2.o obj-$(CONFIG_ARCH_OMAP3) += clock3517.o clock36xx.o obj-$(CONFIG_ARCH_OMAP3) += dpll3xxx.o -obj-$(CONFIG_ARCH_OMAP3) += clkt_iclk.o obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) obj-$(CONFIG_ARCH_OMAP4) += dpll3xxx.o obj-$(CONFIG_SOC_AM33XX) += $(clock-common) dpll3xxx.o
arch/arm/mach-omap2/clock.h +0 -11
@@ -198,16 +198,6 @@ int omap2_clksel_set_rate(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate);int omap2_clksel_set_parent (struct clk_hw *hw,u8 field_val); -/* clkt_iclk.c public functions */ -extern void omap2_clkt_iclk_allow_idle (struct clk_hw_omap *clk); -extern void omap2_clkt_iclk_deny_idle (struct clk_hw_omap *clk); - -void omap2_clk_dflt_find_companion (struct clk_hw_omap *clk, -void __iomem **other_reg, -u8 *other_bit); -void omap2_clk_dflt_find_idlest (struct clk_hw_omap *clk, -void __iomem **idlest_reg, -u8 *idlest_bit,u8 *idlest_val);int omap2_clk_enable_autoidle_all (void );int omap2_clk_allow_idle (struct clk *clk);int omap2_clk_deny_idle (struct clk *clk);
@@ -231,7 +221,6 @@ extern const struct clksel_rate gpt_sys_rates[];extern const struct clksel_rate gfx_l3_rates[];extern const struct clksel_rate dsp_ick_rates[]; -extern const struct clk_hw_omap_ops clkhwops_iclk_wait;extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_ssi_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait;
drivers/clk/ti/Makefile +1 -1
@@ -1,7 +1,7 @@ obj-y += clk.o autoidle.o clockdomain.o clk-common = dpll.o composite.o divider.o gate.o \ fixed-factor.o mux.o apll.o \ - clkt_dpll.o + clkt_dpll.o clkt_iclk.o obj-$(CONFIG_SOC_AM33XX) += $(clk-common) clk-33xx.o obj-$(CONFIG_SOC_TI81XX) += $(clk-common) fapll.o clk-816x.o obj-$(CONFIG_ARCH_OMAP2) += $(clk-common) interface.o clk-2xxx.o
drivers/clk/ti/clkt_iclk.c renamed from arch/arm/mach-omap2/clkt_iclk.c +5 -7
@@ -13,6 +13,7 @@#include <linux/kernel.h> #include <linux/clk-provider.h> #include <linux/io.h> +#include <linux/clk/ti.h> #include "clock.h"
@@ -31,9 +32,9 @@ void omap2_clkt_iclk_allow_idle(struct clk_hw_omap *clk) r = (__force void __iomem *) ((__force u32 )clk->enable_reg ^ (CM_AUTOIDLE ^CM_ICLKEN )); - v =omap2_clk_readl (clk, r); + v = ti_clk_ll_ops->clk_readl (r); v |= (1 << clk->enable_bit); -omap2_clk_writel (v, clk, r); + ti_clk_ll_ops->clk_writel (v, r); }/* XXX */
@@ -45,9 +46,9 @@ void omap2_clkt_iclk_deny_idle(struct clk_hw_omap *clk) r = (__force void __iomem *) ((__force u32 )clk->enable_reg ^ (CM_AUTOIDLE ^CM_ICLKEN )); - v =omap2_clk_readl (clk, r); + v = ti_clk_ll_ops->clk_readl (r); v &= ~(1 << clk->enable_bit); -omap2_clk_writel (v, clk, r); + ti_clk_ll_ops->clk_writel (v, r); }/* Public data */
@@ -63,6 +64,3 @@ const struct clk_hw_omap_ops clkhwops_iclk_wait = { .find_idlest = omap2_clk_dflt_find_idlest, .find_companion = omap2_clk_dflt_find_companion, }; - - -
drivers/clk/ti/clock.h +2 -0
@@ -170,6 +170,8 @@ struct clk *ti_clk_register_clk(struct ti_clk *setup);int ti_clk_register_legacy_clks (struct ti_clk_alias *clks);extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx; +extern const struct clk_hw_omap_ops clkhwops_iclk; +extern const struct clk_hw_omap_ops clkhwops_iclk_wait;u8 omap2_init_dpll_parent (struct clk_hw *hw);
include/linux/clk/ti.h +8 -2
@@ -296,6 +296,14 @@ int omap3_dpll4_set_rate_and_parent(struct clk_hw *hw, unsigned long rate,int omap2_dflt_clk_enable (struct clk_hw *hw);void omap2_dflt_clk_disable (struct clk_hw *hw);int omap2_dflt_clk_is_enabled (struct clk_hw *hw); +void omap2_clkt_iclk_allow_idle (struct clk_hw_omap *clk); +void omap2_clkt_iclk_deny_idle (struct clk_hw_omap *clk); +void omap2_clk_dflt_find_companion (struct clk_hw_omap *clk, +void __iomem **other_reg, +u8 *other_bit); +void omap2_clk_dflt_find_idlest (struct clk_hw_omap *clk, +void __iomem **idlest_reg, +u8 *idlest_bit,u8 *idlest_val);void omap3_clk_lock_dpll5 (void );unsigned long omap2_dpllcore_recalc (struct clk_hw *hw,unsigned long parent_rate);
@@ -358,8 +366,6 @@ extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_wait; -extern const struct clk_hw_omap_ops clkhwops_iclk; -extern const struct clk_hw_omap_ops clkhwops_iclk_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_ssi_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_dss_usbhost_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_hsotgusb_wait;
Signature · 1 line
1.7.9.5
PATCH v3 5/27 ARM: OMAP3: dpll3-m2: get rid of obsolete clksel access
In reply to Tero KristoCore DVFS support code is currently referencing clksel functionality, which is wrong. The m2 divisor has been implemented as a divider clock for a long time already, so replace the validrate check call with proper functionality. Core DVFS is currently not supported in the kernel so verifying this patch can be rather tricky, this should probably be fixed at some point.
--- arch/arm/mach-omap2/clkt34xx_dpll3m2.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
arch/arm/mach-omap2/clkt34xx_dpll3m2.c +3 -1
@@ -60,7 +60,9 @@ int omap3_core_dpll_m2_set_rate(struct clk_hw *hw, unsigned long rate,if (!clk || !rate)return -EINVAL ; - validrate =omap2_clksel_round_rate_div (clk, rate, &new_div); + new_div =DIV_ROUND_UP (parent_rate, rate); + validrate = parent_rate / new_div; +if (validrate != rate)return -EINVAL ;
Signature · 1 line
1.7.9.5
PATCH v3 6/27 ARM: OMAP2+: clk: remove obsolete clksel support code
In reply to Tero KristoThe clksel clock type is no longer used for anything, it is rather replaced with common clock divider code. Thus, remove the dead code from kernel.
--- arch/arm/mach-omap2/Makefile | 3 +- arch/arm/mach-omap2/clkt_clksel.c | 466 ------------------------------------- arch/arm/mach-omap2/clock.h | 12 - 3 files changed, 1 insertion(+), 480 deletions(-) delete mode 100644 arch/arm/mach-omap2/clkt_clksel.c
arch/arm/mach-omap2/Makefile +1 -2
@@ -12,8 +12,7 @@ obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o timer.o pm.o \ hwmod-common = omap_hwmod.o omap_hwmod_reset.o \ omap_hwmod_common_data.o -clock-common = clock.o clock_common_data.o \ - clkt_clksel.o +clock-common = clock.o clock_common_data.o secure-common = omap-smc.o omap-secure.o obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common)
arch/arm/mach-omap2/clkt_clksel.c deleted +0 -466
466 lines not on this page · raw message
arch/arm/mach-omap2/clock.h +0 -12
@@ -186,18 +186,6 @@ void omap3_dpll_deny_idle(struct clk_hw_omap *clk);void __init omap2_clk_disable_clkdm_control (void ); -/* clkt_clksel.c public functions */ -u32 omap2_clksel_round_rate_div (struct clk_hw_omap *clk, -unsigned long target_rate, -u32 *new_div); -u8 omap2_clksel_find_parent_index (struct clk_hw *hw); -unsigned long omap2_clksel_recalc (struct clk_hw *hw,unsigned long parent_rate); -long omap2_clksel_round_rate (struct clk_hw *hw,unsigned long target_rate, -unsigned long *parent_rate); -int omap2_clksel_set_rate (struct clk_hw *hw,unsigned long rate, -unsigned long parent_rate); -int omap2_clksel_set_parent (struct clk_hw *hw,u8 field_val); -int omap2_clk_enable_autoidle_all (void );int omap2_clk_allow_idle (struct clk *clk);int omap2_clk_deny_idle (struct clk *clk);
Signature · 1 line
1.7.9.5
PATCH v3 7/27 ARM: OMAP2+: clock: remove clock_common_data.c file
In reply to Tero KristoThis only contains clksel tables that were used with the legacy clock data. Now that legacy clock data is completely gone, this file can be removed also.
--- arch/arm/mach-omap2/Makefile | 2 +- arch/arm/mach-omap2/clock.h | 14 ---- arch/arm/mach-omap2/clock_common_data.c | 115 ------------------------------- 3 files changed, 1 insertion(+), 130 deletions(-) delete mode 100644 arch/arm/mach-omap2/clock_common_data.c
arch/arm/mach-omap2/Makefile +1 -1
@@ -12,7 +12,7 @@ obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o timer.o pm.o \ hwmod-common = omap_hwmod.o omap_hwmod_reset.o \ omap_hwmod_common_data.o -clock-common = clock.o clock_common_data.o +clock-common = clock.o secure-common = omap-smc.o omap-secure.o obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common)
arch/arm/mach-omap2/clock.h +0 -14
@@ -204,11 +204,6 @@ extern const struct clkops clkops_omap2_dflt;extern struct clk_functions omap2_clk_functions; -extern const struct clksel_rate gpt_32k_rates[]; -extern const struct clksel_rate gpt_sys_rates[]; -extern const struct clksel_rate gfx_l3_rates[]; -extern const struct clksel_rate dsp_ick_rates[]; -extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_ssi_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait;
@@ -217,15 +212,6 @@ extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait;extern const struct clk_hw_omap_ops clkhwops_apll54;extern const struct clk_hw_omap_ops clkhwops_apll96; -/* clksel_rate blocks shared between OMAP44xx and AM33xx */ -extern const struct clksel_rate div_1_0_rates[]; -extern const struct clksel_rate div3_1to4_rates[]; -extern const struct clksel_rate div_1_1_rates[]; -extern const struct clksel_rate div_1_2_rates[]; -extern const struct clksel_rate div_1_3_rates[]; -extern const struct clksel_rate div_1_4_rates[]; -extern const struct clksel_rate div31_1to31_rates[]; -extern int omap2_clkops_enable_clkdm (struct clk_hw *hw);extern void omap2_clkops_disable_clkdm (struct clk_hw *hw);
arch/arm/mach-omap2/clock_common_data.c deleted +0 -115
115 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH v3 8/27 ARM: OMAP36xx: remove clock36xx.c/.h files
In reply to Tero KristoThese files contain legacy clock implementations which are no longer used for anything, thus remove them completely.
--- arch/arm/mach-omap2/Makefile | 2 +- arch/arm/mach-omap2/clock36xx.c | 69 --------------------------------------- arch/arm/mach-omap2/clock36xx.h | 13 -------- 3 files changed, 1 insertion(+), 83 deletions(-) delete mode 100644 arch/arm/mach-omap2/clock36xx.c delete mode 100644 arch/arm/mach-omap2/clock36xx.h
arch/arm/mach-omap2/Makefile +1 -1
@@ -188,7 +188,7 @@ obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o obj-$(CONFIG_SOC_OMAP2430) += clock2430.o obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) clock3xxx.o obj-$(CONFIG_ARCH_OMAP3) += clock34xx.o clkt34xx_dpll3m2.o -obj-$(CONFIG_ARCH_OMAP3) += clock3517.o clock36xx.o +obj-$(CONFIG_ARCH_OMAP3) += clock3517.o obj-$(CONFIG_ARCH_OMAP3) += dpll3xxx.o obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) obj-$(CONFIG_ARCH_OMAP4) += dpll3xxx.o
arch/arm/mach-omap2/clock36xx.c deleted +0 -69
69 lines not on this page · raw message
arch/arm/mach-omap2/clock36xx.h deleted +0 -13
@@ -1,13 +0,0 @@ -/* -* OMAP36xx clock function prototypes and macros -* -* Copyright (C) 2010 Texas Instruments, Inc. -* Copyright (C) 2010 Nokia Corporation -*/ - -#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK36XX_H -#define __ARCH_ARM_MACH_OMAP2_CLOCK36XX_H - -extern int omap36xx_pwrdn_clk_enable_with_hsdiv_restore (struct clk_hw *hw); - -#endif
Signature · 1 line
1.7.9.5
PATCH v3 9/27 clk: ti: autoidle: move generic autoidle handling code to clock driver
In reply to Tero KristoThis is no longer needed in platform directory, as the legacy clock data is gone, so move it under TI clock driver. Some static functions are renamed also.
--- arch/arm/mach-omap2/clock.c | 104 ----------------------------------- arch/arm/mach-omap2/clock.h | 3 -- drivers/clk/ti/autoidle.c | 119 ++++++++++++++++++++++++++++++++++++++--- drivers/clk/ti/clock.h | 3 ++ drivers/clk/ti/fixed-factor.c | 2 + include/linux/clk/ti.h | 13 ++--- 6 files changed, 119 insertions(+), 125 deletions(-)
arch/arm/mach-omap2/clock.c +0 -104
@@ -69,8 +69,6 @@ u16 cpu_mask;*/ static bool clkdm_control = true; -static LIST_HEAD (clk_hw_omap_clocks); -struct clk_iomap {struct regmap *regmap;void __iomem *mem;
@@ -579,108 +577,6 @@ static int __init omap_clk_setup(char *str)__setup ("mpurate=" , omap_clk_setup);/** -* omap2_init_clk_hw_omap_clocks - initialize an OMAP clock -* @clk: struct clk * to initialize -* -* Add an OMAP clock @clk to the internal list of OMAP clocks. Used -* temporarily for autoidle handling, until this support can be -* integrated into the common clock framework code in some way. No -* return value. -*/ -void omap2_init_clk_hw_omap_clocks (struct clk *clk) -{ -struct clk_hw_omap *c; - -if (__clk_get_flags (clk) &CLK_IS_BASIC ) -return ; - - c =to_clk_hw_omap (__clk_get_hw (clk)); -list_add (&c->node, &clk_hw_omap_clocks); -} - -/** -* omap2_clk_enable_autoidle_all - enable autoidle on all OMAP clocks that -* support it -* -* Enable clock autoidle on all OMAP clocks that have allow_idle -* function pointers associated with them. This function is intended -* to be temporary until support for this is added to the common clock -* code. Returns 0. -*/ -int omap2_clk_enable_autoidle_all (void ) -{ -struct clk_hw_omap *c; - -list_for_each_entry (c, &clk_hw_omap_clocks, node) -if (c->ops && c->ops->allow_idle) - c->ops->allow_idle (c); - -of_ti_clk_allow_autoidle_all (); - -return 0 ; -} - -/** -* omap2_clk_disable_autoidle_all - disable autoidle on all OMAP clocks that -* support it -* -* Disable clock autoidle on all OMAP clocks that have allow_idle -* function pointers associated with them. This function is intended -* to be temporary until support for this is added to the common clock -* code. Returns 0. -*/ -int omap2_clk_disable_autoidle_all (void ) -{ -struct clk_hw_omap *c; - -list_for_each_entry (c, &clk_hw_omap_clocks, node) -if (c->ops && c->ops->deny_idle) - c->ops->deny_idle (c); - -of_ti_clk_deny_autoidle_all (); - -return 0 ; -} - -/** -* omap2_clk_deny_idle - disable autoidle on an OMAP clock -* @clk: struct clk * to disable autoidle for -* -* Disable autoidle on an OMAP clock. -*/ -int omap2_clk_deny_idle (struct clk *clk) -{ -struct clk_hw_omap *c; - -if (__clk_get_flags (clk) &CLK_IS_BASIC ) -return -EINVAL ; - - c =to_clk_hw_omap (__clk_get_hw (clk)); -if (c->ops && c->ops->deny_idle) - c->ops->deny_idle (c); -return 0 ; -} - -/** -* omap2_clk_allow_idle - enable autoidle on an OMAP clock -* @clk: struct clk * to enable autoidle for -* -* Enable autoidle on an OMAP clock. -*/ -int omap2_clk_allow_idle (struct clk *clk) -{ -struct clk_hw_omap *c; - -if (__clk_get_flags (clk) &CLK_IS_BASIC ) -return -EINVAL ; - - c =to_clk_hw_omap (__clk_get_hw (clk)); -if (c->ops && c->ops->allow_idle) - c->ops->allow_idle (c); -return 0 ; -} - -/** * omap2_clk_enable_init_clocks - prepare & enable a list of clocks * @clk_names: ptr to an array of strings of clock names to enable * @num_clocks: number of clock names in @clk_names
arch/arm/mach-omap2/clock.h +0 -3
@@ -186,9 +186,6 @@ void omap3_dpll_deny_idle(struct clk_hw_omap *clk);void __init omap2_clk_disable_clkdm_control (void ); -int omap2_clk_enable_autoidle_all (void ); -int omap2_clk_allow_idle (struct clk *clk); -int omap2_clk_deny_idle (struct clk *clk);int omap2_clk_switch_mpurate_at_boot (const char *mpurate_ck_name); void omap2_clk_print_new_rates(const char *hfclkin_ck_name, const char *core_ck_name,
drivers/clk/ti/autoidle.c +111 -8
160 lines not on this page · raw message
drivers/clk/ti/clock.h +3 -0
@@ -169,6 +169,9 @@ void ti_clk_patch_legacy_clks(struct ti_clk **patch);struct clk *ti_clk_register_clk (struct ti_clk *setup);int ti_clk_register_legacy_clks (struct ti_clk_alias *clks); +void omap2_init_clk_hw_omap_clocks (struct clk *clk); +int of_ti_clk_autoidle_setup (struct device_node *node); +extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx;extern const struct clk_hw_omap_ops clkhwops_iclk;extern const struct clk_hw_omap_ops clkhwops_iclk_wait;
drivers/clk/ti/fixed-factor.c +2 -0
@@ -22,6 +22,8 @@#include <linux/of_address.h> #include <linux/clk/ti.h> +#include "clock.h" +#undef pr_fmt#define pr_fmt (fmt) "%s: " fmt, __func__
include/linux/clk/ti.h +3 -10
@@ -259,7 +259,6 @@ extern const struct clk_ops ti_clk_mux_ops;#define to_clk_hw_omap (_hw) container_of(_hw, struct clk_hw_omap, hw) -void omap2_init_clk_hw_omap_clocks (struct clk *clk);int omap3_noncore_dpll_enable (struct clk_hw *hw);void omap3_noncore_dpll_disable (struct clk_hw *hw);int omap3_noncore_dpll_set_parent (struct clk_hw *hw,u8 index);
@@ -288,6 +287,9 @@ long omap3_clkoutx2_round_rate(struct clk_hw *hw, unsigned long rate,int omap2_clkops_enable_clkdm (struct clk_hw *hw);void omap2_clkops_disable_clkdm (struct clk_hw *hw);int omap2_clk_disable_autoidle_all (void ); +int omap2_clk_enable_autoidle_all (void ); +int omap2_clk_allow_idle (struct clk *clk); +int omap2_clk_deny_idle (struct clk *clk);void omap2_clk_enable_init_clocks (const char **clk_names,u8 num_clocks);int omap3_dpll4_set_rate (struct clk_hw *clk,unsigned long rate,unsigned long parent_rate);
@@ -320,7 +322,6 @@ void ti_dt_clk_init_retry_clks(void);void ti_dt_clockdomains_setup (void );int ti_clk_retry_init (struct device_node *node,struct clk_hw *hw,ti_of_clk_init_cb_t func); -int of_ti_clk_autoidle_setup (struct device_node *node);int ti_clk_add_component (struct device_node *node,struct clk_hw *hw,int type);int omap3430_dt_clk_init (void );
@@ -351,14 +352,6 @@ struct ti_clk_features {void ti_clk_setup_features (struct ti_clk_features *features);struct ti_clk_features *ti_clk_get_features (void ); -#ifdef CONFIG_OF -void of_ti_clk_allow_autoidle_all (void ); -void of_ti_clk_deny_autoidle_all (void ); -#else -static inline void of_ti_clk_allow_autoidle_all (void ) { } -static inline void of_ti_clk_deny_autoidle_all (void ) { } -#endif -extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll;extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait;extern const struct clk_hw_omap_ops clkhwops_omap3_dpll;
Signature · 1 line
1.7.9.5
PATCH v3 10/27 clk: ti: move omap2_clk_enable_init_clocks under clock driver
In reply to Tero KristoThis is no longer used outside clock driver, so move it under the driver and remove the export for it from the global header file.
--- arch/arm/mach-omap2/clock.c | 24 ------------------------ drivers/clk/ti/clk-2xxx.c | 2 ++ drivers/clk/ti/clk-33xx.c | 2 ++ drivers/clk/ti/clk-3xxx.c | 1 + drivers/clk/ti/clk-816x.c | 2 ++ drivers/clk/ti/clk.c | 24 ++++++++++++++++++++++++ drivers/clk/ti/clock.h | 1 + include/linux/clk/ti.h | 1 - 8 files changed, 32 insertions(+), 25 deletions(-)
arch/arm/mach-omap2/clock.c +0 -24
@@ -576,30 +576,6 @@ static int __init omap_clk_setup(char *str) }__setup ("mpurate=" , omap_clk_setup); -/** -* omap2_clk_enable_init_clocks - prepare & enable a list of clocks -* @clk_names: ptr to an array of strings of clock names to enable -* @num_clocks: number of clock names in @clk_names -* -* Prepare and enable a list of clocks, named by @clk_names. No -* return value. XXX Deprecated; only needed until these clocks are -* properly claimed and enabled by the drivers or core code that uses -* them. XXX What code disables & calls clk_put on these clocks? -*/ -void omap2_clk_enable_init_clocks (const char **clk_names,u8 num_clocks) -{ -struct clk *init_clk; -int i; - -for (i =0 ; i < num_clocks; i++) { - init_clk =clk_get (NULL , clk_names[i]); -if (WARN (IS_ERR (init_clk),"could not find init clock %s\n" , - clk_names[i])) -continue ; -clk_prepare_enable (init_clk); - } -} -const struct clk_hw_omap_ops clkhwops_wait = { .find_idlest = omap2_clk_dflt_find_idlest, .find_companion = omap2_clk_dflt_find_companion,
drivers/clk/ti/clk-2xxx.c +2 -0
@@ -19,6 +19,8 @@#include <linux/clk-provider.h> #include <linux/clk/ti.h> +#include "clock.h" +static struct ti_dt_clk omap2xxx_clks[] = {DT_CLK (NULL ,"func_32k_ck" ,"func_32k_ck" ),DT_CLK (NULL ,"secure_32k_ck" ,"secure_32k_ck" ),
drivers/clk/ti/clk-33xx.c +2 -0
@@ -19,6 +19,8 @@#include <linux/clk-provider.h> #include <linux/clk/ti.h> +#include "clock.h" +static struct ti_dt_clk am33xx_clks[] = {DT_CLK (NULL ,"clk_32768_ck" ,"clk_32768_ck" ),DT_CLK (NULL ,"clk_rc32k_ck" ,"clk_rc32k_ck" ),
drivers/clk/ti/clk-3xxx.c +1 -0
@@ -19,6 +19,7 @@#include <linux/clk-provider.h> #include <linux/clk/ti.h> +#include "clock.h" static struct ti_dt_clk omap3xxx_clks[] = {DT_CLK (NULL ,"apb_pclk" ,"dummy_apb_pclk" ),
drivers/clk/ti/clk-816x.c +2 -0
@@ -14,6 +14,8 @@#include <linux/clk-provider.h> #include <linux/clk/ti.h> +#include "clock.h" +static struct ti_dt_clk dm816x_clks[] = {DT_CLK (NULL ,"sys_clkin" ,"sys_clkin_ck" ),DT_CLK (NULL ,"timer_sys_ck" ,"sys_clkin_ck" ),
drivers/clk/ti/clk.c +24 -0
@@ -335,4 +335,28 @@ struct ti_clk_features *ti_clk_get_features(void) {return &ti_clk_features; } + +/** +* omap2_clk_enable_init_clocks - prepare & enable a list of clocks +* @clk_names: ptr to an array of strings of clock names to enable +* @num_clocks: number of clock names in @clk_names +* +* Prepare and enable a list of clocks, named by @clk_names. No +* return value. XXX Deprecated; only needed until these clocks are +* properly claimed and enabled by the drivers or core code that uses +* them. XXX What code disables & calls clk_put on these clocks? +*/ +void omap2_clk_enable_init_clocks (const char **clk_names,u8 num_clocks) +{ +struct clk *init_clk; +int i; + +for (i =0 ; i < num_clocks; i++) { + init_clk =clk_get (NULL , clk_names[i]); +if (WARN (IS_ERR (init_clk),"could not find init clock %s\n" , + clk_names[i])) +continue ; +clk_prepare_enable (init_clk); + } +}#endif
drivers/clk/ti/clock.h +1 -0
@@ -171,6 +171,7 @@ int ti_clk_register_legacy_clks(struct ti_clk_alias *clks);void omap2_init_clk_hw_omap_clocks (struct clk *clk);int of_ti_clk_autoidle_setup (struct device_node *node); +void omap2_clk_enable_init_clocks (const char **clk_names,u8 num_clocks);extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx;extern const struct clk_hw_omap_ops clkhwops_iclk;
include/linux/clk/ti.h +0 -1
@@ -290,7 +290,6 @@ int omap2_clk_disable_autoidle_all(void);int omap2_clk_enable_autoidle_all (void );int omap2_clk_allow_idle (struct clk *clk);int omap2_clk_deny_idle (struct clk *clk); -void omap2_clk_enable_init_clocks (const char **clk_names,u8 num_clocks);int omap3_dpll4_set_rate (struct clk_hw *clk,unsigned long rate,unsigned long parent_rate); int omap3_dpll4_set_rate_and_parent(struct clk_hw *hw, unsigned long rate,
Signature · 1 line
1.7.9.5
PATCH v3 11/27 ARM: OMAP2+: clock: remove support for legacy mpurate command line param
In reply to Tero KristoThe legacy support is wrong and dangerous, as it doesn't take any OPPs into account and does not scale voltages. Switching mpurate should be handled through cpufreq.
--- arch/arm/mach-omap2/Makefile | 2 +- arch/arm/mach-omap2/clock.c | 41 ---------------------------- arch/arm/mach-omap2/clock.h | 1 - arch/arm/mach-omap2/clock2xxx.c | 57 --------------------------------------- arch/arm/mach-omap2/clock3xxx.c | 25 ----------------- 5 files changed, 1 insertion(+), 125 deletions(-) delete mode 100644 arch/arm/mach-omap2/clock2xxx.c
arch/arm/mach-omap2/Makefile +1 -1
@@ -181,7 +181,7 @@ obj-$(CONFIG_SOC_DRA7XX) += $(clockdomain-common) obj-$(CONFIG_SOC_DRA7XX) += clockdomains7xx_data.o # Clock framework -obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) clock2xxx.o +obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpllcore.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_virt_prcm_set.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o
arch/arm/mach-omap2/clock.c +0 -41
47 lines not on this page · raw message
arch/arm/mach-omap2/clock.h +0 -1
@@ -186,7 +186,6 @@ void omap3_dpll_deny_idle(struct clk_hw_omap *clk);void __init omap2_clk_disable_clkdm_control (void ); -int omap2_clk_switch_mpurate_at_boot (const char *mpurate_ck_name);void omap2_clk_print_new_rates (const char *hfclkin_ck_name,const char *core_ck_name,const char *mpu_ck_name);
arch/arm/mach-omap2/clock2xxx.c deleted +0 -57
57 lines not on this page · raw message
arch/arm/mach-omap2/clock3xxx.c +0 -25
@@ -108,28 +108,3 @@ void __init omap3_clk_lock_dpll5(void)clk_disable_unprepare (dpll5_clk);return ; } - -/* Common clock code */ - -/* -* Switch the MPU rate if specified on cmdline. We cannot do this -* early until cmdline is parsed. XXX This should be removed from the -* clock code and handled by the OPP layer code in the near future. -*/ -static int __init omap3xxx_clk_arch_init (void ) -{ -int ret; - -if (!cpu_is_omap34xx ()) -return 0 ; - - ret =omap2_clk_switch_mpurate_at_boot ("dpll1_ck" ); -if (!ret) -omap2_clk_print_new_rates ("osc_sys_ck" ,"core_ck" ,"arm_fck" ); - -return ret; -} - -omap_arch_initcall (omap3xxx_clk_arch_init); - -
Signature · 1 line
1.7.9.5
PATCH v3 12/27 ARM: OMAP2+: clock: add support for clkdm ops to the low level clk ops
In reply to Tero KristoClock driver requires access to certain clockdomain handling ops once the code is being moved over under clock driver. Example of this is clk_enable / clk_disable under omap3 DPLL code. The required clkdm APIs are now exported through the ti_clk_ll_ops struct.
--- arch/arm/mach-omap2/clock.c | 2 ++ include/linux/clk/ti.h | 16 +++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-)
arch/arm/mach-omap2/clock.c +2 -0
@@ -120,6 +120,8 @@ u32 omap2_clk_readl(struct clk_hw_omap *clk, void __iomem *reg)static struct ti_clk_ll_ops omap_clk_ll_ops = { .clk_readl = clk_memmap_readl, .clk_writel = clk_memmap_writel, + .clkdm_clk_enable = clkdm_clk_enable, + .clkdm_clk_disable = clkdm_clk_disable, };/**
include/linux/clk/ti.h +11 -5
@@ -238,18 +238,24 @@ struct clk_omap_reg { };/** -* struct ti_clk_ll_ops - low-level register access ops for a clock +* struct ti_clk_ll_ops - low-level ops for clocks * @clk_readl: pointer to register read function * @clk_writel: pointer to register write function +* @clkdm_clk_enable: pointer to clockdomain enable function +* @clkdm_clk_disable: pointer to clockdomain disable function * -* Low-level register access ops are generally used by the basic clock types -* (clk-gate, clk-mux, clk-divider etc.) to provide support for various -* low-level hardware interfaces (direct MMIO, regmap etc.), but can also be -* used by other hardware-specific clock drivers if needed. +* Low-level ops are generally used by the basic clock types (clk-gate, +* clk-mux, clk-divider etc.) to provide support for various low-level +* hadrware interfaces (direct MMIO, regmap etc.), and is initialized +* by board code. Low-level ops also contain some other platform specific +* operations not provided directly by clock drivers. */ struct ti_clk_ll_ops {u32 (*clk_readl)(void __iomem *reg);void (*clk_writel)(u32 val,void __iomem *reg); +int (*clkdm_clk_enable)(struct clockdomain *clkdm,struct clk *clk); +int (*clkdm_clk_disable)(struct clockdomain *clkdm, +struct clk *clk); };extern struct ti_clk_ll_ops *ti_clk_ll_ops;
Signature · 1 line
1.7.9.5
PATCH v3 13/27 ARM: OMAP2+: clock: add support for specific CM ops to ti_clk_ll_ops
In reply to Tero KristoClock driver requires access to some CM API functions once the code is being moved under the clock driver from the platform directory. Gate type clock requires access to cm_wait_module_ready and cm_split_idlest_reg functions, which are both used for waiting until the module being clocked has been successfully activated. These CM APIs are now exported through the ti_clk_ll_ops struct.
--- arch/arm/mach-omap2/clock.c | 2 ++ include/linux/clk/ti.h | 6 ++++++ 2 files changed, 8 insertions(+)
arch/arm/mach-omap2/clock.c +2 -0
@@ -122,6 +122,8 @@ static struct ti_clk_ll_ops omap_clk_ll_ops = { .clk_writel = clk_memmap_writel, .clkdm_clk_enable = clkdm_clk_enable, .clkdm_clk_disable = clkdm_clk_disable, + .cm_wait_module_ready = omap_cm_wait_module_ready, + .cm_split_idlest_reg = cm_split_idlest_reg, };/**
include/linux/clk/ti.h +6 -0
@@ -243,6 +243,8 @@ struct clk_omap_reg {* @clk_writel: pointer to register write function * @clkdm_clk_enable: pointer to clockdomain enable function * @clkdm_clk_disable: pointer to clockdomain disable function +* @cm_wait_module_ready: pointer to CM module wait ready function +* @cm_split_idlest_reg: pointer to CM module function to split idlest reg * * Low-level ops are generally used by the basic clock types (clk-gate, * clk-mux, clk-divider etc.) to provide support for various low-level
@@ -256,6 +258,10 @@ struct ti_clk_ll_ops {int (*clkdm_clk_enable)(struct clockdomain *clkdm,struct clk *clk);int (*clkdm_clk_disable)(struct clockdomain *clkdm,struct clk *clk); +int (*cm_wait_module_ready)(u8 part,s16 prcm_mod,u16 idlest_reg, +u8 idlest_shift); +int (*cm_split_idlest_reg)(void __iomem *idlest_reg,s16 *prcm_inst, +u8 *idlest_reg_id); };extern struct ti_clk_ll_ops *ti_clk_ll_ops;
Signature · 1 line
1.7.9.5
PATCH v3 14/27 clk: ti: dpll: move omap3 DPLL functionality to clock driver
In reply to Tero KristoWith the legacy clock support gone, OMAP3 generic DPLL code can now be moved over to the clock driver also. A few un-unused clkoutx2 functions are also removed at the same time.
---
arch/arm/mach-omap2/Makefile | 8 +-
arch/arm/mach-omap2/clock.h | 4 -
arch/arm/mach-omap2/clock3xxx.c | 77 ----------
drivers/clk/ti/Makefile | 2 +-
drivers/clk/ti/clk-3xxx.c | 31 ++++
drivers/clk/ti/clock.h | 27 ++++
{arch/arm/mach-omap2 => drivers/clk/ti}/dpll3xxx.c | 153 ++++++++++----------
include/linux/clk/ti.h | 30 ----
8 files changed, 141 insertions(+), 191 deletions(-)
rename {arch/arm/mach-omap2 => drivers/clk/ti}/dpll3xxx.c (85%)arch/arm/mach-omap2/Makefile +2 -6
@@ -189,15 +189,11 @@ obj-$(CONFIG_SOC_OMAP2430) += clock2430.o obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) clock3xxx.o obj-$(CONFIG_ARCH_OMAP3) += clock34xx.o clkt34xx_dpll3m2.o obj-$(CONFIG_ARCH_OMAP3) += clock3517.o -obj-$(CONFIG_ARCH_OMAP3) += dpll3xxx.o obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) -obj-$(CONFIG_ARCH_OMAP4) += dpll3xxx.o -obj-$(CONFIG_SOC_AM33XX) += $(clock-common) dpll3xxx.o +obj-$(CONFIG_SOC_AM33XX) += $(clock-common) obj-$(CONFIG_SOC_OMAP5) += $(clock-common) -obj-$(CONFIG_SOC_OMAP5) += dpll3xxx.o obj-$(CONFIG_SOC_DRA7XX) += $(clock-common) -obj-$(CONFIG_SOC_DRA7XX) += dpll3xxx.o -obj-$(CONFIG_SOC_AM43XX) += $(clock-common) dpll3xxx.o +obj-$(CONFIG_SOC_AM43XX) += $(clock-common) # OMAP2 clock rate set data (old "OPP" data) obj-$(CONFIG_SOC_OMAP2420) += opp2420_data.o
arch/arm/mach-omap2/clock.h +0 -4
@@ -180,10 +180,6 @@ struct clksel {#define OMAP4XXX_EN_DPLL_FRBYPASS 0x6#define OMAP4XXX_EN_DPLL_LOCKED 0x7 -u32 omap3_dpll_autoidle_read (struct clk_hw_omap *clk); -void omap3_dpll_allow_idle (struct clk_hw_omap *clk); -void omap3_dpll_deny_idle (struct clk_hw_omap *clk); -void __init omap2_clk_disable_clkdm_control (void ); void omap2_clk_print_new_rates(const char *hfclkin_ck_name,
arch/arm/mach-omap2/clock3xxx.c +0 -77
82 lines not on this page · raw message
drivers/clk/ti/Makefile +1 -1
@@ -1,7 +1,7 @@ obj-y += clk.o autoidle.o clockdomain.o clk-common = dpll.o composite.o divider.o gate.o \ fixed-factor.o mux.o apll.o \ - clkt_dpll.o clkt_iclk.o + clkt_dpll.o clkt_iclk.o dpll3xxx.o obj-$(CONFIG_SOC_AM33XX) += $(clk-common) clk-33xx.o obj-$(CONFIG_SOC_TI81XX) += $(clk-common) fapll.o clk-816x.o obj-$(CONFIG_ARCH_OMAP2) += $(clk-common) interface.o clk-2xxx.o
drivers/clk/ti/clk-3xxx.c +31 -0
@@ -21,6 +21,13 @@#include "clock.h" +/* +* DPLL5_FREQ_FOR_USBHOST: USBHOST and USBTLL are the only clocks +* that are sourced by DPLL5, and both of these require this clock +* to be at 120 MHz for proper operation. +*/ +#define DPLL5_FREQ_FOR_USBHOST 120000000 +static struct ti_dt_clk omap3xxx_clks[] = {DT_CLK (NULL ,"apb_pclk" ,"dummy_apb_pclk" ),DT_CLK (NULL ,"omap_32k_fck" ,"omap_32k_fck" ),
@@ -325,6 +332,30 @@ enum { OMAP3_SOC_OMAP3630, }; +/** +* omap3_clk_lock_dpll5 - locks DPLL5 +* +* Locks DPLL5 to a pre-defined frequency. This is required for proper +* operation of USB. +*/ +void __init omap3_clk_lock_dpll5 (void ) +{ +struct clk *dpll5_clk; +struct clk *dpll5_m2_clk; + + dpll5_clk =clk_get (NULL ,"dpll5_ck" ); +clk_set_rate (dpll5_clk,DPLL5_FREQ_FOR_USBHOST ); +clk_prepare_enable (dpll5_clk); + +/* Program dpll5_m2_clk divider for no division */ + dpll5_m2_clk =clk_get (NULL ,"dpll5_m2_ck" ); +clk_prepare_enable (dpll5_m2_clk); +clk_set_rate (dpll5_m2_clk,DPLL5_FREQ_FOR_USBHOST ); + +clk_disable_unprepare (dpll5_m2_clk); +clk_disable_unprepare (dpll5_clk); +} +static int __init omap3xxx_dt_clk_init (int soc_type) { if (soc_type == OMAP3_SOC_AM35XX || soc_type == OMAP3_SOC_OMAP3630 ||
drivers/clk/ti/clock.h +27 -0
@@ -173,11 +173,38 @@ void omap2_init_clk_hw_omap_clocks(struct clk *clk);int of_ti_clk_autoidle_setup (struct device_node *node);void omap2_clk_enable_init_clocks (const char **clk_names,u8 num_clocks); +extern const struct clk_hw_omap_ops clkhwops_omap3_dpll;extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx;extern const struct clk_hw_omap_ops clkhwops_iclk;extern const struct clk_hw_omap_ops clkhwops_iclk_wait;u8 omap2_init_dpll_parent (struct clk_hw *hw); +int omap3_noncore_dpll_enable (struct clk_hw *hw); +void omap3_noncore_dpll_disable (struct clk_hw *hw); +int omap3_noncore_dpll_set_parent (struct clk_hw *hw,u8 index); +int omap3_noncore_dpll_set_rate (struct clk_hw *hw,unsigned long rate, +unsigned long parent_rate); +int omap3_noncore_dpll_set_rate_and_parent (struct clk_hw *hw, +unsigned long rate, +unsigned long parent_rate, +u8 index); +long omap3_noncore_dpll_determine_rate (struct clk_hw *hw, +unsigned long rate, +unsigned long min_rate, +unsigned long max_rate, +unsigned long *best_parent_rate, +struct clk_hw **best_parent_clk); +long omap2_dpll_round_rate (struct clk_hw *hw,unsigned long target_rate, +unsigned long *parent_rate); +unsigned long omap3_clkoutx2_recalc (struct clk_hw *hw, +unsigned long parent_rate); + +unsigned long omap3_dpll_recalc (struct clk_hw *hw,unsigned long parent_rate); +int omap3_dpll4_set_rate (struct clk_hw *clk,unsigned long rate, +unsigned long parent_rate); +int omap3_dpll4_set_rate_and_parent (struct clk_hw *hw,unsigned long rate, +unsigned long parent_rate,u8 index); +void omap3_clk_lock_dpll5 (void );unsigned long omap4_dpll_regm4xen_recalc (struct clk_hw *hw,unsigned long parent_rate);
drivers/clk/ti/dpll3xxx.c renamed from arch/arm/mach-omap2/dpll3xxx.c +80 -73
293 lines not on this page · raw message
include/linux/clk/ti.h +0 -30
@@ -271,41 +271,13 @@ extern const struct clk_ops ti_clk_mux_ops;#define to_clk_hw_omap (_hw) container_of(_hw, struct clk_hw_omap, hw) -int omap3_noncore_dpll_enable (struct clk_hw *hw); -void omap3_noncore_dpll_disable (struct clk_hw *hw); -int omap3_noncore_dpll_set_parent (struct clk_hw *hw,u8 index); -int omap3_noncore_dpll_set_rate (struct clk_hw *hw,unsigned long rate, -unsigned long parent_rate); -int omap3_noncore_dpll_set_rate_and_parent (struct clk_hw *hw, -unsigned long rate, -unsigned long parent_rate, -u8 index); -long omap3_noncore_dpll_determine_rate (struct clk_hw *hw, -unsigned long rate, -unsigned long min_rate, -unsigned long max_rate, -unsigned long *best_parent_rate, -struct clk_hw **best_parent_clk); -unsigned long omap3_dpll_recalc (struct clk_hw *hw,unsigned long parent_rate); -long omap2_dpll_round_rate (struct clk_hw *hw,unsigned long target_rate, -unsigned long *parent_rate);void omap2_init_clk_clkdm (struct clk_hw *clk); -unsigned long omap3_clkoutx2_recalc (struct clk_hw *hw, -unsigned long parent_rate); -int omap3_clkoutx2_set_rate (struct clk_hw *hw,unsigned long rate, -unsigned long parent_rate); -long omap3_clkoutx2_round_rate (struct clk_hw *hw,unsigned long rate, -unsigned long *prate);int omap2_clkops_enable_clkdm (struct clk_hw *hw);void omap2_clkops_disable_clkdm (struct clk_hw *hw);int omap2_clk_disable_autoidle_all (void );int omap2_clk_enable_autoidle_all (void );int omap2_clk_allow_idle (struct clk *clk);int omap2_clk_deny_idle (struct clk *clk); -int omap3_dpll4_set_rate (struct clk_hw *clk,unsigned long rate, -unsigned long parent_rate); -int omap3_dpll4_set_rate_and_parent (struct clk_hw *hw,unsigned long rate, -unsigned long parent_rate,u8 index);int omap2_dflt_clk_enable (struct clk_hw *hw);void omap2_dflt_clk_disable (struct clk_hw *hw);int omap2_dflt_clk_is_enabled (struct clk_hw *hw);
@@ -317,7 +289,6 @@ void omap2_clk_dflt_find_companion(struct clk_hw_omap *clk,void omap2_clk_dflt_find_idlest (struct clk_hw_omap *clk,void __iomem **idlest_reg,u8 *idlest_bit,u8 *idlest_val); -void omap3_clk_lock_dpll5 (void );unsigned long omap2_dpllcore_recalc (struct clk_hw *hw,unsigned long parent_rate); int omap2_reprogram_dpllcore(struct clk_hw *clk, unsigned long rate,
@@ -365,7 +336,6 @@ struct ti_clk_features *ti_clk_get_features(void);extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll;extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait; -extern const struct clk_hw_omap_ops clkhwops_omap3_dpll;extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait;
Signature · 1 line
1.7.9.5
PATCH v3 15/27 ARM: OMAP3: clock: remove clock3xxx.c file
In reply to Tero KristoThis now only has a couple of variables within it, which are used outside the file itself. Move these variables to where they are actually used, and remove the file completely as it is now empty.
--- arch/arm/mach-omap2/Makefile | 2 +- arch/arm/mach-omap2/clkt34xx_dpll3m2.c | 2 ++ arch/arm/mach-omap2/clock3xxx.c | 33 -------------------------------- 3 files changed, 3 insertions(+), 34 deletions(-) delete mode 100644 arch/arm/mach-omap2/clock3xxx.c
arch/arm/mach-omap2/Makefile +1 -1
@@ -186,7 +186,7 @@ obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpllcore.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_virt_prcm_set.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o obj-$(CONFIG_SOC_OMAP2430) += clock2430.o -obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) clock3xxx.o +obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) obj-$(CONFIG_ARCH_OMAP3) += clock34xx.o clkt34xx_dpll3m2.o obj-$(CONFIG_ARCH_OMAP3) += clock3517.o obj-$(CONFIG_ARCH_OMAP4) += $(clock-common)
arch/arm/mach-omap2/clkt34xx_dpll3m2.c +2 -0
@@ -29,6 +29,8 @@#define CYCLES_PER_MHZ 1000000 +struct clk *sdrc_ick_p, *arm_fck_p; +/* * CORE DPLL (DPLL3) M2 divider rate programming functions *
arch/arm/mach-omap2/clock3xxx.c deleted +0 -33
@@ -1,33 +0,0 @@ -/* -* OMAP3-specific clock framework functions -* -* Copyright (C) 2007-2008 Texas Instruments, Inc. -* Copyright (C) 2007-2010 Nokia Corporation -* -* Paul Walmsley -* Jouni H?gander -* -* Parts of this code are based on code written by -* Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License version 2 as -* published by the Free Software Foundation. -*/ -#undef DEBUG - -#include <linux/kernel.h> -#include <linux/errno.h> -#include <linux/clk.h> -#include <linux/io.h> - -#include "soc.h" -#include "clock.h" -#include "clock3xxx.h" -#include "prm2xxx_3xxx.h" -#include "prm-regbits-34xx.h" -#include "cm2xxx_3xxx.h" -#include "cm-regbits-34xx.h" - -/* needed by omap3_core_dpll_m2_set_rate() */ -struct clk *sdrc_ick_p, *arm_fck_p;
Signature · 1 line
1.7.9.5
PATCH v3 16/27 ARM: OMAP2+: clock: remove clkdm_control static boolean from code
In reply to Tero Kristoclkdm_control is used to determine, whether clocks should trigger a clockdomain transition when they are enabled/disabled. Keep this functionality intact, but replace this with a clk_features flag which can be initialized during boot if needed.
--- arch/arm/mach-omap2/clock.c | 34 ++++++++++------------------------ arch/arm/mach-omap2/clock.h | 2 -- include/linux/clk/ti.h | 1 + 3 files changed, 11 insertions(+), 26 deletions(-)
arch/arm/mach-omap2/clock.c +10 -24
@@ -61,14 +61,6 @@ u16 cpu_mask;#define OMAP3PLUS_DPLL_FINT_MIN 32000#define OMAP3PLUS_DPLL_FINT_MAX 52000000 -/* -* clkdm_control: if true, then when a clock is enabled in the -* hardware, its clockdomain will first be enabled; and when a clock -* is disabled in the hardware, its clockdomain will be disabled -* afterwards. -*/ -static bool clkdm_control = true; -struct clk_iomap {struct regmap *regmap;void __iomem *mem;
@@ -288,19 +280,6 @@ void omap2_init_clk_clkdm(struct clk_hw *hw) }/** -* omap2_clk_disable_clkdm_control - disable clkdm control on clk enable/disable -* -* Prevent the OMAP clock code from calling into the clockdomain code -* when a hardware clock in that clockdomain is enabled or disabled. -* Intended to be called at init time from omap*_clk_init(). No -* return value. -*/ -void __init omap2_clk_disable_clkdm_control (void ) -{ - clkdm_control = false; -} - -/** * omap2_clk_dflt_find_companion - find companion clock to @clk * @clk: struct clk * to find the companion clock of * @other_reg: void __iomem ** to return the companion clock CM_*CLKEN va in
@@ -384,6 +363,12 @@ int omap2_dflt_clk_enable(struct clk_hw *hw)struct clk_hw_omap *clk;u32 v;int ret =0 ; +bool clkdm_control; + +if (ti_clk_get_features ()->flags &TI_CLK_DISABLE_CLKDM_CONTROL ) + clkdm_control = false; +else + clkdm_control = true; clk =to_clk_hw_omap (hw);
@@ -457,7 +442,8 @@ void omap2_dflt_clk_disable(struct clk_hw *hw)omap2_clk_writel (v, clk, clk->enable_reg);/* No OCP barrier needed here since it is a disable operation */ -if (clkdm_control && clk->clkdm) +if (!(ti_clk_get_features ()->flags &TI_CLK_DISABLE_CLKDM_CONTROL ) && + clk->clkdm)clkdm_clk_disable (clk->clkdm, hw->clk); }
@@ -490,7 +476,7 @@ int omap2_clkops_enable_clkdm(struct clk_hw *hw)pr_err ("%s: %s: should use dflt_clk_enable ?!\n" , __func__,__clk_get_name (hw->clk)); -if (!clkdm_control) { +if (ti_clk_get_features ()->flags &TI_CLK_DISABLE_CLKDM_CONTROL ) {pr_err ("%s: %s: clkfw-based clockdomain control disabled ?!\n" , __func__,__clk_get_name (hw->clk));return 0 ;
@@ -528,7 +514,7 @@ void omap2_clkops_disable_clkdm(struct clk_hw *hw)pr_err ("%s: %s: should use dflt_clk_disable ?!\n" , __func__,__clk_get_name (hw->clk)); -if (!clkdm_control) { +if (ti_clk_get_features ()->flags &TI_CLK_DISABLE_CLKDM_CONTROL ) {pr_err ("%s: %s: clkfw-based clockdomain control disabled ?!\n" , __func__,__clk_get_name (hw->clk));return ;
arch/arm/mach-omap2/clock.h +0 -2
@@ -180,8 +180,6 @@ struct clksel {#define OMAP4XXX_EN_DPLL_FRBYPASS 0x6#define OMAP4XXX_EN_DPLL_LOCKED 0x7 -void __init omap2_clk_disable_clkdm_control (void ); -void omap2_clk_print_new_rates (const char *hfclkin_ck_name,const char *core_ck_name,const char *mpu_ck_name);
include/linux/clk/ti.h +1 -0
@@ -330,6 +330,7 @@ struct ti_clk_features {#define TI_CLK_DPLL_HAS_FREQSEL BIT(0)#define TI_CLK_DPLL4_DENY_REPROGRAM BIT(1) +#define TI_CLK_DISABLE_CLKDM_CONTROL BIT(2)void ti_clk_setup_features (struct ti_clk_features *features);struct ti_clk_features *ti_clk_get_features (void );
Signature · 1 line
1.7.9.5
PATCH v3 17/27 clk: ti: dflt: move support for default gate clock to clock driver
In reply to Tero KristoWith the legacy support gone, OMAP2+ default gate clock can be moved under clock driver. Create a new file for the purpose, and clean-up the header exports a bit as some clock APIs are no longer needed outside clock driver itself.
--- arch/arm/mach-omap2/clock.c | 273 ------------------------------------- drivers/clk/ti/Makefile | 3 +- drivers/clk/ti/clkt_dflt.c | 316 +++++++++++++++++++++++++++++++++++++++++++ drivers/clk/ti/clock.h | 5 + include/linux/clk/ti.h | 4 - 5 files changed, 323 insertions(+), 278 deletions(-) create mode 100644 drivers/clk/ti/clkt_dflt.c
arch/arm/mach-omap2/clock.c +0 -273
@@ -40,12 +40,6 @@#include "cm-regbits-34xx.h" #include "common.h" -/* -* MAX_MODULE_ENABLE_WAIT: maximum of number of microseconds to wait -* for a module to indicate that it is no longer in idle -*/ -#define MAX_MODULE_ENABLE_WAIT 100000 -u16 cpu_mask;/* DPLL valid Fint frequency band limits - from 34xx TRM Section 4.7.6.2 */
@@ -176,77 +170,6 @@ void __init omap2_clk_legacy_provider_init(int index, void __iomem *mem)/* Private functions */ - -/** -* _wait_idlest_generic - wait for a module to leave the idle state -* @clk: module clock to wait for (needed for register offsets) -* @reg: virtual address of module IDLEST register -* @mask: value to mask against to determine if the module is active -* @idlest: idle state indicator (0 or 1) for the clock -* @name: name of the clock (for printk) -* -* Wait for a module to leave idle, where its idle-status register is -* not inside the CM module. Returns 1 if the module left idle -* promptly, or 0 if the module did not leave idle before the timeout -* elapsed. XXX Deprecated - should be moved into drivers for the -* individual IP block that the IDLEST register exists in. -*/ -static int _wait_idlest_generic (struct clk_hw_omap *clk,void __iomem *reg, -u32 mask,u8 idlest,const char *name) -{ -int i =0 , ena =0 ; - - ena = (idlest) ?0 : mask; - -omap_test_timeout (((omap2_clk_readl (clk, reg) & mask) == ena), -MAX_MODULE_ENABLE_WAIT , i); - -if (i <MAX_MODULE_ENABLE_WAIT ) -pr_debug ("omap clock: module associated with clock %s ready after %d loops\n" , - name, i); -else -pr_err ("omap clock: module associated with clock %s didn't enable in %d tries\n" , - name,MAX_MODULE_ENABLE_WAIT ); - -return (i <MAX_MODULE_ENABLE_WAIT ) ?1 :0 ; -}; - -/** -* _omap2_module_wait_ready - wait for an OMAP module to leave IDLE -* @clk: struct clk * belonging to the module -* -* If the necessary clocks for the OMAP hardware IP block that -* corresponds to clock @clk are enabled, then wait for the module to -* indicate readiness (i.e., to leave IDLE). This code does not -* belong in the clock code and will be moved in the medium term to -* module-dependent code. No return value. -*/ -static void _omap2_module_wait_ready (struct clk_hw_omap *clk) -{ -void __iomem *companion_reg, *idlest_reg; -u8 other_bit, idlest_bit, idlest_val, idlest_reg_id; -s16 prcm_mod; -int r; - -/* Not all modules have multiple clocks that their IDLEST depends on */ -if (clk->ops->find_companion) { - clk->ops->find_companion (clk, &companion_reg, &other_bit); -if (!(omap2_clk_readl (clk, companion_reg) & (1 << other_bit))) -return ; - } - - clk->ops->find_idlest (clk, &idlest_reg, &idlest_bit, &idlest_val); - r =cm_split_idlest_reg (idlest_reg, &prcm_mod, &idlest_reg_id); -if (r) { -/* IDLEST register not in the CM module */ -_wait_idlest_generic (clk, idlest_reg, (1 << idlest_bit), - idlest_val,__clk_get_name (clk->hw.clk)); - }else { -omap_cm_wait_module_ready (0 , prcm_mod, idlest_reg_id, - idlest_bit); - }; -} -/* Public functions */ /**
@@ -280,174 +203,6 @@ void omap2_init_clk_clkdm(struct clk_hw *hw) }/** -* omap2_clk_dflt_find_companion - find companion clock to @clk -* @clk: struct clk * to find the companion clock of -* @other_reg: void __iomem ** to return the companion clock CM_*CLKEN va in -* @other_bit: u8 ** to return the companion clock bit shift in -* -* Note: We don't need special code here for INVERT_ENABLE for the -* time being since INVERT_ENABLE only applies to clocks enabled by -* CM_CLKEN_PLL -* -* Convert CM_ICLKEN* <-> CM_FCLKEN*. This conversion assumes it's -* just a matter of XORing the bits. -* -* Some clocks don't have companion clocks. For example, modules with -* only an interface clock (such as MAILBOXES) don't have a companion -* clock. Right now, this code relies on the hardware exporting a bit -* in the correct companion register that indicates that the -* nonexistent 'companion clock' is active. Future patches will -* associate this type of code with per-module data structures to -* avoid this issue, and remove the casts. No return value. -*/ -void omap2_clk_dflt_find_companion (struct clk_hw_omap *clk, -void __iomem **other_reg,u8 *other_bit) -{ -u32 r; - -/* -* Convert CM_ICLKEN* <-> CM_FCLKEN*. This conversion assumes -* it's just a matter of XORing the bits. -*/ - r = ((__force u32 )clk->enable_reg ^ (CM_FCLKEN ^CM_ICLKEN )); - - *other_reg = (__force void __iomem *)r; - *other_bit = clk->enable_bit; -} - -/** -* omap2_clk_dflt_find_idlest - find CM_IDLEST reg va, bit shift for @clk -* @clk: struct clk * to find IDLEST info for -* @idlest_reg: void __iomem ** to return the CM_IDLEST va in -* @idlest_bit: u8 * to return the CM_IDLEST bit shift in -* @idlest_val: u8 * to return the idle status indicator -* -* Return the CM_IDLEST register address and bit shift corresponding -* to the module that "owns" this clock. This default code assumes -* that the CM_IDLEST bit shift is the CM_*CLKEN bit shift, and that -* the IDLEST register address ID corresponds to the CM_*CLKEN -* register address ID (e.g., that CM_FCLKEN2 corresponds to -* CM_IDLEST2). This is not true for all modules. No return value. -*/ -void omap2_clk_dflt_find_idlest (struct clk_hw_omap *clk, -void __iomem **idlest_reg,u8 *idlest_bit,u8 *idlest_val) -{ -u32 r; - - r = (((__force u32 )clk->enable_reg & ~0xf0 ) |0x20 ); - *idlest_reg = (__force void __iomem *)r; - *idlest_bit = clk->enable_bit; - -/* -* 24xx uses 0 to indicate not ready, and 1 to indicate ready. -* 34xx reverses this, just to keep us on our toes -* AM35xx uses both, depending on the module. -*/ - *idlest_val =ti_clk_get_features ()->cm_idlest_val; -} - -/** -* omap2_dflt_clk_enable - enable a clock in the hardware -* @hw: struct clk_hw * of the clock to enable -* -* Enable the clock @hw in the hardware. We first call into the OMAP -* clockdomain code to "enable" the corresponding clockdomain if this -* is the first enabled user of the clockdomain. Then program the -* hardware to enable the clock. Then wait for the IP block that uses -* this clock to leave idle (if applicable). Returns the error value -* from clkdm_clk_enable() if it terminated with an error, or -EINVAL -* if @hw has a null clock enable_reg, or zero upon success. -*/ -int omap2_dflt_clk_enable (struct clk_hw *hw) -{ -struct clk_hw_omap *clk; -u32 v; -int ret =0 ; -bool clkdm_control; - -if (ti_clk_get_features ()->flags &TI_CLK_DISABLE_CLKDM_CONTROL ) - clkdm_control = false; -else - clkdm_control = true; - - clk =to_clk_hw_omap (hw); - -if (clkdm_control && clk->clkdm) { - ret =clkdm_clk_enable (clk->clkdm, hw->clk); -if (ret) { -WARN (1 ,"%s: could not enable %s's clockdomain %s: %d\n" , - __func__,__clk_get_name (hw->clk), - clk->clkdm->name, ret); -return ret; - } - } - -if (unlikely (clk->enable_reg ==NULL )) { -pr_err ("%s: %s missing enable_reg\n" , __func__, -__clk_get_name (hw->clk)); - ret = -EINVAL ; - goto err; - } - -/* FIXME should not have INVERT_ENABLE bit here */ - v =omap2_clk_readl (clk, clk->enable_reg); -if (clk->flags &INVERT_ENABLE ) - v &= ~(1 << clk->enable_bit); -else - v |= (1 << clk->enable_bit); -omap2_clk_writel (v, clk, clk->enable_reg); - v =omap2_clk_readl (clk, clk->enable_reg);/* OCP barrier */ - -if (clk->ops && clk->ops->find_idlest) -_omap2_module_wait_ready (clk); - -return 0 ; - -err: -if (clkdm_control && clk->clkdm) -clkdm_clk_disable (clk->clkdm, hw->clk); -return ret; -} - -/** -* omap2_dflt_clk_disable - disable a clock in the hardware -* @hw: struct clk_hw * of the clock to disable -* -* Disable the clock @hw in the hardware, and call into the OMAP -* clockdomain code to "disable" the corresponding clockdomain if all -* clocks/hwmods in that clockdomain are now disabled. No return -* value. -*/ -void omap2_dflt_clk_disable (struct clk_hw *hw) -{ -struct clk_hw_omap *clk; -u32 v; - - clk =to_clk_hw_omap (hw); -if (!clk->enable_reg) { -/* -* 'independent' here refers to a clock which is not -* controlled by its parent. -*/ -pr_err ("%s: independent clock %s has no enable_reg\n" , - __func__,__clk_get_name (hw->clk)); -return ; - } - - v =omap2_clk_readl (clk, clk->enable_reg); -if (clk->flags &INVERT_ENABLE ) - v |= (1 << clk->enable_bit); -else - v &= ~(1 << clk->enable_bit); -omap2_clk_writel (v, clk, clk->enable_reg); -/* No OCP barrier needed here since it is a disable operation */ - -if (!(ti_clk_get_features ()->flags &TI_CLK_DISABLE_CLKDM_CONTROL ) && - clk->clkdm) -clkdm_clk_disable (clk->clkdm, hw->clk); -} - -/** * omap2_clkops_enable_clkdm - increment usecount on clkdm of @hw * @hw: struct clk_hw * of the clock being enabled *
@@ -523,29 +278,6 @@ void omap2_clkops_disable_clkdm(struct clk_hw *hw)clkdm_clk_disable (clk->clkdm, hw->clk); } -/** -* omap2_dflt_clk_is_enabled - is clock enabled in the hardware? -* @hw: struct clk_hw * to check -* -* Return 1 if the clock represented by @hw is enabled in the -* hardware, or 0 otherwise. Intended for use in the struct -* clk_ops.is_enabled function pointer. -*/ -int omap2_dflt_clk_is_enabled (struct clk_hw *hw) -{ -struct clk_hw_omap *clk =to_clk_hw_omap (hw); -u32 v; - - v =omap2_clk_readl (clk, clk->enable_reg); - -if (clk->flags &INVERT_ENABLE ) - v ^=BIT (clk->enable_bit); - - v &=BIT (clk->enable_bit); - -return v ?1 :0 ; -} -static int __initdata mpurate;/*
@@ -566,11 +298,6 @@ static int __init omap_clk_setup(char *str) }__setup ("mpurate=" , omap_clk_setup); -const struct clk_hw_omap_ops clkhwops_wait = { - .find_idlest = omap2_clk_dflt_find_idlest, - .find_companion = omap2_clk_dflt_find_companion, -}; -/** * omap2_clk_print_new_rates - print summary of current clock tree rates * @hfclkin_ck_name: clk name for the off-chip HF oscillator
drivers/clk/ti/Makefile +2 -1
@@ -1,7 +1,8 @@ obj-y += clk.o autoidle.o clockdomain.o clk-common = dpll.o composite.o divider.o gate.o \ fixed-factor.o mux.o apll.o \ - clkt_dpll.o clkt_iclk.o dpll3xxx.o + clkt_dpll.o clkt_iclk.o dpll3xxx.o \ + clkt_dflt.o obj-$(CONFIG_SOC_AM33XX) += $(clk-common) clk-33xx.o obj-$(CONFIG_SOC_TI81XX) += $(clk-common) fapll.o clk-816x.o obj-$(CONFIG_ARCH_OMAP2) += $(clk-common) interface.o clk-2xxx.o
drivers/clk/ti/clkt_dflt.c new file +316 -0
316 lines not on this page · raw message
drivers/clk/ti/clock.h +5 -0
@@ -175,9 +175,14 @@ void omap2_clk_enable_init_clocks(const char **clk_names, u8 num_clocks);extern const struct clk_hw_omap_ops clkhwops_omap3_dpll;extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx; +extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_iclk;extern const struct clk_hw_omap_ops clkhwops_iclk_wait; +int omap2_dflt_clk_enable (struct clk_hw *hw); +void omap2_dflt_clk_disable (struct clk_hw *hw); +int omap2_dflt_clk_is_enabled (struct clk_hw *hw); +u8 omap2_init_dpll_parent (struct clk_hw *hw);int omap3_noncore_dpll_enable (struct clk_hw *hw);void omap3_noncore_dpll_disable (struct clk_hw *hw);
include/linux/clk/ti.h +0 -4
@@ -278,9 +278,6 @@ int omap2_clk_disable_autoidle_all(void);int omap2_clk_enable_autoidle_all (void );int omap2_clk_allow_idle (struct clk *clk);int omap2_clk_deny_idle (struct clk *clk); -int omap2_dflt_clk_enable (struct clk_hw *hw); -void omap2_dflt_clk_disable (struct clk_hw *hw); -int omap2_dflt_clk_is_enabled (struct clk_hw *hw);void omap2_clkt_iclk_allow_idle (struct clk_hw_omap *clk);void omap2_clkt_iclk_deny_idle (struct clk_hw_omap *clk); void omap2_clk_dflt_find_companion(struct clk_hw_omap *clk,
@@ -337,7 +334,6 @@ struct ti_clk_features *ti_clk_get_features(void);extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll;extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait; -extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_wait;
Signature · 1 line
1.7.9.5
PATCH v3 18/27 clk: ti: omap2430: move clock support code under clock driver
In reply to Tero KristoWith the legacy clock support gone, this is no longer needed under platform code-base. Thus, move this under the TI clock driver, and remove the exported API from the public header.
--- arch/arm/mach-omap2/Makefile | 1 - arch/arm/mach-omap2/clock2430.c | 57 --------------------------------------- drivers/clk/ti/clkt_iclk.c | 35 ++++++++++++++++++++++++ drivers/clk/ti/clock.h | 1 + include/linux/clk/ti.h | 1 - 5 files changed, 36 insertions(+), 59 deletions(-) delete mode 100644 arch/arm/mach-omap2/clock2430.c
arch/arm/mach-omap2/Makefile +0 -1
@@ -185,7 +185,6 @@ obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpllcore.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_virt_prcm_set.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o -obj-$(CONFIG_SOC_OMAP2430) += clock2430.o obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) obj-$(CONFIG_ARCH_OMAP3) += clock34xx.o clkt34xx_dpll3m2.o obj-$(CONFIG_ARCH_OMAP3) += clock3517.o
arch/arm/mach-omap2/clock2430.c deleted +0 -57
57 lines not on this page · raw message
drivers/clk/ti/clkt_iclk.c +35 -0
@@ -18,8 +18,12 @@#include "clock.h" /* Register offsets */ +#define OMAP24XX_CM_FCLKEN2 0x04#define CM_AUTOIDLE 0x30#define CM_ICLKEN 0x10 +#define CM_IDLEST 0x20 + +#define OMAP24XX_CM_IDLEST_VAL 0/* Private functions */
@@ -51,6 +55,31 @@ void omap2_clkt_iclk_deny_idle(struct clk_hw_omap *clk) ti_clk_ll_ops->clk_writel (v, r); } +/** +* omap2430_clk_i2chs_find_idlest - return CM_IDLEST info for 2430 I2CHS +* @clk: struct clk * being enabled +* @idlest_reg: void __iomem ** to store CM_IDLEST reg address into +* @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into +* @idlest_val: pointer to a u8 to store the CM_IDLEST indicator +* +* OMAP2430 I2CHS CM_IDLEST bits are in CM_IDLEST1_CORE, but the +* CM_*CLKEN bits are in CM_{I,F}CLKEN2_CORE. This custom function +* passes back the correct CM_IDLEST register address for I2CHS +* modules. No return value. +*/ +static void omap2430_clk_i2chs_find_idlest (struct clk_hw_omap *clk, +void __iomem **idlest_reg, +u8 *idlest_bit, +u8 *idlest_val) +{ +u32 r; + + r = ((__force u32 )clk->enable_reg ^ (OMAP24XX_CM_FCLKEN2 ^CM_IDLEST )); + *idlest_reg = (__force void __iomem *)r; + *idlest_bit = clk->enable_bit; + *idlest_val =OMAP24XX_CM_IDLEST_VAL ; +} +/* Public data */ const struct clk_hw_omap_ops clkhwops_iclk = {
@@ -64,3 +93,9 @@ const struct clk_hw_omap_ops clkhwops_iclk_wait = { .find_idlest = omap2_clk_dflt_find_idlest, .find_companion = omap2_clk_dflt_find_companion, }; + +/* 2430 I2CHS has non-standard IDLEST register */ +const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait = { + .find_idlest = omap2430_clk_i2chs_find_idlest, + .find_companion = omap2_clk_dflt_find_companion, +};
drivers/clk/ti/clock.h +1 -0
@@ -178,6 +178,7 @@ extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx;extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_iclk;extern const struct clk_hw_omap_ops clkhwops_iclk_wait; +extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait;int omap2_dflt_clk_enable (struct clk_hw *hw);void omap2_dflt_clk_disable (struct clk_hw *hw);
include/linux/clk/ti.h +0 -1
@@ -333,7 +333,6 @@ void ti_clk_setup_features(struct ti_clk_features *features);struct ti_clk_features *ti_clk_get_features (void );extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll; -extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_wait;
Signature · 1 line
1.7.9.5
PATCH v3 19/27 clk: ti: clkdm: move clkdm gate clock support code to clock driver
In reply to Tero KristoWith the legacy clock data gone, this is no longer needed under platform, so move it under the clock driver itself. Remove the exported clock driver APIs as well, as these are not needed outside clock driver anymore.
--- arch/arm/mach-omap2/clock.c | 76 ------------------------------------------ arch/arm/mach-omap2/clock.h | 3 -- drivers/clk/ti/clock.h | 3 ++ drivers/clk/ti/clockdomain.c | 76 ++++++++++++++++++++++++++++++++++++++++++ include/linux/clk/ti.h | 2 -- 5 files changed, 79 insertions(+), 81 deletions(-)
arch/arm/mach-omap2/clock.c +0 -76
@@ -202,82 +202,6 @@ void omap2_init_clk_clkdm(struct clk_hw *hw) } } -/** -* omap2_clkops_enable_clkdm - increment usecount on clkdm of @hw -* @hw: struct clk_hw * of the clock being enabled -* -* Increment the usecount of the clockdomain of the clock pointed to -* by @hw; if the usecount is 1, the clockdomain will be "enabled." -* Only needed for clocks that don't use omap2_dflt_clk_enable() as -* their enable function pointer. Passes along the return value of -* clkdm_clk_enable(), -EINVAL if @hw is not associated with a -* clockdomain, or 0 if clock framework-based clockdomain control is -* not implemented. -*/ -int omap2_clkops_enable_clkdm (struct clk_hw *hw) -{ -struct clk_hw_omap *clk; -int ret =0 ; - - clk =to_clk_hw_omap (hw); - -if (unlikely (!clk->clkdm)) { -pr_err ("%s: %s: no clkdm set ?!\n" , __func__, -__clk_get_name (hw->clk)); -return -EINVAL ; - } - -if (unlikely (clk->enable_reg)) -pr_err ("%s: %s: should use dflt_clk_enable ?!\n" , __func__, -__clk_get_name (hw->clk)); - -if (ti_clk_get_features ()->flags &TI_CLK_DISABLE_CLKDM_CONTROL ) { -pr_err ("%s: %s: clkfw-based clockdomain control disabled ?!\n" , - __func__,__clk_get_name (hw->clk)); -return 0 ; - } - - ret =clkdm_clk_enable (clk->clkdm, hw->clk); -WARN (ret,"%s: could not enable %s's clockdomain %s: %d\n" , - __func__,__clk_get_name (hw->clk), clk->clkdm->name, ret); - -return ret; -} - -/** -* omap2_clkops_disable_clkdm - decrement usecount on clkdm of @hw -* @hw: struct clk_hw * of the clock being disabled -* -* Decrement the usecount of the clockdomain of the clock pointed to -* by @hw; if the usecount is 0, the clockdomain will be "disabled." -* Only needed for clocks that don't use omap2_dflt_clk_disable() as their -* disable function pointer. No return value. -*/ -void omap2_clkops_disable_clkdm (struct clk_hw *hw) -{ -struct clk_hw_omap *clk; - - clk =to_clk_hw_omap (hw); - -if (unlikely (!clk->clkdm)) { -pr_err ("%s: %s: no clkdm set ?!\n" , __func__, -__clk_get_name (hw->clk)); -return ; - } - -if (unlikely (clk->enable_reg)) -pr_err ("%s: %s: should use dflt_clk_disable ?!\n" , __func__, -__clk_get_name (hw->clk)); - -if (ti_clk_get_features ()->flags &TI_CLK_DISABLE_CLKDM_CONTROL ) { -pr_err ("%s: %s: clkfw-based clockdomain control disabled ?!\n" , - __func__,__clk_get_name (hw->clk)); -return ; - } - -clkdm_clk_disable (clk->clkdm, hw->clk); -} -static int __initdata mpurate;/*
arch/arm/mach-omap2/clock.h +0 -3
@@ -202,9 +202,6 @@ extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait;extern const struct clk_hw_omap_ops clkhwops_apll54;extern const struct clk_hw_omap_ops clkhwops_apll96; -extern int omap2_clkops_enable_clkdm (struct clk_hw *hw); -extern void omap2_clkops_disable_clkdm (struct clk_hw *hw); -struct regmap ; int __init omap2_clk_provider_init(struct device_node *np, int index,
drivers/clk/ti/clock.h +3 -0
@@ -180,6 +180,9 @@ extern const struct clk_hw_omap_ops clkhwops_iclk;extern const struct clk_hw_omap_ops clkhwops_iclk_wait;extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait; +int omap2_clkops_enable_clkdm (struct clk_hw *hw); +void omap2_clkops_disable_clkdm (struct clk_hw *hw); +int omap2_dflt_clk_enable (struct clk_hw *hw);void omap2_dflt_clk_disable (struct clk_hw *hw);int omap2_dflt_clk_is_enabled (struct clk_hw *hw);
drivers/clk/ti/clockdomain.c +76 -0
82 lines not on this page · raw message
include/linux/clk/ti.h +0 -2
@@ -272,8 +272,6 @@ extern const struct clk_ops ti_clk_mux_ops;#define to_clk_hw_omap (_hw) container_of(_hw, struct clk_hw_omap, hw)void omap2_init_clk_clkdm (struct clk_hw *clk); -int omap2_clkops_enable_clkdm (struct clk_hw *hw); -void omap2_clkops_disable_clkdm (struct clk_hw *hw);int omap2_clk_disable_autoidle_all (void );int omap2_clk_enable_autoidle_all (void );int omap2_clk_allow_idle (struct clk *clk);
Signature · 1 line
1.7.9.5
PATCH v3 20/27 clk: ti: omap34xx: move omap34xx clock type support code to clock driver
In reply to Tero KristoWith the legacy clock data gone, this is no longer needed under platform, so move it under the clock driver itself. Remove unnecessary declarations from the TI clock header also.
--- arch/arm/mach-omap2/Makefile | 2 +- arch/arm/mach-omap2/clock34xx.c | 138 --------------------------------------- drivers/clk/ti/clk-3xxx.c | 118 +++++++++++++++++++++++++++++++++ drivers/clk/ti/clock.h | 4 ++ include/linux/clk/ti.h | 4 -- 5 files changed, 123 insertions(+), 143 deletions(-) delete mode 100644 arch/arm/mach-omap2/clock34xx.c
arch/arm/mach-omap2/Makefile +1 -1
@@ -186,7 +186,7 @@ obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpllcore.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_virt_prcm_set.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) -obj-$(CONFIG_ARCH_OMAP3) += clock34xx.o clkt34xx_dpll3m2.o +obj-$(CONFIG_ARCH_OMAP3) += clkt34xx_dpll3m2.o obj-$(CONFIG_ARCH_OMAP3) += clock3517.o obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) obj-$(CONFIG_SOC_AM33XX) += $(clock-common)
arch/arm/mach-omap2/clock34xx.c deleted +0 -138
138 lines not on this page · raw message
drivers/clk/ti/clk-3xxx.c +118 -0
124 lines not on this page · raw message
drivers/clk/ti/clock.h +4 -0
@@ -179,6 +179,10 @@ extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_iclk;extern const struct clk_hw_omap_ops clkhwops_iclk_wait;extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_hsotgusb_wait; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_dss_usbhost_wait; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_ssi_wait;int omap2_clkops_enable_clkdm (struct clk_hw *hw);void omap2_clkops_disable_clkdm (struct clk_hw *hw);
include/linux/clk/ti.h +0 -4
@@ -331,12 +331,8 @@ void ti_clk_setup_features(struct ti_clk_features *features);struct ti_clk_features *ti_clk_get_features (void );extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll; -extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait;extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_wait; -extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_ssi_wait; -extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_dss_usbhost_wait; -extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_hsotgusb_wait;#ifdef CONFIG_ATAGS int omap3430_clk_legacy_init (void );
Signature · 1 line
1.7.9.5
PATCH v3 21/27 ARM: OMAP4: clock: remove clock44xx.h header
In reply to Tero KristoThis is not needed for anything anymore, so remove it completely.
--- arch/arm/mach-omap2/clock44xx.h | 20 -------------------- arch/arm/mach-omap2/io.c | 1 - 2 files changed, 21 deletions(-) delete mode 100644 arch/arm/mach-omap2/clock44xx.h
arch/arm/mach-omap2/clock44xx.h deleted +0 -20
@@ -1,20 +0,0 @@ -/* -* OMAP4 clock function prototypes and macros -* -* Copyright (C) 2009 Texas Instruments, Inc. -* Copyright (C) 2010 Nokia Corporation -*/ - -#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK44XX_H -#define __ARCH_ARM_MACH_OMAP2_CLOCK44XX_H - -/* -* OMAP4430_REGM4XEN_MULT: If the CM_CLKMODE_DPLL_ABE.DPLL_REGM4XEN bit is -* set, then the DPLL's lock frequency is multiplied by 4 (OMAP4430 TRM -* vV Section 3.6.3.3.1 "DPLLs Output Clocks Parameters") -*/ -#define OMAP4430_REGM4XEN_MULT 4 - -int omap4xxx_clk_init (void ); - -#endif
arch/arm/mach-omap2/io.c +0 -1
@@ -37,7 +37,6 @@#include "clock.h" #include "clock2xxx.h" #include "clock3xxx.h" -#include "clock44xx.h" #include "omap-pm.h" #include "sdrc.h" #include "control.h"
Signature · 1 line
1.7.9.5
PATCH v3 22/27 clk: ti: am3517: move remaining am3517 clock support code to clock driver
In reply to Tero KristoWith legacy clock support gone, this is no longer needed under platform, so move it under the clock driver itself. Make some exports be driver internal definitions at the same time.
--- arch/arm/mach-omap2/Makefile | 1 - arch/arm/mach-omap2/clock3517.c | 118 --------------------------------------- arch/arm/mach-omap2/clock3517.h | 14 ----- drivers/clk/ti/clk-3xxx.c | 94 +++++++++++++++++++++++++++++++ drivers/clk/ti/clock.h | 2 + include/linux/clk/ti.h | 2 - 6 files changed, 96 insertions(+), 135 deletions(-) delete mode 100644 arch/arm/mach-omap2/clock3517.c delete mode 100644 arch/arm/mach-omap2/clock3517.h
arch/arm/mach-omap2/Makefile +0 -1
@@ -187,7 +187,6 @@ obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_virt_prcm_set.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) obj-$(CONFIG_ARCH_OMAP3) += clkt34xx_dpll3m2.o -obj-$(CONFIG_ARCH_OMAP3) += clock3517.o obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) obj-$(CONFIG_SOC_AM33XX) += $(clock-common) obj-$(CONFIG_SOC_OMAP5) += $(clock-common)
arch/arm/mach-omap2/clock3517.c deleted +0 -118
118 lines not on this page · raw message
arch/arm/mach-omap2/clock3517.h deleted +0 -14
@@ -1,14 +0,0 @@ -/* -* OMAP3517/3505 clock function prototypes and macros -* -* Copyright (C) 2010 Texas Instruments, Inc. -* Copyright (C) 2010 Nokia Corporation -*/ - -#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK3517_H -#define __ARCH_ARM_MACH_OMAP2_CLOCK3517_H - -extern const struct clkops clkops_am35xx_ipss_module_wait; -extern const struct clkops clkops_am35xx_ipss_wait; - -#endif
drivers/clk/ti/clk-3xxx.c +94 -0
106 lines not on this page · raw message
drivers/clk/ti/clock.h +2 -0
@@ -183,6 +183,8 @@ extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_hsotgusb_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_dss_usbhost_wait;extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_ssi_wait; +extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait; +extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_wait;int omap2_clkops_enable_clkdm (struct clk_hw *hw);void omap2_clkops_disable_clkdm (struct clk_hw *hw);
include/linux/clk/ti.h +0 -2
@@ -331,8 +331,6 @@ void ti_clk_setup_features(struct ti_clk_features *features);struct ti_clk_features *ti_clk_get_features (void );extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll; -extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait; -extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_wait;#ifdef CONFIG_ATAGS int omap3430_clk_legacy_init (void );
Signature · 1 line
1.7.9.5
PATCH v3 23/27 clk: ti: move some public definitions to private header
In reply to Tero KristoSeveral exported TI clock driver features are no longer needed outside the clock driver itself, thus move all of these to the driver private header file. Also, update some of the driver files to actually include this header.
--- drivers/clk/ti/apll.c | 2 ++ drivers/clk/ti/autoidle.c | 2 ++ drivers/clk/ti/clk-43xx.c | 2 ++ drivers/clk/ti/clk-44xx.c | 2 ++ drivers/clk/ti/clk-54xx.c | 2 ++ drivers/clk/ti/clk-7xx.c | 3 ++- drivers/clk/ti/clock.h | 47 +++++++++++++++++++++++++++++++++++++++++++++ include/linux/clk/ti.h | 45 ------------------------------------------- 8 files changed, 59 insertions(+), 46 deletions(-)
drivers/clk/ti/apll.c +2 -0
@@ -27,6 +27,8 @@#include <linux/clk/ti.h> #include <linux/delay.h> +#include "clock.h" +#define APLL_FORCE_LOCK 0x1#define APLL_AUTO_IDLE 0x2#define MAX_APLL_WAIT_TRIES 1000000
drivers/clk/ti/autoidle.c +2 -0
@@ -22,6 +22,8 @@#include <linux/of_address.h> #include <linux/clk/ti.h> +#include "clock.h" +struct clk_ti_autoidle {void __iomem *reg;u8 shift;
drivers/clk/ti/clk-43xx.c +2 -0
@@ -19,6 +19,8 @@#include <linux/clk-provider.h> #include <linux/clk/ti.h> +#include "clock.h" +static struct ti_dt_clk am43xx_clks[] = {DT_CLK (NULL ,"clk_32768_ck" ,"clk_32768_ck" ),DT_CLK (NULL ,"clk_rc32k_ck" ,"clk_rc32k_ck" ),
drivers/clk/ti/clk-44xx.c +2 -0
@@ -16,6 +16,8 @@#include <linux/clkdev.h> #include <linux/clk/ti.h> +#include "clock.h" +/* * OMAP4 ABE DPLL default frequency. In OMAP4460 TRM version V, section * "3.6.3.2.3 CM1_ABE Clock Generator" states that the "DPLL_ABE_X2_CLK
drivers/clk/ti/clk-54xx.c +2 -0
@@ -17,6 +17,8 @@#include <linux/io.h> #include <linux/clk/ti.h> +#include "clock.h" +#define OMAP5_DPLL_ABE_DEFFREQ 98304000/*
drivers/clk/ti/clk-7xx.c +2 -1
@@ -16,11 +16,12 @@#include <linux/clkdev.h> #include <linux/clk/ti.h> +#include "clock.h" +#define DRA7_DPLL_ABE_DEFFREQ 180633600#define DRA7_DPLL_GMAC_DEFFREQ 1000000000#define DRA7_DPLL_USB_DEFFREQ 960000000 -static struct ti_dt_clk dra7xx_clks[] = {DT_CLK (NULL ,"atl_clkin0_ck" ,"atl_clkin0_ck" ),DT_CLK (NULL ,"atl_clkin1_ck" ,"atl_clkin1_ck" ),
drivers/clk/ti/clock.h +47 -0
71 lines not on this page · raw message
include/linux/clk/ti.h +0 -45
78 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH v3 24/27 ARM: OMAP2+: clock: remove dead definitions from the clock header file
In reply to Tero KristoCleanup the mess in clock.h by removing all definitions that are no longer used for anything.
--- arch/arm/mach-omap2/clkt34xx_dpll3m2.c | 1 - arch/arm/mach-omap2/clock.h | 124 -------------------------------- arch/arm/mach-omap2/clock34xx.h | 18 ----- 3 files changed, 143 deletions(-) delete mode 100644 arch/arm/mach-omap2/clock34xx.h
arch/arm/mach-omap2/clkt34xx_dpll3m2.c +0 -1
@@ -23,7 +23,6 @@#include "clock.h" #include "clock3xxx.h" -#include "clock34xx.h" #include "sdrc.h" #include "sram.h"
arch/arm/mach-omap2/clock.h +0 -124
142 lines not on this page · raw message
arch/arm/mach-omap2/clock34xx.h deleted +0 -18
@@ -1,18 +0,0 @@ -/* -* OMAP34xx clock function prototypes and macros -* -* Copyright (C) 2007-2010 Texas Instruments, Inc. -* Copyright (C) 2007-2011 Nokia Corporation -*/ - -#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H -#define __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H - -extern const struct clkops clkops_omap3430es2_ssi_wait; -extern const struct clkops clkops_omap3430es2_iclk_ssi_wait; -extern const struct clkops clkops_omap3430es2_hsotgusb_wait; -extern const struct clkops clkops_omap3430es2_iclk_hsotgusb_wait; -extern const struct clkops clkops_omap3430es2_dss_usbhost_wait; -extern const struct clkops clkops_omap3430es2_iclk_dss_usbhost_wait; - -#endif
Signature · 1 line
1.7.9.5
PATCH v3 25/27 clk: ti: remove exported ll_ops struct, instead add an API for registration
In reply to Tero KristoWe should avoid exporting data from drivers, instead use an API for registering the clock low level operations.
--- arch/arm/mach-omap2/clock.c | 17 +++++++++++++---- arch/arm/mach-omap2/clock.h | 1 + arch/arm/mach-omap2/io.c | 2 ++ drivers/clk/ti/clk.c | 21 +++++++++++++++++++++ drivers/clk/ti/clock.h | 2 ++ drivers/clk/ti/clockdomain.c | 2 ++ include/linux/clk/ti.h | 3 +-- 7 files changed, 42 insertions(+), 6 deletions(-)
arch/arm/mach-omap2/clock.c +13 -4
@@ -113,6 +113,19 @@ static struct ti_clk_ll_ops omap_clk_ll_ops = { };/** +* omap2_clk_setup_ll_ops - setup clock driver low-level ops +* +* Sets up clock driver low-level platform ops. These are needed +* for register accesses and various other misc platform operations. +* Returns 0 on success, -EBUSY if low level ops have been registered +* already. +*/ +int __init omap2_clk_setup_ll_ops (void ) +{ +return ti_clk_setup_ll_ops (&omap_clk_ll_ops); +} + +/** * omap2_clk_provider_init - initialize a clock provider * @match_table: DT device table to match for devices to init * @np: device node pointer for the this clock provider
@@ -130,8 +143,6 @@ int __init omap2_clk_provider_init(struct device_node *np, int index, {struct clk_iomap *io; - ti_clk_ll_ops = &omap_clk_ll_ops; - io =kzalloc (sizeof (*io),GFP_KERNEL ); io->regmap = syscon;
@@ -155,8 +166,6 @@ void __init omap2_clk_legacy_provider_init(int index, void __iomem *mem) {struct clk_iomap *io; - ti_clk_ll_ops = &omap_clk_ll_ops; - io =memblock_virt_alloc (sizeof (*io),0 ); io->mem = mem;
arch/arm/mach-omap2/clock.h +1 -0
@@ -83,6 +83,7 @@ struct regmap;int __init omap2_clk_provider_init (struct device_node *np,int index,struct regmap *syscon,void __iomem *mem);void __init omap2_clk_legacy_provider_init (int index,void __iomem *mem); +int __init omap2_clk_setup_ll_ops (void );void __init ti_clk_init_features (void );#endif
arch/arm/mach-omap2/io.c +2 -0
@@ -722,6 +722,8 @@ int __init omap_clk_init(void)ti_clk_init_features (); +omap2_clk_setup_ll_ops (); +if (of_have_populated_dt ()) { ret =omap_control_init ();if (ret)
drivers/clk/ti/clk.c +21 -0
@@ -33,6 +33,27 @@ static struct device_node *clocks_node_ptr[CLK_MAX_MEMMAPS];struct ti_clk_features ti_clk_features;/** +* ti_clk_setup_ll_ops - setup low level clock operations +* @ops: low level clock ops descriptor +* +* Sets up low level clock operations for TI clock driver. This is used +* to provide various callbacks for the clock driver towards platform +* specific code. Returns 0 on success, -EBUSY if ll_ops have been +* registered already. +*/ +int ti_clk_setup_ll_ops (struct ti_clk_ll_ops *ops) +{ +if (ti_clk_ll_ops) { +pr_err ("Attempt to register ll_ops multiple times.\n" ); +return -EBUSY ; + } + + ti_clk_ll_ops = ops; + +return 0 ; +} + +/** * ti_dt_clocks_register - register DT alias clocks during boot * @oclks: list of clocks to register *
drivers/clk/ti/clock.h +2 -0
@@ -280,4 +280,6 @@ long omap4_dpll_regm4xen_determine_rate(struct clk_hw *hw,unsigned long *best_parent_rate, struct clk_hw **best_parent_clk); +extern struct ti_clk_ll_ops *ti_clk_ll_ops; +#endif
drivers/clk/ti/clockdomain.c +2 -0
@@ -21,6 +21,8 @@#include <linux/of_address.h> #include <linux/clk/ti.h> +#include "clock.h" +#undef pr_fmt#define pr_fmt (fmt) "%s: " fmt, __func__
include/linux/clk/ti.h +1 -2
@@ -235,8 +235,6 @@ struct ti_clk_ll_ops { u8 *idlest_reg_id); }; -extern struct ti_clk_ll_ops *ti_clk_ll_ops; -#define to_clk_hw_omap (_hw) container_of(_hw, struct clk_hw_omap, hw)void omap2_init_clk_clkdm (struct clk_hw *clk);
@@ -255,6 +253,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk);void ti_dt_clk_init_provider (struct device_node *np,int index);void ti_dt_clk_init_retry_clks (void );void ti_dt_clockdomains_setup (void ); +int ti_clk_setup_ll_ops (struct ti_clk_ll_ops *ops);int omap3430_dt_clk_init (void );int omap3630_dt_clk_init (void );
Signature · 1 line
1.7.9.5
PATCH v3 26/27 ARM: OMAP2+: clock: remove legacy omap2_clk_readl/writel APIs
In reply to Tero KristoAs most of the clock driver code has migrated, these are no longer used for anything. Thus remove these APIs completely.
--- arch/arm/mach-omap2/clock.c | 16 ---------------- arch/arm/mach-omap2/clock.h | 3 --- 2 files changed, 19 deletions(-)
arch/arm/mach-omap2/clock.c +0 -16
@@ -87,22 +87,6 @@ static u32 clk_memmap_readl(void __iomem *reg)return val; } -void omap2_clk_writel (u32 val,struct clk_hw_omap *clk,void __iomem *reg) -{ -if (WARN_ON_ONCE (!(clk->flags &MEMMAP_ADDRESSING ))) -writel_relaxed (val, reg); -else -clk_memmap_writel (val, reg); -} - -u32 omap2_clk_readl (struct clk_hw_omap *clk,void __iomem *reg) -{ -if (WARN_ON_ONCE (!(clk->flags &MEMMAP_ADDRESSING ))) -return readl_relaxed (reg); -else -return clk_memmap_readl (reg); -} -static struct ti_clk_ll_ops omap_clk_ll_ops = { .clk_readl = clk_memmap_readl, .clk_writel = clk_memmap_writel,
arch/arm/mach-omap2/clock.h +0 -3
@@ -68,9 +68,6 @@ void omap2_clk_print_new_rates(const char *hfclkin_ck_name,const char *core_ck_name, const char *mpu_ck_name); -u32 omap2_clk_readl (struct clk_hw_omap *clk,void __iomem *reg); -void omap2_clk_writel (u32 val,struct clk_hw_omap *clk,void __iomem *reg); -extern u16 cpu_mask;extern const struct clkops clkops_omap2_dflt_wait;
Signature · 1 line
1.7.9.5
PATCH v3 27/27 clk: ti: move low-level access and init code under clock driver
In reply to Tero KristoWith most of the clock code under clock driver already, the low-level register access code, and the init code for the same, is no longer needed outside the clock driver. Thus, these can be moved under clock driver also.
--- arch/arm/mach-omap2/clock.c | 84 ------------------------------------------- arch/arm/mach-omap2/clock.h | 5 --- drivers/clk/ti/clk.c | 75 ++++++++++++++++++++++++++++++++++++-- include/linux/clk/ti.h | 7 +++- 4 files changed, 78 insertions(+), 93 deletions(-)
arch/arm/mach-omap2/clock.c +0 -84
@@ -23,9 +23,7 @@#include <linux/clk-provider.h> #include <linux/io.h> #include <linux/bitops.h> -#include <linux/regmap.h> #include <linux/of_address.h> -#include <linux/bootmem.h> #include <asm/cpu.h> #include <trace/events/power.h>
@@ -55,41 +53,7 @@ u16 cpu_mask;#define OMAP3PLUS_DPLL_FINT_MIN 32000#define OMAP3PLUS_DPLL_FINT_MAX 52000000 -struct clk_iomap { -struct regmap *regmap; -void __iomem *mem; -}; - -static struct clk_iomap *clk_memmaps[CLK_MAX_MEMMAPS ]; - -static void clk_memmap_writel (u32 val,void __iomem *reg) -{ -struct clk_omap_reg *r = (struct clk_omap_reg *)® -struct clk_iomap *io = clk_memmaps[r->index]; - -if (io->regmap) -regmap_write (io->regmap, r->offset, val); -else -writel_relaxed (val, io->mem + r->offset); -} - -static u32 clk_memmap_readl (void __iomem *reg) -{ -u32 val; -struct clk_omap_reg *r = (struct clk_omap_reg *)® -struct clk_iomap *io = clk_memmaps[r->index]; - -if (io->regmap) -regmap_read (io->regmap, r->offset, &val); -else - val =readl_relaxed (io->mem + r->offset); - -return val; -} -static struct ti_clk_ll_ops omap_clk_ll_ops = { - .clk_readl = clk_memmap_readl, - .clk_writel = clk_memmap_writel, .clkdm_clk_enable = clkdm_clk_enable, .clkdm_clk_disable = clkdm_clk_disable, .cm_wait_module_ready = omap_cm_wait_module_ready,
@@ -109,54 +73,6 @@ int __init omap2_clk_setup_ll_ops(void)return ti_clk_setup_ll_ops (&omap_clk_ll_ops); } -/** -* omap2_clk_provider_init - initialize a clock provider -* @match_table: DT device table to match for devices to init -* @np: device node pointer for the this clock provider -* @index: index for the clock provider -+ @syscon: syscon regmap pointer -* @mem: iomem pointer for the clock provider memory area, only used if -* syscon is not provided -* -* Initializes a clock provider module (CM/PRM etc.), registering -* the memory mapping at specified index and initializing the -* low level driver infrastructure. Returns 0 in success. -*/ -int __init omap2_clk_provider_init (struct device_node *np,int index, -struct regmap *syscon,void __iomem *mem) -{ -struct clk_iomap *io; - - io =kzalloc (sizeof (*io),GFP_KERNEL ); - - io->regmap = syscon; - io->mem = mem; - - clk_memmaps[index] = io; - -ti_dt_clk_init_provider (np, index); - -return 0 ; -} - -/** -* omap2_clk_legacy_provider_init - initialize a legacy clock provider -* @index: index for the clock provider -* @mem: iomem pointer for the clock provider memory area -* -* Initializes a legacy clock provider memory mapping. -*/ -void __init omap2_clk_legacy_provider_init (int index,void __iomem *mem) -{ -struct clk_iomap *io; - - io =memblock_virt_alloc (sizeof (*io),0 ); - - io->mem = mem; - - clk_memmaps[index] = io; -} -/* * OMAP2+ specific clock functions */
arch/arm/mach-omap2/clock.h +0 -5
@@ -75,11 +75,6 @@ extern const struct clkops clkops_omap2_dflt;extern struct clk_functions omap2_clk_functions; -struct regmap ; - -int __init omap2_clk_provider_init (struct device_node *np,int index, -struct regmap *syscon,void __iomem *mem); -void __init omap2_clk_legacy_provider_init (int index,void __iomem *mem);int __init omap2_clk_setup_ll_ops (void );void __init ti_clk_init_features (void );
drivers/clk/ti/clk.c +72 -3
118 lines not on this page · raw message
include/linux/clk/ti.h +6 -1
@@ -250,11 +250,16 @@ void omap2xxx_clkt_dpllcore_init(struct clk_hw *hw);void omap2xxx_clkt_vps_init (void );unsigned long omap2_get_dpll_rate (struct clk_hw_omap *clk); -void ti_dt_clk_init_provider (struct device_node *np,int index);void ti_dt_clk_init_retry_clks (void );void ti_dt_clockdomains_setup (void );int ti_clk_setup_ll_ops (struct ti_clk_ll_ops *ops); +struct regmap ; + +int omap2_clk_provider_init (struct device_node *parent,int index, +struct regmap *syscon,void __iomem *mem); +void omap2_clk_legacy_provider_init (int index,void __iomem *mem); +int omap3430_dt_clk_init (void );int omap3630_dt_clk_init (void );int am35xx_dt_clk_init (void );
Signature · 1 line
1.7.9.5
Tony Lindgren
maintainerv3 cover ARM: OMAP2+: clock code move under clk driver
In reply to Tero KristoQuoted 9 lines · Tero Kristo
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-move
Looks like this causes a build error for at least omap2 only .config:
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point KCONFIG_ALLCONFIG to that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.
Regards,
Tony
Tony Lindgren
maintainerv3 cover ARM: OMAP2+: clock code move under clk driver
Quoted 13 lines · Tony Lindgren
Quoted 9 lines · Tero Kristo
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-moveLooks like this causes a build error for at least omap2 only .config:
Quoted 7 lines
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point
KCONFIG_ALLCONFIGto that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.
Found more similar issues for omap3 only and omap4 only configs:
drivers/built-in.o: In function `omap2_clkops_enable_clkdm':
omap-gpmc.c:(.text+0x202e0): undefined reference to ti_clk_get_features' drivers/built-in.o: In function omap2_clkops_disable_clkdm':
omap-gpmc.c:(.text+0x20374): undefined reference to ti_clk_get_features' drivers/built-in.o: In function _omap2_dpll_is_in_bypass':
omap-gpmc.c:(.text+0x21678): undefined reference to ti_clk_get_features' drivers/built-in.o: In function omap2_dpll_round_rate':
omap-gpmc.c:(.text+0x218ac): undefined reference to ti_clk_get_features' omap-gpmc.c:(.text+0x218ec): undefined reference to ti_clk_get_features'
drivers/built-in.o: In function `omap3xxx_dt_clk_init':
omap-gpmc.c:(.init.text+0x4d60): undefined reference to omap2_clk_enable_init_clocks' arch/arm/mach-omap2/built-in.o: In function ti_clk_init_features':
arch/arm/mach-omap2/built-in.o: In function `ti_clk_init_features':
dss-common.c:(.init.text+0x4368): undefined reference to `ti_clk_setup_features'
Regards,
Tony
v3 cover ARM: OMAP2+: clock code move under clk driver
Quoted 14 lines · Tony Lindgren
Quoted 13 lines · Tony Lindgren
Quoted 9 lines · Tero Kristo
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-moveLooks like this causes a build error for at least omap2 only .config:
Quoted 7 lines
Quoted 7 lines
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point
KCONFIG_ALLCONFIGto that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.
alternatively, just clone the repository at [1] and use the example script provided in README.md.
[1] https://github.com/felipebalbi/omap-seeds
Signature · 8 lines
balbi -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150526/4c08735d/attachment.sig>
v3 cover ARM: OMAP2+: clock code move under clk driver
Quoted 23 lines · Felipe Balbi
Quoted 14 lines · Tony Lindgren
Quoted 13 lines · Tony Lindgren
Quoted 9 lines · Tero Kristo
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-moveLooks like this causes a build error for at least omap2 only .config:
Quoted 7 lines
Quoted 7 lines
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point
KCONFIG_ALLCONFIGto that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.
Quoted 5 lines
alternatively, just clone the repository at [1] and use the example script provided in README.md.
Ok, I pushed an updated branch named: for-4.2/ti-clk-move-v4
This definitely compiles with OMAP2 / OMAP3 / OMAP4 / OMAP5 / DRA7 / AM33xx / AM43xx only setups (tried it out.)
The extra diff compared to v3 inlined here, the changes have been squashed to the branch itself:
====================
drivers/clk/ti/Makefile +9 -8
@@ -1,18 +1,19 @@ obj-y += clk.o autoidle.o clockdomain.o clk-common = dpll.o composite.o divider.o gate.o \ fixed-factor.o mux.o apll.o \ - clkt_dpll.o clkt_iclk.o dpll3xxx.o \ - clkt_dflt.o -obj-$(CONFIG_SOC_AM33XX) += $(clk-common) clk-33xx.o + clkt_dpll.o clkt_iclk.o clkt_dflt.o +obj-$(CONFIG_SOC_AM33XX) += $(clk-common) clk-33xx.o dpll3xxx.o obj-$(CONFIG_SOC_TI81XX) += $(clk-common) fapll.o clk-816x.o obj-$(CONFIG_ARCH_OMAP2) += $(clk-common) interface.o clk-2xxx.o obj-$(CONFIG_ARCH_OMAP3) += $(clk-common) interface.o \ - clk-3xxx.o -obj-$(CONFIG_ARCH_OMAP4) += $(clk-common) clk-44xx.o dpll44xx.o -obj-$(CONFIG_SOC_OMAP5) += $(clk-common) clk-54xx.o dpll44xx.o + clk-3xxx.o dpll3xxx.o +obj-$(CONFIG_ARCH_OMAP4) += $(clk-common) clk-44xx.o \ + dpll3xxx.o dpll44xx.o +obj-$(CONFIG_SOC_OMAP5) += $(clk-common) clk-54xx.o \ + dpll3xxx.o dpll44xx.o obj-$(CONFIG_SOC_DRA7XX) += $(clk-common) clk-7xx.o \ - clk-dra7-atl.o dpll44xx.o -obj-$(CONFIG_SOC_AM43XX) += $(clk-common) clk-43xx.o + clk-dra7-atl.o dpll3xxx.o dpll44xx.o +obj-$(CONFIG_SOC_AM43XX) += $(clk-common) dpll3xxx.o clk-43xx.o ifdef CONFIG_ATAGS obj-$(CONFIG_ARCH_OMAP3) += clk-3xxx-legacy.o
drivers/clk/ti/clk.c +0 -0
@@ -402,6 +402,7 @@ int __init ti_clk_register_legacy_clks(struct
ti_clk_alias *clks)
return 0;
}
+#endif
/**
* ti_clk_setup_features - setup clock features flags
@@ -449,4 +450,3 @@ void omap2_clk_enable_init_clocks(const char **clk_names, u8 num_clocks)
clk_prepare_enable(init_clk);
}
}
-#endif
Tony Lindgren
maintainerv3 cover ARM: OMAP2+: clock code move under clk driver
Quoted 27 lines · Tero Kristo
Quoted 26 lines · Felipe Balbi
Quoted 14 lines · Tony Lindgren
Quoted 13 lines · Tony Lindgren
Quoted 9 lines · Tero Kristo
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-moveLooks like this causes a build error for at least omap2 only .config:
Quoted 7 lines
Quoted 7 lines
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point
KCONFIG_ALLCONFIGto that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.alternatively, just clone the repository at [1] and use the example script provided in README.md.
Quoted 7 lines
Quoted 2 lines
Ok, I pushed an updated branch named: for-4.2/ti-clk-move-v4
This definitely compiles with OMAP2 / OMAP3 / OMAP4 / OMAP5 / DRA7 / AM33xx / AM43xx only setups (tried it out.)
Thanks yeah seems to work for me now.
Regards,
Tony
v3 cover ARM: OMAP2+: clock code move under clk driver
Quoted 33 lines · Tony Lindgren
Quoted 32 lines · Tero Kristo
Quoted 23 lines · Felipe Balbi
Quoted 14 lines · Tony Lindgren
Quoted 13 lines · Tony Lindgren
Quoted 9 lines · Tero Kristo
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-moveLooks like this causes a build error for at least omap2 only .config:
Quoted 7 lines
Quoted 7 lines
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point
KCONFIG_ALLCONFIGto that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.Quoted 5 lines
alternatively, just clone the repository at [1] and use the example script provided in README.md.
Ok, I pushed an updated branch named: for-4.2/ti-clk-move-v4
Quoted 9 lines
Quoted 2 lines
This definitely compiles with OMAP2 / OMAP3 / OMAP4 / OMAP5 / DRA7 / AM33xx / AM43xx only setups (tried it out.)
Thanks yeah seems to work for me now.
Regards,
Tony
Question to Mike / Stephen, any chance of getting this in during the 4.2 merge anymore seeing we are already at 4.1-rc6?
I can send a pull request if yes. Otherwise I just wait until we are past the next merge.
-Tero
v3 cover ARM: OMAP2+: clock code move under clk driver
Quoting Tero Kristo (2015-06-03 05:33:46)
Quoted 41 lines · Tony Lindgren
Quoted 40 lines · Tero Kristo
Quoted 27 lines · Felipe Balbi
Quoted 26 lines · Tony Lindgren
Quoted 14 lines · Tony Lindgren
Quoted 13 lines · Tero Kristo
Quoted 9 lines
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-moveLooks like this causes a build error for at least omap2 only .config:
Quoted 7 lines
Quoted 7 lines
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point
KCONFIG_ALLCONFIGto that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.alternatively, just clone the repository at [1] and use the example script provided in README.md.
Quoted 7 lines
Quoted 2 lines
Ok, I pushed an updated branch named: for-4.2/ti-clk-move-v4
This definitely compiles with OMAP2 / OMAP3 / OMAP4 / OMAP5 / DRA7 / AM33xx / AM43xx only setups (tried it out.)
Thanks yeah seems to work for me now.
Regards,
Quoted 8 lines
Quoted 2 lines
Tony
Question to Mike / Stephen, any chance of getting this in during the 4.2 merge anymore seeing we are already at 4.1-rc6?
I can send a pull request if yes. Otherwise I just wait until we are past the next merge.
Hi Tero,
I'd like more time for any regressions this introduces to be fixed, so lets push back to next merge window. The always-wrong-but-never-by-much crystal ball[0] predicts June 14. This is less than two weeks away, so the wait should be short.
[0] http://phb-crystal-ball.org/
Thanks,
Mike
Quoted 2 lines
-Tero
v3 cover ARM: OMAP2+: clock code move under clk driver
Quoted 51 lines · Michael Turquette
Quoting Tero Kristo (2015-06-03 05:33:46)
Quoted 41 lines · Tony Lindgren
Quoted 40 lines · Tero Kristo
Quoted 27 lines · Felipe Balbi
Quoted 26 lines · Tony Lindgren
Quoted 14 lines · Tony Lindgren
Quoted 13 lines · Tero Kristo
Quoted 9 lines
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-moveLooks like this causes a build error for at least omap2 only .config:
Quoted 7 lines
Quoted 7 lines
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point
KCONFIG_ALLCONFIGto that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.alternatively, just clone the repository at [1] and use the example script provided in README.md.
Quoted 7 lines
Quoted 2 lines
Ok, I pushed an updated branch named: for-4.2/ti-clk-move-v4
This definitely compiles with OMAP2 / OMAP3 / OMAP4 / OMAP5 / DRA7 / AM33xx / AM43xx only setups (tried it out.)
Thanks yeah seems to work for me now.
Regards,
Quoted 8 lines
Quoted 2 lines
Tony
Question to Mike / Stephen, any chance of getting this in during the 4.2 merge anymore seeing we are already at 4.1-rc6?
I can send a pull request if yes. Otherwise I just wait until we are past the next merge.
Quoted 6 lines
Hi Tero,
I'd like more time for any regressions this introduces to be fixed, so lets push back to next merge window. The always-wrong-but-never-by-much crystal ball[0] predicts June 14. This is less than two weeks away, so the wait should be short.
Ok, I'll rebase this against rc1 and send a pull-request once we have it.
-Tero
Quoted 8 lines
[0] http://phb-crystal-ball.org/
Thanks,
MikeQuoted 2 lines
-Tero
v3 cover ARM: OMAP2+: clock code move under clk driver
In reply to Michael TurquetteQuoted 51 lines · Michael Turquette
Quoting Tero Kristo (2015-06-03 05:33:46)
Quoted 41 lines · Tony Lindgren
Quoted 40 lines · Tero Kristo
Quoted 27 lines · Felipe Balbi
Quoted 26 lines · Tony Lindgren
Quoted 14 lines · Tony Lindgren
Quoted 13 lines · Tero Kristo
Quoted 9 lines
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-moveLooks like this causes a build error for at least omap2 only .config:
Quoted 7 lines
Quoted 7 lines
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point
KCONFIG_ALLCONFIGto that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.alternatively, just clone the repository at [1] and use the example script provided in README.md.
Quoted 7 lines
Quoted 2 lines
Ok, I pushed an updated branch named: for-4.2/ti-clk-move-v4
This definitely compiles with OMAP2 / OMAP3 / OMAP4 / OMAP5 / DRA7 / AM33xx / AM43xx only setups (tried it out.)
Thanks yeah seems to work for me now.
Regards,
Quoted 8 lines
Quoted 2 lines
Tony
Question to Mike / Stephen, any chance of getting this in during the 4.2 merge anymore seeing we are already at 4.1-rc6?
I can send a pull request if yes. Otherwise I just wait until we are past the next merge.
Quoted 6 lines
Hi Tero,
I'd like more time for any regressions this introduces to be fixed, so lets push back to next merge window. The always-wrong-but-never-by-much crystal ball[0] predicts June 14. This is less than two weeks away, so the wait should be short.
Hi Mike / Stephen,
I am planning to send a pull-request out for this, but this set is going to cause some minor merge conflicts with the recent header file change patches from Stephen, and the determine rate prototype change from Boris.
I can alternatively just ignore these issues and send these patches on top of rc2 and let you handle the conflicts within clk-tree, or cherry-pick some stable commits for the same if you like.
Which way do you prefer?
-Tero
Quoted 8 lines
[0] http://phb-crystal-ball.org/
Thanks,
MikeQuoted 2 lines
-Tero
v3 cover ARM: OMAP2+: clock code move under clk driver
Quoted 16 lines · Tero Kristo
Quoted 7 lines · Michael Turquette
Hi Tero,
I'd like more time for any regressions this introduces to be fixed, so lets push back to next merge window. The always-wrong-but-never-by-much crystal ball[0] predicts June 14. This is less than two weeks away, so the wait should be short.
Hi Mike / Stephen,
I am planning to send a pull-request out for this, but this set is going to cause some minor merge conflicts with the recent header file change patches from Stephen, and the determine rate prototype change from Boris.
Quoted 5 lines
I can alternatively just ignore these issues and send these patches on top of rc2 and let you handle the conflicts within clk-tree, or cherry-pick some stable commits for the same if you like.
Which way do you prefer?
It doesn't sound too bad to resolve those conflicts so send the branch that you already made based on v4.1-rc2.
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
v3 cover ARM: OMAP2+: clock code move under clk driver
In reply to Tony LindgrenQuoted 34 lines · Tony Lindgren
Quoted 13 lines · Tony Lindgren
Quoted 9 lines · Tero Kristo
Hi,
As requested, posting v3 with somewhat changed diff parameters and diffstat attached. Just some minor
Makefilechanges compared to v2, these were discussed under that set.Set has been pushed to:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-moveLooks like this causes a build error for at least omap2 only .config:
Quoted 7 lines
drivers/clk/ti/dpll3xxx.o:(.rodata+0x1c): multiple definition of `clkhwops_omap3_dpll' drivers/clk/ti/dpll.o:(.rodata+0x0): first defined here
You may want to create a file selecting ARCH_OMAP2PLUS=y, then point
KCONFIG_ALLCONFIGto that file for make randconfig. Then just build randconfigs :) Usually the issues like this are exposed within few randconfig builds, some take longer if the options have dependencies.Found more similar issues for omap3 only and omap4 only configs:
drivers/built-in.o: In function `omap2_clkops_enable_clkdm':
omap-gpmc.c:(.text+0x202e0): undefined reference toti_clk_get_features' drivers/built-in.o: In functionomap2_clkops_disable_clkdm':
omap-gpmc.c:(.text+0x20374): undefined reference toti_clk_get_features' drivers/built-in.o: In function_omap2_dpll_is_in_bypass':
omap-gpmc.c:(.text+0x21678): undefined reference toti_clk_get_features' drivers/built-in.o: In functionomap2_dpll_round_rate':
omap-gpmc.c:(.text+0x218ac): undefined reference toti_clk_get_features' omap-gpmc.c:(.text+0x218ec): undefined reference toti_clk_get_features'
Quoted 6 lines
drivers/built-in.o: In function `omap3xxx_dt_clk_init':
omap-gpmc.c:(.init.text+0x4d60): undefined reference toomap2_clk_enable_init_clocks' arch/arm/mach-omap2/built-in.o: In functionti_clk_init_features':
arch/arm/mach-omap2/built-in.o: In function `ti_clk_init_features':
dss-common.c:(.init.text+0x4368): undefined reference to `ti_clk_setup_features'
Argh, that same issue crept back with a merge issue again. I fixed this already once.
-Tero