From c366cf7ed5f98bba242269a694a9b7904e249ec4 Mon Sep 17 00:00:00 2001 From: Max Galemin Date: Fri, 9 Mar 2012 00:12:30 +1100 Subject: [PATCH] Issue 23: kernel loading problem on beagleboard xM Rev A 1. Added Linux kernel patch for fixing issue with kernel panics and freezes on Beagleboard-xM Rev. A3 with "mpurate=1000" kernel boot parameter. --- ...LL-in-stop-mode-before-un-reset-IVA2.patch | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 board/beagleboard/xm/kernel-patches/linux-0005-Put-the-IVA2-DPLL-in-stop-mode-before-un-reset-IVA2.patch diff --git a/board/beagleboard/xm/kernel-patches/linux-0005-Put-the-IVA2-DPLL-in-stop-mode-before-un-reset-IVA2.patch b/board/beagleboard/xm/kernel-patches/linux-0005-Put-the-IVA2-DPLL-in-stop-mode-before-un-reset-IVA2.patch new file mode 100644 index 0000000..2b1fb31 --- /dev/null +++ b/board/beagleboard/xm/kernel-patches/linux-0005-Put-the-IVA2-DPLL-in-stop-mode-before-un-reset-IVA2.patch @@ -0,0 +1,62 @@ +From 8717b70a5a23395239235ec419f1802ef6293466 Mon Sep 17 00:00:00 2001 +From: Max Galemin +Date: Thu, 8 Mar 2012 23:18:06 +1100 +Subject: [PATCH] Put the IVA2 DPLL in stop mode before un-reset IVA2 module + +1. For 1 GHz operation before un-resetting the IVA2 module in omap3_iva_idle() +the IVA2 DPLL needs to be put in low power stop mode as bootloader can enable +the IVA2 DPLL in lock mode which can potentially lead to instability. Previous +IVA2 DPLL mode can be restored after IVA2 reset. +--- + arch/arm/mach-omap2/pm34xx.c | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c +index efa6649..bcb1985 100644 +--- a/arch/arm/mach-omap2/pm34xx.c ++++ b/arch/arm/mach-omap2/pm34xx.c +@@ -50,6 +50,7 @@ + #include "pm.h" + #include "sdrc.h" + #include "control.h" ++#include "clock.h" + + #ifdef CONFIG_SUSPEND + static suspend_state_t suspend_state = PM_SUSPEND_ON; +@@ -612,6 +613,8 @@ static const struct platform_suspend_ops omap_pm_ops = { + **/ + static void __init omap3_iva_idle(void) + { ++ u32 iva2_dpll; ++ + /* ensure IVA2 clock is disabled */ + omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN); + +@@ -620,6 +623,13 @@ static void __init omap3_iva_idle(void) + OMAP3430_CLKACTIVITY_IVA2_MASK)) + return; + ++ iva2_dpll = omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, ++ OMAP3430_CM_CLKEN_PLL); ++ ++ /* Put the IVA2 DPLL in low power stop mode */ ++ omap2_cm_write_mod_reg((iva2_dpll & ~OMAP3430_EN_IVA2_DPLL_MASK) | ++ DPLL_LOW_POWER_STOP, OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL); ++ + /* Reset IVA2 */ + omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK | + OMAP3430_RST2_IVA2_MASK | +@@ -645,6 +655,10 @@ static void __init omap3_iva_idle(void) + OMAP3430_RST2_IVA2_MASK | + OMAP3430_RST3_IVA2_MASK, + OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); ++ ++ /* Restore the IVA2 DPLL value */ ++ omap2_cm_write_mod_reg(iva2_dpll, OMAP3430_IVA2_MOD, ++ OMAP3430_CM_CLKEN_PLL); + } + + static void __init omap3_d2d_idle(void) +-- +1.7.5.4 +