blob: d28ab19753aec5e4d30cfd4a99d9fe4e015239b8 [file] [log] [blame]
/*
* arch/aarch32/utils.S - basic utilities
*
* Copyright (C) 2015 ARM Limited. All rights reserved.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE.txt file.
*/
#include <cpu.h>
#include <linkage.h>
.text
/*
* Takes masked MPIDR in r0, returns logical ID in r0.
* Z flag is set when CPU is primary; cleared otherwise.
* Returns MPIDR_INVALID for unknown MPIDRs
* Clobbers r1, r2, r3.
*/
ASM_FUNC(find_logical_id)
ldr r2, =id_table
mov r1, #0
1: mov r3, #NR_CPUS
cmp r1, r3
bge 3f
ldr r3, [r2, r1, lsl #2]
cmp r3, r0
beq 2f
add r1, r1, #1
b 1b
2: movs r0, r1
bx lr
3: mov r0, #MPIDR_INVALID
bx lr