141d37e61SDave Gerlach/* SPDX-License-Identifier: GPL-2.0 */ 241d37e61SDave Gerlach/* 341d37e61SDave Gerlach * Low level suspend code for AM43XX SoCs 441d37e61SDave Gerlach * 541d37e61SDave Gerlach * Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ 641d37e61SDave Gerlach * Dave Gerlach, Vaibhav Bedia 741d37e61SDave Gerlach */ 841d37e61SDave Gerlach 9*41d9d44dSDave Gerlach#include <generated/ti-emif-asm-offsets.h> 10*41d9d44dSDave Gerlach#include <generated/ti-pm-asm-offsets.h> 1141d37e61SDave Gerlach#include <linux/linkage.h> 1241d37e61SDave Gerlach#include <linux/ti-emif-sram.h> 1341d37e61SDave Gerlach 1441d37e61SDave Gerlach#include <asm/assembler.h> 1541d37e61SDave Gerlach#include <asm/hardware/cache-l2x0.h> 1641d37e61SDave Gerlach#include <asm/memory.h> 1741d37e61SDave Gerlach 1841d37e61SDave Gerlach#include "cm33xx.h" 1941d37e61SDave Gerlach#include "common.h" 2041d37e61SDave Gerlach#include "iomap.h" 2141d37e61SDave Gerlach#include "omap-secure.h" 2241d37e61SDave Gerlach#include "omap44xx.h" 2341d37e61SDave Gerlach#include "prm33xx.h" 2441d37e61SDave Gerlach#include "prcm43xx.h" 2541d37e61SDave Gerlach 2641d37e61SDave Gerlach#define AM33XX_CM_CLKCTRL_MODULESTATE_DISABLED 0x00030000 2741d37e61SDave Gerlach#define AM33XX_CM_CLKCTRL_MODULEMODE_DISABLE 0x0003 2841d37e61SDave Gerlach#define AM33XX_CM_CLKCTRL_MODULEMODE_ENABLE 0x0002 2941d37e61SDave Gerlach 3041d37e61SDave Gerlach#define AM43XX_EMIF_POWEROFF_ENABLE 0x1 3141d37e61SDave Gerlach#define AM43XX_EMIF_POWEROFF_DISABLE 0x0 3241d37e61SDave Gerlach 3341d37e61SDave Gerlach#define AM43XX_CM_CLKSTCTRL_CLKTRCTRL_SW_SLEEP 0x1 3441d37e61SDave Gerlach#define AM43XX_CM_CLKSTCTRL_CLKTRCTRL_HW_AUTO 0x3 3541d37e61SDave Gerlach 3641d37e61SDave Gerlach#define AM43XX_CM_BASE 0x44DF0000 3741d37e61SDave Gerlach 3841d37e61SDave Gerlach#define AM43XX_CM_REGADDR(inst, reg) \ 3941d37e61SDave Gerlach AM33XX_L4_WK_IO_ADDRESS(AM43XX_CM_BASE + (inst) + (reg)) 4041d37e61SDave Gerlach 4141d37e61SDave Gerlach#define AM43XX_CM_MPU_CLKSTCTRL AM43XX_CM_REGADDR(AM43XX_CM_MPU_INST, \ 4241d37e61SDave Gerlach AM43XX_CM_MPU_MPU_CDOFFS) 4341d37e61SDave Gerlach#define AM43XX_CM_MPU_MPU_CLKCTRL AM43XX_CM_REGADDR(AM43XX_CM_MPU_INST, \ 4441d37e61SDave Gerlach AM43XX_CM_MPU_MPU_CLKCTRL_OFFSET) 4541d37e61SDave Gerlach#define AM43XX_CM_PER_EMIF_CLKCTRL AM43XX_CM_REGADDR(AM43XX_CM_PER_INST, \ 4641d37e61SDave Gerlach AM43XX_CM_PER_EMIF_CLKCTRL_OFFSET) 4741d37e61SDave Gerlach#define AM43XX_PRM_EMIF_CTRL_OFFSET 0x0030 4841d37e61SDave Gerlach 4941d37e61SDave Gerlach .arm 5041d37e61SDave Gerlach .align 3 5141d37e61SDave Gerlach 5241d37e61SDave GerlachENTRY(am43xx_do_wfi) 5341d37e61SDave Gerlach stmfd sp!, {r4 - r11, lr} @ save registers on stack 5441d37e61SDave Gerlach 5541d37e61SDave Gerlach /* Retrieve l2 cache virt address BEFORE we shut off EMIF */ 5641d37e61SDave Gerlach ldr r1, get_l2cache_base 5741d37e61SDave Gerlach blx r1 5841d37e61SDave Gerlach mov r8, r0 5941d37e61SDave Gerlach 6041d37e61SDave Gerlach /* 6141d37e61SDave Gerlach * Flush all data from the L1 and L2 data cache before disabling 6241d37e61SDave Gerlach * SCTLR.C bit. 6341d37e61SDave Gerlach */ 6441d37e61SDave Gerlach ldr r1, kernel_flush 6541d37e61SDave Gerlach blx r1 6641d37e61SDave Gerlach 6741d37e61SDave Gerlach /* 6841d37e61SDave Gerlach * Clear the SCTLR.C bit to prevent further data cache 6941d37e61SDave Gerlach * allocation. Clearing SCTLR.C would make all the data accesses 7041d37e61SDave Gerlach * strongly ordered and would not hit the cache. 7141d37e61SDave Gerlach */ 7241d37e61SDave Gerlach mrc p15, 0, r0, c1, c0, 0 7341d37e61SDave Gerlach bic r0, r0, #(1 << 2) @ Disable the C bit 7441d37e61SDave Gerlach mcr p15, 0, r0, c1, c0, 0 7541d37e61SDave Gerlach isb 7641d37e61SDave Gerlach dsb 7741d37e61SDave Gerlach 7841d37e61SDave Gerlach /* 7941d37e61SDave Gerlach * Invalidate L1 and L2 data cache. 8041d37e61SDave Gerlach */ 8141d37e61SDave Gerlach ldr r1, kernel_flush 8241d37e61SDave Gerlach blx r1 8341d37e61SDave Gerlach 8441d37e61SDave Gerlach#ifdef CONFIG_CACHE_L2X0 8541d37e61SDave Gerlach /* 8641d37e61SDave Gerlach * Clean and invalidate the L2 cache. 8741d37e61SDave Gerlach */ 8841d37e61SDave Gerlach#ifdef CONFIG_PL310_ERRATA_727915 8941d37e61SDave Gerlach mov r0, #0x03 9041d37e61SDave Gerlach mov r12, #OMAP4_MON_L2X0_DBG_CTRL_INDEX 9141d37e61SDave Gerlach dsb 9241d37e61SDave Gerlach smc #0 9341d37e61SDave Gerlach dsb 9441d37e61SDave Gerlach#endif 9541d37e61SDave Gerlach mov r0, r8 9641d37e61SDave Gerlach adr r4, am43xx_pm_ro_sram_data 9741d37e61SDave Gerlach ldr r3, [r4, #AMX3_PM_RO_SRAM_DATA_VIRT_OFFSET] 9841d37e61SDave Gerlach 9941d37e61SDave Gerlach mov r2, r0 10041d37e61SDave Gerlach ldr r0, [r2, #L2X0_AUX_CTRL] 10141d37e61SDave Gerlach str r0, [r3, #AMX3_PM_L2_AUX_CTRL_VAL_OFFSET] 10241d37e61SDave Gerlach ldr r0, [r2, #L310_PREFETCH_CTRL] 10341d37e61SDave Gerlach str r0, [r3, #AMX3_PM_L2_PREFETCH_CTRL_VAL_OFFSET] 10441d37e61SDave Gerlach 10541d37e61SDave Gerlach ldr r0, l2_val 10641d37e61SDave Gerlach str r0, [r2, #L2X0_CLEAN_INV_WAY] 10741d37e61SDave Gerlachwait: 10841d37e61SDave Gerlach ldr r0, [r2, #L2X0_CLEAN_INV_WAY] 10941d37e61SDave Gerlach ldr r1, l2_val 11041d37e61SDave Gerlach ands r0, r0, r1 11141d37e61SDave Gerlach bne wait 11241d37e61SDave Gerlach#ifdef CONFIG_PL310_ERRATA_727915 11341d37e61SDave Gerlach mov r0, #0x00 11441d37e61SDave Gerlach mov r12, #OMAP4_MON_L2X0_DBG_CTRL_INDEX 11541d37e61SDave Gerlach dsb 11641d37e61SDave Gerlach smc #0 11741d37e61SDave Gerlach dsb 11841d37e61SDave Gerlach#endif 11941d37e61SDave Gerlachl2x_sync: 12041d37e61SDave Gerlach mov r0, r8 12141d37e61SDave Gerlach mov r2, r0 12241d37e61SDave Gerlach mov r0, #0x0 12341d37e61SDave Gerlach str r0, [r2, #L2X0_CACHE_SYNC] 12441d37e61SDave Gerlachsync: 12541d37e61SDave Gerlach ldr r0, [r2, #L2X0_CACHE_SYNC] 12641d37e61SDave Gerlach ands r0, r0, #0x1 12741d37e61SDave Gerlach bne sync 12841d37e61SDave Gerlach#endif 12941d37e61SDave Gerlach 13041d37e61SDave Gerlach adr r9, am43xx_emif_sram_table 13141d37e61SDave Gerlach 13241d37e61SDave Gerlach ldr r3, [r9, #EMIF_PM_ENTER_SR_OFFSET] 13341d37e61SDave Gerlach blx r3 13441d37e61SDave Gerlach 13541d37e61SDave Gerlach ldr r3, [r9, #EMIF_PM_SAVE_CONTEXT_OFFSET] 13641d37e61SDave Gerlach blx r3 13741d37e61SDave Gerlach 13841d37e61SDave Gerlach /* Disable EMIF */ 13941d37e61SDave Gerlach ldr r1, am43xx_virt_emif_clkctrl 14041d37e61SDave Gerlach ldr r2, [r1] 14141d37e61SDave Gerlach bic r2, r2, #AM33XX_CM_CLKCTRL_MODULEMODE_DISABLE 14241d37e61SDave Gerlach str r2, [r1] 14341d37e61SDave Gerlach 14441d37e61SDave Gerlachwait_emif_disable: 14541d37e61SDave Gerlach ldr r2, [r1] 14641d37e61SDave Gerlach mov r3, #AM33XX_CM_CLKCTRL_MODULESTATE_DISABLED 14741d37e61SDave Gerlach cmp r2, r3 14841d37e61SDave Gerlach bne wait_emif_disable 14941d37e61SDave Gerlach 15041d37e61SDave Gerlach /* 15141d37e61SDave Gerlach * For the MPU WFI to be registered as an interrupt 15241d37e61SDave Gerlach * to WKUP_M3, MPU_CLKCTRL.MODULEMODE needs to be set 15341d37e61SDave Gerlach * to DISABLED 15441d37e61SDave Gerlach */ 15541d37e61SDave Gerlach ldr r1, am43xx_virt_mpu_clkctrl 15641d37e61SDave Gerlach ldr r2, [r1] 15741d37e61SDave Gerlach bic r2, r2, #AM33XX_CM_CLKCTRL_MODULEMODE_DISABLE 15841d37e61SDave Gerlach str r2, [r1] 15941d37e61SDave Gerlach 16041d37e61SDave Gerlach /* 16141d37e61SDave Gerlach * Put MPU CLKDM to SW_SLEEP 16241d37e61SDave Gerlach */ 16341d37e61SDave Gerlach ldr r1, am43xx_virt_mpu_clkstctrl 16441d37e61SDave Gerlach mov r2, #AM43XX_CM_CLKSTCTRL_CLKTRCTRL_SW_SLEEP 16541d37e61SDave Gerlach str r2, [r1] 16641d37e61SDave Gerlach 16741d37e61SDave Gerlach /* 16841d37e61SDave Gerlach * Execute a barrier instruction to ensure that all cache, 16941d37e61SDave Gerlach * TLB and branch predictor maintenance operations issued 17041d37e61SDave Gerlach * have completed. 17141d37e61SDave Gerlach */ 17241d37e61SDave Gerlach dsb 17341d37e61SDave Gerlach dmb 17441d37e61SDave Gerlach 17541d37e61SDave Gerlach /* 17641d37e61SDave Gerlach * Execute a WFI instruction and wait until the 17741d37e61SDave Gerlach * STANDBYWFI output is asserted to indicate that the 17841d37e61SDave Gerlach * CPU is in idle and low power state. CPU can specualatively 17941d37e61SDave Gerlach * prefetch the instructions so add NOPs after WFI. Sixteen 18041d37e61SDave Gerlach * NOPs as per Cortex-A9 pipeline. 18141d37e61SDave Gerlach */ 18241d37e61SDave Gerlach wfi 18341d37e61SDave Gerlach 18441d37e61SDave Gerlach nop 18541d37e61SDave Gerlach nop 18641d37e61SDave Gerlach nop 18741d37e61SDave Gerlach nop 18841d37e61SDave Gerlach nop 18941d37e61SDave Gerlach nop 19041d37e61SDave Gerlach nop 19141d37e61SDave Gerlach nop 19241d37e61SDave Gerlach nop 19341d37e61SDave Gerlach nop 19441d37e61SDave Gerlach nop 19541d37e61SDave Gerlach nop 19641d37e61SDave Gerlach nop 19741d37e61SDave Gerlach nop 19841d37e61SDave Gerlach nop 19941d37e61SDave Gerlach nop 20041d37e61SDave Gerlach 20141d37e61SDave Gerlach /* We come here in case of an abort due to a late interrupt */ 20241d37e61SDave Gerlach ldr r1, am43xx_virt_mpu_clkstctrl 20341d37e61SDave Gerlach mov r2, #AM43XX_CM_CLKSTCTRL_CLKTRCTRL_HW_AUTO 20441d37e61SDave Gerlach str r2, [r1] 20541d37e61SDave Gerlach 20641d37e61SDave Gerlach /* Set MPU_CLKCTRL.MODULEMODE back to ENABLE */ 20741d37e61SDave Gerlach ldr r1, am43xx_virt_mpu_clkctrl 20841d37e61SDave Gerlach mov r2, #AM33XX_CM_CLKCTRL_MODULEMODE_ENABLE 20941d37e61SDave Gerlach str r2, [r1] 21041d37e61SDave Gerlach 21141d37e61SDave Gerlach /* Re-enable EMIF */ 21241d37e61SDave Gerlach ldr r1, am43xx_virt_emif_clkctrl 21341d37e61SDave Gerlach mov r2, #AM33XX_CM_CLKCTRL_MODULEMODE_ENABLE 21441d37e61SDave Gerlach str r2, [r1] 21541d37e61SDave Gerlachwait_emif_enable: 21641d37e61SDave Gerlach ldr r3, [r1] 21741d37e61SDave Gerlach cmp r2, r3 21841d37e61SDave Gerlach bne wait_emif_enable 21941d37e61SDave Gerlach 22041d37e61SDave Gerlach /* 22141d37e61SDave Gerlach * Set SCTLR.C bit to allow data cache allocation 22241d37e61SDave Gerlach */ 22341d37e61SDave Gerlach mrc p15, 0, r0, c1, c0, 0 22441d37e61SDave Gerlach orr r0, r0, #(1 << 2) @ Enable the C bit 22541d37e61SDave Gerlach mcr p15, 0, r0, c1, c0, 0 22641d37e61SDave Gerlach isb 22741d37e61SDave Gerlach 22841d37e61SDave Gerlach ldr r1, [r9, #EMIF_PM_ABORT_SR_OFFSET] 22941d37e61SDave Gerlach blx r1 23041d37e61SDave Gerlach 23141d37e61SDave Gerlach /* Let the suspend code know about the abort */ 23241d37e61SDave Gerlach mov r0, #1 23341d37e61SDave Gerlach ldmfd sp!, {r4 - r11, pc} @ restore regs and return 23441d37e61SDave GerlachENDPROC(am43xx_do_wfi) 23541d37e61SDave Gerlach 23641d37e61SDave Gerlach .align 23741d37e61SDave GerlachENTRY(am43xx_resume_offset) 23841d37e61SDave Gerlach .word . - am43xx_do_wfi 23941d37e61SDave Gerlach 24041d37e61SDave GerlachENTRY(am43xx_resume_from_deep_sleep) 24141d37e61SDave Gerlach /* Set MPU CLKSTCTRL to HW AUTO so that CPUidle works properly */ 24241d37e61SDave Gerlach ldr r1, am43xx_virt_mpu_clkstctrl 24341d37e61SDave Gerlach mov r2, #AM43XX_CM_CLKSTCTRL_CLKTRCTRL_HW_AUTO 24441d37e61SDave Gerlach str r2, [r1] 24541d37e61SDave Gerlach 24641d37e61SDave Gerlach /* For AM43xx, use EMIF power down until context is restored */ 24741d37e61SDave Gerlach ldr r2, am43xx_phys_emif_poweroff 24841d37e61SDave Gerlach mov r1, #AM43XX_EMIF_POWEROFF_ENABLE 24941d37e61SDave Gerlach str r1, [r2, #0x0] 25041d37e61SDave Gerlach 25141d37e61SDave Gerlach /* Re-enable EMIF */ 25241d37e61SDave Gerlach ldr r1, am43xx_phys_emif_clkctrl 25341d37e61SDave Gerlach mov r2, #AM33XX_CM_CLKCTRL_MODULEMODE_ENABLE 25441d37e61SDave Gerlach str r2, [r1] 25541d37e61SDave Gerlachwait_emif_enable1: 25641d37e61SDave Gerlach ldr r3, [r1] 25741d37e61SDave Gerlach cmp r2, r3 25841d37e61SDave Gerlach bne wait_emif_enable1 25941d37e61SDave Gerlach 26041d37e61SDave Gerlach adr r9, am43xx_emif_sram_table 26141d37e61SDave Gerlach 26241d37e61SDave Gerlach ldr r1, [r9, #EMIF_PM_RESTORE_CONTEXT_OFFSET] 26341d37e61SDave Gerlach blx r1 26441d37e61SDave Gerlach 26541d37e61SDave Gerlach ldr r1, [r9, #EMIF_PM_EXIT_SR_OFFSET] 26641d37e61SDave Gerlach blx r1 26741d37e61SDave Gerlach 26841d37e61SDave Gerlach ldr r2, am43xx_phys_emif_poweroff 26941d37e61SDave Gerlach mov r1, #AM43XX_EMIF_POWEROFF_DISABLE 27041d37e61SDave Gerlach str r1, [r2, #0x0] 27141d37e61SDave Gerlach 27241d37e61SDave Gerlach#ifdef CONFIG_CACHE_L2X0 27341d37e61SDave Gerlach ldr r2, l2_cache_base 27441d37e61SDave Gerlach ldr r0, [r2, #L2X0_CTRL] 27541d37e61SDave Gerlach and r0, #0x0f 27641d37e61SDave Gerlach cmp r0, #1 27741d37e61SDave Gerlach beq skip_l2en @ Skip if already enabled 27841d37e61SDave Gerlach 27941d37e61SDave Gerlach adr r4, am43xx_pm_ro_sram_data 28041d37e61SDave Gerlach ldr r3, [r4, #AMX3_PM_RO_SRAM_DATA_PHYS_OFFSET] 28141d37e61SDave Gerlach ldr r0, [r3, #AMX3_PM_L2_PREFETCH_CTRL_VAL_OFFSET] 28241d37e61SDave Gerlach 28341d37e61SDave Gerlach ldr r12, l2_smc1 28441d37e61SDave Gerlach dsb 28541d37e61SDave Gerlach smc #0 28641d37e61SDave Gerlach dsb 28741d37e61SDave Gerlachset_aux_ctrl: 28841d37e61SDave Gerlach ldr r0, [r3, #AMX3_PM_L2_AUX_CTRL_VAL_OFFSET] 28941d37e61SDave Gerlach ldr r12, l2_smc2 29041d37e61SDave Gerlach dsb 29141d37e61SDave Gerlach smc #0 29241d37e61SDave Gerlach dsb 29341d37e61SDave Gerlach 29441d37e61SDave Gerlach /* L2 invalidate on resume */ 29541d37e61SDave Gerlach ldr r0, l2_val 29641d37e61SDave Gerlach ldr r2, l2_cache_base 29741d37e61SDave Gerlach str r0, [r2, #L2X0_INV_WAY] 29841d37e61SDave Gerlachwait2: 29941d37e61SDave Gerlach ldr r0, [r2, #L2X0_INV_WAY] 30041d37e61SDave Gerlach ldr r1, l2_val 30141d37e61SDave Gerlach ands r0, r0, r1 30241d37e61SDave Gerlach bne wait2 30341d37e61SDave Gerlach#ifdef CONFIG_PL310_ERRATA_727915 30441d37e61SDave Gerlach mov r0, #0x00 30541d37e61SDave Gerlach mov r12, #OMAP4_MON_L2X0_DBG_CTRL_INDEX 30641d37e61SDave Gerlach dsb 30741d37e61SDave Gerlach smc #0 30841d37e61SDave Gerlach dsb 30941d37e61SDave Gerlach#endif 31041d37e61SDave Gerlachl2x_sync2: 31141d37e61SDave Gerlach ldr r2, l2_cache_base 31241d37e61SDave Gerlach mov r0, #0x0 31341d37e61SDave Gerlach str r0, [r2, #L2X0_CACHE_SYNC] 31441d37e61SDave Gerlachsync2: 31541d37e61SDave Gerlach ldr r0, [r2, #L2X0_CACHE_SYNC] 31641d37e61SDave Gerlach ands r0, r0, #0x1 31741d37e61SDave Gerlach bne sync2 31841d37e61SDave Gerlach 31941d37e61SDave Gerlach mov r0, #0x1 32041d37e61SDave Gerlach ldr r12, l2_smc3 32141d37e61SDave Gerlach dsb 32241d37e61SDave Gerlach smc #0 32341d37e61SDave Gerlach dsb 32441d37e61SDave Gerlach#endif 32541d37e61SDave Gerlachskip_l2en: 32641d37e61SDave Gerlach /* We are back. Branch to the common CPU resume routine */ 32741d37e61SDave Gerlach mov r0, #0 32841d37e61SDave Gerlach ldr pc, resume_addr 32941d37e61SDave GerlachENDPROC(am43xx_resume_from_deep_sleep) 33041d37e61SDave Gerlach 33141d37e61SDave Gerlach/* 33241d37e61SDave Gerlach * Local variables 33341d37e61SDave Gerlach */ 33441d37e61SDave Gerlach .align 33541d37e61SDave Gerlachresume_addr: 33641d37e61SDave Gerlach .word cpu_resume - PAGE_OFFSET + 0x80000000 33741d37e61SDave Gerlachget_l2cache_base: 33841d37e61SDave Gerlach .word omap4_get_l2cache_base 33941d37e61SDave Gerlachkernel_flush: 34041d37e61SDave Gerlach .word v7_flush_dcache_all 34141d37e61SDave Gerlachddr_start: 34241d37e61SDave Gerlach .word PAGE_OFFSET 34341d37e61SDave Gerlach 34441d37e61SDave Gerlacham43xx_phys_emif_poweroff: 34541d37e61SDave Gerlach .word (AM43XX_CM_BASE + AM43XX_PRM_DEVICE_INST + \ 34641d37e61SDave Gerlach AM43XX_PRM_EMIF_CTRL_OFFSET) 34741d37e61SDave Gerlacham43xx_virt_mpu_clkstctrl: 34841d37e61SDave Gerlach .word (AM43XX_CM_MPU_CLKSTCTRL) 34941d37e61SDave Gerlacham43xx_virt_mpu_clkctrl: 35041d37e61SDave Gerlach .word (AM43XX_CM_MPU_MPU_CLKCTRL) 35141d37e61SDave Gerlacham43xx_virt_emif_clkctrl: 35241d37e61SDave Gerlach .word (AM43XX_CM_PER_EMIF_CLKCTRL) 35341d37e61SDave Gerlacham43xx_phys_emif_clkctrl: 35441d37e61SDave Gerlach .word (AM43XX_CM_BASE + AM43XX_CM_PER_INST + \ 35541d37e61SDave Gerlach AM43XX_CM_PER_EMIF_CLKCTRL_OFFSET) 35641d37e61SDave Gerlach 35741d37e61SDave Gerlach/* L2 cache related defines for AM437x */ 35841d37e61SDave Gerlachl2_cache_base: 35941d37e61SDave Gerlach .word OMAP44XX_L2CACHE_BASE 36041d37e61SDave Gerlachl2_smc1: 36141d37e61SDave Gerlach .word OMAP4_MON_L2X0_PREFETCH_INDEX 36241d37e61SDave Gerlachl2_smc2: 36341d37e61SDave Gerlach .word OMAP4_MON_L2X0_AUXCTRL_INDEX 36441d37e61SDave Gerlachl2_smc3: 36541d37e61SDave Gerlach .word OMAP4_MON_L2X0_CTRL_INDEX 36641d37e61SDave Gerlachl2_val: 36741d37e61SDave Gerlach .word 0xffff 36841d37e61SDave Gerlach 36941d37e61SDave Gerlach.align 3 37041d37e61SDave Gerlach/* DDR related defines */ 37141d37e61SDave GerlachENTRY(am43xx_emif_sram_table) 37241d37e61SDave Gerlach .space EMIF_PM_FUNCTIONS_SIZE 37341d37e61SDave Gerlach 37441d37e61SDave GerlachENTRY(am43xx_pm_sram) 37541d37e61SDave Gerlach .word am43xx_do_wfi 37641d37e61SDave Gerlach .word am43xx_do_wfi_sz 37741d37e61SDave Gerlach .word am43xx_resume_offset 37841d37e61SDave Gerlach .word am43xx_emif_sram_table 37941d37e61SDave Gerlach .word am43xx_pm_ro_sram_data 38041d37e61SDave Gerlach 38141d37e61SDave Gerlach.align 3 38241d37e61SDave Gerlach 38341d37e61SDave GerlachENTRY(am43xx_pm_ro_sram_data) 38441d37e61SDave Gerlach .space AMX3_PM_RO_SRAM_DATA_SIZE 38541d37e61SDave Gerlach 38641d37e61SDave GerlachENTRY(am43xx_do_wfi_sz) 38741d37e61SDave Gerlach .word . - am43xx_do_wfi 388