All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Fix build on multi_v7_defconfig
@ 2018-03-20  8:00 Sam Protsenko
  2018-03-20  8:00 ` [PATCH 1/3] ARM: OMAP2+: clockdomain: add usecounting support to autoidle APIs Sam Protsenko
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Sam Protsenko @ 2018-03-20  8:00 UTC (permalink / raw)
  To: stable
  Cc: Greg Kroah-Hartman, Praneeth Bajjuri, Sekhar Nori, Roger Quadros,
	Tero Kristo, Milosz Wasilewski, Dan Rue

Recent patches broke build on multi_v7_defconfig (ARM), on
stable-rc/linux-4.4.y branch. The build error as follows:

    arch/arm/mach-omap2/omap_hwmod_7xx_data.c:2243:12: error:
    'HWMOD_CLKDM_NOAUTO' undeclared here (not in a function)
      .flags  = HWMOD_CLKDM_NOAUTO,
                ^~~~~~~~~~~~~~~~~~

Pull in missing dependency patches to fix that build error.

1. "Allow modules to disable HW_AUTO": this commit is needed to fix
   build error
2. "add usecounting support to autoidle APIs": this commit is a
   dependency for 1
3. "provide space for more hwmod flags": this is also a dependency for 1

Tested on TI BeagleBoard X15.


Roger Quadros (1):
  ARM: OMAP2+ hwmod: Allow modules to disable HW_AUTO

Sekhar Nori (1):
  ARM: OMAP2+: omap_hwmod: provide space for more hwmod flags

Tero Kristo (1):
  ARM: OMAP2+: clockdomain: add usecounting support to autoidle APIs

 arch/arm/mach-omap2/clockdomain.c | 36 ++++++++++++++++++++++++------------
 arch/arm/mach-omap2/clockdomain.h |  2 ++
 arch/arm/mach-omap2/cpuidle44xx.c |  2 +-
 arch/arm/mach-omap2/omap-smp.c    |  2 +-
 arch/arm/mach-omap2/omap_hwmod.c  | 32 +++++++++++++++++---------------
 arch/arm/mach-omap2/omap_hwmod.h  |  7 ++++++-
 arch/arm/mach-omap2/pm.c          |  8 +-------
 arch/arm/mach-omap2/powerdomain.c | 20 ++++++--------------
 8 files changed, 58 insertions(+), 51 deletions(-)

-- 
2.16.1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] ARM: OMAP2+: clockdomain: add usecounting support to autoidle APIs
  2018-03-20  8:00 [PATCH 0/3] Fix build on multi_v7_defconfig Sam Protsenko
@ 2018-03-20  8:00 ` Sam Protsenko
  2018-03-20  8:00 ` [PATCH 2/3] ARM: OMAP2+ hwmod: Allow modules to disable HW_AUTO Sam Protsenko
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Sam Protsenko @ 2018-03-20  8:00 UTC (permalink / raw)
  To: stable
  Cc: Greg Kroah-Hartman, Praneeth Bajjuri, Sekhar Nori, Roger Quadros,
	Tero Kristo, Milosz Wasilewski, Dan Rue

From: Tero Kristo <t-kristo@ti.com>

commit 1d9a5425654de6bb141c7ca1d5dde120ee8c5430 upstream.

The previous implementation was racy in many locations, where the current
status of the clockdomain was read out, some operations were executed,
and the previous status info was used afterwards to decide next state
for the clockdomain. Instead, fix the implementation of the allow_idle /
deny_idle APIs to properly have usecounting support. This allows clean
handling internally within the clockdomain core, and simplifies the
usage also within hwmod.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
---
 arch/arm/mach-omap2/clockdomain.c | 36 ++++++++++++++++++++++++------------
 arch/arm/mach-omap2/clockdomain.h |  2 ++
 arch/arm/mach-omap2/cpuidle44xx.c |  2 +-
 arch/arm/mach-omap2/omap-smp.c    |  2 +-
 arch/arm/mach-omap2/omap_hwmod.c  | 27 ++++++++++++---------------
 arch/arm/mach-omap2/pm.c          |  8 +-------
 arch/arm/mach-omap2/powerdomain.c | 20 ++++++--------------
 7 files changed, 47 insertions(+), 50 deletions(-)

diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c
index 2da3b5ec010c..b79b1ca9aee9 100644
--- a/arch/arm/mach-omap2/clockdomain.c
+++ b/arch/arm/mach-omap2/clockdomain.c
@@ -465,10 +465,7 @@ int clkdm_complete_init(void)
 		return -EACCES;
 
 	list_for_each_entry(clkdm, &clkdm_list, node) {
-		if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP)
-			clkdm_wakeup(clkdm);
-		else if (clkdm->flags & CLKDM_CAN_DISABLE_AUTO)
-			clkdm_deny_idle(clkdm);
+		clkdm_deny_idle(clkdm);
 
 		_resolve_clkdm_deps(clkdm, clkdm->wkdep_srcs);
 		clkdm_clear_all_wkdeps(clkdm);
@@ -925,11 +922,20 @@ void clkdm_allow_idle_nolock(struct clockdomain *clkdm)
 	if (!clkdm)
 		return;
 
-	if (!(clkdm->flags & CLKDM_CAN_ENABLE_AUTO)) {
-		pr_debug("clock: %s: automatic idle transitions cannot be enabled\n",
-			 clkdm->name);
+	if (!WARN_ON(!clkdm->forcewake_count))
+		clkdm->forcewake_count--;
+
+	if (clkdm->forcewake_count)
+		return;
+
+	if (!clkdm->usecount && (clkdm->flags & CLKDM_CAN_FORCE_SLEEP))
+		clkdm_sleep_nolock(clkdm);
+
+	if (!(clkdm->flags & CLKDM_CAN_ENABLE_AUTO))
+		return;
+
+	if (clkdm->flags & CLKDM_MISSING_IDLE_REPORTING)
 		return;
-	}
 
 	if (!arch_clkdm || !arch_clkdm->clkdm_allow_idle)
 		return;
@@ -974,11 +980,17 @@ void clkdm_deny_idle_nolock(struct clockdomain *clkdm)
 	if (!clkdm)
 		return;
 
-	if (!(clkdm->flags & CLKDM_CAN_DISABLE_AUTO)) {
-		pr_debug("clockdomain: %s: automatic idle transitions cannot be disabled\n",
-			 clkdm->name);
+	if (clkdm->forcewake_count++)
+		return;
+
+	if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP)
+		clkdm_wakeup_nolock(clkdm);
+
+	if (!(clkdm->flags & CLKDM_CAN_DISABLE_AUTO))
+		return;
+
+	if (clkdm->flags & CLKDM_MISSING_IDLE_REPORTING)
 		return;
-	}
 
 	if (!arch_clkdm || !arch_clkdm->clkdm_deny_idle)
 		return;
diff --git a/arch/arm/mach-omap2/clockdomain.h b/arch/arm/mach-omap2/clockdomain.h
index 2c398ce1a0f2..24667a5a9dc0 100644
--- a/arch/arm/mach-omap2/clockdomain.h
+++ b/arch/arm/mach-omap2/clockdomain.h
@@ -114,6 +114,7 @@ struct omap_hwmod;
  * @wkdep_srcs: Clockdomains that can be told to wake this powerdomain up
  * @sleepdep_srcs: Clockdomains that can be told to keep this clkdm from inact
  * @usecount: Usecount tracking
+ * @forcewake_count: Usecount for forcing the domain active
  * @node: list_head to link all clockdomains together
  *
  * @prcm_partition should be a macro from mach-omap2/prcm44xx.h (OMAP4 only)
@@ -138,6 +139,7 @@ struct clockdomain {
 	struct clkdm_dep *wkdep_srcs;
 	struct clkdm_dep *sleepdep_srcs;
 	int usecount;
+	int forcewake_count;
 	struct list_head node;
 };
 
diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
index 4b8e9f4d59ea..fa138d4032b6 100644
--- a/arch/arm/mach-omap2/cpuidle44xx.c
+++ b/arch/arm/mach-omap2/cpuidle44xx.c
@@ -140,7 +140,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
 		    mpuss_can_lose_context)
 			gic_dist_disable();
 
-		clkdm_wakeup(cpu_clkdm[1]);
+		clkdm_deny_idle(cpu_clkdm[1]);
 		omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON);
 		clkdm_allow_idle(cpu_clkdm[1]);
 
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
index 79e1f876d1c9..a1c02193d914 100644
--- a/arch/arm/mach-omap2/omap-smp.c
+++ b/arch/arm/mach-omap2/omap-smp.c
@@ -143,7 +143,7 @@ static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle)
 		 * Ensure that CPU power state is set to ON to avoid CPU
 		 * powerdomain transition on wfi
 		 */
-		clkdm_wakeup_nolock(cpu1_clkdm);
+		clkdm_deny_idle_nolock(cpu1_clkdm);
 		pwrdm_set_next_pwrst(cpu1_pwrdm, PWRDM_POWER_ON);
 		clkdm_allow_idle_nolock(cpu1_clkdm);
 
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
index 147c90e70b2e..c1c0fda2f71e 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -1678,7 +1678,6 @@ static int _deassert_hardreset(struct omap_hwmod *oh, const char *name)
 {
 	struct omap_hwmod_rst_info ohri;
 	int ret = -EINVAL;
-	int hwsup = 0;
 
 	if (!oh)
 		return -EINVAL;
@@ -1696,7 +1695,7 @@ static int _deassert_hardreset(struct omap_hwmod *oh, const char *name)
 		 * might not be completed. The clockdomain can be set
 		 * in HW_AUTO only when the module become ready.
 		 */
-		hwsup = clkdm_in_hwsup(oh->clkdm);
+		clkdm_deny_idle(oh->clkdm);
 		ret = clkdm_hwmod_enable(oh->clkdm, oh);
 		if (ret) {
 			WARN(1, "omap_hwmod: %s: could not enable clockdomain %s: %d\n",
@@ -1723,8 +1722,7 @@ static int _deassert_hardreset(struct omap_hwmod *oh, const char *name)
 		 * Set the clockdomain to HW_AUTO, assuming that the
 		 * previous state was HW_AUTO.
 		 */
-		if (hwsup)
-			clkdm_allow_idle(oh->clkdm);
+		clkdm_allow_idle(oh->clkdm);
 
 		clkdm_hwmod_disable(oh->clkdm, oh);
 	}
@@ -2078,7 +2076,6 @@ static int _enable_preprogram(struct omap_hwmod *oh)
 static int _enable(struct omap_hwmod *oh)
 {
 	int r;
-	int hwsup = 0;
 
 	pr_debug("omap_hwmod: %s: enabling\n", oh->name);
 
@@ -2138,8 +2135,7 @@ static int _enable(struct omap_hwmod *oh)
 		 * completely the module. The clockdomain can be set
 		 * in HW_AUTO only when the module become ready.
 		 */
-		hwsup = clkdm_in_hwsup(oh->clkdm) &&
-			!clkdm_missing_idle_reporting(oh->clkdm);
+		clkdm_deny_idle(oh->clkdm);
 		r = clkdm_hwmod_enable(oh->clkdm, oh);
 		if (r) {
 			WARN(1, "omap_hwmod: %s: could not enable clockdomain %s: %d\n",
@@ -2159,14 +2155,10 @@ static int _enable(struct omap_hwmod *oh)
 
 	r = (soc_ops.wait_target_ready) ? soc_ops.wait_target_ready(oh) :
 		-EINVAL;
-	if (!r) {
-		/*
-		 * Set the clockdomain to HW_AUTO only if the target is ready,
-		 * assuming that the previous state was HW_AUTO
-		 */
-		if (oh->clkdm && hwsup)
-			clkdm_allow_idle(oh->clkdm);
+	if (oh->clkdm)
+		clkdm_allow_idle(oh->clkdm);
 
+	if (!r) {
 		oh->_state = _HWMOD_STATE_ENABLED;
 
 		/* Access the sysconfig only if the target is ready */
@@ -2220,6 +2212,9 @@ static int _idle(struct omap_hwmod *oh)
 		_idle_sysc(oh);
 	_del_initiator_dep(oh, mpu_oh);
 
+	if (oh->clkdm)
+		clkdm_deny_idle(oh->clkdm);
+
 	if (oh->flags & HWMOD_BLOCK_WFI)
 		cpu_idle_poll_ctrl(false);
 	if (soc_ops.disable_module)
@@ -2232,8 +2227,10 @@ static int _idle(struct omap_hwmod *oh)
 	 * transition to complete properly.
 	 */
 	_disable_clocks(oh);
-	if (oh->clkdm)
+	if (oh->clkdm) {
+		clkdm_allow_idle(oh->clkdm);
 		clkdm_hwmod_disable(oh->clkdm, oh);
+	}
 
 	/* Mux pins for device idle if populated */
 	if (oh->mux && oh->mux->pads_dynamic) {
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
index 58920bc8807b..644e0fedc8eb 100644
--- a/arch/arm/mach-omap2/pm.c
+++ b/arch/arm/mach-omap2/pm.c
@@ -110,13 +110,7 @@ static void __init omap2_init_processor_devices(void)
 
 int __init omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused)
 {
-	/* XXX The usecount test is racy */
-	if ((clkdm->flags & CLKDM_CAN_ENABLE_AUTO) &&
-	    !(clkdm->flags & CLKDM_MISSING_IDLE_REPORTING))
-		clkdm_allow_idle(clkdm);
-	else if (clkdm->flags & CLKDM_CAN_FORCE_SLEEP &&
-		 clkdm->usecount == 0)
-		clkdm_sleep(clkdm);
+	clkdm_allow_idle(clkdm);
 	return 0;
 }
 
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c
index 78af6d8cf2e2..be7a9761ab3f 100644
--- a/arch/arm/mach-omap2/powerdomain.c
+++ b/arch/arm/mach-omap2/powerdomain.c
@@ -222,7 +222,6 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused)
  * @pwrdm: struct powerdomain * to operate on
  * @curr_pwrst: current power state of @pwrdm
  * @pwrst: power state to switch to
- * @hwsup: ptr to a bool to return whether the clkdm is hardware-supervised
  *
  * Determine whether the powerdomain needs to be turned on before
  * attempting to switch power states.  Called by
@@ -233,8 +232,7 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused)
  * "Types of sleep_switch" comment above).
  */
 static u8 _pwrdm_save_clkdm_state_and_activate(struct powerdomain *pwrdm,
-					       u8 curr_pwrst, u8 pwrst,
-					       bool *hwsup)
+					       u8 curr_pwrst, u8 pwrst)
 {
 	u8 sleep_switch;
 
@@ -244,8 +242,7 @@ static u8 _pwrdm_save_clkdm_state_and_activate(struct powerdomain *pwrdm,
 		    arch_pwrdm->pwrdm_set_lowpwrstchange) {
 			sleep_switch = LOWPOWERSTATE_SWITCH;
 		} else {
-			*hwsup = clkdm_in_hwsup(pwrdm->pwrdm_clkdms[0]);
-			clkdm_wakeup_nolock(pwrdm->pwrdm_clkdms[0]);
+			clkdm_deny_idle_nolock(pwrdm->pwrdm_clkdms[0]);
 			sleep_switch = FORCEWAKEUP_SWITCH;
 		}
 	} else {
@@ -259,7 +256,6 @@ static u8 _pwrdm_save_clkdm_state_and_activate(struct powerdomain *pwrdm,
  * _pwrdm_restore_clkdm_state - restore the clkdm hwsup state after pwrst change
  * @pwrdm: struct powerdomain * to operate on
  * @sleep_switch: return value from _pwrdm_save_clkdm_state_and_activate()
- * @hwsup: should @pwrdm's first clockdomain be set to hardware-supervised mode?
  *
  * Restore the clockdomain state perturbed by
  * _pwrdm_save_clkdm_state_and_activate(), and call the power state
@@ -270,14 +266,11 @@ static u8 _pwrdm_save_clkdm_state_and_activate(struct powerdomain *pwrdm,
  * software-supervised sleep.  No return value.
  */
 static void _pwrdm_restore_clkdm_state(struct powerdomain *pwrdm,
-				       u8 sleep_switch, bool hwsup)
+				       u8 sleep_switch)
 {
 	switch (sleep_switch) {
 	case FORCEWAKEUP_SWITCH:
-		if (hwsup)
-			clkdm_allow_idle_nolock(pwrdm->pwrdm_clkdms[0]);
-		else
-			clkdm_sleep_nolock(pwrdm->pwrdm_clkdms[0]);
+		clkdm_allow_idle_nolock(pwrdm->pwrdm_clkdms[0]);
 		break;
 	case LOWPOWERSTATE_SWITCH:
 		if (pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE &&
@@ -1092,7 +1085,6 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst)
 	u8 next_pwrst, sleep_switch;
 	int curr_pwrst;
 	int ret = 0;
-	bool hwsup = false;
 
 	if (!pwrdm || IS_ERR(pwrdm))
 		return -EINVAL;
@@ -1116,14 +1108,14 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst)
 		goto osps_out;
 
 	sleep_switch = _pwrdm_save_clkdm_state_and_activate(pwrdm, curr_pwrst,
-							    pwrst, &hwsup);
+							    pwrst);
 
 	ret = pwrdm_set_next_pwrst(pwrdm, pwrst);
 	if (ret)
 		pr_err("%s: unable to set power state of powerdomain: %s\n",
 		       __func__, pwrdm->name);
 
-	_pwrdm_restore_clkdm_state(pwrdm, sleep_switch, hwsup);
+	_pwrdm_restore_clkdm_state(pwrdm, sleep_switch);
 
 osps_out:
 	pwrdm_unlock(pwrdm);
-- 
2.16.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] ARM: OMAP2+ hwmod: Allow modules to disable HW_AUTO
  2018-03-20  8:00 [PATCH 0/3] Fix build on multi_v7_defconfig Sam Protsenko
  2018-03-20  8:00 ` [PATCH 1/3] ARM: OMAP2+: clockdomain: add usecounting support to autoidle APIs Sam Protsenko
