Home | History | Annotate | Download | only in pmusram
      1 /*
      2  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
      3  *
      4  * SPDX-License-Identifier: BSD-3-Clause
      5  */
      6 
      7 #include <arch.h>
      8 #include <asm_macros.S>
      9 #include <platform_def.h>
     10 
     11 	.globl pmu_cpuson_entrypoint
     12 	.macro pmusram_entry_func _name
     13 	.section .pmusram.entry, "ax"
     14 	.type \_name, %function
     15 	.func \_name
     16 	.cfi_startproc
     17 	\_name:
     18 	.endm
     19 
     20 pmusram_entry_func pmu_cpuson_entrypoint
     21 
     22 #if PSRAM_CHECK_WAKEUP_CPU
     23 check_wake_cpus:
     24 	mrs	x0, MPIDR_EL1
     25 	and	x1, x0, #MPIDR_CPU_MASK
     26 	and	x0, x0, #MPIDR_CLUSTER_MASK
     27 	orr	x0, x0, x1
     28 
     29 	/* primary_cpu */
     30 	ldr	w1, boot_mpidr
     31 	cmp	w0, w1
     32 	b.eq	sys_wakeup
     33 
     34 	/*
     35 	 * If the core is not the primary cpu,
     36 	 * force the core into wfe.
     37 	 */
     38 wfe_loop:
     39 	wfe
     40 	b	wfe_loop
     41 sys_wakeup:
     42 #endif
     43 
     44 #if PSRAM_DO_DDR_RESUME
     45 ddr_resume:
     46 	ldr	x2, =__bl31_sram_stack_end
     47 	mov     sp, x2
     48 	bl	dmc_resume
     49 #endif
     50 	bl	sram_restore
     51 sys_resume:
     52 	bl	psci_entrypoint
     53 endfunc pmu_cpuson_entrypoint
     54