diff options
author | Anson Huang <Anson.Huang@nxp.com> | 2018-06-02 22:33:44 -0400 |
---|---|---|
committer | Shawn Guo <shawnguo@kernel.org> | 2018-06-18 21:06:48 -0400 |
commit | c791bbbf812a18a7831619783f12a316beeac558 (patch) | |
tree | 8948f88278ffc027c54d952233ddacc6edd00be6 /arch/arm/mach-imx/gpc.c | |
parent | 22021948c98c5d86a7b44d2c610bf610dcea4a81 (diff) |
ARM: imx: add L2 page power control for GPC
Some platforms like i.MX6UL/i.MX6SLL have L2
page power control in GPC, it needs to be
disabled if ARM is power gated and L2 is NOT
flushed, add GPC interface to control it.
Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
Diffstat (limited to 'arch/arm/mach-imx/gpc.c')
-rw-r--r-- | arch/arm/mach-imx/gpc.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/gpc.c b/arch/arm/mach-imx/gpc.c index de535cb679b3..e11159d40fb8 100644 --- a/arch/arm/mach-imx/gpc.c +++ b/arch/arm/mach-imx/gpc.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include "common.h" | 20 | #include "common.h" |
21 | #include "hardware.h" | 21 | #include "hardware.h" |
22 | 22 | ||
23 | #define GPC_CNTR 0x0 | ||
23 | #define GPC_IMR1 0x008 | 24 | #define GPC_IMR1 0x008 |
24 | #define GPC_PGC_CPU_PDN 0x2a0 | 25 | #define GPC_PGC_CPU_PDN 0x2a0 |
25 | #define GPC_PGC_CPU_PUPSCR 0x2a4 | 26 | #define GPC_PGC_CPU_PUPSCR 0x2a4 |
@@ -27,6 +28,8 @@ | |||
27 | #define GPC_PGC_SW2ISO_SHIFT 0x8 | 28 | #define GPC_PGC_SW2ISO_SHIFT 0x8 |
28 | #define GPC_PGC_SW_SHIFT 0x0 | 29 | #define GPC_PGC_SW_SHIFT 0x0 |
29 | 30 | ||
31 | #define GPC_CNTR_L2_PGE_SHIFT 22 | ||
32 | |||
30 | #define IMR_NUM 4 | 33 | #define IMR_NUM 4 |
31 | #define GPC_MAX_IRQS (IMR_NUM * 32) | 34 | #define GPC_MAX_IRQS (IMR_NUM * 32) |
32 | 35 | ||
@@ -51,6 +54,17 @@ void imx_gpc_set_arm_power_in_lpm(bool power_off) | |||
51 | writel_relaxed(power_off, gpc_base + GPC_PGC_CPU_PDN); | 54 | writel_relaxed(power_off, gpc_base + GPC_PGC_CPU_PDN); |
52 | } | 55 | } |
53 | 56 | ||
57 | void imx_gpc_set_l2_mem_power_in_lpm(bool power_off) | ||
58 | { | ||
59 | u32 val; | ||
60 | |||
61 | val = readl_relaxed(gpc_base + GPC_CNTR); | ||
62 | val &= ~(1 << GPC_CNTR_L2_PGE_SHIFT); | ||
63 | if (power_off) | ||
64 | val |= 1 << GPC_CNTR_L2_PGE_SHIFT; | ||
65 | writel_relaxed(val, gpc_base + GPC_CNTR); | ||
66 | } | ||
67 | |||
54 | void imx_gpc_pre_suspend(bool arm_power_off) | 68 | void imx_gpc_pre_suspend(bool arm_power_off) |
55 | { | 69 | { |
56 | void __iomem *reg_imr1 = gpc_base + GPC_IMR1; | 70 | void __iomem *reg_imr1 = gpc_base + GPC_IMR1; |