@ 2018-03-20  8:00 ` Sam Protsenko
  2018-03-20  8:00 ` [PATCH 3/3] ARM: OMAP2+: omap_hwmod: provide space for more hwmod flags Sam Protsenko
  2018-03-20  8:10 ` [PATCH 0/3] Fix build on multi_v7_defconfig Greg Kroah-Hartman
  3 siblings, 0 replies; 7+ messages in thread
From: Sam Protsenko @ 2018-03-20  8:00 UTC (permalink / raw)
  To: stable
  Cc: Greg Kroah-Hartman, Praneeth Bajjuri, Sekhar Nori, Roger Quadros,
	Tero Kristo, Milosz Wasilewski, Dan Rue

From: Roger Quadros <rogerq@ti.com>

commit 8ff42da411474893ae373d4280ea88954fa97fcc upstream.

Introduce HWMOD_CLKDM_NOAUTO flag that allows the hwmod's
clockdomain to be prevented from HW_AUTO while the hwmod is active.

This is needed to workaround some modules which don't function
correctly with HW_AUTO. e.g. DCAN on DRA7.

Signed-off-by: Roger Quadros <rogerq@ti.com>
[nsekhar@ti.com: rebased to v4.9 kernel]
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
---
 arch/arm/mach-omap2/omap_hwmod.c | 9 +++++++--
 arch/arm/mach-omap2/omap_hwmod.h | 5 +++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
index c1c0fda2f71e..32dcfca42fca 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -2155,7 +2155,7 @@ static int _enable(struct omap_hwmod *oh)
 
 	r = (soc_ops.wait_target_ready) ? soc_ops.wait_target_ready(oh) :
 		-EINVAL;
-	if (oh->clkdm)
+	if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO))
 		clkdm_allow_idle(oh->clkdm);
 
 	if (!r) {
@@ -2212,7 +2212,12 @@ static int _idle(struct omap_hwmod *oh)
 		_idle_sysc(oh);
 	_del_initiator_dep(oh, mpu_oh);
 
-	if (oh->clkdm)
+	/*
+	 * If HWMOD_CLKDM_NOAUTO is set then we don't
+	 * deny idle the clkdm again since idle was already denied
+	 * in _enable()
+	 */
+	if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO))
 		clkdm_deny_idle(oh->clkdm);
 
 	if (oh->flags & HWMOD_BLOCK_WFI)
diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h
index 7c7a31169475..f772f6c77125 100644
--- a/arch/arm/mach-omap2/omap_hwmod.h
+++ b/arch/arm/mach-omap2/omap_hwmod.h
@@ -527,6 +527,10 @@ struct omap_hwmod_omap4_prcm {
  *     operate and they need to be handled at the same time as the main_clk.
  * HWMOD_NO_IDLE: Do not idle the hwmod at all. Useful to handle certain
  *     IPs like CPSW on DRA7, where clocks to this module cannot be disabled.
+ * HWMOD_CLKDM_NOAUTO: Allows the hwmod's clockdomain to be prevented from
+ *     entering HW_AUTO while hwmod is active. This is needed to workaround
+ *     some modules which don't function correctly with HW_AUTO. For example,
+ *     DCAN on DRA7x SoC needs this to workaround errata i893.
  */
 #define HWMOD_SWSUP_SIDLE			(1 << 0)
 #define HWMOD_SWSUP_MSTANDBY			(1 << 1)
@@ -544,6 +548,7 @@ struct omap_hwmod_omap4_prcm {
 #define HWMOD_RECONFIG_IO_CHAIN			(1 << 13)
 #define HWMOD_OPT_CLKS_NEEDED			(1 << 14)
 #define HWMOD_NO_IDLE				(1 << 15)
+#define HWMOD_CLKDM_NOAUTO			(1 << 16)
 
 /*
  * omap_hwmod._int_flags definitions
-- 
2.16.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] ARM: OMAP2+: omap_hwmod: provide space for more hwmod flags
  2018-03-20  8:00 [PATCH 0/3] Fix build on multi_v7_defconfig Sam Protsenko
  2018-03-20  8:00 ` [PATCH 1/3] ARM: OMAP2+: clockdomain: add usecounting support to autoidle APIs Sam Protsenko
  2018-03-20  8:00 ` [PATCH 2/3] ARM: OMAP2+ hwmod: Allow modules to disable HW_AUTO Sam Protsenko
@ 2018-03-20  8:00 ` Sam Protsenko
  2018-03-20  8:10 ` [PATCH 0/3] Fix build on multi_v7_defconfig Greg Kroah-Hartman
  3 siblings, 0 replies; 7+ messages in thread
From: Sam Protsenko @ 2018-03-20  8:00 UTC (permalink / raw)
  To: stable
  Cc: Greg Kroah-Hartman, Praneeth Bajjuri, Sekhar Nori, Roger Quadros,
	Tero Kristo, Milosz Wasilewski, Dan Rue

From: Sekhar Nori <nsekhar@ti.com>

commit 390c06828dd22549706946113a0783cb8e2a3240 upstream.

'flags' member of omap_hwmod structure is fast running
out of space with 16 different flags already defined.

Make flags a 32-bit entity so as to allow for more flags.

This results is a ~2.3K data section size increase with
omap2plus_defconfig on v4.11-rc2.

before:
   text	   data	    bss	    dec	    hex	filename
8186930	3082444	8252992	19522366	129e33e	vmlinux

after:
   text	   data	    bss	    dec	    hex	filename
8186922	3084812	8252992	19524726	129ec76	vmlinux

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
---
 arch/arm/mach-omap2/omap_hwmod.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h
index f772f6c77125..c320bbe2ff35 100644
--- a/arch/arm/mach-omap2/omap_hwmod.h
+++ b/arch/arm/mach-omap2/omap_hwmod.h
@@ -699,7 +699,7 @@ struct omap_hwmod {
 	struct list_head		node;
 	struct omap_hwmod_ocp_if	*_mpu_port;
 	unsigned int			(*xlate_irq)(unsigned int);
-	u16				flags;
+	u32				flags;
 	u8				mpu_rt_idx;
 	u8				response_lat;
 	u8				rst_lines_cnt;
-- 
2.16.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] Fix build on multi_v7_defconfig
  2018-03-20  8:00 [PATCH 0/3] Fix build on multi_v7_defconfig Sam Protsenko
                   ` (2 preceding siblings ...)
  2018-03-20  8:00 ` [PATCH 3/3] ARM: OMAP2+: omap_hwmod: provide space for more hwmod flags Sam Protsenko
@ 2018-03-20  8:10 ` Greg Kroah-Hartman
  2018-03-20  8:20   ` Sam Protsenko
  3 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-20  8:10 UTC (permalink / raw)
  To: Sam Protsenko
  Cc: stable, Praneeth Bajjuri, Sekhar Nori, Roger Quadros,
	Tero Kristo, Milosz Wasilewski, Dan Rue

On Tue, Mar 20, 2018 at 04:00:24PM +0800, Sam Protsenko wrote:
> Recent patches broke build on multi_v7_defconfig (ARM), on
> stable-rc/linux-4.4.y branch. The build error as follows:
> 
>     arch/arm/mach-omap2/omap_hwmod_7xx_data.c:2243:12: error:
>     'HWMOD_CLKDM_NOAUTO' undeclared here (not in a function)
>       .flags  = HWMOD_CLKDM_NOAUTO,
>                 ^~~~~~~~~~~~~~~~~~

I just dropped this patch instead, as is it really worth adding these
other patches to resolve this?

thanks

greg k-h

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] Fix build on multi_v7_defconfig
  2018-03-20  8:10 ` [PATCH 0/3] Fix build on multi_v7_defconfig Greg Kroah-Hartman
