xref: /arm-trusted-firmware/plat/aspeed/ast2700/plat_helpers.S (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu/*
2*91f16700Schasinglulu * Copyright (c) 2023, Aspeed Technology Inc.
3*91f16700Schasinglulu *
4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu */
6*91f16700Schasinglulu
7*91f16700Schasinglulu#include <asm_macros.S>
8*91f16700Schasinglulu#include <assert_macros.S>
9*91f16700Schasinglulu#include <arch.h>
10*91f16700Schasinglulu#include <cortex_a35.h>
11*91f16700Schasinglulu#include <platform_def.h>
12*91f16700Schasinglulu
13*91f16700Schasinglulu	.globl	platform_mem_init
14*91f16700Schasinglulu	.globl	plat_is_my_cpu_primary
15*91f16700Schasinglulu	.globl	plat_my_core_pos
16*91f16700Schasinglulu	.globl	plat_secondary_cold_boot_setup
17*91f16700Schasinglulu	.globl	plat_get_syscnt_freq2
18*91f16700Schasinglulu	.globl	plat_crash_console_init
19*91f16700Schasinglulu	.globl	plat_crash_console_putc
20*91f16700Schasinglulu	.globl	plat_crash_console_flush
21*91f16700Schasinglulu
22*91f16700Schasinglulu/* void platform_mem_init(void); */
23*91f16700Schasinglulufunc platform_mem_init
24*91f16700Schasinglulu	/* DRAM init. is done by preceding MCU */
25*91f16700Schasinglulu	ret
26*91f16700Schasingluluendfunc platform_mem_init
27*91f16700Schasinglulu
28*91f16700Schasinglulu/* unsigned int plat_is_my_cpu_primary(void); */
29*91f16700Schasinglulufunc plat_is_my_cpu_primary
30*91f16700Schasinglulu	mrs	x0, mpidr_el1
31*91f16700Schasinglulu	and	x0, x0, #(MPIDR_CLUSTER_MASK | MPIDR_CPU_MASK)
32*91f16700Schasinglulu	cmp	x0, #PLATFORM_CORE_PRIMARY
33*91f16700Schasinglulu	cset	w0, eq
34*91f16700Schasinglulu	ret
35*91f16700Schasingluluendfunc plat_is_my_cpu_primary
36*91f16700Schasinglulu
37*91f16700Schasinglulu/* unsigned int plat_my_core_pos(void); */
38*91f16700Schasinglulufunc plat_my_core_pos
39*91f16700Schasinglulu	mrs	x0, mpidr_el1
40*91f16700Schasinglulu	mov	x2, #PLATFORM_CORE_COUNT_PER_CLUSTER
41*91f16700Schasinglulu	and	x1, x0, #MPIDR_CPU_MASK
42*91f16700Schasinglulu	and	x0, x0, #MPIDR_CLUSTER_MASK
43*91f16700Schasinglulu	madd	x0, x0, x2, x1
44*91f16700Schasinglulu	ret
45*91f16700Schasingluluendfunc plat_my_core_pos
46*91f16700Schasinglulu
47*91f16700Schasinglulu/* void plat_secondary_cold_boot_setup (void); */
48*91f16700Schasinglulufunc plat_secondary_cold_boot_setup
49*91f16700Schasinglulu	mov	x0, xzr
50*91f16700Schasinglulu	bl	plat_my_core_pos
51*91f16700Schasinglulu	mov_imm	x1, SCU_CPU_SMP_EP0
52*91f16700Schasinglulu	add	x1, x1, x0, lsl #3
53*91f16700Schasinglulu
54*91f16700Schasinglulupoll_smp_mbox_go:
55*91f16700Schasinglulu	wfe
56*91f16700Schasinglulu	ldr	x0, [x1]
57*91f16700Schasinglulu	cmp	x0, xzr
58*91f16700Schasinglulu	beq	poll_smp_mbox_go
59*91f16700Schasinglulu	br	x0
60*91f16700Schasingluluendfunc plat_secondary_cold_boot_setup
61*91f16700Schasinglulu
62*91f16700Schasinglulu/* unsigned int plat_get_syscnt_freq2(void); */
63*91f16700Schasinglulufunc plat_get_syscnt_freq2
64*91f16700Schasinglulu	mov_imm	w0, PLAT_SYSCNT_CLKIN_HZ
65*91f16700Schasinglulu	ret
66*91f16700Schasingluluendfunc plat_get_syscnt_freq2
67*91f16700Schasinglulu
68*91f16700Schasinglulu/* int plat_crash_console_init(void); */
69*91f16700Schasinglulufunc plat_crash_console_init
70*91f16700Schasinglulu	mov_imm	x0, CONSOLE_UART_BASE
71*91f16700Schasinglulu	mov_imm	x1, CONSOLE_UART_CLKIN_HZ
72*91f16700Schasinglulu	mov_imm	x2, CONSOLE_UART_BAUDRATE
73*91f16700Schasinglulu	b	console_16550_core_init
74*91f16700Schasingluluendfunc plat_crash_console_init
75*91f16700Schasinglulu
76*91f16700Schasinglulu/* int plat_crash_console_putc(int); */
77*91f16700Schasinglulufunc plat_crash_console_putc
78*91f16700Schasinglulu	mov_imm	x1, CONSOLE_UART_BASE
79*91f16700Schasinglulu	b	console_16550_core_putc
80*91f16700Schasingluluendfunc plat_crash_console_putc
81*91f16700Schasinglulu
82*91f16700Schasinglulu/* void plat_crash_console_flush(void); */
83*91f16700Schasinglulufunc plat_crash_console_flush
84*91f16700Schasinglulu	mov_imm	x0, CONSOLE_UART_BASE
85*91f16700Schasinglulu	b	console_16550_core_flush
86*91f16700Schasingluluendfunc plat_crash_console_flush
87