n1sdp_helper.S 1.95 KB
Newer Older
Deepak Pandey's avatar
Deepak Pandey committed
1
/*
2
 * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
Deepak Pandey's avatar
Deepak Pandey committed
3
4
5
6
7
8
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <arch.h>
#include <asm_macros.S>
9
#include <neoverse_n1.h>
Deepak Pandey's avatar
Deepak Pandey committed
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <cpu_macros.S>
#include <platform_def.h>

	.globl	plat_arm_calc_core_pos
	.globl	plat_reset_handler

	/* -----------------------------------------------------
	 * unsigned int plat_arm_calc_core_pos(u_register_t mpidr)
	 *
	 * Helper function to calculate the core position.
	 * (ClusterId * N1SDP_MAX_CPUS_PER_CLUSTER * N1SDP_MAX_PE_PER_CPU) +
	 * (CPUId * N1SDP_MAX_PE_PER_CPU) +
	 * ThreadId
	 *
	 * which can be simplified as:
	 *
	 * ((ClusterId * N1SDP_MAX_CPUS_PER_CLUSTER + CPUId) *
	 * N1SDP_MAX_PE_PER_CPU) + ThreadId
	 * ------------------------------------------------------
	 */

func plat_arm_calc_core_pos
	mov	x3, x0

	/*
	 * The MT bit in MPIDR is always set for n1sdp and the
	 * affinity level 0 corresponds to thread affinity level.
	 */

	/* Extract individual affinity fields from MPIDR */
	ubfx	x0, x3, #MPIDR_AFF0_SHIFT, #MPIDR_AFFINITY_BITS
	ubfx	x1, x3, #MPIDR_AFF1_SHIFT, #MPIDR_AFFINITY_BITS
	ubfx	x2, x3, #MPIDR_AFF2_SHIFT, #MPIDR_AFFINITY_BITS

	/* Compute linear position */
	mov	x4, #N1SDP_MAX_CPUS_PER_CLUSTER
	madd	x1, x2, x4, x1
	mov	x5, #N1SDP_MAX_PE_PER_CPU
	madd	x0, x1, x5, x0
	ret
endfunc plat_arm_calc_core_pos

	/* -----------------------------------------------------
	 * void plat_reset_handler(void);
	 *
	 * Determine the CPU MIDR and disable power down bit for
	 * that CPU.
	 * -----------------------------------------------------
	 */

func plat_reset_handler
61
	jump_if_cpu_midr NEOVERSE_N1_MIDR, N1
Deepak Pandey's avatar
Deepak Pandey committed
62
63
64
65
66
67
	ret

	/* -----------------------------------------------------
	 * Disable CPU power down bit in power control register
	 * -----------------------------------------------------
	 */
68
69
70
71
N1:
	mrs	x0, NEOVERSE_N1_CPUPWRCTLR_EL1
	bic	x0, x0, #NEOVERSE_N1_CORE_PWRDN_EN_MASK
	msr	NEOVERSE_N1_CPUPWRCTLR_EL1, x0
Deepak Pandey's avatar
Deepak Pandey committed
72
73
74
	isb
	ret
endfunc plat_reset_handler