summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel.spec6
-rw-r--r--omap-rtc-fix-am33xx.patch223
2 files changed, 229 insertions, 0 deletions
diff --git a/kernel.spec b/kernel.spec
index 37c014041..fe7523cf9 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -511,6 +511,9 @@ Patch425: arm64-pcie-quirks-xgene.patch
# http://www.spinics.net/lists/linux-tegra/msg26029.html
Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch
+# http://www.spinics.net/lists/linux-omap/msg130698.html
+Patch427: omap-rtc-fix-am33xx.patch
+
# http://patchwork.ozlabs.org/patch/587554/
Patch430: ARM-tegra-usb-no-reset.patch
@@ -2139,6 +2142,9 @@ fi
#
#
%changelog
+* Sat Aug 20 2016 Peter Robinson <pbrobinson@fedoraproject.org>
+- Add fix for RTC crash on ARMv7 am33xx devices
+
* Fri Aug 19 2016 Justin M. Forbes <jforbes@fedoraproject.org> - 4.8.0-0.rc2.git4.1
- Linux v4.8-rc2-348-g6040e57
diff --git a/omap-rtc-fix-am33xx.patch b/omap-rtc-fix-am33xx.patch
new file mode 100644
index 000000000..af6686a51
--- /dev/null
+++ b/omap-rtc-fix-am33xx.patch
@@ -0,0 +1,223 @@
+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);