1f91c3cb1SSiva Durga Prasad Paladugu/* 2619bc13eSMichal Simek * Copyright (c) 2018, Arm Limited and Contributors. All rights reserved. 3f91c3cb1SSiva Durga Prasad Paladugu * 4f91c3cb1SSiva Durga Prasad Paladugu * SPDX-License-Identifier: BSD-3-Clause 5f91c3cb1SSiva Durga Prasad Paladugu */ 6f91c3cb1SSiva Durga Prasad Paladugu 701a326abSPrasad Kummari 801a326abSPrasad Kummari#include <arch.h> 9*6304759aSPrasad Kummari#include <asm_macros.S> 1009d40e0eSAntonio Nino Diaz#include <drivers/arm/gicv3.h> 1101a326abSPrasad Kummari 12f91c3cb1SSiva Durga Prasad Paladugu#include <platform_def.h> 13f91c3cb1SSiva Durga Prasad Paladugu 14f91c3cb1SSiva Durga Prasad Paladugu .globl plat_secondary_cold_boot_setup 15f91c3cb1SSiva Durga Prasad Paladugu .globl plat_is_my_cpu_primary 16f91c3cb1SSiva Durga Prasad Paladugu .globl versal_calc_core_pos 17f91c3cb1SSiva Durga Prasad Paladugu .globl platform_mem_init 18f91c3cb1SSiva Durga Prasad Paladugu .globl plat_my_core_pos 19f91c3cb1SSiva Durga Prasad Paladugu 20f91c3cb1SSiva Durga Prasad Paladugu /* ----------------------------------------------------- 21f91c3cb1SSiva Durga Prasad Paladugu * void plat_secondary_cold_boot_setup (void); 22f91c3cb1SSiva Durga Prasad Paladugu * 23f91c3cb1SSiva Durga Prasad Paladugu * This function performs any platform specific actions 24f91c3cb1SSiva Durga Prasad Paladugu * needed for a secondary cpu after a cold reset e.g 25f91c3cb1SSiva Durga Prasad Paladugu * mark the cpu's presence, mechanism to place it in a 26f91c3cb1SSiva Durga Prasad Paladugu * holding pen etc. 27f91c3cb1SSiva Durga Prasad Paladugu * TODO: Should we read the PSYS register to make sure 28f91c3cb1SSiva Durga Prasad Paladugu * that the request has gone through. 29f91c3cb1SSiva Durga Prasad Paladugu * ----------------------------------------------------- 30f91c3cb1SSiva Durga Prasad Paladugu */ 31f91c3cb1SSiva Durga Prasad Paladugufunc plat_secondary_cold_boot_setup 32f91c3cb1SSiva Durga Prasad Paladugu mrs x0, mpidr_el1 33f91c3cb1SSiva Durga Prasad Paladugu 34f91c3cb1SSiva Durga Prasad Paladugu /* 35f91c3cb1SSiva Durga Prasad Paladugu * There is no sane reason to come out of this wfi. This 36f91c3cb1SSiva Durga Prasad Paladugu * cpu will be powered on and reset by the cpu_on pm api 37f91c3cb1SSiva Durga Prasad Paladugu */ 38f91c3cb1SSiva Durga Prasad Paladugu dsb sy 39f91c3cb1SSiva Durga Prasad Paladugu bl plat_panic_handler 40f91c3cb1SSiva Durga Prasad Paladuguendfunc plat_secondary_cold_boot_setup 41f91c3cb1SSiva Durga Prasad Paladugu 42f91c3cb1SSiva Durga Prasad Paladugufunc plat_is_my_cpu_primary 43f91c3cb1SSiva Durga Prasad Paladugu mov x9, x30 44f91c3cb1SSiva Durga Prasad Paladugu bl plat_my_core_pos 45f91c3cb1SSiva Durga Prasad Paladugu cmp x0, #VERSAL_PRIMARY_CPU 46f91c3cb1SSiva Durga Prasad Paladugu cset x0, eq 47f91c3cb1SSiva Durga Prasad Paladugu ret x9 48f91c3cb1SSiva Durga Prasad Paladuguendfunc plat_is_my_cpu_primary 49f91c3cb1SSiva Durga Prasad Paladugu 50f91c3cb1SSiva Durga Prasad Paladugu /* ----------------------------------------------------- 51f91c3cb1SSiva Durga Prasad Paladugu * unsigned int plat_my_core_pos(void) 52f91c3cb1SSiva Durga Prasad Paladugu * This function uses the versal_calc_core_pos() 53f91c3cb1SSiva Durga Prasad Paladugu * definition to get the index of the calling CPU. 54f91c3cb1SSiva Durga Prasad Paladugu * ----------------------------------------------------- 55f91c3cb1SSiva Durga Prasad Paladugu */ 56f91c3cb1SSiva Durga Prasad Paladugufunc plat_my_core_pos 57f91c3cb1SSiva Durga Prasad Paladugu mrs x0, mpidr_el1 58f91c3cb1SSiva Durga Prasad Paladugu b versal_calc_core_pos 59f91c3cb1SSiva Durga Prasad Paladuguendfunc plat_my_core_pos 60f91c3cb1SSiva Durga Prasad Paladugu 61f91c3cb1SSiva Durga Prasad Paladugufunc versal_calc_core_pos 62f91c3cb1SSiva Durga Prasad Paladugu and x1, x0, #MPIDR_CPU_MASK 63f91c3cb1SSiva Durga Prasad Paladugu and x0, x0, #MPIDR_CLUSTER_MASK 64f91c3cb1SSiva Durga Prasad Paladugu add x0, x1, x0, LSR #6 65f91c3cb1SSiva Durga Prasad Paladugu ret 66f91c3cb1SSiva Durga Prasad Paladuguendfunc versal_calc_core_pos 67f91c3cb1SSiva Durga Prasad Paladugu 68f91c3cb1SSiva Durga Prasad Paladugu /* --------------------------------------------------------------------- 69f91c3cb1SSiva Durga Prasad Paladugu * We don't need to carry out any memory initialization on VERSAL 70f91c3cb1SSiva Durga Prasad Paladugu * platform. The Secure RAM is accessible straight away. 71f91c3cb1SSiva Durga Prasad Paladugu * --------------------------------------------------------------------- 72f91c3cb1SSiva Durga Prasad Paladugu */ 73f91c3cb1SSiva Durga Prasad Paladugufunc platform_mem_init 74f91c3cb1SSiva Durga Prasad Paladugu ret 75f91c3cb1SSiva Durga Prasad Paladuguendfunc platform_mem_init 76