aboutsummaryrefslogtreecommitdiff
path: root/core/arch/arm/plat-imx/imx_pm.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/arch/arm/plat-imx/imx_pm.h')
-rw-r--r--core/arch/arm/plat-imx/imx_pm.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/core/arch/arm/plat-imx/imx_pm.h b/core/arch/arm/plat-imx/imx_pm.h
new file mode 100644
index 00000000..7a0283bd
--- /dev/null
+++ b/core/arch/arm/plat-imx/imx_pm.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2017 NXP
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __IMX_PM_H
+#define __IMX_PM_H
+
+#include <stdint.h>
+
+#define PM_INFO_MX7_M4_RESERVE0_OFF 0x0
+#define PM_INFO_MX7_M4_RESERVE1_OFF 0x4
+#define PM_INFO_MX7_M4_RESERVE2_OFF 0x8
+#define PM_INFO_MX7_PBASE_OFF 0xc
+#define PM_INFO_MX7_ENTRY_OFF 0x10
+#define PM_INFO_MX7_RESUME_ADDR_OFF 0x14
+#define PM_INFO_MX7_DDR_TYPE_OFF 0x18
+#define PM_INFO_MX7_SIZE_OFF 0x1c
+#define PM_INFO_MX7_DDRC_P_OFF 0x20
+#define PM_INFO_MX7_DDRC_V_OFF 0x24
+#define PM_INFO_MX7_DDRC_PHY_P_OFF 0x28
+#define PM_INFO_MX7_DDRC_PHY_V_OFF 0x2c
+#define PM_INFO_MX7_SRC_P_OFF 0x30
+#define PM_INFO_MX7_SRC_V_OFF 0x34
+#define PM_INFO_MX7_IOMUXC_GPR_P_OFF 0x38
+#define PM_INFO_MX7_IOMUXC_GPR_V_OFF 0x3c
+#define PM_INFO_MX7_CCM_P_OFF 0x40
+#define PM_INFO_MX7_CCM_V_OFF 0x44
+#define PM_INFO_MX7_GPC_P_OFF 0x48
+#define PM_INFO_MX7_GPC_V_OFF 0x4c
+#define PM_INFO_MX7_SNVS_P_OFF 0x50
+#define PM_INFO_MX7_SNVS_V_OFF 0x54
+#define PM_INFO_MX7_ANATOP_P_OFF 0x58
+#define PM_INFO_MX7_ANATOP_V_OFF 0x5c
+#define PM_INFO_MX7_LPSR_P_OFF 0x60
+#define PM_INFO_MX7_LPSR_V_OFF 0x64
+#define PM_INFO_MX7_GIC_DIST_P_OFF 0x68
+#define PM_INFO_MX7_GIC_DIST_V_OFF 0x6c
+#define PM_INFO_MX7_TTBR0_OFF 0x70
+#define PM_INFO_MX7_TTBR1_OFF 0x74
+#define PM_INFO_MX7_DDRC_REG_NUM_OFF 0x78
+#define PM_INFO_MX7_DDRC_REG_OFF 0x7C
+#define PM_INFO_MX7_DDRC_PHY_REG_NUM_OFF 0x17C
+#define PM_INFO_MX7_DDRC_PHY_REG_OFF 0x180
+
+#define MX7_DDRC_NUM 32
+#define MX7_DDRC_PHY_NUM 16
+
+
+#define SUSPEND_OCRAM_SIZE 0x1000
+#define LOWPOWER_IDLE_OCRAM_SIZE 0x1000
+
+#define SUSPEND_OCRAM_OFFSET 0x0
+#define LOWPOWER_IDLE_OCRAM_OFFSET 0x1000
+
+#ifndef ASM
+#include <sm/sm.h>
+
+struct imx7_pm_info {
+ uint32_t m4_reserve0;
+ uint32_t m4_reserve1;
+ uint32_t m4_reserve2;
+ paddr_t pa_base; /* pa of pm_info */
+ uintptr_t entry;
+ paddr_t tee_resume;
+ uint32_t ddr_type;
+ uint32_t pm_info_size;
+ paddr_t ddrc_pa_base;
+ vaddr_t ddrc_va_base;
+ paddr_t ddrc_phy_pa_base;
+ vaddr_t ddrc_phy_va_base;
+ paddr_t src_pa_base;
+ vaddr_t src_va_base;
+ paddr_t iomuxc_gpr_pa_base;
+ vaddr_t iomuxc_gpr_va_base;
+ paddr_t ccm_pa_base;
+ vaddr_t ccm_va_base;
+ paddr_t gpc_pa_base;
+ vaddr_t gpc_va_base;
+ paddr_t snvs_pa_base;
+ vaddr_t snvs_va_base;
+ paddr_t anatop_pa_base;
+ vaddr_t anatop_va_base;
+ paddr_t lpsr_pa_base;
+ vaddr_t lpsr_va_base;
+ paddr_t gic_pa_base;
+ vaddr_t gic_va_base;
+ uint32_t ttbr0;
+ uint32_t ttbr1;
+ uint32_t ddrc_num;
+ uint32_t ddrc_val[MX7_DDRC_NUM][2];
+ uint32_t ddrc_phy_num;
+ uint32_t ddrc_phy_val[MX7_DDRC_NUM][2];
+} __aligned(8);
+
+struct suspend_save_regs {
+ uint32_t irq[3];
+ uint32_t fiq[3];
+ uint32_t und[3];
+ uint32_t abt[3];
+ uint32_t mon[3];
+} __aligned(8);
+
+struct imx7_pm_data {
+ uint32_t ddr_type;
+ uint32_t ddrc_num;
+ uint32_t (*ddrc_offset)[2];
+ uint32_t ddrc_phy_num;
+ uint32_t (*ddrc_phy_offset)[2];
+};
+
+void imx7_suspend(struct imx7_pm_info *info);
+void imx7_resume(void);
+void ca7_cpu_resume(void);
+int imx7_suspend_init(void);
+int pm_imx7_iram_tbl_init(void);
+int imx7_cpu_suspend(uint32_t power_state, uintptr_t entry,
+ uint32_t context_id, struct sm_nsec_ctx *nsec);
+#endif
+
+#endif