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