All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/5] extra module resets to ensure full-chip idle
@ 2008-12-01 16:22 Kevin Hilman
  2008-12-01 16:22 ` [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot Kevin Hilman
  2008-12-01 16:36 ` [PATCH v2 0/5] extra module resets to ensure full-chip idle Kevin Hilman
  0 siblings, 2 replies; 12+ messages in thread
From: Kevin Hilman @ 2008-12-01 16:22 UTC (permalink / raw)
  To: linux-omap; +Cc: Kevin Hilman

Various bootloaders have been known to leave modules in a state
which prevents full-chip retention.  This series forces
MMC, IVA2 and D2D/modem into known reset/idle states so that
the OMAP3 can hit full-chip idle.

Tested on OMAP3 Beagle, and custom OMAP3 hardware.

NOTE: this is similar to the set I posted for the PM branch
      but this series is rebased onto linux-omap and includes
      the MMC reset.

Kevin Hilman (5):
  OMAP3: PM: HSMMC: force MMC module reset on boot
  OMAP3: PM: Force IVA2 into idle during bootup
  OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init
  OMAP3: PM: D2D clockdomain supports SW supervised transitions
  OMAP3: PM: Ensure modem is reset during PRCM init

 arch/arm/mach-omap2/clock34xx.h           |   37 ++++++++++++-
 arch/arm/mach-omap2/clockdomains.h        |    2 +-
 arch/arm/mach-omap2/cm-regbits-34xx.h     |   14 +++++
 arch/arm/mach-omap2/devices.c             |   85 +++++++++++++++++++++++++++++
 arch/arm/mach-omap2/pm34xx.c              |   65 ++++++++++++++++++++++-
 arch/arm/plat-omap/include/mach/control.h |    5 ++
 6 files changed, 204 insertions(+), 4 deletions(-)


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