@ 2018-03-20  8:20   ` Sam Protsenko
  2018-03-20  9:16     ` Tero Kristo
  0 siblings, 1 reply; 7+ messages in thread
From: Sam Protsenko @ 2018-03-20  8:20 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: stable, Praneeth Bajjuri, Sekhar Nori, Roger Quadros,
	Tero Kristo, Milosz Wasilewski, Dan Rue

On 20 March 2018 at 16:10, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
> On Tue, Mar 20, 2018 at 04:00:24PM +0800, Sam Protsenko wrote:
>> Recent patches broke build on multi_v7_defconfig (ARM), on
>> stable-rc/linux-4.4.y branch. The build error as follows:
>>
>>     arch/arm/mach-omap2/omap_hwmod_7xx_data.c:2243:12: error:
>>     'HWMOD_CLKDM_NOAUTO' undeclared here (not in a function)
>>       .flags  = HWMOD_CLKDM_NOAUTO,
>>                 ^~~~~~~~~~~~~~~~~~
>
> I just dropped this patch instead, as is it really worth adding these
> other patches to resolve this?
>

Agree. Those patches are the actual dependency for one that breaks the
build, but it's kinda an overkill to pull that amount of code. If we
really need that patch, somebody (maintainers?) should revise it and
come up with a better solution, providing all needed dependency
patches and predicting the impact of all series on the system, as this
is a stable branch.

