xref: /openbmc/linux/arch/arm/mach-omap2/sleep43xx.S (revision 41d9d44d725808f27b53f266733e6d17d83020ba)
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