diff --git a/plat/xilinx/zynqmp/aarch64/zynqmp_helpers.S b/plat/xilinx/zynqmp/aarch64/zynqmp_helpers.S index ad960f4..969d8fa 100644 --- a/plat/xilinx/zynqmp/aarch64/zynqmp_helpers.S +++ b/plat/xilinx/zynqmp/aarch64/zynqmp_helpers.S @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -10,6 +10,12 @@ .globl plat_secondary_cold_boot_setup .globl plat_is_my_cpu_primary + .globl zynqmp_calc_core_pos + .globl plat_my_core_pos + .globl plat_crash_console_init + .globl plat_crash_console_putc + .globl plat_crash_console_flush + .globl platform_mem_init /* ----------------------------------------------------- * void plat_secondary_cold_boot_setup (void); @@ -47,3 +53,76 @@ cset x0, eq ret x9 endfunc plat_is_my_cpu_primary + + /* ----------------------------------------------------- + * unsigned int plat_my_core_pos(void) + * This function uses the zynqmp_calc_core_pos() + * definition to get the index of the calling CPU. + * ----------------------------------------------------- + */ +func plat_my_core_pos + mrs x0, mpidr_el1 + b zynqmp_calc_core_pos +endfunc plat_my_core_pos + + /* ----------------------------------------------------- + * unsigned int zynqmp_calc_core_pos(u_register_t mpidr) + * Helper function to calculate the core position. + * With this function: CorePos = (ClusterId * 4) + + * CoreId + * ----------------------------------------------------- + */ +func zynqmp_calc_core_pos + and x1, x0, #MPIDR_CPU_MASK + and x0, x0, #MPIDR_CLUSTER_MASK + add x0, x1, x0, LSR #6 + ret +endfunc zynqmp_calc_core_pos + + /* --------------------------------------------- + * int plat_crash_console_init(void) + * Function to initialize the crash console + * without a C Runtime to print crash report. + * Clobber list : x0 - x4 + * --------------------------------------------- + */ +func plat_crash_console_init + mov_imm x0, ZYNQMP_CRASH_UART_BASE + mov_imm x1, ZYNQMP_CRASH_UART_CLK_IN_HZ + mov_imm x2, ZYNQMP_UART_BAUDRATE + b console_core_init +endfunc plat_crash_console_init + + /* --------------------------------------------- + * int plat_crash_console_putc(int c) + * Function to print a character on the crash + * console without a C Runtime. + * Clobber list : x1, x2 + * --------------------------------------------- + */ +func plat_crash_console_putc + mov_imm x1, ZYNQMP_CRASH_UART_BASE + b console_core_putc +endfunc plat_crash_console_putc + + /* --------------------------------------------- + * int plat_crash_console_flush() + * Function to force a write of all buffered + * data that hasn't been output. + * Out : return -1 on error else return 0. + * Clobber list : r0 + * --------------------------------------------- + */ +func plat_crash_console_flush + mov_imm x0, ZYNQMP_CRASH_UART_BASE + b console_core_flush +endfunc plat_crash_console_flush + + /* --------------------------------------------------------------------- + * We don't need to carry out any memory initialization on ARM + * platforms. The Secure RAM is accessible straight away. + * --------------------------------------------------------------------- + */ +func platform_mem_init + ret +endfunc platform_mem_init diff --git a/plat/xilinx/zynqmp/plat_zynqmp.c b/plat/xilinx/zynqmp/plat_zynqmp.c index cbfa935..2441630 100644 --- a/plat/xilinx/zynqmp/plat_zynqmp.c +++ b/plat/xilinx/zynqmp/plat_zynqmp.c @@ -1,10 +1,11 @@ /* - * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ -#include +#include +#include "zynqmp_private.h" int plat_core_pos_by_mpidr(u_register_t mpidr) { @@ -14,5 +15,5 @@ if ((mpidr & MPIDR_CPU_MASK) >= PLATFORM_CORE_COUNT) return -1; - return plat_arm_calc_core_pos(mpidr); + return zynqmp_calc_core_pos(mpidr); } diff --git a/plat/xilinx/zynqmp/platform.mk b/plat/xilinx/zynqmp/platform.mk index 53d93c3..33859ee 100644 --- a/plat/xilinx/zynqmp/platform.mk +++ b/plat/xilinx/zynqmp/platform.mk @@ -64,7 +64,6 @@ drivers/arm/gic/v2/gicv2_helpers.c \ drivers/cadence/uart/aarch64/cdns_console.S \ drivers/console/aarch64/console.S \ - plat/arm/common/aarch64/arm_helpers.S \ plat/arm/common/arm_cci.c \ plat/arm/common/arm_common.c \ plat/arm/common/arm_gicv2.c \ diff --git a/plat/xilinx/zynqmp/zynqmp_def.h b/plat/xilinx/zynqmp/zynqmp_def.h index 50a7331..9d19b1b 100644 --- a/plat/xilinx/zynqmp/zynqmp_def.h +++ b/plat/xilinx/zynqmp/zynqmp_def.h @@ -145,13 +145,11 @@ # error "invalid ZYNQMP_CONSOLE" #endif -#define PLAT_ARM_CRASH_UART_BASE ZYNQMP_UART_BASE +#define ZYNQMP_CRASH_UART_BASE ZYNQMP_UART_BASE /* impossible to call C routine how it is done now - hardcode any value */ -#define PLAT_ARM_CRASH_UART_CLK_IN_HZ 100000000 /* FIXME */ - +#define ZYNQMP_CRASH_UART_CLK_IN_HZ 100000000 /* FIXME */ /* Must be non zero */ -#define ZYNQMP_UART_BAUDRATE 115200 -#define ARM_CONSOLE_BAUDRATE ZYNQMP_UART_BAUDRATE +#define ZYNQMP_UART_BAUDRATE 115200 /* Silicon version detection */ #define ZYNQMP_SILICON_VER_MASK 0xF000 diff --git a/plat/xilinx/zynqmp/zynqmp_private.h b/plat/xilinx/zynqmp/zynqmp_private.h index 08a5410..d5024c3 100644 --- a/plat/xilinx/zynqmp/zynqmp_private.h +++ b/plat/xilinx/zynqmp/zynqmp_private.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -9,9 +9,12 @@ #include #include +#include void zynqmp_config_setup(void); +unsigned int zynqmp_calc_core_pos(u_register_t mpidr); + /* ZynqMP specific functions */ unsigned int zynqmp_get_uart_clk(void); unsigned int zynqmp_get_bootmode(void);