xref: /optee_os/core/arch/arm/sm/psci-helper.S (revision 3513f961cda064f90d10f7de72af6330427a2013)
1*1bb92983SJerome Forissier/* SPDX-License-Identifier: BSD-2-Clause */
27ce47501SPeng Fan/*
37ce47501SPeng Fan * Copyright 2017 NXP
47ce47501SPeng Fan */
57ce47501SPeng Fan
67ce47501SPeng Fan#include <arm.h>
77ce47501SPeng Fan#include <arm32_macros.S>
87ce47501SPeng Fan#include <asm.S>
97ce47501SPeng Fan#include <kernel/cache_helpers.h>
107ce47501SPeng Fan
117ce47501SPeng FanFUNC psci_disable_smp, :
127ce47501SPeng Fan	read_actlr r0
137ce47501SPeng Fan	bic	r0, r0, #ACTLR_SMP
147ce47501SPeng Fan	write_actlr r0
157ce47501SPeng Fan	isb
167ce47501SPeng Fan	bx	lr
177ce47501SPeng FanEND_FUNC psci_disable_smp
187ce47501SPeng Fan
197ce47501SPeng FanFUNC psci_enable_smp, :
207ce47501SPeng Fan	read_actlr r0
217ce47501SPeng Fan	orr	r0, r0, #ACTLR_SMP
227ce47501SPeng Fan	write_actlr r0
237ce47501SPeng Fan	isb
247ce47501SPeng Fan	bx	lr
257ce47501SPeng FanEND_FUNC psci_enable_smp
267ce47501SPeng Fan
277ce47501SPeng FanFUNC psci_armv7_cpu_off, :
287ce47501SPeng Fan	push	{r12, lr}
292fcf4eaaSEtienne CarriereUNWIND(	.save	{r12, lr})
307ce47501SPeng Fan
317ce47501SPeng Fan	mov     r0, #DCACHE_OP_CLEAN_INV
327ce47501SPeng Fan	bl	dcache_op_all
337ce47501SPeng Fan
347ce47501SPeng Fan	/* Disable Cache */
357ce47501SPeng Fan	read_sctlr r0
367ce47501SPeng Fan	bic	r0, r0, #SCTLR_C
377ce47501SPeng Fan	write_sctlr r0
387ce47501SPeng Fan	isb
397ce47501SPeng Fan	dsb
407ce47501SPeng Fan
417ce47501SPeng Fan	mov	r0, #DCACHE_OP_CLEAN_INV
427ce47501SPeng Fan	bl	dcache_op_all
437ce47501SPeng Fan
447ce47501SPeng Fan	clrex
457ce47501SPeng Fan
467ce47501SPeng Fan	bl	psci_disable_smp
477ce47501SPeng Fan
487ce47501SPeng Fan	pop	{r12, pc}
497ce47501SPeng FanEND_FUNC psci_armv7_cpu_off
50