Skip to contentSkip to conversation

ARM: OMAP2+: clock code migration to drivers/clk/ti

PATCH Superseded Tero Kristo 5 participants 43 messages May 11, 2015 – May 21, 2015

Subsystems (6)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Hi,

This set moves most of the OMAP2+ clock driver code under drivers/clk. There are still a couple of files under mach-omap2 folder after this set which have either unmet dependencies still (towards PRCM driver) or is currently slightly broken (some of the DVFS code for OMAP2/OMAP3.) Earlier version of this set has been posted back in March (see
http://www.spinics.net/lists/linux-omap/msg116418.html), mostly the code is the same except patches 25+ which are new.

Overall diffstat for this set:

 42 files changed, 2644 insertions(+), 3707 deletions(-)

Testing done:
am335x-evm : boot
am335x-evmsk : boot
am3517-evm : boot
am37x-evm : boot
am43x-epos-evm : boot
am437x-gp-evm : boot
omap3-beagle-xm : boot
omap3-beagle : boot, suspend-resume (ret/off), cpuidle (ret/off)
am335x-boneblack: boot
am335x-bone : boot
craneboard : boot
dra7xx-evm : boot
omap3430-ldp : boot
omap3-n900 : boot
omap5-uevm : boot
omap4-panda-es : boot, suspend-resume (ret), cpuidle (ret)
omap4-panda : boot
omap2430-sdp : boot
omap3430-sdp : boot
omap4-sdp-es23plus: boot

Branch info:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-move

-Tero

#1 lore raw

PATCH v2 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
index f251a14..82f0600 100644
@@ -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
index a699d71..cbc65b3 100644
@@ -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
index 652ed0a..ac21856 100644
@@ -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
index a9e86db..8bede6a 100644
@@ -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
index 44e57ec..9a80f59 100644
@@ -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
index 0ebe5c5..567f8b9 100644
@@ -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
index 79b76e1..b066835 100644
@@ -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
#2 lore raw

PATCH v2 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)

Should this return a const pointer?

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
#3 lore raw

PATCH v2 2/27 clk: ti: move generic OMAP DPLL implementation under drivers/clk

In reply to Tero Kristo

With 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 +-
 arch/arm/mach-omap2/clkt_dpll.c |  370 ---------------------------------------
 drivers/clk/ti/Makefile         |    3 +-
 drivers/clk/ti/clkt_dpll.c      |  369 ++++++++++++++++++++++++++++++++++++++
 drivers/clk/ti/clock.h          |    2 +
 include/linux/clk/ti.h          |    1 -
 6 files changed, 374 insertions(+), 373 deletions(-)
 delete mode 100644 arch/arm/mach-omap2/clkt_dpll.c
 create mode 100644 drivers/clk/ti/clkt_dpll.c
arch/arm/mach-omap2/Makefile +1 -1
index ec002bd..fcb5d47 100644
@@ -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)
arch/arm/mach-omap2/clkt_dpll.c deleted +0 -370

370 lines not on this page · raw message

drivers/clk/ti/Makefile +2 -1
index 105ffd0..62dae2a 100644
@@ -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 new file +369 -0

369 lines not on this page · raw message

drivers/clk/ti/clock.h +2 -0
index 404158d..05ed10a 100644
@@ -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
index b066835..f2436b2 100644
@@ -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
#4 lore raw

PATCH v2 2/27 clk: ti: move generic OMAP DPLL implementation under drivers/clk

Quoted 6 lines · Tero Kristo

With 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.

---

How much of the code is the same from the original copy? Can you generate these patches with -M -C so that we can see?

Quoted 9 lines
 arch/arm/mach-omap2/Makefile    |    2 +-
 arch/arm/mach-omap2/clkt_dpll.c |  370 ---------------------------------------
 drivers/clk/ti/Makefile         |    3 +-
 drivers/clk/ti/clkt_dpll.c      |  369 ++++++++++++++++++++++++++++++++++++++
 drivers/clk/ti/clock.h          |    2 +
 include/linux/clk/ti.h          |    1 -
 6 files changed, 374 insertions(+), 373 deletions(-)
 delete mode 100644 arch/arm/mach-omap2/clkt_dpll.c
 create mode 100644 drivers/clk/ti/clkt_dpll.c
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
#5 lore raw

PATCH v2 2/27 clk: ti: move generic OMAP DPLL implementation under drivers/clk

Quoted 10 lines · Stephen Boyd
Quoted 6 lines · Tero Kristo

With 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.

---

How much of the code is the same from the original copy? Can you generate these patches with -M -C so that we can see?

Looks like for the move patches the range is from 85%...95% exact copy. Shall I repost the patches in this format? Good hint for the -M -C btw, I wonder why those are not default options for git-format-patch.

-Tero

Quoted 11 lines
Quoted 10 lines
  arch/arm/mach-omap2/Makefile    |    2 +-
  arch/arm/mach-omap2/clkt_dpll.c |  370 ---------------------------------------
  drivers/clk/ti/Makefile         |    3 +-
  drivers/clk/ti/clkt_dpll.c      |  369 ++++++++++++++++++++++++++++++++++++++
  drivers/clk/ti/clock.h          |    2 +
  include/linux/clk/ti.h          |    1 -
  6 files changed, 374 insertions(+), 373 deletions(-)

delete mode 100644 arch/arm/mach-omap2/clkt_dpll.c create mode 100644 drivers/clk/ti/clkt_dpll.c

maintainer
#6 lore raw

PATCH v2 2/27 clk: ti: move generic OMAP DPLL implementation under drivers/clk

Quoted 9 lines · Tero Kristo
Quoted 8 lines · Stephen Boyd
Quoted 6 lines · Tero Kristo

With 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.

---

Quoted 6 lines
Quoted 2 lines

How much of the code is the same from the original copy? Can you generate these patches with -M -C so that we can see?

Looks like for the move patches the range is from 85%...95% exact copy. Shall I repost the patches in this format? Good hint for the -M -C btw, I wonder why those are not default options for git-format-patch.

While tweaking your scripts.. Can you also check why the cover letter for your patches is missing the whole series diffstat?

The diffstat is automatically created with:

$ git format-patch --cover-letter -o /tmp/outgoing v4.1-rc1..

Regards,

Tony

#7 lore raw

PATCH v2 2/27 clk: ti: move generic OMAP DPLL implementation under drivers/clk

In reply to Tero Kristo
Quoted 6 lines · Tero Kristo
Quoted 5 lines · Stephen Boyd
Quoted 4 lines · Tero Kristo

With 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.

Quoted 8 lines
Quoted 5 lines
Quoted 2 lines

---

How much of the code is the same from the original copy? Can you generate these patches with -M -C so that we can see?

Looks like for the move patches the range is from 85%...95% exact copy. Shall I repost the patches in this format?

Sure, a resend would be nice to actually see what changed. If that's too much mail, maybe you can share the diffstat for the whole series with -M -C so we can see what's moved instead.

Quoted 4 lines

Good hint for the
-M -C btw, I wonder why those are not default options for git-format-patch.

I think it isn't the default because 'patch' the program didn't always support the diff format that git generates with the -M and -C options. FWIW, I have

	[diff] 
		renames = copy

in my .gitconfig for this purpose.

Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
#8 lore raw

PATCH v2 3/27 clk: ti: move OMAP4+ DPLL implementation under drivers/clk

In reply to Tero Kristo

With 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 -
 arch/arm/mach-omap2/dpll44xx.c |  232 ---------------------------------------
 drivers/clk/ti/Makefile        |    6 +-
 drivers/clk/ti/clock.h         |   14 +++
 drivers/clk/ti/dpll44xx.c      |  233 ++++++++++++++++++++++++++++++++++++++++
 include/linux/clk/ti.h         |   13 +--
 7 files changed, 254 insertions(+), 254 deletions(-)
 delete mode 100644 arch/arm/mach-omap2/dpll44xx.c
 create mode 100644 drivers/clk/ti/dpll44xx.c
arch/arm/mach-omap2/Makefile +3 -3
index fcb5d47..5bcd282 100644
@@ -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
index ac21856..d7ed244 100644
@@ -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);
arch/arm/mach-omap2/dpll44xx.c deleted +0 -232

232 lines not on this page · raw message

drivers/clk/ti/Makefile +3 -3
index 62dae2a..c3ec301 100644
@@ -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
index 05ed10a..c75d4b4 100644
@@ -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 new file +233 -0

233 lines not on this page · raw message

include/linux/clk/ti.h +1 -12
index f2436b2..89deddf 100644
@@ -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
#9 lore raw

PATCH v2 4/27 clk: ti: move interface clock implementation under drivers/clk

In reply to Tero Kristo