Thanks.


> thanks
>
> greg k-h

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] Fix build on multi_v7_defconfig
  2018-03-20  8:20   ` Sam Protsenko
@ 2018-03-20  9:16     ` Tero Kristo
  0 siblings, 0 replies; 7+ messages in thread
From: Tero Kristo @ 2018-03-20  9:16 UTC (permalink / raw)
  To: Sam Protsenko, Greg Kroah-Hartman
  Cc: stable, Praneeth Bajjuri, Sekhar Nori, Roger Quadros,
	Milosz Wasilewski, Dan Rue

On 20/03/18 10:20, Sam Protsenko wrote:
> On 20 March 2018 at 16:10, Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
>> On Tue, Mar 20, 2018 at 04:00:24PM +0800, Sam Protsenko wrote:
>>> Recent patches broke build on multi_v7_defconfig (ARM), on
>>> stable-rc/linux-4.4.y branch. The build error as follows:
>>>
>>>      arch/arm/mach-omap2/omap_hwmod_7xx_data.c:2243:12: error:
>>>      'HWMOD_CLKDM_NOAUTO' undeclared here (not in a function)
>>>        .flags  = HWMOD_CLKDM_NOAUTO,
>>>                  ^~~~~~~~~~~~~~~~~~
>>
>> I just dropped this patch instead, as is it really worth adding these
>> other patches to resolve this?
>>
> 
> Agree. Those patches are the actual dependency for one that breaks the
> build, but it's kinda an overkill to pull that amount of code. If we
> really need that patch, somebody (maintainers?) should revise it and
> come up with a better solution, providing all needed dependency
> patches and predicting the impact of all series on the system, as this
> is a stable branch.

Yea I don't see why this patch would be so critical to get it fixed in 
stable. If a need rises, we (as in TI) can work on that.

-Tero
--
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-03-20  9:17 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-20  8:00 [PATCH 0/3] Fix build on multi_v7_defconfig Sam Protsenko
2018-03-20  8:00 ` [PATCH 1/3] ARM: OMAP2+: clockdomain: add usecounting support to autoidle APIs Sam Protsenko
2018-03-20  8:00 ` [PATCH 2/3] ARM: OMAP2+ hwmod: Allow modules to disable HW_AUTO Sam Protsenko
2018-03-20  8:00 ` [PATCH 3/3] ARM: OMAP2+: omap_hwmod: provide space for more hwmod flags Sam Protsenko
2018-03-20  8:10 ` [PATCH 0/3] Fix build on multi_v7_defconfig Greg Kroah-Hartman
2018-03-20  8:20   ` Sam Protsenko
2018-03-20  9:16     ` Tero Kristo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.