From: Fabio Estevam <festevam@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 6/6] mx6: soc: Disable VDDPU regulator
Date: Thu, 26 Dec 2013 14:51:35 -0200 [thread overview]
Message-ID: <1388076695-28174-6-git-send-email-festevam@gmail.com> (raw)
In-Reply-To: <1388076695-28174-1-git-send-email-festevam@gmail.com>
From: Fabio Estevam <fabio.estevam@freescale.com>
As U-boot does not use GPU/VPU peripherals, shutdown the VDDPU regulator
in order to save power.
Signed-off-by: Anson Huang <b20788@freescale.com>
Signed-off-by: Jason Liu <r64343@freescale.com>
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
---
Changes since v1:
- Disable vddpu the same way as in kernel
arch/arm/cpu/armv7/mx6/soc.c | 41 ++++++++++++++++++++++++++++++++
arch/arm/include/asm/arch-mx6/crm_regs.h | 1 +
arch/arm/include/asm/arch-mx6/imx-regs.h | 23 ++++++++++++++++++
3 files changed, 65 insertions(+)
diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
index 0208cba..b944edd 100644
--- a/arch/arm/cpu/armv7/mx6/soc.c
+++ b/arch/arm/cpu/armv7/mx6/soc.c
@@ -19,6 +19,8 @@
#include <asm/arch/mxc_hdmi.h>
#include <asm/arch/crm_regs.h>
+#define VDDPU_MASK (0x1f << 9)
+
enum ldo_reg {
LDO_ARM,
LDO_SOC,
@@ -177,11 +179,50 @@ static void imx_set_wdog_powerdown(bool enable)
writew(enable, &wdog2->wmcr);
}
+static void imx_set_vddpu_power_down(void)
+{
+ struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
+ struct gpc_regs *gpc = (struct gpc_regs *)GPC_BASE_ADDR;
+
+ u32 reg;
+
+ /*
+ * Disable the brown out detection since we are going to be
+ * disabling the LDO.
+ */
+ reg = readl(&anatop->ana_misc2);
+ reg &= ~ANADIG_ANA_MISC2_REG1_BO_EN;
+ writel(reg, &anatop->ana_misc2);
+
+ /* need to power down xPU in GPC before turning off PU LDO */
+ reg = readl(&gpc->gpu_ctrl);
+ writel(reg | 0x1, &gpc->gpu_ctrl);
+
+ reg = readl(&gpc->ctrl);
+ writel(reg | 0x1, &gpc->ctrl);
+ while (readl(&gpc->ctrl) & 0x1)
+ ;
+
+ /* Mask the ANATOP brown out interrupt in the GPC. */
+ reg = readl(&gpc->imr4);
+ reg |= 0x80000000;
+ writel(reg, &gpc->imr4);
+
+ /* disable VDDPU */
+ writel(VDDPU_MASK, &anatop->reg_core_clr);
+
+ /* Clear the BO interrupt in the ANATOP. */
+ reg = readl(&anatop->ana_misc1);
+ reg |= 0x80000000;
+ writel(reg, &anatop->ana_misc1);
+}
+
int arch_cpu_init(void)
{
init_aips();
imx_set_wdog_powerdown(false); /* Disable PDE bit of WMCR register */
+ imx_set_vddpu_power_down();
#ifdef CONFIG_APBH_DMA
/* Start APBH DMA */
diff --git a/arch/arm/include/asm/arch-mx6/crm_regs.h b/arch/arm/include/asm/arch-mx6/crm_regs.h
index 7202073..aede126 100644
--- a/arch/arm/include/asm/arch-mx6/crm_regs.h
+++ b/arch/arm/include/asm/arch-mx6/crm_regs.h
@@ -890,4 +890,5 @@ struct mxc_ccm_reg {
#define BF_ANADIG_PFD_528_PFD0_FRAC(v) \
(((v) << 0) & BM_ANADIG_PFD_528_PFD0_FRAC)
+#define ANADIG_ANA_MISC2_REG1_BO_EN (1 << 13)
#endif /*__ARCH_ARM_MACH_MX6_CCM_REGS_H__ */
diff --git a/arch/arm/include/asm/arch-mx6/imx-regs.h b/arch/arm/include/asm/arch-mx6/imx-regs.h
index 7ef7152..fb0c4c7 100644
--- a/arch/arm/include/asm/arch-mx6/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx6/imx-regs.h
@@ -659,5 +659,28 @@ struct wdog_regs {
u16 wmcr; /* Miscellaneous Control */
};
+struct gpc_regs {
+ u32 ctrl; /* 0x000 */
+ u32 pgr; /* 0x004 */
+ u32 imr1; /* 0x008 */
+ u32 imr2; /* 0x00c */
+ u32 imr3; /* 0x010 */
+ u32 imr4; /* 0x014 */
+ u32 isr1; /* 0x018 */
+ u32 isr2; /* 0x01c */
+ u32 isr3; /* 0x020 */
+ u32 isr4; /* 0x024 */
+ u32 reserved1[0x86];
+ u32 gpu_ctrl; /* 0x260 */
+ u32 gpu_pupscr; /* 0x264 */
+ u32 gpu_pdnscr; /* 0x268 */
+ u32 gpu_sr; /* 0x26c */
+ u32 reserved2[0xc];
+ u32 cpu_ctrl; /* 0x2a0 */
+ u32 cpu_pupscr; /* 0x2a4 */
+ u32 cpu_pdnscr; /* 0x2a8 */
+ u32 cpu_sr; /* 0x2ac */
+};
+
#endif /* __ASSEMBLER__*/
#endif /* __ASM_ARCH_MX6_IMX_REGS_H__ */
--
1.8.1.2
next prev parent reply other threads:[~2013-12-26 16:51 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-26 16:51 [U-Boot] [PATCH v2 1/6] mx6: soc: Staticize set_vddsoc() Fabio Estevam
2013-12-26 16:51 ` [U-Boot] [PATCH v2 2/6] mx6: soc: Clear the LDO ramp values up prior to setting the LDO voltages Fabio Estevam
2014-01-02 16:18 ` Stefano Babic
2013-12-26 16:51 ` [U-Boot] [PATCH v2 3/6] mx6: soc: Set the VDDSOC at 1.175 V Fabio Estevam
2014-01-02 16:19 ` Stefano Babic
2013-12-26 16:51 ` [U-Boot] [PATCH v2 4/6] mx6: soc: Introduce set_ldo_voltage() Fabio Estevam
2014-01-02 16:20 ` Stefano Babic
2013-12-26 16:51 ` [U-Boot] [PATCH v2 5/6] mx6: soc: Add the required LDO ramp up delay Fabio Estevam
2014-01-02 16:20 ` Stefano Babic
2013-12-26 16:51 ` Fabio Estevam [this message]
2014-01-02 16:21 ` [U-Boot] [PATCH v2 6/6] mx6: soc: Disable VDDPU regulator Stefano Babic
2014-01-09 17:50 ` Otavio Salvador
2014-01-09 19:06 ` Fabio Estevam
2014-01-09 19:11 ` Otavio Salvador
2014-01-09 19:13 ` Fabio Estevam
2014-01-09 19:30 ` Fabio Estevam
2014-01-09 19:39 ` Otavio Salvador
2014-01-09 20:34 ` Fabio Estevam
2014-01-09 21:31 ` Stefano Babic
2014-01-15 17:12 ` Otavio Salvador
2014-01-15 17:33 ` Stefano Babic
2014-01-16 8:40 ` Pierre Aubert
2014-01-16 11:19 ` Fabio Estevam
2014-01-16 11:25 ` Pierre AUBERT
2014-01-02 16:21 ` [U-Boot] [PATCH v2 1/6] mx6: soc: Staticize set_vddsoc() Stefano Babic
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1388076695-28174-6-git-send-email-festevam@gmail.com \
--to=festevam@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.