With 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/clkt_iclk.c |   68 ---------------------------------------
 arch/arm/mach-omap2/clock.h     |   11 -------
 drivers/clk/ti/Makefile         |    2 +-
 drivers/clk/ti/clkt_iclk.c      |   66 +++++++++++++++++++++++++++++++++++++
 drivers/clk/ti/clock.h          |    2 ++
 include/linux/clk/ti.h          |   10 ++++--
 7 files changed, 78 insertions(+), 84 deletions(-)
 delete mode 100644 arch/arm/mach-omap2/clkt_iclk.c
 create mode 100644 drivers/clk/ti/clkt_iclk.c
arch/arm/mach-omap2/Makefile +1 -2
index 5bcd282..a2f5156 100644
@@ -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/clkt_iclk.c deleted +0 -68

68 lines not on this page · raw message

arch/arm/mach-omap2/clock.h +0 -11
index d7ed244..ca8c42c 100644
@@ -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
index c3ec301..23cd726 100644
@@ -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 new file +66 -0

66 lines not on this page · raw message

drivers/clk/ti/clock.h +2 -0
index c75d4b4..a7256a9 100644
@@ -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
index 89deddf..63f2945 100644
@@ -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
#10 lore raw

PATCH v2 5/27 ARM: OMAP3: dpll3-m2: get rid of obsolete clksel access

In reply to Tero Kristo

Core 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
index eb69acf..825e3da 100644
@@ -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
#11 lore raw

PATCH v2 6/27 ARM: OMAP2+: clk: remove obsolete clksel support code

In reply to Tero Kristo

The 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
index a2f5156..d03bc21 100644
@@ -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
index ca8c42c..9efff4b 100644
@@ -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
#12 lore raw

PATCH v2 7/27 ARM: OMAP2+: clock: remove clock_common_data.c file

In reply to Tero Kristo

This 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
index d03bc21..98d5030 100644
@@ -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
index 9efff4b..b71d430 100644
@@ -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
#13 lore raw

PATCH v2 8/27 ARM: OMAP36xx: remove clock36xx.c/.h files

In reply to Tero Kristo

These 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
index 98d5030..f33d011 100644
@@ -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
deleted file mode 100644
index 945bb7f..0000000
@@ -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
#14 lore raw

PATCH v2 9/27 clk: ti: autoidle: move generic autoidle handling code to clock driver

In reply to Tero Kristo

This 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
index cbc65b3..42ce860 100644
@@ -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
index b71d430..950a17a 100644
@@ -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
index a7256a9..9b51021 100644
@@ -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
index c2c8a28..3cd4067 100644
@@ -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
index 63f2945..2e4b4fb 100644
@@ -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
#15 lore raw

PATCH v2 10/27 clk: ti: move omap2_clk_enable_init_clocks under clock driver

In reply to Tero Kristo

This 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
index 42ce860..234cedf 100644
@@ -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
index c808ab3..bd8790b 100644
@@ -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
index 028b337..733f9d3 100644
@@ -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
index 757636d..bb3b883 100644
@@ -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
index 9451e65..c69352b 100644
@@ -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
index 567f8b9..f1dcd20 100644
@@ -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
index 9b51021..4b26af8 100644
@@ -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
index 2e4b4fb..43184c2 100644
@@ -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
#16 lore raw

PATCH v2 11/27 ARM: OMAP2+: clock: remove support for legacy mpurate command line param

In reply to Tero Kristo

The 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
index f33d011..bf5d71d 100644
@@ -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
index 950a17a..e2781b4 100644
@@ -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
index 8bede6a..4bd6122 100644
@@ -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
#17 lore raw

PATCH v2 12/27 ARM: OMAP2+: clock: add support for clkdm ops to the low level clk ops

In reply to Tero Kristo

Clock 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
index 94a4949..d6afc12 100644
@@ -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
index 43184c2..43b406c 100644
@@ -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
#18 lore raw

PATCH v2 13/27 ARM: OMAP2+: clock: add support for specific CM ops to ti_clk_ll_ops

In reply to Tero Kristo

Clock 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
index d6afc12..7a5713d 100644
@@ -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
index 43b406c..3ca818e 100644
@@ -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
#19 lore raw

PATCH v2 14/27 clk: ti: dpll: move omap3 DPLL functionality to clock driver

In reply to Tero Kristo

With 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 ----
 arch/arm/mach-omap2/dpll3xxx.c  |  818 --------------------------------------
 drivers/clk/ti/Makefile         |    2 +-
 drivers/clk/ti/clk-3xxx.c       |   31 ++
 drivers/clk/ti/clock.h          |   27 ++
 drivers/clk/ti/dpll3xxx.c       |  825 +++++++++++++++++++++++++++++++++++++++
 include/linux/clk/ti.h          |   30 --
 9 files changed, 886 insertions(+), 936 deletions(-)
 delete mode 100644 arch/arm/mach-omap2/dpll3xxx.c
 create mode 100644 drivers/clk/ti/dpll3xxx.c
arch/arm/mach-omap2/Makefile +2 -6
index bf5d71d..f9d4ccf 100644
@@ -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
index e2781b4..d60691d 100644
@@ -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

arch/arm/mach-omap2/dpll3xxx.c deleted +0 -818

818 lines not on this page · raw message

drivers/clk/ti/Makefile +1 -1
index 23cd726..fe2cfa2 100644
@@ -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
index bb3b883..5489ad8 100644
@@ -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
index 4b26af8..688d9e4 100644
@@ -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 new file +825 -0

825 lines not on this page · raw message

include/linux/clk/ti.h +0 -30
index 3ca818e..0f9d15f 100644
@@ -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
#20 lore raw

PATCH v2 15/27 ARM: OMAP3: clock: remove clock3xxx.c file

In reply to Tero Kristo

This 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
index f9d4ccf..07052656 100644
@@ -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
index 825e3da..6cd2961 100644
@@ -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
deleted file mode 100644
index 0b0e3a87..0000000
@@ -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
#21 lore raw

PATCH v2 16/27 ARM: OMAP2+: clock: remove clkdm_control static boolean from code

In reply to Tero Kristo

clkdm_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
index 7a5713d..6c17adf 100644
@@ -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
index d60691d..9480654 100644
@@ -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
index 0f9d15f..3dadb74 100644
@@ -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
#22 lore raw

PATCH v2 17/27 clk: ti: dflt: move support for default gate clock to clock driver

In reply to Tero Kristo

With 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
index 6c17adf..38a336b 100644
@@ -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
index fe2cfa2..fc6fe8c 100644
@@ -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
index 688d9e4..f215383 100644
@@ -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
index 3dadb74..891fe0f 100644
@@ -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
#23 lore raw

PATCH v2 18/27 clk: ti: omap2430: move clock support code under clock driver

In reply to Tero Kristo

With 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
index 07052656..695d58f 100644
@@ -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
index a03919d..38c3690 100644
@@ -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
index f215383..3652c26 100644
@@ -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
index 891fe0f..a7728f7 100644
@@ -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
#24 lore raw

PATCH v2 19/27 clk: ti: clkdm: move clkdm gate clock support code to clock driver

In reply to Tero Kristo

With 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
index 38a336b..99875db 100644
@@ -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
index 9480654..a7e9511 100644
@@ -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
index 3652c26..83476d1 100644
@@ -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
index a7728f7..6361f21 100644
@@ -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
#25 lore raw

PATCH v2 20/27 clk: ti: omap34xx: move omap34xx clock type support code to clock driver

In reply to Tero Kristo

With 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
index 695d58f..22d2e48 100644
@@ -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
index 83476d1..c6fbd15 100644
@@ -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
index 6361f21..813b809 100644
@@ -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
#26 lore raw

PATCH v2 21/27 ARM: OMAP4: clock: remove clock44xx.h header

In reply to Tero Kristo

This 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
deleted file mode 100644
index 287a46f..0000000
@@ -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
index 820dde8..7467856 100644
@@ -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
#27 lore raw

PATCH v2 22/27 clk: ti: am3517: move remaining am3517 clock support code to clock driver

In reply to Tero Kristo

With 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
index 22d2e48..d424920 100644
@@ -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
deleted file mode 100644
index ca5e5a6..0000000
@@ -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
index c6fbd15..0ca5a36 100644
@@ -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
index 813b809..fc8e9ad 100644
@@ -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
#28 lore raw

PATCH v2 23/27 clk: ti: move some public definitions to private header

In reply to Tero Kristo

Several 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
index 49baf38..594b759 100644
@@ -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
index 3dbcc36..94f0dcd 100644
@@ -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
index 3795fce..8943167 100644
@@ -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
index 581db77..7a8b51b 100644
@@ -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
index 96c69a3..59ce2fa 100644
@@ -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
index 5d2217a..8b82721 100644
@@ -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
#29 lore raw