* [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot
  2008-12-01 16:22 [PATCH v2 0/5] extra module resets to ensure full-chip idle Kevin Hilman
@ 2008-12-01 16:22 ` Kevin Hilman
  2008-12-01 16:22   ` [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup Kevin Hilman
                     ` (2 more replies)
  2008-12-01 16:36 ` [PATCH v2 0/5] extra module resets to ensure full-chip idle Kevin Hilman
  1 sibling, 3 replies; 12+ messages in thread
From: Kevin Hilman @ 2008-12-01 16:22 UTC (permalink / raw)
  To: linux-omap; +Cc: Kevin Hilman

The bootloader may leave the MMC in a state which prevents hitting
retention.  Even when MMC is not compiled in, each MMC module needs to
be forced into reset.

Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 arch/arm/mach-omap2/devices.c |   85 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 85 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
index 241e418..423647e 100644
--- a/arch/arm/mach-omap2/devices.c
+++ b/arch/arm/mach-omap2/devices.c
@@ -14,6 +14,7 @@
 #include <linux/init.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
+#include <linux/clk.h>
 
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
@@ -358,6 +359,89 @@ static inline void omap_init_sha1_md5(void) { }
 
 /*-------------------------------------------------------------------------*/
 
+#ifdef CONFIG_ARCH_OMAP3
+
+#define MMCHS_SYSCONFIG			0x0010
+#define MMCHS_SYSCONFIG_SWRESET		(1 << 1)
+#define MMCHS_SYSSTATUS			0x0014
+#define MMCHS_SYSSTATUS_RESETDONE	(1 << 0)
+
+static struct platform_device dummy_pdev = {
+	.dev = {
+		.bus = &platform_bus_type,
+	},
+};
+
+/**
+ * omap_hsmmc_reset() - Full reset of each HS-MMC controller
+ *
+ * Ensure that each MMC controller is fully reset.  Controllers
+ * left in an unknown state (by bootloader) may prevent retention
+ * or OFF-mode.  This is especially important in cases where the
+ * MMC driver is not enabled, _or_ built as a module.
+ *
+ * In order for reset to work, interface, functional and debounce
+ * clocks must be enabled.  The debounce clock comes from func_32k_clk
+ * and is not under SW control, so we only enable i- and f-clocks.
+ **/
+static void __init omap_hsmmc_reset(void)
+{
+	u32 i, nr_controllers = cpu_is_omap34xx() ? OMAP34XX_NR_MMC :
+		OMAP24XX_NR_MMC;
+
+	for (i = 0; i < nr_controllers; i++) {
+		u32 v, base = 0;
+		struct clk *iclk, *fclk;
+		struct device *dev = &dummy_pdev.dev;
+
+		switch (i) {
+		case 0:
+			base = OMAP2_MMC1_BASE;
+			break;
+		case 1:
+			base = OMAP2_MMC2_BASE;
+			break;
+		case 2:
+			base = OMAP3_MMC3_BASE;
+			break;
+		}
+
+		dummy_pdev.id = i;
+		iclk = clk_get(dev, "mmchs_ick");
+		if (iclk && clk_enable(iclk))
+			iclk = NULL;
+
+		fclk = clk_get(dev, "mmchs_fck");
+		if (fclk && clk_enable(fclk))
+			fclk = NULL;
+
+		if (!iclk || !fclk) {
+			printk(KERN_WARNING
+			       "%s: Unable to enable clocks for MMC%d, "
+			       "cannot reset.\n",  __func__, i);
+			break;
+		}
+
+		omap_writel(MMCHS_SYSCONFIG_SWRESET, base + MMCHS_SYSCONFIG);
+		v = omap_readl(base + MMCHS_SYSSTATUS);
+		while (!(omap_readl(base + MMCHS_SYSSTATUS) &
+			 MMCHS_SYSSTATUS_RESETDONE))
+			cpu_relax();
+
+		if (fclk) {
+			clk_disable(fclk);
+			clk_put(fclk);
+		}
+		if (iclk) {
+			clk_disable(iclk);
+			clk_put(iclk);
+		}
+	}
+}
+#else
+static inline void omap_hsmmc_reset(void) {}
+#endif
+
 #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \
 	defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
 
@@ -477,6 +561,7 @@ static int __init omap2_init_devices(void)
 	/* please keep these calls, and their implementations above,
 	 * in alphabetical order so they're easier to sort through.
 	 */
+	omap_hsmmc_reset();
 	omap_init_camera();
 	omap_init_mbox();
 	omap_init_mcspi();
-- 
1.6.0.3


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

* [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup
  2008-12-01 16:22 ` [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot Kevin Hilman
@ 2008-12-01 16:22   ` Kevin Hilman
  2008-12-01 16:22     ` [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init Kevin Hilman
  2008-12-06  6:23     ` [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup Paul Walmsley
  2008-12-06  0:27   ` [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot Tony Lindgren
  2008-12-06  6:28   ` Paul Walmsley
  2 siblings, 2 replies; 12+ messages in thread
From: Kevin Hilman @ 2008-12-01 16:22 UTC (permalink / raw)
  To: linux-omap; +Cc: Kevin Hilman

Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 arch/arm/mach-omap2/pm34xx.c              |   55 +++++++++++++++++++++++++++++
 arch/arm/plat-omap/include/mach/control.h |    5 +++
 2 files changed, 60 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index bd74183..6ff6449 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -29,6 +29,7 @@
 #include <mach/pm.h>
 #include <mach/clockdomain.h>
 #include <mach/powerdomain.h>
+#include <mach/control.h>
 
 #include "cm.h"
 #include "cm-regbits-34xx.h"
@@ -363,6 +364,58 @@ static struct platform_suspend_ops omap_pm_ops = {
 	.valid		= suspend_valid_only_mem,
 };
 
+
+/**
+ * omap3_iva_idle(): ensure IVA is in idle so it can be put into
+ *                   retention
+ *
+ * In cases where IVA2 is activated by bootcode, it may prevent
+ * full-chip retention or off-mode because it is not idle.  This
+ * function forces the IVA2 into idle state so it can go
+ * into retention/off and thus allow full-chip retention/off.
+ *
+ **/
+static void __init omap3_iva_idle(void)
+{
+	struct clk *iva2_ck;
+
+	iva2_ck = clk_get(NULL, "iva2_fclk");
+	if (!iva2_ck) {
+		pr_err("Unable to get IVA2 fclk: cannot force idle.\n");
+		return;
+	}
+
+	/* Disable IVA2 clock */
+	clk_disable(iva2_ck);
+
+	/* Reset IVA2 */
+	prm_write_mod_reg(OMAP3430_RST1_IVA2 |
+			  OMAP3430_RST2_IVA2 |
+			  OMAP3430_RST3_IVA2,
+			  OMAP3430_IVA2_MOD, RM_RSTCTRL);
+
+	/* Enable IVA2 clock */
+	clk_enable(iva2_ck);
+
+	/* Set IVA2 boot mode to 'idle' */
+	omap_ctrl_writel(OMAP3_IVA2_BOOTMOD_IDLE,
+			 OMAP343X_CONTROL_IVA2_BOOTMOD);
+
+	/* Un-reset IVA2 */
+	prm_write_mod_reg(0, OMAP3430_IVA2_MOD, RM_RSTCTRL);
+
+	/* Disable IVA2 clocks */
+	clk_disable(iva2_ck);
+
+	/* Reset IVA2 */
+	prm_write_mod_reg(OMAP3430_RST1_IVA2 |
+			  OMAP3430_RST2_IVA2 |
+			  OMAP3430_RST3_IVA2,
+			  OMAP3430_IVA2_MOD, RM_RSTCTRL);
+
+	clk_put(iva2_ck);
+}
+
 static void __init prcm_setup_regs(void)
 {
 	/* XXX Reset all wkdeps. This should be done when initializing
@@ -514,6 +567,8 @@ static void __init prcm_setup_regs(void)
 	 * it is selected to mpu wakeup goup */
 	prm_write_mod_reg(OMAP3430_IO_EN | OMAP3430_WKUP_EN,
 			OCP_MOD, OMAP2_PRM_IRQENABLE_MPU_OFFSET);
+
+	omap3_iva_idle();
 }
 
 static int __init pwrdms_setup(struct powerdomain *pwrdm)
diff --git a/arch/arm/plat-omap/include/mach/control.h b/arch/arm/plat-omap/include/mach/control.h
index ee3c39e..b51f7fd 100644
--- a/arch/arm/plat-omap/include/mach/control.h
+++ b/arch/arm/plat-omap/include/mach/control.h
@@ -208,6 +208,11 @@
 #define OMAP2_PBIASLITEPWRDNZ0		(1 << 1)
 #define OMAP2_PBIASLITEVMODE0		(1 << 0)
 
+/* CONTROL_IVA2_BOOTMOD bits */
+#define OMAP3_IVA2_BOOTMOD_SHIFT	0
+#define OMAP3_IVA2_BOOTMOD_MASK		(0xf << 0)
+#define OMAP3_IVA2_BOOTMOD_IDLE		(0x1 << 0)
+
 #ifndef __ASSEMBLY__
 #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 extern void __iomem *omap_ctrl_base_get(void);
-- 
1.6.0.3


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

* [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init
  2008-12-01 16:22   ` [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup Kevin Hilman
@ 2008-12-01 16:22     ` Kevin Hilman
  2008-12-01 16:22       ` [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions Kevin Hilman
  2008-12-06  6:37       ` [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init Paul Walmsley
  2008-12-06  6:23     ` [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup Paul Walmsley
  1 sibling, 2 replies; 12+ messages in thread
From: Kevin Hilman @ 2008-12-01 16:22 UTC (permalink / raw)
  To: linux-omap; +Cc: Kevin Hilman

Add D2D clocks (modem_fck, sad2d_ick, mad2d_ick) to clock framework,
and also ensure that auto-idle bits are set for these clocks during
PRCM init.

Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 arch/arm/mach-omap2/clock34xx.h       |   37 +++++++++++++++++++++++++++++++-
 arch/arm/mach-omap2/cm-regbits-34xx.h |   14 ++++++++++++
 arch/arm/mach-omap2/pm34xx.c          |    4 ++-
 3 files changed, 52 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-omap2/clock34xx.h b/arch/arm/mach-omap2/clock34xx.h
index 0b95fcb..78504ce 100644
--- a/arch/arm/mach-omap2/clock34xx.h
+++ b/arch/arm/mach-omap2/clock34xx.h
@@ -1330,6 +1330,38 @@ static struct clk d2d_26m_fck = {
 	.recalc		= &followparent_recalc,
 };
 
+static struct clk modem_fck = {
+	.name		= "modem_fck",
+	.parent		= &sys_ck,
+	.prcm_mod	= CORE_MOD,
+	.enable_reg	= CM_FCLKEN1,
+	.enable_bit	= OMAP3430_EN_MODEM_SHIFT,
+	.flags		= CLOCK_IN_OMAP343X,
+	.clkdm		= { .name = "d2d_clkdm" },
+	.recalc		= &followparent_recalc,
+};
+
+static struct clk sad2d_ick = {
+	.name		= "sad2d_ick",
+	.parent		= &sys_ck,
+	.prcm_mod	= CORE_MOD,
+	.enable_reg	= CM_ICLKEN1,
+	.enable_bit	= OMAP3430_EN_SAD2D_SHIFT,
+	.flags		= CLOCK_IN_OMAP343X,
+	.clkdm		= { .name = "d2d_clkdm" },
+	.recalc		= &followparent_recalc,
+};
+
+static struct clk mad2d_ick = {
+	.name		= "mad2d_ick",
+	.parent		= &sys_ck,
+	.prcm_mod	= CORE_MOD,
+	.enable_reg	= CM_ICLKEN3,
+	.enable_bit	= OMAP3430_EN_MAD2D_SHIFT,
+	.flags		= CLOCK_IN_OMAP343X,
+	.clkdm		= { .name = "d2d_clkdm" },
+	.recalc		= &followparent_recalc,
+};
 static const struct clksel omap343x_gpt_clksel[] = {
 	{ .parent = &omap_32k_fck, .rates = gpt_32k_rates },
 	{ .parent = &sys_ck,	   .rates = gpt_sys_rates },
@@ -2241,8 +2273,6 @@ static struct clk usb_l4_ick = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-/* XXX MDM_INTC_ICK, SAD2D_ICK ?? */
-
 /* SECURITY_L4_ICK2 based clocks */
 
 static struct clk security_l4_ick2 = {
@@ -3460,6 +3490,9 @@ static struct clk *onchip_34xx_clks[] __initdata = {
 	&sgx_fck,
 	&sgx_ick,
 	&d2d_26m_fck,
+	&modem_fck,
+	&sad2d_ick,
+	&mad2d_ick,
 	&gpt10_fck,
 	&gpt11_fck,
 	&cpefuse_fck,
diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h
index 6f3f5a3..6923deb 100644
--- a/arch/arm/mach-omap2/cm-regbits-34xx.h
+++ b/arch/arm/mach-omap2/cm-regbits-34xx.h
@@ -145,6 +145,8 @@
 #define OMAP3430_CLKACTIVITY_MPU_MASK			(1 << 0)
 
 /* CM_FCLKEN1_CORE specific bits */
+#define OMAP3430_EN_MODEM				(1 << 31)
+#define OMAP3430_EN_MODEM_SHIFT				31
 
 /* CM_ICLKEN1_CORE specific bits */
 #define OMAP3430_EN_ICR					(1 << 29)
@@ -161,6 +163,8 @@
 #define OMAP3430_EN_MAILBOXES_SHIFT			7
 #define OMAP3430_EN_OMAPCTRL				(1 << 6)
 #define OMAP3430_EN_OMAPCTRL_SHIFT			6
+#define OMAP3430_EN_SAD2D				(1 << 3)
+#define OMAP3430_EN_SAD2D_SHIFT				3
 #define OMAP3430_EN_SDRC				(1 << 1)
 #define OMAP3430_EN_SDRC_SHIFT				1
 
@@ -176,6 +180,10 @@
 #define OMAP3430_EN_DES1				(1 << 0)
 #define OMAP3430_EN_DES1_SHIFT				0
 
+/* CM_ICLKEN3_CORE */
+#define OMAP3430_EN_MAD2D_SHIFT				3
+#define OMAP3430_EN_MAD2D				(1 << 3)
+
 /* CM_FCLKEN3_CORE specific bits */
 #define OMAP3430ES2_EN_TS_SHIFT				1
 #define OMAP3430ES2_EN_TS_MASK				(1 << 1)
@@ -231,6 +239,8 @@
 #define OMAP3430ES2_ST_CPEFUSE_MASK			(1 << 0)
 
 /* CM_AUTOIDLE1_CORE */
+#define OMAP3430_AUTO_MODEM				(1 << 31)
+#define OMAP3430_AUTO_MODEM_SHIFT			31
 #define OMAP3430ES2_AUTO_MMC3				(1 << 30)
 #define OMAP3430ES2_AUTO_MMC3_SHIFT			30
 #define OMAP3430ES2_AUTO_ICR				(1 << 29)
@@ -287,6 +297,8 @@
 #define OMAP3430_AUTO_HSOTGUSB_SHIFT			4
 #define OMAP3430ES1_AUTO_D2D				(1 << 3)
 #define OMAP3430ES1_AUTO_D2D_SHIFT			3
+#define OMAP3430_AUTO_SAD2D				(1 << 3)
+#define OMAP3430_AUTO_SAD2D_SHIFT			3
 #define OMAP3430_AUTO_SSI				(1 << 0)
 #define OMAP3430_AUTO_SSI_SHIFT				0
 
@@ -308,6 +320,8 @@
 #define	OMAP3430ES2_AUTO_USBTLL				(1 << 2)
 #define OMAP3430ES2_AUTO_USBTLL_SHIFT			2
 #define OMAP3430ES2_AUTO_USBTLL_MASK			(1 << 2)
+#define OMAP3430_AUTO_MAD2D_SHIFT			3
+#define OMAP3430_AUTO_MAD2D				(1 << 3)
 
 /* CM_CLKSEL_CORE */
 #define OMAP3430_CLKSEL_SSI_SHIFT			8
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 6ff6449..9a1933b 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -437,6 +437,7 @@ static void __init prcm_setup_regs(void)
 	 * Note that in the long run this should be done by clockfw
 	 */
 	cm_write_mod_reg(
+		OMAP3430_AUTO_MODEM |
 		OMAP3430ES2_AUTO_MMC3 |
 		OMAP3430ES2_AUTO_ICR |
 		OMAP3430_AUTO_AES2 |
@@ -464,7 +465,7 @@ static void __init prcm_setup_regs(void)
 		OMAP3430_AUTO_OMAPCTRL |
 		OMAP3430ES1_AUTO_FSHOSTUSB |
 		OMAP3430_AUTO_HSOTGUSB |
-		OMAP3430ES1_AUTO_D2D | /* This is es1 only */
+		OMAP3430_AUTO_SAD2D |
 		OMAP3430_AUTO_SSI,
 		CORE_MOD, CM_AUTOIDLE1);
 
@@ -478,6 +479,7 @@ static void __init prcm_setup_regs(void)
 
 	if (omap_rev() > OMAP3430_REV_ES1_0) {
 		cm_write_mod_reg(
+			OMAP3430_AUTO_MAD2D |
 			OMAP3430ES2_AUTO_USBTLL,
 			CORE_MOD, CM_AUTOIDLE3);
 	}
-- 
1.6.0.3


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

* [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions
  2008-12-01 16:22     ` [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init Kevin Hilman
@ 2008-12-01 16:22       ` Kevin Hilman
  2008-12-01 16:22         ` [PATCH v2 5/5] OMAP3: PM: Ensure modem is reset during PRCM init Kevin Hilman
  2008-12-06  6:38         ` [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions Paul Walmsley
  2008-12-06  6:37       ` [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init Paul Walmsley
  1 sibling, 2 replies; 12+ messages in thread
From: Kevin Hilman @ 2008-12-01 16:22 UTC (permalink / raw)
  To: linux-omap; +Cc: Kevin Hilman

Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 arch/arm/mach-omap2/clockdomains.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap2/clockdomains.h b/arch/arm/mach-omap2/clockdomains.h
index bafa650..49a5774 100644
--- a/arch/arm/mach-omap2/clockdomains.h
+++ b/arch/arm/mach-omap2/clockdomains.h
@@ -198,7 +198,7 @@ static struct clockdomain sgx_clkdm = {
 static struct clockdomain d2d_clkdm = {
 	.name		= "d2d_clkdm",
 	.pwrdm		= { .name = "core_pwrdm" },
-	.flags		= CLKDM_CAN_HWSUP,
+	.flags		= CLKDM_CAN_HWSUP_SWSUP,
 	.clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK,
 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 };
-- 
1.6.0.3


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

* [PATCH v2 5/5] OMAP3: PM: Ensure modem is reset during PRCM init
  2008-12-01 16:22       ` [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions Kevin Hilman
@ 2008-12-01 16:22         ` Kevin Hilman
  2008-12-06  6:38         ` [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions Paul Walmsley
  1 sibling, 0 replies; 12+ messages in thread
From: Kevin Hilman @ 2008-12-01 16:22 UTC (permalink / raw)
  To: linux-omap; +Cc: Kevin Hilman

Rogue bootloaders may enable the modem and thus keep the
D2D power- and clock-domains from going into retention.
Reset modem on boot to be sure it is in known state.

Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 arch/arm/mach-omap2/pm34xx.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 9a1933b..db3a34d 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -418,6 +418,12 @@ static void __init omap3_iva_idle(void)
 
 static void __init prcm_setup_regs(void)
 {
+	/* reset modem */
+	prm_write_mod_reg(OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RSTPWRON |
+			  OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RST,
+			  CORE_MOD, RM_RSTCTRL);
+	prm_write_mod_reg(0, CORE_MOD, RM_RSTCTRL);
+
 	/* XXX Reset all wkdeps. This should be done when initializing
 	 * powerdomains */
 	prm_write_mod_reg(0, OMAP3430_IVA2_MOD, PM_WKDEP);
-- 
1.6.0.3


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

* Re: [PATCH v2 0/5] extra module resets to ensure full-chip idle
  2008-12-01 16:22 [PATCH v2 0/5] extra module resets to ensure full-chip idle Kevin Hilman
  2008-12-01 16:22 ` [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot Kevin Hilman
@ 2008-12-01 16:36 ` Kevin Hilman
  1 sibling, 0 replies; 12+ messages in thread
From: Kevin Hilman @ 2008-12-01 16:36 UTC (permalink / raw)
  To: linux-omap

Kevin Hilman <khilman@deeprootsystems.com> writes:

> Various bootloaders have been known to leave modules in a state
> which prevents full-chip retention.  This series forces
> MMC, IVA2 and D2D/modem into known reset/idle states so that
> the OMAP3 can hit full-chip idle.
>
> Tested on OMAP3 Beagle, and custom OMAP3 hardware.
>
> NOTE: this is similar to the set I posted for the PM branch
>       but this series is rebased onto linux-omap and includes
>       the MMC reset.

I forgot (again) to mention that this series applies on top of today's
HEAD plus the "OMAP2/3 clock: fix DPLL rate calculation" patch posted
by Paul Walmsley earlier today.

Kevin


> Kevin Hilman (5):
>   OMAP3: PM: HSMMC: force MMC module reset on boot
>   OMAP3: PM: Force IVA2 into idle during bootup
>   OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init
>   OMAP3: PM: D2D clockdomain supports SW supervised transitions
>   OMAP3: PM: Ensure modem is reset during PRCM init
>
>  arch/arm/mach-omap2/clock34xx.h           |   37 ++++++++++++-
>  arch/arm/mach-omap2/clockdomains.h        |    2 +-
>  arch/arm/mach-omap2/cm-regbits-34xx.h     |   14 +++++
>  arch/arm/mach-omap2/devices.c             |   85 +++++++++++++++++++++++++++++
>  arch/arm/mach-omap2/pm34xx.c              |   65 ++++++++++++++++++++++-
>  arch/arm/plat-omap/include/mach/control.h |    5 ++
>  6 files changed, 204 insertions(+), 4 deletions(-)

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

* Re: [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot
  2008-12-01 16:22 ` [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot Kevin Hilman
  2008-12-01 16:22   ` [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup Kevin Hilman
@ 2008-12-06  0:27   ` Tony Lindgren
  2008-12-06  6:28   ` Paul Walmsley
  2 siblings, 0 replies; 12+ messages in thread
From: Tony Lindgren @ 2008-12-06  0:27 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap

* Kevin Hilman <khilman@deeprootsystems.com> [081201 08:23]:
> The bootloader may leave the MMC in a state which prevents hitting
> retention.  Even when MMC is not compiled in, each MMC module needs to
> be forced into reset.

Pushing to l-o tree, and adding omap mmc queue for mainline.

Tony

> 
> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
> ---
>  arch/arm/mach-omap2/devices.c |   85 +++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 85 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
> index 241e418..423647e 100644
> --- a/arch/arm/mach-omap2/devices.c
> +++ b/arch/arm/mach-omap2/devices.c
> @@ -14,6 +14,7 @@
>  #include <linux/init.h>
>  #include <linux/platform_device.h>
>  #include <linux/io.h>
> +#include <linux/clk.h>
>  
>  #include <mach/hardware.h>
>  #include <asm/mach-types.h>
> @@ -358,6 +359,89 @@ static inline void omap_init_sha1_md5(void) { }
>  
>  /*-------------------------------------------------------------------------*/
>  
> +#ifdef CONFIG_ARCH_OMAP3
> +
> +#define MMCHS_SYSCONFIG			0x0010
> +#define MMCHS_SYSCONFIG_SWRESET		(1 << 1)
> +#define MMCHS_SYSSTATUS			0x0014
> +#define MMCHS_SYSSTATUS_RESETDONE	(1 << 0)
> +
> +static struct platform_device dummy_pdev = {
> +	.dev = {
> +		.bus = &platform_bus_type,
> +	},
> +};
> +
> +/**
> + * omap_hsmmc_reset() - Full reset of each HS-MMC controller
> + *
> + * Ensure that each MMC controller is fully reset.  Controllers
> + * left in an unknown state (by bootloader) may prevent retention
> + * or OFF-mode.  This is especially important in cases where the
> + * MMC driver is not enabled, _or_ built as a module.
> + *
> + * In order for reset to work, interface, functional and debounce
> + * clocks must be enabled.  The debounce clock comes from func_32k_clk
> + * and is not under SW control, so we only enable i- and f-clocks.
> + **/
> +static void __init omap_hsmmc_reset(void)
> +{
> +	u32 i, nr_controllers = cpu_is_omap34xx() ? OMAP34XX_NR_MMC :
> +		OMAP24XX_NR_MMC;
> +
> +	for (i = 0; i < nr_controllers; i++) {
> +		u32 v, base = 0;
> +		struct clk *iclk, *fclk;
> +		struct device *dev = &dummy_pdev.dev;
> +
> +		switch (i) {
> +		case 0:
> +			base = OMAP2_MMC1_BASE;
> +			break;
> +		case 1:
> +			base = OMAP2_MMC2_BASE;
> +			break;
> +		case 2:
> +			base = OMAP3_MMC3_BASE;
> +			break;
> +		}
> +
> +		dummy_pdev.id = i;
> +		iclk = clk_get(dev, "mmchs_ick");
> +		if (iclk && clk_enable(iclk))
> +			iclk = NULL;
> +
> +		fclk = clk_get(dev, "mmchs_fck");
> +		if (fclk && clk_enable(fclk))
> +			fclk = NULL;
> +
> +		if (!iclk || !fclk) {
> +			printk(KERN_WARNING
> +			       "%s: Unable to enable clocks for MMC%d, "
> +			       "cannot reset.\n",  __func__, i);
> +			break;
> +		}
> +
> +		omap_writel(MMCHS_SYSCONFIG_SWRESET, base + MMCHS_SYSCONFIG);
> +		v = omap_readl(base + MMCHS_SYSSTATUS);
> +		while (!(omap_readl(base + MMCHS_SYSSTATUS) &
> +			 MMCHS_SYSSTATUS_RESETDONE))
> +			cpu_relax();
> +
> +		if (fclk) {
> +			clk_disable(fclk);
> +			clk_put(fclk);
> +		}
> +		if (iclk) {
> +			clk_disable(iclk);
> +			clk_put(iclk);
> +		}
> +	}
> +}
> +#else
> +static inline void omap_hsmmc_reset(void) {}
> +#endif
> +
>  #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \
>  	defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
>  
> @@ -477,6 +561,7 @@ static int __init omap2_init_devices(void)
>  	/* please keep these calls, and their implementations above,
>  	 * in alphabetical order so they're easier to sort through.
>  	 */
> +	omap_hsmmc_reset();
>  	omap_init_camera();
>  	omap_init_mbox();
>  	omap_init_mcspi();
> -- 
> 1.6.0.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup
  2008-12-01 16:22   ` [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup Kevin Hilman
  2008-12-01 16:22     ` [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init Kevin Hilman
@ 2008-12-06  6:23     ` Paul Walmsley
  1 sibling, 0 replies; 12+ messages in thread
From: Paul Walmsley @ 2008-12-06  6:23 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap

Hi Kevin,

one quick comment.

On Mon, 1 Dec 2008, Kevin Hilman wrote:

> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
> ---
>  arch/arm/mach-omap2/pm34xx.c              |   55 +++++++++++++++++++++++++++++
>  arch/arm/plat-omap/include/mach/control.h |    5 +++
>  2 files changed, 60 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
> index bd74183..6ff6449 100644
> --- a/arch/arm/mach-omap2/pm34xx.c
> +++ b/arch/arm/mach-omap2/pm34xx.c
> @@ -29,6 +29,7 @@
>  #include <mach/pm.h>
>  #include <mach/clockdomain.h>
>  #include <mach/powerdomain.h>
> +#include <mach/control.h>
>  
>  #include "cm.h"
>  #include "cm-regbits-34xx.h"
> @@ -363,6 +364,58 @@ static struct platform_suspend_ops omap_pm_ops = {
>  	.valid		= suspend_valid_only_mem,
>  };
>  
> +
> +/**
> + * omap3_iva_idle(): ensure IVA is in idle so it can be put into
> + *                   retention
> + *
> + * In cases where IVA2 is activated by bootcode, it may prevent
> + * full-chip retention or off-mode because it is not idle.  This
> + * function forces the IVA2 into idle state so it can go
> + * into retention/off and thus allow full-chip retention/off.
> + *
> + **/
> +static void __init omap3_iva_idle(void)
> +{
> +	struct clk *iva2_ck;
> +
> +	iva2_ck = clk_get(NULL, "iva2_fclk");

This should be "iva2_fck", right?

> +	if (!iva2_ck) {
> +		pr_err("Unable to get IVA2 fclk: cannot force idle.\n");
> +		return;
> +	}
> +
> +	/* Disable IVA2 clock */
> +	clk_disable(iva2_ck);
> +
> +	/* Reset IVA2 */
> +	prm_write_mod_reg(OMAP3430_RST1_IVA2 |
> +			  OMAP3430_RST2_IVA2 |
> +			  OMAP3430_RST3_IVA2,
> +			  OMAP3430_IVA2_MOD, RM_RSTCTRL);
> +
> +	/* Enable IVA2 clock */
> +	clk_enable(iva2_ck);
> +
> +	/* Set IVA2 boot mode to 'idle' */
> +	omap_ctrl_writel(OMAP3_IVA2_BOOTMOD_IDLE,
> +			 OMAP343X_CONTROL_IVA2_BOOTMOD);
> +
> +	/* Un-reset IVA2 */
> +	prm_write_mod_reg(0, OMAP3430_IVA2_MOD, RM_RSTCTRL);
> +
> +	/* Disable IVA2 clocks */
> +	clk_disable(iva2_ck);
> +
> +	/* Reset IVA2 */
> +	prm_write_mod_reg(OMAP3430_RST1_IVA2 |
> +			  OMAP3430_RST2_IVA2 |
> +			  OMAP3430_RST3_IVA2,
> +			  OMAP3430_IVA2_MOD, RM_RSTCTRL);
> +
> +	clk_put(iva2_ck);
> +}
> +
>  static void __init prcm_setup_regs(void)
>  {
>  	/* XXX Reset all wkdeps. This should be done when initializing
> @@ -514,6 +567,8 @@ static void __init prcm_setup_regs(void)
>  	 * it is selected to mpu wakeup goup */
>  	prm_write_mod_reg(OMAP3430_IO_EN | OMAP3430_WKUP_EN,
>  			OCP_MOD, OMAP2_PRM_IRQENABLE_MPU_OFFSET);
> +
> +	omap3_iva_idle();
>  }
>  
>  static int __init pwrdms_setup(struct powerdomain *pwrdm)
> diff --git a/arch/arm/plat-omap/include/mach/control.h b/arch/arm/plat-omap/include/mach/control.h
> index ee3c39e..b51f7fd 100644
> --- a/arch/arm/plat-omap/include/mach/control.h
> +++ b/arch/arm/plat-omap/include/mach/control.h
> @@ -208,6 +208,11 @@
>  #define OMAP2_PBIASLITEPWRDNZ0		(1 << 1)
>  #define OMAP2_PBIASLITEVMODE0		(1 << 0)
>  
> +/* CONTROL_IVA2_BOOTMOD bits */
> +#define OMAP3_IVA2_BOOTMOD_SHIFT	0
> +#define OMAP3_IVA2_BOOTMOD_MASK		(0xf << 0)
> +#define OMAP3_IVA2_BOOTMOD_IDLE		(0x1 << 0)
> +
>  #ifndef __ASSEMBLY__
>  #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
>  extern void __iomem *omap_ctrl_base_get(void);
> -- 
> 1.6.0.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


- Paul

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

* Re: [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot
  2008-12-01 16:22 ` [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot Kevin Hilman
  2008-12-01 16:22   ` [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup Kevin Hilman
  2008-12-06  0:27   ` [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot Tony Lindgren
@ 2008-12-06  6:28   ` Paul Walmsley
  2 siblings, 0 replies; 12+ messages in thread
From: Paul Walmsley @ 2008-12-06  6:28 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap

Hi Kevin,

another quick comment ...

On Mon, 1 Dec 2008, Kevin Hilman wrote:

> The bootloader may leave the MMC in a state which prevents hitting
> retention.  Even when MMC is not compiled in, each MMC module needs to
> be forced into reset.
> 
> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
> ---
>  arch/arm/mach-omap2/devices.c |   85 +++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 85 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
> index 241e418..423647e 100644
> --- a/arch/arm/mach-omap2/devices.c
> +++ b/arch/arm/mach-omap2/devices.c
> @@ -14,6 +14,7 @@
>  #include <linux/init.h>
>  #include <linux/platform_device.h>
>  #include <linux/io.h>
> +#include <linux/clk.h>
>  
>  #include <mach/hardware.h>
>  #include <asm/mach-types.h>
> @@ -358,6 +359,89 @@ static inline void omap_init_sha1_md5(void) { }
>  
>  /*-------------------------------------------------------------------------*/
>  
> +#ifdef CONFIG_ARCH_OMAP3
> +
> +#define MMCHS_SYSCONFIG			0x0010
> +#define MMCHS_SYSCONFIG_SWRESET		(1 << 1)
> +#define MMCHS_SYSSTATUS			0x0014
> +#define MMCHS_SYSSTATUS_RESETDONE	(1 << 0)
> +
> +static struct platform_device dummy_pdev = {
> +	.dev = {
> +		.bus = &platform_bus_type,
> +	},
> +};
> +
> +/**
> + * omap_hsmmc_reset() - Full reset of each HS-MMC controller
> + *
> + * Ensure that each MMC controller is fully reset.  Controllers
> + * left in an unknown state (by bootloader) may prevent retention
> + * or OFF-mode.  This is especially important in cases where the
> + * MMC driver is not enabled, _or_ built as a module.
> + *
> + * In order for reset to work, interface, functional and debounce
> + * clocks must be enabled.  The debounce clock comes from func_32k_clk
> + * and is not under SW control, so we only enable i- and f-clocks.
> + **/
> +static void __init omap_hsmmc_reset(void)
> +{
> +	u32 i, nr_controllers = cpu_is_omap34xx() ? OMAP34XX_NR_MMC :
> +		OMAP24XX_NR_MMC;
> +
> +	for (i = 0; i < nr_controllers; i++) {
> +		u32 v, base = 0;
> +		struct clk *iclk, *fclk;
> +		struct device *dev = &dummy_pdev.dev;
> +
> +		switch (i) {
> +		case 0:
> +			base = OMAP2_MMC1_BASE;
> +			break;
> +		case 1:
> +			base = OMAP2_MMC2_BASE;
> +			break;
> +		case 2:
> +			base = OMAP3_MMC3_BASE;
> +			break;
> +		}
> +
> +		dummy_pdev.id = i;
> +		iclk = clk_get(dev, "mmchs_ick");
> +		if (iclk && clk_enable(iclk))
> +			iclk = NULL;
> +
> +		fclk = clk_get(dev, "mmchs_fck");
> +		if (fclk && clk_enable(fclk))
> +			fclk = NULL;
> +
> +		if (!iclk || !fclk) {
> +			printk(KERN_WARNING
> +			       "%s: Unable to enable clocks for MMC%d, "
> +			       "cannot reset.\n",  __func__, i);
> +			break;
> +		}
> +
> +		omap_writel(MMCHS_SYSCONFIG_SWRESET, base + MMCHS_SYSCONFIG);
> +		v = omap_readl(base + MMCHS_SYSSTATUS);
> +		while (!(omap_readl(base + MMCHS_SYSSTATUS) &
> +			 MMCHS_SYSSTATUS_RESETDONE))
> +			cpu_relax();

I think Tony is trying to banish omap_{read,write}*(); so these should 
probably be __raw_{read,write}l() with IO_ADDRESS() or maybe ioremap().

> +
> +		if (fclk) {
> +			clk_disable(fclk);
> +			clk_put(fclk);
> +		}
> +		if (iclk) {
> +			clk_disable(iclk);
> +			clk_put(iclk);
> +		}
> +	}
> +}
> +#else
> +static inline void omap_hsmmc_reset(void) {}
> +#endif
> +
>  #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \
>  	defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
>  
> @@ -477,6 +561,7 @@ static int __init omap2_init_devices(void)
>  	/* please keep these calls, and their implementations above,
>  	 * in alphabetical order so they're easier to sort through.
>  	 */
> +	omap_hsmmc_reset();
>  	omap_init_camera();
>  	omap_init_mbox();
>  	omap_init_mcspi();
> -- 
> 1.6.0.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


- Paul

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

* Re: [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init
  2008-12-01 16:22     ` [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init Kevin Hilman
  2008-12-01 16:22       ` [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions Kevin Hilman
@ 2008-12-06  6:37       ` Paul Walmsley
  1 sibling, 0 replies; 12+ messages in thread
From: Paul Walmsley @ 2008-12-06  6:37 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap

On Mon, 1 Dec 2008, Kevin Hilman wrote:

> Add D2D clocks (modem_fck, sad2d_ick, mad2d_ick) to clock framework,
> and also ensure that auto-idle bits are set for these clocks during
> PRCM init.
> 
> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>

Acked-by: Paul Walmsley <paul@pwsan.com>

- Paul

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

* Re: [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions
  2008-12-01 16:22       ` [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions Kevin Hilman
  2008-12-01 16:22         ` [PATCH v2 5/5] OMAP3: PM: Ensure modem is reset during PRCM init Kevin Hilman
@ 2008-12-06  6:38         ` Paul Walmsley
  1 sibling, 0 replies; 12+ messages in thread
From: Paul Walmsley @ 2008-12-06  6:38 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap

On Mon, 1 Dec 2008, Kevin Hilman wrote:

> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
> ---
>  arch/arm/mach-omap2/clockdomains.h |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/clockdomains.h b/arch/arm/mach-omap2/clockdomains.h
> index bafa650..49a5774 100644
> --- a/arch/arm/mach-omap2/clockdomains.h
> +++ b/arch/arm/mach-omap2/clockdomains.h
> @@ -198,7 +198,7 @@ static struct clockdomain sgx_clkdm = {
>  static struct clockdomain d2d_clkdm = {
>  	.name		= "d2d_clkdm",
>  	.pwrdm		= { .name = "core_pwrdm" },
> -	.flags		= CLKDM_CAN_HWSUP,
> +	.flags		= CLKDM_CAN_HWSUP_SWSUP,
>  	.clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK,
>  	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
>  };

Acked-by: Paul Walmsley <paul@pwsan.com>

might be nice to have a short commit msg.


- Paul

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

end of thread, other threads:[~2008-12-06  6:38 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-01 16:22 [PATCH v2 0/5] extra module resets to ensure full-chip idle Kevin Hilman
2008-12-01 16:22 ` [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot Kevin Hilman
2008-12-01 16:22   ` [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup Kevin Hilman
2008-12-01 16:22     ` [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init Kevin Hilman
2008-12-01 16:22       ` [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions Kevin Hilman
2008-12-01 16:22         ` [PATCH v2 5/5] OMAP3: PM: Ensure modem is reset during PRCM init Kevin Hilman
2008-12-06  6:38         ` [PATCH v2 4/5] OMAP3: PM: D2D clockdomain supports SW supervised transitions Paul Walmsley
2008-12-06  6:37       ` [PATCH v2 3/5] OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init Paul Walmsley
2008-12-06  6:23     ` [PATCH v2 2/5] OMAP3: PM: Force IVA2 into idle during bootup Paul Walmsley
2008-12-06  0:27   ` [PATCH v2 1/5] OMAP3: PM: HSMMC: force MMC module reset on boot Tony Lindgren
2008-12-06  6:28   ` Paul Walmsley
2008-12-01 16:36 ` [PATCH v2 0/5] extra module resets to ensure full-chip idle Kevin Hilman

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.