224 lines
8.8 KiB
Diff
224 lines
8.8 KiB
Diff
|
From patchwork Tue Jul 12 17:50:31 2016
|
||
|
Content-Type: text/plain; charset="utf-8"
|
||
|
MIME-Version: 1.0
|
||
|
Content-Transfer-Encoding: 7bit
|
||
|
Subject: [1/4] ARM: OMAP4+: hwmod: Add hwmod flag for
|
||
|
HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET
|
||
|
From: Dave Gerlach <d-gerlach@ti.com>
|
||
|
X-Patchwork-Id: 9225857
|
||
|
Message-Id: <20160712175034.743-2-d-gerlach@ti.com>
|
||
|
To: <linux-arm-kernel@lists.infradead.org>, <linux-omap@vger.kernel.org>,
|
||
|
Tony Lindgren <tony@atomide.com>, Tero Kristo <t-kristo@ti.com>
|
||
|
Cc: Lokesh Vutla <lokeshvutla@ti.com>, Olof Johansson <olof@lixom.net>,
|
||
|
Paul Walmsley <paul@pwsan.com>, Arnd Bergmann <arnd@arndb.de>,
|
||
|
Dave Gerlach <d-gerlach@ti.com>
|
||
|
Date: Tue, 12 Jul 2016 12:50:31 -0500
|
||
|
|
||
|
Nearly all modules on OMAP4 and newer platforms have clkctrl offsets
|
||
|
that are non-zero except for the RTC on am335x. Because we rely on a
|
||
|
clkctrl_offset of zero to indicate no clkctrl_offset being present,
|
||
|
lets add a HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET flag to use to indicate
|
||
|
hwmods that have a valid clkctrl_offset of 0.
|
||
|
|
||
|
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
|
||
|
---
|
||
|
arch/arm/mach-omap2/omap_hwmod.h | 4 ++++
|
||
|
1 file changed, 4 insertions(+)
|
||
|
|
||
|
diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h
|
||
|
index 4041bad79a9a..78904017f18c 100644
|
||
|
--- a/arch/arm/mach-omap2/omap_hwmod.h
|
||
|
+++ b/arch/arm/mach-omap2/omap_hwmod.h
|
||
|
@@ -443,8 +443,12 @@ struct omap_hwmod_omap2_prcm {
|
||
|
* HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT: Some IP blocks don't have a PRCM
|
||
|
* module-level context loss register associated with them; this
|
||
|
* flag bit should be set in those cases
|
||
|
+ * HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET: Some IP blocks have a valid CLKCTRL
|
||
|
+ * offset of zero; this flag bit should be set in those cases to
|
||
|
+ * distinguish from hwmods that have no clkctrl offset.
|
||
|
*/
|
||
|
#define HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT (1 << 0)
|
||
|
+#define HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET (1 << 1)
|
||
|
|
||
|
/**
|
||
|
* struct omap_hwmod_omap4_prcm - OMAP4-specific PRCM data
|
||
|
From patchwork Tue Jul 12 17:50:32 2016
|
||
|
Content-Type: text/plain; charset="utf-8"
|
||
|
MIME-Version: 1.0
|
||
|
Content-Transfer-Encoding: 7bit
|
||
|
Subject: [2/4] ARM: OMAP2+: AM33XX: Add HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET flag
|
||
|
to rtc hwmod
|
||
|
From: Dave Gerlach <d-gerlach@ti.com>
|
||
|
X-Patchwork-Id: 9225861
|
||
|
Message-Id: <20160712175034.743-3-d-gerlach@ti.com>
|
||
|
To: <linux-arm-kernel@lists.infradead.org>, <linux-omap@vger.kernel.org>,
|
||
|
Tony Lindgren <tony@atomide.com>, Tero Kristo <t-kristo@ti.com>
|
||
|
Cc: Lokesh Vutla <lokeshvutla@ti.com>, Olof Johansson <olof@lixom.net>,
|
||
|
Paul Walmsley <paul@pwsan.com>, Arnd Bergmann <arnd@arndb.de>,
|
||
|
Dave Gerlach <d-gerlach@ti.com>
|
||
|
Date: Tue, 12 Jul 2016 12:50:32 -0500
|
||
|
|
||
|
The RTC hwmod on AM335x family of SoCs is unique in that the
|
||
|
clkctrl_offs in the PRCM is 0. We rely on a clkctrl_offs of zero as
|
||
|
indicating no clkctrl is present so we must flag this hwmod with
|
||
|
HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET to indicate the 0 clkctrl_offs is in
|
||
|
fact valid in this case.
|
||
|
|
||
|
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
|
||
|
---
|
||
|
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c | 2 ++
|
||
|
1 file changed, 2 insertions(+)
|
||
|
|
||
|
diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c
|
||
|
index 55c5878577f4..e2d84aa7f595 100644
|
||
|
--- a/arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c
|
||
|
+++ b/arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c
|
||
|
@@ -29,6 +29,7 @@
|
||
|
#define CLKCTRL(oh, clkctrl) ((oh).prcm.omap4.clkctrl_offs = (clkctrl))
|
||
|
#define RSTCTRL(oh, rstctrl) ((oh).prcm.omap4.rstctrl_offs = (rstctrl))
|
||
|
#define RSTST(oh, rstst) ((oh).prcm.omap4.rstst_offs = (rstst))
|
||
|
+#define PRCM_FLAGS(oh, flag) ((oh).prcm.omap4.flags = (flag))
|
||
|
|
||
|
/*
|
||
|
* 'l3' class
|
||
|
@@ -1296,6 +1297,7 @@ static void omap_hwmod_am33xx_clkctrl(void)
|
||
|
CLKCTRL(am33xx_i2c1_hwmod, AM33XX_CM_WKUP_I2C0_CLKCTRL_OFFSET);
|
||
|
CLKCTRL(am33xx_wd_timer1_hwmod, AM33XX_CM_WKUP_WDT1_CLKCTRL_OFFSET);
|
||
|
CLKCTRL(am33xx_rtc_hwmod, AM33XX_CM_RTC_RTC_CLKCTRL_OFFSET);
|
||
|
+ PRCM_FLAGS(am33xx_rtc_hwmod, HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET);
|
||
|
CLKCTRL(am33xx_mmc2_hwmod, AM33XX_CM_PER_MMC2_CLKCTRL_OFFSET);
|
||
|
CLKCTRL(am33xx_gpmc_hwmod, AM33XX_CM_PER_GPMC_CLKCTRL_OFFSET);
|
||
|
CLKCTRL(am33xx_l4_ls_hwmod, AM33XX_CM_PER_L4LS_CLKCTRL_OFFSET);
|
||
|
From patchwork Tue Jul 12 17:50:33 2016
|
||
|
Content-Type: text/plain; charset="utf-8"
|
||
|
MIME-Version: 1.0
|
||
|
Content-Transfer-Encoding: 7bit
|
||
|
Subject: [3/4] ARM: OMAP4+: Have _omap4_wait_target_* check for valid
|
||
|
clkctrl_offs
|
||
|
From: Dave Gerlach <d-gerlach@ti.com>
|
||
|
X-Patchwork-Id: 9225859
|
||
|
Message-Id: <20160712175034.743-4-d-gerlach@ti.com>
|
||
|
To: <linux-arm-kernel@lists.infradead.org>, <linux-omap@vger.kernel.org>,
|
||
|
Tony Lindgren <tony@atomide.com>, Tero Kristo <t-kristo@ti.com>
|
||
|
Cc: Lokesh Vutla <lokeshvutla@ti.com>, Olof Johansson <olof@lixom.net>,
|
||
|
Paul Walmsley <paul@pwsan.com>, Arnd Bergmann <arnd@arndb.de>,
|
||
|
Dave Gerlach <d-gerlach@ti.com>
|
||
|
Date: Tue, 12 Jul 2016 12:50:33 -0500
|
||
|
|
||
|
Previously the low-level CM call internal to the
|
||
|
_omap4_wait_target_ready/disable calls was responsible for checking for
|
||
|
a valid clkctrl_offs. Now we must also consider the value of the
|
||
|
prcm.omap4.flags because if HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET is set in
|
||
|
the flags then clkctrl_offs of 0 is valid.
|
||
|
|
||
|
Let's move this check into the _omap4_wait_target_ready/disable where we
|
||
|
have access to both the clkctrl_offs and the flags values and simply
|
||
|
return 0 without calling the low level CM call at all, which would have
|
||
|
returned 0 anyway if the clktrl_offs was zero.
|
||
|
|
||
|
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
|
||
|
---
|
||
|
arch/arm/mach-omap2/omap_hwmod.c | 8 ++++++++
|
||
|
1 file changed, 8 insertions(+)
|
||
|
|
||
|
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
|
||
|
index 5b709383381c..1052b29697b8 100644
|
||
|
--- a/arch/arm/mach-omap2/omap_hwmod.c
|
||
|
+++ b/arch/arm/mach-omap2/omap_hwmod.c
|
||
|
@@ -1053,6 +1053,10 @@ static int _omap4_wait_target_disable(struct omap_hwmod *oh)
|
||
|
if (oh->flags & HWMOD_NO_IDLEST)
|
||
|
return 0;
|
||
|
|
||
|
+ if (!oh->prcm.omap4.clkctrl_offs &&
|
||
|
+ !(oh->prcm.omap4.flags & HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET))
|
||
|
+ return 0;
|
||
|
+
|
||
|
return omap_cm_wait_module_idle(oh->clkdm->prcm_partition,
|
||
|
oh->clkdm->cm_inst,
|
||
|
oh->prcm.omap4.clkctrl_offs, 0);
|
||
|
@@ -2971,6 +2975,10 @@ static int _omap4_wait_target_ready(struct omap_hwmod *oh)
|
||
|
if (!_find_mpu_rt_port(oh))
|
||
|
return 0;
|
||
|
|
||
|
+ if (!oh->prcm.omap4.clkctrl_offs &&
|
||
|
+ !(oh->prcm.omap4.flags & HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET))
|
||
|
+ return 0;
|
||
|
+
|
||
|
/* XXX check module SIDLEMODE, hardreset status */
|
||
|
|
||
|
return omap_cm_wait_module_ready(oh->clkdm->prcm_partition,
|
||
|
From patchwork Tue Jul 12 17:50:34 2016
|
||
|
Content-Type: text/plain; charset="utf-8"
|
||
|
MIME-Version: 1.0
|
||
|
Content-Transfer-Encoding: 7bit
|
||
|
Subject: [4/4] ARM: OMAP4+: CM: Remove redundant checks for clkctrl_offs of
|
||
|
zero
|
||
|
From: Dave Gerlach <d-gerlach@ti.com>
|
||
|
X-Patchwork-Id: 9225863
|
||
|
Message-Id: <20160712175034.743-5-d-gerlach@ti.com>
|
||
|
To: <linux-arm-kernel@lists.infradead.org>, <linux-omap@vger.kernel.org>,
|
||
|
Tony Lindgren <tony@atomide.com>, Tero Kristo <t-kristo@ti.com>
|
||
|
Cc: Lokesh Vutla <lokeshvutla@ti.com>, Olof Johansson <olof@lixom.net>,
|
||
|
Paul Walmsley <paul@pwsan.com>, Arnd Bergmann <arnd@arndb.de>,
|
||
|
Dave Gerlach <d-gerlach@ti.com>
|
||
|
Date: Tue, 12 Jul 2016 12:50:34 -0500
|
||
|
|
||
|
Now that we have moved the check for valid clkctrl_offs to the caller of
|
||
|
am33xx_cm_wait_module_ready/idle and omap4_cminst_wait_module_ready/idle
|
||
|
let's remove the now redundant check for clkctrl_offs from these functions.
|
||
|
|
||
|
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
|
||
|
---
|
||
|
arch/arm/mach-omap2/cm33xx.c | 6 ------
|
||
|
arch/arm/mach-omap2/cminst44xx.c | 6 ------
|
||
|
2 files changed, 12 deletions(-)
|
||
|
|
||
|
diff --git a/arch/arm/mach-omap2/cm33xx.c b/arch/arm/mach-omap2/cm33xx.c
|
||
|
index c073fb57dd13..6f2d0aec0513 100644
|
||
|
--- a/arch/arm/mach-omap2/cm33xx.c
|
||
|
+++ b/arch/arm/mach-omap2/cm33xx.c
|
||
|
@@ -220,9 +220,6 @@ static int am33xx_cm_wait_module_ready(u8 part, s16 inst, u16 clkctrl_offs,
|
||
|
{
|
||
|
int i = 0;
|
||
|
|
||
|
- if (!clkctrl_offs)
|
||
|
- return 0;
|
||
|
-
|
||
|
omap_test_timeout(_is_module_ready(inst, clkctrl_offs),
|
||
|
MAX_MODULE_READY_TIME, i);
|
||
|
|
||
|
@@ -246,9 +243,6 @@ static int am33xx_cm_wait_module_idle(u8 part, s16 inst, u16 clkctrl_offs,
|
||
|
{
|
||
|
int i = 0;
|
||
|
|
||
|
- if (!clkctrl_offs)
|
||
|
- return 0;
|
||
|
-
|
||
|
omap_test_timeout((_clkctrl_idlest(inst, clkctrl_offs) ==
|
||
|
CLKCTRL_IDLEST_DISABLED),
|
||
|
MAX_MODULE_READY_TIME, i);
|
||
|
diff --git a/arch/arm/mach-omap2/cminst44xx.c b/arch/arm/mach-omap2/cminst44xx.c
|
||
|
index 2c0e07ed6b99..2ab27ade136a 100644
|
||
|
--- a/arch/arm/mach-omap2/cminst44xx.c
|
||
|
+++ b/arch/arm/mach-omap2/cminst44xx.c
|
||
|
@@ -278,9 +278,6 @@ static int omap4_cminst_wait_module_ready(u8 part, s16 inst, u16 clkctrl_offs,
|
||
|
{
|
||
|
int i = 0;
|
||
|
|
||
|
- if (!clkctrl_offs)
|
||
|
- return 0;
|
||
|
-
|
||
|
omap_test_timeout(_is_module_ready(part, inst, clkctrl_offs),
|
||
|
MAX_MODULE_READY_TIME, i);
|
||
|
|
||
|
@@ -304,9 +301,6 @@ static int omap4_cminst_wait_module_idle(u8 part, s16 inst, u16 clkctrl_offs,
|
||
|
{
|
||
|
int i = 0;
|
||
|
|
||
|
- if (!clkctrl_offs)
|
||
|
- return 0;
|
||
|
-
|
||
|
omap_test_timeout((_clkctrl_idlest(part, inst, clkctrl_offs) ==
|
||
|
CLKCTRL_IDLEST_DISABLED),
|
||
|
MAX_MODULE_DISABLE_TIME, i);
|