12f2abcf4SHaojian Zhuang/* 2*831b0e98SJimmy Brisson * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved. 32f2abcf4SHaojian Zhuang * 42f2abcf4SHaojian Zhuang * SPDX-License-Identifier: BSD-3-Clause 52f2abcf4SHaojian Zhuang */ 62f2abcf4SHaojian Zhuang 72f2abcf4SHaojian Zhuang#include <arch.h> 82f2abcf4SHaojian Zhuang#include <asm_macros.S> 928b02e23SHaojian Zhuang#include <cortex_a53.h> 1028b02e23SHaojian Zhuang#include <cortex_a73.h> 112f2abcf4SHaojian Zhuang#include "../hikey960_def.h" 122f2abcf4SHaojian Zhuang 132f2abcf4SHaojian Zhuang .globl plat_my_core_pos 142f2abcf4SHaojian Zhuang .globl platform_mem_init 152f2abcf4SHaojian Zhuang .globl plat_crash_console_init 162f2abcf4SHaojian Zhuang .globl plat_crash_console_putc 179c675b37SAntonio Nino Diaz .globl plat_crash_console_flush 182f2abcf4SHaojian Zhuang .globl plat_report_exception 192f2abcf4SHaojian Zhuang .globl plat_reset_handler 2028b02e23SHaojian Zhuang .globl clr_ex 2128b02e23SHaojian Zhuang .globl nop 222f2abcf4SHaojian Zhuang 232f2abcf4SHaojian Zhuangfunc plat_my_core_pos 242f2abcf4SHaojian Zhuang mrs x0, mpidr_el1 252f2abcf4SHaojian Zhuang and x1, x0, #MPIDR_CPU_MASK 262f2abcf4SHaojian Zhuang and x0, x0, #MPIDR_CLUSTER_MASK 272f2abcf4SHaojian Zhuang add x0, x1, x0, LSR #6 282f2abcf4SHaojian Zhuang ret 292f2abcf4SHaojian Zhuangendfunc plat_my_core_pos 302f2abcf4SHaojian Zhuang 312f2abcf4SHaojian Zhuang /* ----------------------------------------------------- 322f2abcf4SHaojian Zhuang * void platform_mem_init(void); 332f2abcf4SHaojian Zhuang * 342f2abcf4SHaojian Zhuang * We don't need to carry out any memory initialization 352f2abcf4SHaojian Zhuang * on HIKEY. The Secure RAM is accessible straight away. 362f2abcf4SHaojian Zhuang * ----------------------------------------------------- 372f2abcf4SHaojian Zhuang */ 382f2abcf4SHaojian Zhuangfunc platform_mem_init 392f2abcf4SHaojian Zhuang ret 402f2abcf4SHaojian Zhuangendfunc platform_mem_init 412f2abcf4SHaojian Zhuang 422f2abcf4SHaojian Zhuang /* --------------------------------------------- 432f2abcf4SHaojian Zhuang * int plat_crash_console_init(void) 442f2abcf4SHaojian Zhuang * Function to initialize the crash console 452f2abcf4SHaojian Zhuang * without a C Runtime to print crash report. 462f2abcf4SHaojian Zhuang * Clobber list : x0, x1, x2 472f2abcf4SHaojian Zhuang * --------------------------------------------- 482f2abcf4SHaojian Zhuang */ 492f2abcf4SHaojian Zhuangfunc plat_crash_console_init 502f2abcf4SHaojian Zhuang mov_imm x0, CRASH_CONSOLE_BASE 512f2abcf4SHaojian Zhuang mov_imm x1, PL011_UART_CLK_IN_HZ 522f2abcf4SHaojian Zhuang mov_imm x2, PL011_BAUDRATE 535189ea27SJerome Forissier b console_pl011_core_init 542f2abcf4SHaojian Zhuangendfunc plat_crash_console_init 552f2abcf4SHaojian Zhuang 562f2abcf4SHaojian Zhuang /* --------------------------------------------- 572f2abcf4SHaojian Zhuang * int plat_crash_console_putc(int c) 582f2abcf4SHaojian Zhuang * Function to print a character on the crash 592f2abcf4SHaojian Zhuang * console without a C Runtime. 602f2abcf4SHaojian Zhuang * Clobber list : x1, x2 612f2abcf4SHaojian Zhuang * --------------------------------------------- 622f2abcf4SHaojian Zhuang */ 632f2abcf4SHaojian Zhuangfunc plat_crash_console_putc 642f2abcf4SHaojian Zhuang mov_imm x1, CRASH_CONSOLE_BASE 655189ea27SJerome Forissier b console_pl011_core_putc 662f2abcf4SHaojian Zhuangendfunc plat_crash_console_putc 672f2abcf4SHaojian Zhuang 682f2abcf4SHaojian Zhuang /* --------------------------------------------- 69*831b0e98SJimmy Brisson * void plat_crash_console_flush() 709c675b37SAntonio Nino Diaz * Function to force a write of all buffered 719c675b37SAntonio Nino Diaz * data that hasn't been output. 72*831b0e98SJimmy Brisson * Out : void. 739c675b37SAntonio Nino Diaz * Clobber list : x0, x1 749c675b37SAntonio Nino Diaz * --------------------------------------------- 759c675b37SAntonio Nino Diaz */ 769c675b37SAntonio Nino Diazfunc plat_crash_console_flush 779c675b37SAntonio Nino Diaz mov_imm x0, CRASH_CONSOLE_BASE 785189ea27SJerome Forissier b console_pl011_core_flush 799c675b37SAntonio Nino Diazendfunc plat_crash_console_flush 809c675b37SAntonio Nino Diaz 819c675b37SAntonio Nino Diaz /* --------------------------------------------- 822f2abcf4SHaojian Zhuang * void plat_report_exception(unsigned int type) 832f2abcf4SHaojian Zhuang * Function to report an unhandled exception 842f2abcf4SHaojian Zhuang * with platform-specific means. 852f2abcf4SHaojian Zhuang * On HIKEY platform, it updates the LEDs 862f2abcf4SHaojian Zhuang * to indicate where we are 872f2abcf4SHaojian Zhuang * --------------------------------------------- 882f2abcf4SHaojian Zhuang */ 892f2abcf4SHaojian Zhuangfunc plat_report_exception 902f2abcf4SHaojian Zhuang mov x8, x30 912f2abcf4SHaojian Zhuang 922f2abcf4SHaojian Zhuang /* Turn on LED according to x0 (0 -- f) */ 932f2abcf4SHaojian Zhuang ldr x2, =0xf7020000 942f2abcf4SHaojian Zhuang and x1, x0, #1 952f2abcf4SHaojian Zhuang str w1, [x2, #4] 962f2abcf4SHaojian Zhuang and x1, x0, #2 972f2abcf4SHaojian Zhuang str w1, [x2, #8] 982f2abcf4SHaojian Zhuang and x1, x0, #4 992f2abcf4SHaojian Zhuang str w1, [x2, #16] 1002f2abcf4SHaojian Zhuang and x1, x0, #8 1012f2abcf4SHaojian Zhuang str w1, [x2, #32] 1022f2abcf4SHaojian Zhuang 1032f2abcf4SHaojian Zhuang mrs x2, currentel 1042f2abcf4SHaojian Zhuang and x2, x2, #0x0c 1052f2abcf4SHaojian Zhuang /* Check EL1 */ 1062f2abcf4SHaojian Zhuang cmp x2, #0x04 1072f2abcf4SHaojian Zhuang beq plat_report_el1 1082f2abcf4SHaojian Zhuang 1092f2abcf4SHaojian Zhuang adr x4, plat_err_str 1102f2abcf4SHaojian Zhuang bl asm_print_str 1112f2abcf4SHaojian Zhuang 1122f2abcf4SHaojian Zhuang adr x4, esr_el3_str 1132f2abcf4SHaojian Zhuang bl asm_print_str 1142f2abcf4SHaojian Zhuang 1152f2abcf4SHaojian Zhuang mrs x4, esr_el3 1162f2abcf4SHaojian Zhuang bl asm_print_hex 1172f2abcf4SHaojian Zhuang 1182f2abcf4SHaojian Zhuang adr x4, elr_el3_str 1192f2abcf4SHaojian Zhuang bl asm_print_str 1202f2abcf4SHaojian Zhuang 1212f2abcf4SHaojian Zhuang mrs x4, elr_el3 1222f2abcf4SHaojian Zhuang bl asm_print_hex 1232f2abcf4SHaojian Zhuang b plat_report_end 1242f2abcf4SHaojian Zhuang 1252f2abcf4SHaojian Zhuangplat_report_el1: 1262f2abcf4SHaojian Zhuang adr x4, plat_err_str 1272f2abcf4SHaojian Zhuang bl asm_print_str 1282f2abcf4SHaojian Zhuang 1292f2abcf4SHaojian Zhuang adr x4, esr_el1_str 1302f2abcf4SHaojian Zhuang bl asm_print_str 1312f2abcf4SHaojian Zhuang 1322f2abcf4SHaojian Zhuang mrs x4, esr_el1 1332f2abcf4SHaojian Zhuang bl asm_print_hex 1342f2abcf4SHaojian Zhuang 1352f2abcf4SHaojian Zhuang adr x4, elr_el1_str 1362f2abcf4SHaojian Zhuang bl asm_print_str 1372f2abcf4SHaojian Zhuang 1382f2abcf4SHaojian Zhuang mrs x4, elr_el1 1392f2abcf4SHaojian Zhuang bl asm_print_hex 1402f2abcf4SHaojian Zhuangplat_report_end: 1412f2abcf4SHaojian Zhuang mov x30, x8 1422f2abcf4SHaojian Zhuang ret 1432f2abcf4SHaojian Zhuangendfunc plat_report_exception 1442f2abcf4SHaojian Zhuang 1452f2abcf4SHaojian Zhuang /* ----------------------------------------------------- 1462f2abcf4SHaojian Zhuang * void plat_reset_handler(void); 1472f2abcf4SHaojian Zhuang * ----------------------------------------------------- 1482f2abcf4SHaojian Zhuang */ 1492f2abcf4SHaojian Zhuangfunc plat_reset_handler 1502f2abcf4SHaojian Zhuang ret 1512f2abcf4SHaojian Zhuangendfunc plat_reset_handler 1522f2abcf4SHaojian Zhuang 15328b02e23SHaojian Zhuang /* ----------------------------------------------------- 15428b02e23SHaojian Zhuang * void clrex(void); 15528b02e23SHaojian Zhuang * ----------------------------------------------------- 15628b02e23SHaojian Zhuang */ 15728b02e23SHaojian Zhuangfunc clr_ex 15828b02e23SHaojian Zhuang clrex 15928b02e23SHaojian Zhuang ret 16028b02e23SHaojian Zhuangendfunc clr_ex 16128b02e23SHaojian Zhuang 16228b02e23SHaojian Zhuang /* ----------------------------------------------------- 16328b02e23SHaojian Zhuang * void nop(void); 16428b02e23SHaojian Zhuang * ----------------------------------------------------- 16528b02e23SHaojian Zhuang */ 16628b02e23SHaojian Zhuangfunc nop 16728b02e23SHaojian Zhuang nop 16828b02e23SHaojian Zhuang ret 16928b02e23SHaojian Zhuangendfunc nop 17028b02e23SHaojian Zhuang 1712f2abcf4SHaojian Zhuang.section .rodata.rev_err_str, "aS" 1722f2abcf4SHaojian Zhuangplat_err_str: 1732f2abcf4SHaojian Zhuang .asciz "\nPlatform exception reporting:" 1742f2abcf4SHaojian Zhuangesr_el3_str: 1752f2abcf4SHaojian Zhuang .asciz "\nESR_EL3: " 1762f2abcf4SHaojian Zhuangelr_el3_str: 1772f2abcf4SHaojian Zhuang .asciz "\nELR_EL3: " 1782f2abcf4SHaojian Zhuangesr_el1_str: 1792f2abcf4SHaojian Zhuang .asciz "\nESR_EL1: " 1802f2abcf4SHaojian Zhuangelr_el1_str: 1812f2abcf4SHaojian Zhuang .asciz "\nELR_EL1: " 182