PATCH v2 24/27 ARM: OMAP2+: clock: remove dead definitions from the clock header file

In reply to Tero Kristo

Cleanup 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
index 6cd2961..07e1956 100644
@@ -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
deleted file mode 100644
index 084ba71..0000000
@@ -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
#30 lore raw

PATCH v2 25/27 clk: ti: remove exported ll_ops struct, instead add an API for registration

In reply to Tero Kristo

We 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
index 99875db..40a88c2 100644
@@ -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
index 1986ab2..a7051d6 100644
@@ -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
index 7467856..a253aaf 100644
@@ -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
index f1dcd20..dc6b759 100644
@@ -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
index 3c43125..d4d232fd 100644
@@ -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
index 61ef87b..80a7b69 100644
@@ -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
index 53fe38f..267cca0 100644
@@ -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
#31 lore raw

PATCH v2 26/27 ARM: OMAP2+: clock: remove legacy omap2_clk_readl/writel APIs

In reply to Tero Kristo

As 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
index 40a88c2..79cec5f 100644
@@ -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
index a7051d6..f3dc04c 100644
@@ -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
#32 lore raw

PATCH v2 27/27 clk: ti: move low-level access and init code under clock driver

In reply to Tero Kristo

With 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
index 79cec5f..4340ba6 100644
@@ -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 *)&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 *)&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
index f3dc04c..67da640 100644
@@ -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
index 267cca0..f183825 100644
@@ -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
maintainer
#33 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

In reply to Tero Kristo

Hi

Quoted 33 lines · Tero Kristo

