zynqmp: Remove dependency on arm_helpers.S
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Wed, 17 Oct 2018 15:46:41 +0000 (16:46 +0100)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Thu, 25 Oct 2018 08:56:09 +0000 (09:56 +0100)
Non-Arm platforms shouldn't use Arm platform code. This patch copies the
implementation of the functions in arm_helpers.S to zynqmp_helpers.S to
remove this dependency of zynqmp on Arm platforms.

Change-Id: Ia85f303c4c63bcf0ffa57c7f3ef9d88376729b6b
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
plat/xilinx/zynqmp/aarch64/zynqmp_helpers.S
plat/xilinx/zynqmp/plat_zynqmp.c
plat/xilinx/zynqmp/platform.mk
plat/xilinx/zynqmp/zynqmp_def.h
plat/xilinx/zynqmp/zynqmp_private.h

index ad960f49385935e45b7c8cc6531effe01d6210ee..969d8faa1f8ee991826f26365f40a61ac59db7de 100644 (file)
@@ -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
  */
 
        .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 @@ func plat_is_my_cpu_primary
        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
index cbfa935c2727dda55a89c6cc109786fcfd6c8133..2441630bd5f49e2e62556fa6e2f8d8278f3b5426 100644 (file)
@@ -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 <plat_arm.h>
+#include <platform.h>
+#include "zynqmp_private.h"
 
 int plat_core_pos_by_mpidr(u_register_t mpidr)
 {
@@ -14,5 +15,5 @@ int plat_core_pos_by_mpidr(u_register_t mpidr)
        if ((mpidr & MPIDR_CPU_MASK) >= PLATFORM_CORE_COUNT)
                return -1;
 
-       return plat_arm_calc_core_pos(mpidr);
+       return zynqmp_calc_core_pos(mpidr);
 }
index 53d93c326ba11e3dfa19a6c2f26b3e62b5105247..33859ee5edc748cf41899740b1bc0dd2f4bf9972 100644 (file)
@@ -64,7 +64,6 @@ PLAT_BL_COMMON_SOURCES        :=      lib/xlat_tables/xlat_tables_common.c            \
                                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                     \
index 50a73317656798a9e06a80881009df0e56542c26..9d19b1bbd396b9bcdb633c1c944c70d5622d4cef 100644 (file)
 # 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
index 08a54107acf6ffc38fac4efb03a56f16b9202a65..d5024c3ecbb7b8c6e472468eb0f0f405f1eb4da2 100644 (file)
@@ -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 <bl_common.h>
 #include <interrupt_mgmt.h>
+#include <stdint.h>
 
 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);