This set moves most of the OMAP2+ clock driver code under drivers/clk. There are still a couple of files under mach-omap2 folder after this set which have either unmet dependencies still (towards PRCM driver) or is currently slightly broken (some of the DVFS code for OMAP2/OMAP3.) Earlier version of this set has been posted back in March (see
http://www.spinics.net/lists/linux-omap/msg116418.html), mostly the code is the same except patches 25+ which are new.

Overall diffstat for this set:

 42 files changed, 2644 insertions(+), 3707 deletions(-)

Testing done:
am335x-evm : boot
am335x-evmsk : boot
am3517-evm : boot
am37x-evm : boot
am43x-epos-evm : boot
am437x-gp-evm : boot
omap3-beagle-xm : boot
omap3-beagle : boot, suspend-resume (ret/off), cpuidle (ret/off)
am335x-boneblack: boot
am335x-bone : boot
craneboard : boot
dra7xx-evm : boot
omap3430-ldp : boot
omap3-n900 : boot
omap5-uevm : boot
omap4-panda-es : boot, suspend-resume (ret), cpuidle (ret)
omap4-panda : boot
omap2430-sdp : boot
omap3430-sdp : boot
omap4-sdp-es23plus: boot

Quoted 3 lines

Branch info:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-move

I can't replicate your test results. Several Kconfigs fail to build here, and many boards don't even boot.

Could you please post a copy of your boot logs?

- Paul

http://www.pwsan.com/omap/testlogs/test-tkristo-clk-move-v4.2/20150511115145/

OMAP development test results for test-tkristo-clk-move-v4.2 20150511115145

Test summary
------------

Build: uImage:

    Pass ( 3/ 3): omap1_defconfig, omap1_defconfig_1510innovator_only,
		  omap1_defconfig_5912osk_only

Build: uImage+dtb:

    FAIL ( 2/13): omap2plus_defconfig_am33xx_only/am335x-bone,
		  omap2plus_defconfig_n800_only_a/omap2420-n800
    Pass (11/13): omap2plus_defconfig/omap4-panda,
		  omap2plus_defconfig/omap4-panda-es,
		  omap2plus_defconfig/omap4-var-som,
		  omap2plus_defconfig/omap3-evm-37xx,
		  omap2plus_defconfig/omap2430-sdp,
		  omap2plus_defconfig/am3517-evm,
		  omap2plus_defconfig/omap3-beagle,
		  omap2plus_defconfig/omap3-beagle-xm,
		  omap2plus_defconfig/omap3-sbc-t3517,
		  omap2plus_defconfig/omap5-uevm,
		  omap2plus_defconfig/omap5-sbc-t54

Build: zImage:

    FAIL ( 9/17): omap2plus_defconfig_am33xx_only,
		  omap2plus_defconfig_n800_only_a,
		  omap2plus_defconfig_n800_multi_omap2xxx,
		  omap2plus_defconfig_omap2_4_only,
		  omap2plus_defconfig_omap5_only,
		  omap2plus_defconfig_dra7xx_only,
		  omap2plus_defconfig_am43xx_only,
		  rmk_omap4430_sdp_oldconfig,
		  rmk_omap4430_sdp_allnoconfig
    Pass ( 8/17): omap2plus_defconfig,
		  omap2plus_defconfig_2430sdp_only,
		  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
		  omap2plus_defconfig_omap3_4_only,
		  rmk_omap3430_ldp_oldconfig,
		  rmk_omap3430_ldp_allnoconfig, multi_v7_defconfig

Build warnings from toolchain: uImage:

    FAIL ( 3/ 3): omap1_defconfig, omap1_defconfig_1510innovator_only,
		  omap1_defconfig_5912osk_only

Build warnings from toolchain: uImage+dtb:

    FAIL ( 2/13): omap2plus_defconfig_am33xx_only/am335x-bone,
		  omap2plus_defconfig_n800_only_a/omap2420-n800

Build warnings from toolchain: zImage:

    FAIL (14/17): omap2plus_defconfig, omap2plus_defconfig_am33xx_only,
		  omap2plus_defconfig_n800_only_a,
		  omap2plus_defconfig_n800_multi_omap2xxx,
		  omap2plus_defconfig_2430sdp_only,
		  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
		  omap2plus_defconfig_omap2_4_only,
		  omap2plus_defconfig_omap3_4_only,
		  omap2plus_defconfig_omap5_only,
		  omap2plus_defconfig_dra7xx_only,
		  omap2plus_defconfig_am43xx_only,
		  rmk_omap3430_ldp_oldconfig,
		  rmk_omap4430_sdp_oldconfig

Boot to userspace:

    FAIL ( 6/17): 4460varsomom, 2430sdp, 3530es3beagle, 3530es31beagle,
		  cmt3517, 5430es2sbct54
    skip ( 5/17): 5912osk, 3517evm, am335xbonelt, am335xbone, 2420n800
    Pass ( 6/17): 4430es2panda, 4460pandaes, 37xxevm, 3730beaglexm,
		  3730es12beaglexm, 5430es2uevm

Kernel warnings during boot to userspace:

    FAIL ( 1/17): 4430es2panda

PM: chip retention via suspend:

    skip ( 1/12): am335xbonelt
    FAIL ( 7/12): 4430es2panda, 4460varsomom, 3530es3beagle,
		  3530es31beagle, 2430sdp, 5430es2uevm, 5430es2sbct54
    Pass ( 4/12): 4460pandaes, 37xxevm, 3730beaglexm, 3730es12beaglexm

PM: chip retention via dynamic idle:

    skip ( 1/12): am335xbonelt
    FAIL ( 7/12): 4430es2panda, 4460varsomom, 3530es3beagle,
		  3530es31beagle, 2430sdp, 5430es2uevm, 5430es2sbct54
    Pass ( 4/12): 4460pandaes, 37xxevm, 3730beaglexm, 3730es12beaglexm

PM: chip off (except CORE, due to errata) via suspend:

    Pass ( 1/ 1): 3730beaglexm

PM: chip off (except CORE, due to errata) via dynamic idle:

    Pass ( 1/ 1): 3730beaglexm

PM: chip off via suspend:

    FAIL ( 2/ 4): 3530es3beagle, 3530es31beagle
    Pass ( 2/ 4): 37xxevm, 3730es12beaglexm

PM: chip off via dynamic idle:

    FAIL ( 2/ 4): 3530es3beagle, 3530es31beagle
    Pass ( 2/ 4): 37xxevm, 3730es12beaglexm

Kernel warnings during PM test:

    FAIL ( 1/17): 4430es2panda

Obsolete Kconfig symbols:

    FAIL ( 1/20): multi_v7_defconfig

vmlinux object size
(delta in bytes from test_v4.1-rc2 (5ebe6afaf0057ac3eaeb98defd5456894b446d22)):

   text     data      bss    total  kernel
      0        0        0        0  omap1_defconfig
      0        0        0        0  omap1_defconfig_1510innovator_only
      0        0        0        0  omap1_defconfig_5912osk_only
  -1484       -8        0    -1492  multi_v7_defconfig
  -2108      +56        0    -2052  omap2plus_defconfig
      0        0        0        0  omap2plus_defconfig_2430sdp_only
  -6140      +56      -64    -6148  omap2plus_defconfig_cpupm
  -6204       -8        0    -6212  omap2plus_defconfig_no_pm
  -1908       -8        0    -1916  omap2plus_defconfig_omap3_4_only
  -2804       -4     +780    -2028  rmk_omap3430_ldp_allnoconfig
  -1812       -8      +64    -1756  rmk_omap3430_ldp_oldconfig

Boot-time memory difference
(delta in bytes from test_v4.1-rc2 (5ebe6afaf0057ac3eaeb98defd5456894b446d22))
avail rsrvd high freed board kconfig
-117644k -13428k . -168k 2420n800 omap2plus_defconfig_n800_only_a
-4k 4k . . 5430es2sbct54 omap2plus_defconfig
-79556k -51516k . -364k am335xbone omap2plus_defconfig_am33xx_only
-224000k -37120k . -440k am335xbonelt omap2plus_defconfig

#34 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Quoted 44 lines · Paul Walmsley

Hi

Quoted 33 lines · Tero Kristo

This set moves most of the OMAP2+ clock driver code under drivers/clk. There are still a couple of files under mach-omap2 folder after this set which have either unmet dependencies still (towards PRCM driver) or is currently slightly broken (some of the DVFS code for OMAP2/OMAP3.) Earlier version of this set has been posted back in March (see
http://www.spinics.net/lists/linux-omap/msg116418.html), mostly the code is the same except patches 25+ which are new.

Overall diffstat for this set:

  42 files changed, 2644 insertions(+), 3707 deletions(-)

Testing done:
am335x-evm : boot
am335x-evmsk : boot
am3517-evm : boot
am37x-evm : boot
am43x-epos-evm : boot
am437x-gp-evm : boot
omap3-beagle-xm : boot
omap3-beagle : boot, suspend-resume (ret/off), cpuidle (ret/off)
am335x-boneblack: boot
am335x-bone : boot
craneboard : boot
dra7xx-evm : boot
omap3430-ldp : boot
omap3-n900 : boot
omap5-uevm : boot
omap4-panda-es : boot, suspend-resume (ret), cpuidle (ret)
omap4-panda : boot
omap2430-sdp : boot
omap3430-sdp : boot
omap4-sdp-es23plus: boot

Quoted 3 lines

Branch info:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-move

I can't replicate your test results. Several Kconfigs fail to build here, and many boards don't even boot.

Quoted 7 lines

Could you please post a copy of your boot logs?

- Paul

http://www.pwsan.com/omap/testlogs/test-tkristo-clk-move-v4.2/20150511115145/

OMAP development test results for test-tkristo-clk-move-v4.2 20150511115145

Oh hmm, I seem to have introduced a Makefile issue which breaks a couple of special builds. I just force pushed updated branch.

Here are the boot logs for it, I tried also single-soc builds with am3/am4/omap2/omap3/omap4/omap5/dra7:

  : Board           : Boot url
 1: am335x-evm      : PASS http://paste.ubuntu.com/11093628/
 2: am335x-evmsk    : PASS http://paste.ubuntu.com/11093629/
 3: am3517-evm      : PASS http://paste.ubuntu.com/11093630/
 4: am37x-evm       : PASS http://paste.ubuntu.com/11093632/
 5: am43x-epos-evm  : PASS http://paste.ubuntu.com/11093633/
 6: am437x-gp-evm   : PASS http://paste.ubuntu.com/11093634/
 7: am57xx-evm      : FAIL http://paste.ubuntu.com/11093635/
 8: omap3-beagle-xm : PASS http://paste.ubuntu.com/11093636/
 9: omap3-beagle    : PASS http://paste.ubuntu.com/11093637/
10: am335x-boneblack: PASS http://paste.ubuntu.com/11093638/
11: am335x-bone     : PASS http://paste.ubuntu.com/11093639/
12: craneboard      : PASS http://paste.ubuntu.com/11093640/
13: dra7xx-evm      : PASS http://paste.ubuntu.com/11093641/
14: omap3430-ldp    : PASS http://paste.ubuntu.com/11093642/
15: omap3-n900      : PASS http://paste.ubuntu.com/11093643/
16: omap5-uevm      : PASS http://paste.ubuntu.com/11093645/
17: omap4-panda-es  : PASS http://paste.ubuntu.com/11093646/
18: omap4-panda     : PASS http://paste.ubuntu.com/11093647/
19: omap2430-sdp    : PASS http://paste.ubuntu.com/11093648/
20: omap3430-sdp    : PASS http://paste.ubuntu.com/11093649/

21: omap4-sdp-es23plus: PASS http://paste.ubuntu.com/11093650/
TOTAL = 21 boards, Booted Boards = 20, No Boot boards = 1

AM57xx-evm boot fails as it is missing some patches from Nishanth (I think the UART mux has changed.)

-Tero

Quoted 134 lines

Test summary
------------

Build: uImage:

     Pass ( 3/ 3): omap1_defconfig, omap1_defconfig_1510innovator_only,
		  omap1_defconfig_5912osk_only

Build: uImage+dtb:

     FAIL ( 2/13): omap2plus_defconfig_am33xx_only/am335x-bone,
		  omap2plus_defconfig_n800_only_a/omap2420-n800
     Pass (11/13): omap2plus_defconfig/omap4-panda,
		  omap2plus_defconfig/omap4-panda-es,
		  omap2plus_defconfig/omap4-var-som,
		  omap2plus_defconfig/omap3-evm-37xx,
		  omap2plus_defconfig/omap2430-sdp,
		  omap2plus_defconfig/am3517-evm,
		  omap2plus_defconfig/omap3-beagle,
		  omap2plus_defconfig/omap3-beagle-xm,
		  omap2plus_defconfig/omap3-sbc-t3517,
		  omap2plus_defconfig/omap5-uevm,
		  omap2plus_defconfig/omap5-sbc-t54

Build: zImage:

     FAIL ( 9/17): omap2plus_defconfig_am33xx_only,
		  omap2plus_defconfig_n800_only_a,
		  omap2plus_defconfig_n800_multi_omap2xxx,
		  omap2plus_defconfig_omap2_4_only,
		  omap2plus_defconfig_omap5_only,
		  omap2plus_defconfig_dra7xx_only,
		  omap2plus_defconfig_am43xx_only,
		  rmk_omap4430_sdp_oldconfig,
		  rmk_omap4430_sdp_allnoconfig
     Pass ( 8/17): omap2plus_defconfig,
		  omap2plus_defconfig_2430sdp_only,
		  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
		  omap2plus_defconfig_omap3_4_only,
		  rmk_omap3430_ldp_oldconfig,
		  rmk_omap3430_ldp_allnoconfig, multi_v7_defconfig

Build warnings from toolchain: uImage:

     FAIL ( 3/ 3): omap1_defconfig, omap1_defconfig_1510innovator_only,
		  omap1_defconfig_5912osk_only

Build warnings from toolchain: uImage+dtb:

     FAIL ( 2/13): omap2plus_defconfig_am33xx_only/am335x-bone,
		  omap2plus_defconfig_n800_only_a/omap2420-n800

Build warnings from toolchain: zImage:

     FAIL (14/17): omap2plus_defconfig, omap2plus_defconfig_am33xx_only,
		  omap2plus_defconfig_n800_only_a,
		  omap2plus_defconfig_n800_multi_omap2xxx,
		  omap2plus_defconfig_2430sdp_only,
		  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
		  omap2plus_defconfig_omap2_4_only,
		  omap2plus_defconfig_omap3_4_only,
		  omap2plus_defconfig_omap5_only,
		  omap2plus_defconfig_dra7xx_only,
		  omap2plus_defconfig_am43xx_only,
		  rmk_omap3430_ldp_oldconfig,
		  rmk_omap4430_sdp_oldconfig

Boot to userspace:

     FAIL ( 6/17): 4460varsomom, 2430sdp, 3530es3beagle, 3530es31beagle,
		  cmt3517, 5430es2sbct54
     skip ( 5/17): 5912osk, 3517evm, am335xbonelt, am335xbone, 2420n800
     Pass ( 6/17): 4430es2panda, 4460pandaes, 37xxevm, 3730beaglexm,
		  3730es12beaglexm, 5430es2uevm

Kernel warnings during boot to userspace:

     FAIL ( 1/17): 4430es2panda

PM: chip retention via suspend:

     skip ( 1/12): am335xbonelt
     FAIL ( 7/12): 4430es2panda, 4460varsomom, 3530es3beagle,
		  3530es31beagle, 2430sdp, 5430es2uevm, 5430es2sbct54
     Pass ( 4/12): 4460pandaes, 37xxevm, 3730beaglexm, 3730es12beaglexm

PM: chip retention via dynamic idle:

     skip ( 1/12): am335xbonelt
     FAIL ( 7/12): 4430es2panda, 4460varsomom, 3530es3beagle,
		  3530es31beagle, 2430sdp, 5430es2uevm, 5430es2sbct54
     Pass ( 4/12): 4460pandaes, 37xxevm, 3730beaglexm, 3730es12beaglexm

PM: chip off (except CORE, due to errata) via suspend:

     Pass ( 1/ 1): 3730beaglexm

PM: chip off (except CORE, due to errata) via dynamic idle:

     Pass ( 1/ 1): 3730beaglexm

PM: chip off via suspend:

     FAIL ( 2/ 4): 3530es3beagle, 3530es31beagle
     Pass ( 2/ 4): 37xxevm, 3730es12beaglexm

PM: chip off via dynamic idle:

     FAIL ( 2/ 4): 3530es3beagle, 3530es31beagle
     Pass ( 2/ 4): 37xxevm, 3730es12beaglexm

Kernel warnings during PM test:

     FAIL ( 1/17): 4430es2panda

Obsolete Kconfig symbols:

     FAIL ( 1/20): multi_v7_defconfig

vmlinux object size
(delta in bytes from test_v4.1-rc2 (5ebe6afaf0057ac3eaeb98defd5456894b446d22)):

    text     data      bss    total  kernel
       0        0        0        0  omap1_defconfig
       0        0        0        0  omap1_defconfig_1510innovator_only
       0        0        0        0  omap1_defconfig_5912osk_only
   -1484       -8        0    -1492  multi_v7_defconfig
   -2108      +56        0    -2052  omap2plus_defconfig
       0        0        0        0  omap2plus_defconfig_2430sdp_only
   -6140      +56      -64    -6148  omap2plus_defconfig_cpupm
   -6204       -8        0    -6212  omap2plus_defconfig_no_pm
   -1908       -8        0    -1916  omap2plus_defconfig_omap3_4_only
   -2804       -4     +780    -2028  rmk_omap3430_ldp_allnoconfig
   -1812       -8      +64    -1756  rmk_omap3430_ldp_oldconfig

Boot-time memory difference
(delta in bytes from test_v4.1-rc2 (5ebe6afaf0057ac3eaeb98defd5456894b446d22))
avail rsrvd high freed board kconfig
-117644k -13428k . -168k 2420n800 omap2plus_defconfig_n800_only_a
-4k 4k . . 5430es2sbct54 omap2plus_defconfig
-79556k -51516k . -364k am335xbone omap2plus_defconfig_am33xx_only
-224000k -37120k . -440k am335xbonelt omap2plus_defconfig

--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

maintainer
#35 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Quoted 10 lines · Tero Kristo
Quoted 9 lines · Paul Walmsley
Quoted 7 lines · Tero Kristo

This set moves most of the OMAP2+ clock driver code under drivers/clk. There are still a couple of files under mach-omap2 folder after this set which have either unmet dependencies still (towards PRCM driver) or is currently slightly broken (some of the DVFS code for OMAP2/OMAP3.) Earlier version of this set has been posted back in March (see
http://www.spinics.net/lists/linux-omap/msg116418.html), mostly the code is the same except patches 25+ which are new.

...

Quoted 10 lines
Quoted 10 lines
Quoted 4 lines

Branch info:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-move

I can't replicate your test results. Several Kconfigs fail to build here, and many boards don't even boot.

Could you please post a copy of your boot logs?

Quoted 8 lines
Quoted 5 lines

- Paul

http://www.pwsan.com/omap/testlogs/test-tkristo-clk-move-v4.2/20150511115145/

OMAP development test results for test-tkristo-clk-move-v4.2 20150511115145

Oh hmm, I seem to have introduced a Makefile issue which breaks a couple of special builds. I just force pushed updated branch.

This one is better... the build problems are now fixed.

Quoted 24 lines

Here are the boot logs for it, I tried also single-soc builds with am3/am4/omap2/omap3/omap4/omap5/dra7:

  : Board           : Boot url
 1: am335x-evm      : PASS http://paste.ubuntu.com/11093628/
 2: am335x-evmsk    : PASS http://paste.ubuntu.com/11093629/
 3: am3517-evm      : PASS http://paste.ubuntu.com/11093630/
 4: am37x-evm       : PASS http://paste.ubuntu.com/11093632/
 5: am43x-epos-evm  : PASS http://paste.ubuntu.com/11093633/
 6: am437x-gp-evm   : PASS http://paste.ubuntu.com/11093634/
 7: am57xx-evm      : FAIL http://paste.ubuntu.com/11093635/
 8: omap3-beagle-xm : PASS http://paste.ubuntu.com/11093636/
 9: omap3-beagle    : PASS http://paste.ubuntu.com/11093637/
10: am335x-boneblack: PASS http://paste.ubuntu.com/11093638/
11: am335x-bone     : PASS http://paste.ubuntu.com/11093639/
12: craneboard      : PASS http://paste.ubuntu.com/11093640/
13: dra7xx-evm      : PASS http://paste.ubuntu.com/11093641/
14: omap3430-ldp    : PASS http://paste.ubuntu.com/11093642/
15: omap3-n900      : PASS http://paste.ubuntu.com/11093643/
16: omap5-uevm      : PASS http://paste.ubuntu.com/11093645/
17: omap4-panda-es  : PASS http://paste.ubuntu.com/11093646/
18: omap4-panda     : PASS http://paste.ubuntu.com/11093647/
19: omap2430-sdp    : PASS http://paste.ubuntu.com/11093648/
20: omap3430-sdp    : PASS http://paste.ubuntu.com/11093649/
Quoted 5 lines

21: omap4-sdp-es23plus: PASS http://paste.ubuntu.com/11093650/
TOTAL = 21 boards, Booted Boards = 20, No Boot boards = 1

AM57xx-evm boot fails as it is missing some patches from Nishanth (I think the UART mux has changed.)

But this one has the same problems as v4.1-rc1 and beyond: it still doesn't boot here on any OMAP34xx/OMAP35xx platform, nor the CM-T3517, OMAP4460 VAR-SOM-OM, or OMAP5430ES2 SBC-T54:

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/README.txt

Thanks for posting your test logs above. They don't include bootloader info, but my guess is that v4.1-rc* has some hidden bootloader dependencies where things aren't being initialized properly from the kernel.

So those should be tracked down and fixed before we stack more patches on top.

- Paul

http://www.pwsan.com/omap/testlogs/test-tkristo-clk-move-v4.2/20150512121218/

OMAP development test results for test-tkristo-clk-move-v4.2 20150512121218

Test summary
------------

Build: uImage:

    Pass ( 3/ 3): omap1_defconfig, omap1_defconfig_1510innovator_only,
		  omap1_defconfig_5912osk_only

Build: uImage+dtb:

    Pass (13/13): omap2plus_defconfig_am33xx_only/am335x-bone,
		  omap2plus_defconfig/omap4-panda,
		  omap2plus_defconfig/omap4-panda-es,
		  omap2plus_defconfig/omap4-var-som,
		  omap2plus_defconfig/omap3-evm-37xx,
		  omap2plus_defconfig_n800_only_a/omap2420-n800,
		  omap2plus_defconfig/omap2430-sdp,
		  omap2plus_defconfig/am3517-evm,
		  omap2plus_defconfig/omap3-beagle,
		  omap2plus_defconfig/omap3-beagle-xm,
		  omap2plus_defconfig/omap3-sbc-t3517,
		  omap2plus_defconfig/omap5-uevm,
		  omap2plus_defconfig/omap5-sbc-t54

Build: zImage:

    Pass (17/17): omap2plus_defconfig, omap2plus_defconfig_am33xx_only,
		  omap2plus_defconfig_n800_only_a,
		  omap2plus_defconfig_n800_multi_omap2xxx,
		  omap2plus_defconfig_2430sdp_only,
		  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
		  omap2plus_defconfig_omap2_4_only,
		  omap2plus_defconfig_omap3_4_only,
		  omap2plus_defconfig_omap5_only,
		  omap2plus_defconfig_dra7xx_only,
		  omap2plus_defconfig_am43xx_only,
		  rmk_omap3430_ldp_oldconfig,
		  rmk_omap3430_ldp_allnoconfig,
		  rmk_omap4430_sdp_oldconfig,
		  rmk_omap4430_sdp_allnoconfig, multi_v7_defconfig

Build warnings from toolchain: uImage:

    FAIL ( 3/ 3): omap1_defconfig, omap1_defconfig_1510innovator_only,
		  omap1_defconfig_5912osk_only

Build warnings from toolchain: uImage+dtb:

    (none)

Build warnings from toolchain: zImage:

    FAIL (14/17): omap2plus_defconfig, omap2plus_defconfig_am33xx_only,
		  omap2plus_defconfig_n800_only_a,
		  omap2plus_defconfig_n800_multi_omap2xxx,
		  omap2plus_defconfig_2430sdp_only,
		  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
		  omap2plus_defconfig_omap2_4_only,
		  omap2plus_defconfig_omap3_4_only,
		  omap2plus_defconfig_omap5_only,
		  omap2plus_defconfig_dra7xx_only,
		  omap2plus_defconfig_am43xx_only,
		  rmk_omap3430_ldp_oldconfig,
		  rmk_omap4430_sdp_oldconfig

Boot to userspace:

    FAIL ( 6/17): 4460varsomom, 2430sdp, 3530es3beagle, 3530es31beagle,
		  cmt3517, 5430es2sbct54
    skip ( 2/17): 5912osk, 3517evm
    Pass ( 9/17): am335xbonelt, am335xbone, 4430es2panda, 4460pandaes,
		  37xxevm, 3730beaglexm, 3730es12beaglexm, 5430es2uevm,
		  2420n800

Kernel warnings during boot to userspace:

    FAIL ( 1/17): 4430es2panda

PM: chip retention via suspend:

    FAIL ( 9/12): am335xbonelt, 4430es2panda, 4460varsomom,
		  3530es3beagle, 3530es31beagle, 3730es12beaglexm,
		  2430sdp, 5430es2uevm, 5430es2sbct54
    Pass ( 3/12): 4460pandaes, 37xxevm, 3730beaglexm

PM: chip retention via dynamic idle:

    FAIL ( 9/12): am335xbonelt, 4430es2panda, 4460varsomom,
		  3530es3beagle, 3530es31beagle, 3730es12beaglexm,
		  2430sdp, 5430es2uevm, 5430es2sbct54
    Pass ( 3/12): 4460pandaes, 37xxevm, 3730beaglexm

PM: chip off (except CORE, due to errata) via suspend:

    Pass ( 1/ 1): 3730beaglexm

PM: chip off (except CORE, due to errata) via dynamic idle:

    Pass ( 1/ 1): 3730beaglexm

PM: chip off via suspend:

    FAIL ( 3/ 4): 3530es3beagle, 3530es31beagle, 3730es12beaglexm
    Pass ( 1/ 4): 37xxevm

PM: chip off via dynamic idle:

    FAIL ( 3/ 4): 3530es3beagle, 3530es31beagle, 3730es12beaglexm
    Pass ( 1/ 4): 37xxevm

Kernel warnings during PM test:

    FAIL ( 1/17): 4430es2panda

Obsolete Kconfig symbols:

    FAIL ( 1/20): multi_v7_defconfig

vmlinux object size
(delta in bytes from test_v4.1-rc2 (5ebe6afaf0057ac3eaeb98defd5456894b446d22)):

   text     data      bss    total  kernel
      0        0        0        0  omap1_defconfig
      0        0        0        0  omap1_defconfig_1510innovator_only
      0        0        0        0  omap1_defconfig_5912osk_only
  -1492       -8        0    -1500  multi_v7_defconfig
  -2116      +56        0    -2060  omap2plus_defconfig
      0        0        0        0  omap2plus_defconfig_2430sdp_only
  -1476        0      +64    -1412  omap2plus_defconfig_am33xx_only
  -5572        0      +64    -5508  omap2plus_defconfig_am43xx_only
  -6148      +56      -64    -6156  omap2plus_defconfig_cpupm
  -5500        0      +64    -5436  omap2plus_defconfig_dra7xx_only
  -1668        0      +12    -1656  omap2plus_defconfig_n800_multi_omap2xxx
  -1636       -8      -20    -1664  omap2plus_defconfig_n800_only_a
  -6212       -8        0    -6220  omap2plus_defconfig_no_pm
  -5828        0      -64    -5892  omap2plus_defconfig_omap2_4_only
  -1916       -8        0    -1924  omap2plus_defconfig_omap3_4_only
  -1412        0        0    -1412  omap2plus_defconfig_omap5_only
  -2804       -4     +780    -2028  rmk_omap3430_ldp_allnoconfig
  -1812       -8      +64    -1756  rmk_omap3430_ldp_oldconfig
  -2332        0     +956    -1376  rmk_omap4430_sdp_allnoconfig
  -1336      +64        0    -1272  rmk_omap4430_sdp_oldconfig

Boot-time memory difference
(delta in bytes from test_v4.1-rc2 (5ebe6afaf0057ac3eaeb98defd5456894b446d22))

  avail  rsrvd   high  freed  board          kconfig
    -4k     4k      .      .  5430es2sbct54  omap2plus_defconfig
      .      .      .     4k  am335xbone     omap2plus_defconfig_am33xx_only
#36 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Quoted 72 lines · Paul Walmsley
Quoted 10 lines · Tero Kristo
Quoted 9 lines · Paul Walmsley
Quoted 7 lines · Tero Kristo

This set moves most of the OMAP2+ clock driver code under drivers/clk. There are still a couple of files under mach-omap2 folder after this set which have either unmet dependencies still (towards PRCM driver) or is currently slightly broken (some of the DVFS code for OMAP2/OMAP3.) Earlier version of this set has been posted back in March (see
http://www.spinics.net/lists/linux-omap/msg116418.html), mostly the code is the same except patches 25+ which are new.

...

Quoted 10 lines
Quoted 10 lines
Quoted 4 lines

Branch info:
- tree: https://github.com/t-kristo/linux-pm.git
- branch: for-4.2/ti-clk-move

I can't replicate your test results. Several Kconfigs fail to build here, and many boards don't even boot.

Could you please post a copy of your boot logs?

Quoted 8 lines
Quoted 5 lines

- Paul

http://www.pwsan.com/omap/testlogs/test-tkristo-clk-move-v4.2/20150511115145/

OMAP development test results for test-tkristo-clk-move-v4.2 20150511115145

Oh hmm, I seem to have introduced a Makefile issue which breaks a couple of special builds. I just force pushed updated branch.

This one is better... the build problems are now fixed.

Quoted 24 lines

Here are the boot logs for it, I tried also single-soc builds with am3/am4/omap2/omap3/omap4/omap5/dra7:

   : Board           : Boot url
  1: am335x-evm      : PASS http://paste.ubuntu.com/11093628/
  2: am335x-evmsk    : PASS http://paste.ubuntu.com/11093629/
  3: am3517-evm      : PASS http://paste.ubuntu.com/11093630/
  4: am37x-evm       : PASS http://paste.ubuntu.com/11093632/
  5: am43x-epos-evm  : PASS http://paste.ubuntu.com/11093633/
  6: am437x-gp-evm   : PASS http://paste.ubuntu.com/11093634/
  7: am57xx-evm      : FAIL http://paste.ubuntu.com/11093635/
  8: omap3-beagle-xm : PASS http://paste.ubuntu.com/11093636/
  9: omap3-beagle    : PASS http://paste.ubuntu.com/11093637/
10: am335x-boneblack: PASS http://paste.ubuntu.com/11093638/
11: am335x-bone     : PASS http://paste.ubuntu.com/11093639/
12: craneboard      : PASS http://paste.ubuntu.com/11093640/
13: dra7xx-evm      : PASS http://paste.ubuntu.com/11093641/
14: omap3430-ldp    : PASS http://paste.ubuntu.com/11093642/
15: omap3-n900      : PASS http://paste.ubuntu.com/11093643/
16: omap5-uevm      : PASS http://paste.ubuntu.com/11093645/
17: omap4-panda-es  : PASS http://paste.ubuntu.com/11093646/
18: omap4-panda     : PASS http://paste.ubuntu.com/11093647/
19: omap2430-sdp    : PASS http://paste.ubuntu.com/11093648/
20: omap3430-sdp    : PASS http://paste.ubuntu.com/11093649/
Quoted 5 lines

21: omap4-sdp-es23plus: PASS http://paste.ubuntu.com/11093650/
TOTAL = 21 boards, Booted Boards = 20, No Boot boards = 1

AM57xx-evm boot fails as it is missing some patches from Nishanth (I think the UART mux has changed.)

But this one has the same problems as v4.1-rc1 and beyond: it still doesn't boot here on any OMAP34xx/OMAP35xx platform, nor the CM-T3517, OMAP4460 VAR-SOM-OM, or OMAP5430ES2 SBC-T54:

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/README.txt

Quoted 7 lines

Thanks for posting your test logs above. They don't include bootloader info, but my guess is that v4.1-rc* has some hidden bootloader dependencies where things aren't being initialized properly from the kernel.

So those should be tracked down and fixed before we stack more patches on top.

I clipped the boot-loader traces as they contain lots of noise from the test-automation system.

Looking at the farm traces, I see this on the omap3 boards:

beagleboard-vanilla.txt:ver=U-Boot 2014.04-00071-g8543283 (Apr 22 2014 - 15:49:50)

beagle-xm.txt:U-Boot 2014.10-00004-g9ade0ab-dirty (Dec 16 2014 - 13:40:24)

craneboard.txt:U-Boot 2009.11-00005-ge83d2db (Dec 07 2010 - 11:55:34)

ldp.txt:U-Boot 2014.04-00071-g8543283-dirty (Apr 25 2014 - 14:59:48)

n900.txt:U-Boot 2014.04-00073-g4fa5b9e (Apr 22 2014 - 14:37:10)

sdp3430.txt:U-Boot 2009.11-rc1-00485-g7d1e865 (Nov 09 2009 - 11:21:55)

Maybe some DTB issues? When did you update your DTB files?

-Tero

Quoted 144 lines

- Paul

http://www.pwsan.com/omap/testlogs/test-tkristo-clk-move-v4.2/20150512121218/

OMAP development test results for test-tkristo-clk-move-v4.2 20150512121218

Test summary
------------

Build: uImage:

     Pass ( 3/ 3): omap1_defconfig, omap1_defconfig_1510innovator_only,
		  omap1_defconfig_5912osk_only

Build: uImage+dtb:

     Pass (13/13): omap2plus_defconfig_am33xx_only/am335x-bone,
		  omap2plus_defconfig/omap4-panda,
		  omap2plus_defconfig/omap4-panda-es,
		  omap2plus_defconfig/omap4-var-som,
		  omap2plus_defconfig/omap3-evm-37xx,
		  omap2plus_defconfig_n800_only_a/omap2420-n800,
		  omap2plus_defconfig/omap2430-sdp,
		  omap2plus_defconfig/am3517-evm,
		  omap2plus_defconfig/omap3-beagle,
		  omap2plus_defconfig/omap3-beagle-xm,
		  omap2plus_defconfig/omap3-sbc-t3517,
		  omap2plus_defconfig/omap5-uevm,
		  omap2plus_defconfig/omap5-sbc-t54

Build: zImage:

     Pass (17/17): omap2plus_defconfig, omap2plus_defconfig_am33xx_only,
		  omap2plus_defconfig_n800_only_a,
		  omap2plus_defconfig_n800_multi_omap2xxx,
		  omap2plus_defconfig_2430sdp_only,
		  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
		  omap2plus_defconfig_omap2_4_only,
		  omap2plus_defconfig_omap3_4_only,
		  omap2plus_defconfig_omap5_only,
		  omap2plus_defconfig_dra7xx_only,
		  omap2plus_defconfig_am43xx_only,
		  rmk_omap3430_ldp_oldconfig,
		  rmk_omap3430_ldp_allnoconfig,
		  rmk_omap4430_sdp_oldconfig,
		  rmk_omap4430_sdp_allnoconfig, multi_v7_defconfig

Build warnings from toolchain: uImage:

     FAIL ( 3/ 3): omap1_defconfig, omap1_defconfig_1510innovator_only,
		  omap1_defconfig_5912osk_only

Build warnings from toolchain: uImage+dtb:

     (none)

Build warnings from toolchain: zImage:

     FAIL (14/17): omap2plus_defconfig, omap2plus_defconfig_am33xx_only,
		  omap2plus_defconfig_n800_only_a,
		  omap2plus_defconfig_n800_multi_omap2xxx,
		  omap2plus_defconfig_2430sdp_only,
		  omap2plus_defconfig_cpupm, omap2plus_defconfig_no_pm,
		  omap2plus_defconfig_omap2_4_only,
		  omap2plus_defconfig_omap3_4_only,
		  omap2plus_defconfig_omap5_only,
		  omap2plus_defconfig_dra7xx_only,
		  omap2plus_defconfig_am43xx_only,
		  rmk_omap3430_ldp_oldconfig,
		  rmk_omap4430_sdp_oldconfig

Boot to userspace:

     FAIL ( 6/17): 4460varsomom, 2430sdp, 3530es3beagle, 3530es31beagle,
		  cmt3517, 5430es2sbct54
     skip ( 2/17): 5912osk, 3517evm
     Pass ( 9/17): am335xbonelt, am335xbone, 4430es2panda, 4460pandaes,
		  37xxevm, 3730beaglexm, 3730es12beaglexm, 5430es2uevm,
		  2420n800

Kernel warnings during boot to userspace:

     FAIL ( 1/17): 4430es2panda

PM: chip retention via suspend:

     FAIL ( 9/12): am335xbonelt, 4430es2panda, 4460varsomom,
		  3530es3beagle, 3530es31beagle, 3730es12beaglexm,
		  2430sdp, 5430es2uevm, 5430es2sbct54
     Pass ( 3/12): 4460pandaes, 37xxevm, 3730beaglexm

PM: chip retention via dynamic idle:

     FAIL ( 9/12): am335xbonelt, 4430es2panda, 4460varsomom,
		  3530es3beagle, 3530es31beagle, 3730es12beaglexm,
		  2430sdp, 5430es2uevm, 5430es2sbct54
     Pass ( 3/12): 4460pandaes, 37xxevm, 3730beaglexm

PM: chip off (except CORE, due to errata) via suspend:

     Pass ( 1/ 1): 3730beaglexm

PM: chip off (except CORE, due to errata) via dynamic idle:

     Pass ( 1/ 1): 3730beaglexm

PM: chip off via suspend:

     FAIL ( 3/ 4): 3530es3beagle, 3530es31beagle, 3730es12beaglexm
     Pass ( 1/ 4): 37xxevm

PM: chip off via dynamic idle:

     FAIL ( 3/ 4): 3530es3beagle, 3530es31beagle, 3730es12beaglexm
     Pass ( 1/ 4): 37xxevm

Kernel warnings during PM test:

     FAIL ( 1/17): 4430es2panda

Obsolete Kconfig symbols:

     FAIL ( 1/20): multi_v7_defconfig

vmlinux object size
(delta in bytes from test_v4.1-rc2 (5ebe6afaf0057ac3eaeb98defd5456894b446d22)):

    text     data      bss    total  kernel
       0        0        0        0  omap1_defconfig
       0        0        0        0  omap1_defconfig_1510innovator_only
       0        0        0        0  omap1_defconfig_5912osk_only
   -1492       -8        0    -1500  multi_v7_defconfig
   -2116      +56        0    -2060  omap2plus_defconfig
       0        0        0        0  omap2plus_defconfig_2430sdp_only
   -1476        0      +64    -1412  omap2plus_defconfig_am33xx_only
   -5572        0      +64    -5508  omap2plus_defconfig_am43xx_only
   -6148      +56      -64    -6156  omap2plus_defconfig_cpupm
   -5500        0      +64    -5436  omap2plus_defconfig_dra7xx_only
   -1668        0      +12    -1656  omap2plus_defconfig_n800_multi_omap2xxx
   -1636       -8      -20    -1664  omap2plus_defconfig_n800_only_a
   -6212       -8        0    -6220  omap2plus_defconfig_no_pm
   -5828        0      -64    -5892  omap2plus_defconfig_omap2_4_only
   -1916       -8        0    -1924  omap2plus_defconfig_omap3_4_only
   -1412        0        0    -1412  omap2plus_defconfig_omap5_only
   -2804       -4     +780    -2028  rmk_omap3430_ldp_allnoconfig
   -1812       -8      +64    -1756  rmk_omap3430_ldp_oldconfig
   -2332        0     +956    -1376  rmk_omap4430_sdp_allnoconfig
   -1336      +64        0    -1272  rmk_omap4430_sdp_oldconfig

Boot-time memory difference
(delta in bytes from test_v4.1-rc2 (5ebe6afaf0057ac3eaeb98defd5456894b446d22))

   avail  rsrvd   high  freed  board          kconfig
     -4k     4k      .      .  5430es2sbct54  omap2plus_defconfig
       .      .      .     4k  am335xbone     omap2plus_defconfig_am33xx_only
maintainer
#37 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Quoted 12 lines · Tero Kristo

I clipped the boot-loader traces as they contain lots of noise from the test-automation system.

Looking at the farm traces, I see this on the omap3 boards:

beagleboard-vanilla.txt:ver=U-Boot 2014.04-00071-g8543283 (Apr 22 2014 - 15:49:50)

beagle-xm.txt:U-Boot 2014.10-00004-g9ade0ab-dirty (Dec 16 2014 - 13:40:24)

craneboard.txt:U-Boot 2009.11-00005-ge83d2db (Dec 07 2010 - 11:55:34)

Quoted 7 lines

ldp.txt:U-Boot 2014.04-00071-g8543283-dirty (Apr 25 2014 - 14:59:48)

n900.txt:U-Boot 2014.04-00073-g4fa5b9e (Apr 22 2014 - 14:37:10)

sdp3430.txt:U-Boot 2009.11-rc1-00485-g7d1e865 (Nov 09 2009 - 11:21:55)

Maybe some DTB issues? When did you update your DTB files?

For all of the uImage+DTB boots, the DTB files in use follow the kernel version:

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/dtbs/

which are then subsequently combined to produce:

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/dtcat/

So, using the OMAP35xx Beagle as an example, you can prove to yourself that the current DTB is in use by observing that U-boot is loading a combined uImage+DTB file of 3495180 bytes from here:

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/boot/3530es3beagle/3530es3beagle_log.txt

and comparing that with the size of this file (3495180 bytes):

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/dtcat/omap2plus_defconfig/uImage-dtb.omap3-beagle

and observing that this file size is the sum of the DTB file size (63180 bytes):

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/dtbs/omap3-beagle.dtb

and the zImage file size (3431936 bytes):

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/build_z/omap2plus_defconfig/zImage

and the 64 byte uImage header.

The only board that I suspect may be using an old DTB is the 4460 VAR-SOM-OM.

- Paul

#38 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Quoted 50 lines · Paul Walmsley
Quoted 12 lines · Tero Kristo

I clipped the boot-loader traces as they contain lots of noise from the test-automation system.

Looking at the farm traces, I see this on the omap3 boards:

beagleboard-vanilla.txt:ver=U-Boot 2014.04-00071-g8543283 (Apr 22 2014 - 15:49:50)

beagle-xm.txt:U-Boot 2014.10-00004-g9ade0ab-dirty (Dec 16 2014 - 13:40:24)

craneboard.txt:U-Boot 2009.11-00005-ge83d2db (Dec 07 2010 - 11:55:34)

Quoted 7 lines

ldp.txt:U-Boot 2014.04-00071-g8543283-dirty (Apr 25 2014 - 14:59:48)

n900.txt:U-Boot 2014.04-00073-g4fa5b9e (Apr 22 2014 - 14:37:10)

sdp3430.txt:U-Boot 2009.11-rc1-00485-g7d1e865 (Nov 09 2009 - 11:21:55)

Maybe some DTB issues? When did you update your DTB files?

For all of the uImage+DTB boots, the DTB files in use follow the kernel version:

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/dtbs/

which are then subsequently combined to produce:

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/dtcat/

So, using the OMAP35xx Beagle as an example, you can prove to yourself that the current DTB is in use by observing that U-boot is loading a combined uImage+DTB file of 3495180 bytes from here:

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/boot/3530es3beagle/3530es3beagle_log.txt

and comparing that with the size of this file (3495180 bytes):

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/dtcat/omap2plus_defconfig/uImage-dtb.omap3-beagle

and observing that this file size is the sum of the DTB file size (63180 bytes):

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/dtbs/omap3-beagle.dtb

and the zImage file size (3431936 bytes):

http://www.pwsan.com/omap/testlogs/test_v4.1-rc1/20150426200156/build_z/omap2plus_defconfig/zImage

Quoted 9 lines

and the 64 byte uImage header.

The only board that I suspect may be using an old DTB is the 4460 VAR-SOM-OM.

- Paul

Any news on this? As noted previously, I am not able to reproduce the issue you are seeing currently, can you give DEBUG_LL a shot?

-Tero

maintainer
#39 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Quoted 2 lines · Tero Kristo

Any news on this? As noted previously, I am not able to reproduce the issue you are seeing currently, can you give DEBUG_LL a shot?

Yeah I just bisected it, it was caused by this:

commit cc4a5fe972ad7834e8662b49b3a5fdb597e9e15e

Author: Felipe Balbi <[email protected]>
Date:   Fri Jan 30 11:18:56 2015 -0600

arm: config: omap2plus_defconfig: switch over to LZMA compression

LZMA compression makes about 33% smaller zImage with just a slight extra decompression time.

Before this patch, zImage built with o2+_dc
is 4.5MiB and after it's about 3.3MiB.

and the timeouts on the testbed being set to fail if a kernel takes longer than five seconds to start. Seems that the part about a "slight extra decompression time" probably only applies to relatively recent chips.

- Paul

#40 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Quoted 24 lines · Paul Walmsley
Quoted 2 lines · Tero Kristo

Any news on this? As noted previously, I am not able to reproduce the issue you are seeing currently, can you give DEBUG_LL a shot?

Yeah I just bisected it, it was caused by this:

commit cc4a5fe972ad7834e8662b49b3a5fdb597e9e15e

Author: Felipe Balbi <[email protected]>
Date:   Fri Jan 30 11:18:56 2015 -0600

arm: config: omap2plus_defconfig: switch over to LZMA compression

LZMA compression makes about 33% smaller zImage with just a slight extra decompression time.

Before this patch, zImage built with o2+_dc
is 4.5MiB and after it's about 3.3MiB.

Quoted 7 lines

and the timeouts on the testbed being set to fail if a kernel takes longer than five seconds to start. Seems that the part about a "slight extra decompression time" probably only applies to relatively recent chips.

- Paul

Oh, so this explains why I was thinking it took very long time to boot the recent kernels also. The boot lag is clearly noticeable without any measurement. I wonder if we should probably revert this patch.

-Tero

#41 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Quoted 32 lines · Tero Kristo
Quoted 31 lines · Paul Walmsley
Quoted 3 lines · Tero Kristo

Any news on this? As noted previously, I am not able to reproduce the issue
you are seeing currently, can you give DEBUG_LL a shot?

Yeah I just bisected it, it was caused by this:

commit cc4a5fe972ad7834e8662b49b3a5fdb597e9e15e

Author: Felipe Balbi <[email protected]>
Date:   Fri Jan 30 11:18:56 2015 -0600

arm: config: omap2plus_defconfig: switch over to LZMA compression

LZMA compression makes about 33% smaller zImage with just a slight extra decompression time.

Before this patch, zImage built with o2+_dc
is 4.5MiB and after it's about 3.3MiB.

and the timeouts on the testbed being set to fail if a kernel takes longer
than five seconds to start. Seems that the part about a "slight extra decompression time" probably only applies to relatively recent chips.

Quoted 6 lines
Quoted 2 lines

- Paul

Oh, so this explains why I was thinking it took very long time to boot the recent kernels also. The boot lag is clearly noticeable without any measurement. I wonder if we should probably revert this patch.

we already have issues with zImage size bloating up and running headlong into dtb - esp on platforms like N900. Felipe spend quiet some time getting things into a manageable size here -> loosing 33% sounds like bad idea to me :(

Signature · 2 lines
Regards,
Nishanth Menon
maintainer
#42 lore raw

v2 cover ARM: OMAP2+: clock code migration to drivers/clk/ti

Quoted 36 lines · Nishanth Menon
Quoted 35 lines · Tero Kristo
Quoted 33 lines · Paul Walmsley
Quoted 3 lines · Tero Kristo

Any news on this? As noted previously, I am not able to reproduce the issue
you are seeing currently, can you give DEBUG_LL a shot?

Yeah I just bisected it, it was caused by this:

commit cc4a5fe972ad7834e8662b49b3a5fdb597e9e15e

Author: Felipe Balbi <[email protected]>
Date:   Fri Jan 30 11:18:56 2015 -0600

arm: config: omap2plus_defconfig: switch over to LZMA compression

LZMA compression makes about 33% smaller zImage with just a slight extra decompression time.

Before this patch, zImage built with o2+_dc
is 4.5MiB and after it's about 3.3MiB.

and the timeouts on the testbed being set to fail if a kernel takes longer
than five seconds to start. Seems that the part about a "slight extra decompression time" probably only applies to relatively recent chips.

- Paul

Quoted 8 lines
Quoted 3 lines

Oh, so this explains why I was thinking it took very long time to boot the recent kernels also. The boot lag is clearly noticeable without any measurement. I wonder if we should probably revert this patch.

we already have issues with zImage size bloating up and running headlong into dtb - esp on platforms like N900. Felipe spend quiet some time getting things into a manageable size here -> loosing 33% sounds like bad idea to me :(

If it affects people using the slower 34xx systems we should probably revert it though. Or make the uncompress somehow faster :)

Regards,

Tony