From 09ee834b4c02e9d757716b6d45931474a914ca09 Mon Sep 17 00:00:00 2001 From: Stephanos Ioannidis Date: Fri, 1 Nov 2019 03:19:54 +0900 Subject: [PATCH] soc: arm: xilinx_zynqmp: Refactor for multi-arch support. The Xilinx ZynqMP SoC embeds both Cortex-R "RPU" and Cortex-A "APU" cores. Since the current Zephyr architecture cannot support AMP of Cortex-R and Cortex-A within the same project, the RPU and APU should be considered separate platforms and handled accordingly. This commit re-purposes the SOC_XILINX_ZYNQMP symbol as a helper symbol indicating that Xilinx ZynqMP SoC is used, and adds a new symbol, SOC_XILINX_ZYNQMP_RPU, for specifying the actual build target platform. When Cortex-A support is added in the future, SOC_XILINX_ZYNQMP_APU symbol should be added and used to conditionally handle APU-specific code. For more details, refer to the issue #20217. Signed-off-by: Stephanos Ioannidis --- boards/arm/qemu_cortex_r5/Kconfig.board | 2 +- boards/arm/qemu_cortex_r5/qemu_cortex_r5_defconfig | 2 +- soc/arm/xilinx_zynqmp/Kconfig | 5 +++++ soc/arm/xilinx_zynqmp/Kconfig.defconfig | 7 ++++++- soc/arm/xilinx_zynqmp/Kconfig.soc | 6 ++++-- soc/arm/xilinx_zynqmp/linker.ld | 6 +++++- 6 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 soc/arm/xilinx_zynqmp/Kconfig diff --git a/boards/arm/qemu_cortex_r5/Kconfig.board b/boards/arm/qemu_cortex_r5/Kconfig.board index 0dae3d153c8..8e89de5ad8e 100644 --- a/boards/arm/qemu_cortex_r5/Kconfig.board +++ b/boards/arm/qemu_cortex_r5/Kconfig.board @@ -3,4 +3,4 @@ config BOARD_QEMU_CORTEX_R5 bool "Cortex-R5 Emulation (QEMU)" - depends on SOC_XILINX_ZYNQMP + depends on SOC_XILINX_ZYNQMP_RPU diff --git a/boards/arm/qemu_cortex_r5/qemu_cortex_r5_defconfig b/boards/arm/qemu_cortex_r5/qemu_cortex_r5_defconfig index 6033c3c99e6..288b0f5f083 100644 --- a/boards/arm/qemu_cortex_r5/qemu_cortex_r5_defconfig +++ b/boards/arm/qemu_cortex_r5/qemu_cortex_r5_defconfig @@ -1,5 +1,5 @@ CONFIG_ARM=y -CONFIG_SOC_XILINX_ZYNQMP=y +CONFIG_SOC_XILINX_ZYNQMP_RPU=y CONFIG_BOARD_QEMU_CORTEX_R5=y CONFIG_XIP=n diff --git a/soc/arm/xilinx_zynqmp/Kconfig b/soc/arm/xilinx_zynqmp/Kconfig new file mode 100644 index 00000000000..7c72b2d5046 --- /dev/null +++ b/soc/arm/xilinx_zynqmp/Kconfig @@ -0,0 +1,5 @@ +# Copyright (c) 2019 Stephanos Ioannidis +# SPDX-License-Identifier: Apache-2.0 + +config SOC_XILINX_ZYNQMP + bool diff --git a/soc/arm/xilinx_zynqmp/Kconfig.defconfig b/soc/arm/xilinx_zynqmp/Kconfig.defconfig index 5bdb7e0d074..75c0ff5c879 100644 --- a/soc/arm/xilinx_zynqmp/Kconfig.defconfig +++ b/soc/arm/xilinx_zynqmp/Kconfig.defconfig @@ -1,4 +1,5 @@ # Copyright (c) 2019 Lexmark International, Inc. +# Copyright (c) 2019 Stephanos Ioannidis # SPDX-License-Identifier: Apache-2.0 if SOC_XILINX_ZYNQMP @@ -6,6 +7,8 @@ if SOC_XILINX_ZYNQMP config SOC default "xilinx_zynqmp" +if SOC_XILINX_ZYNQMP_RPU + config NUM_IRQS # must be >= the highest interrupt number used # - include the UART interrupts @@ -23,6 +26,8 @@ config NUM_2ND_LEVEL_AGGREGATORS config SYS_CLOCK_HW_CYCLES_PER_SEC default 12000000 +endif # SOC_XILINX_ZYNQMP_RPU + # Workaround for not being able to have commas in macro arguments DT_CHOSEN_Z_FLASH := zephyr,flash @@ -32,4 +37,4 @@ config FLASH_SIZE config FLASH_BASE_ADDRESS default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_FLASH)) -endif +endif # SOC_XILINX_ZYNQMP diff --git a/soc/arm/xilinx_zynqmp/Kconfig.soc b/soc/arm/xilinx_zynqmp/Kconfig.soc index 9ce2180fac7..90b43e63642 100644 --- a/soc/arm/xilinx_zynqmp/Kconfig.soc +++ b/soc/arm/xilinx_zynqmp/Kconfig.soc @@ -1,9 +1,11 @@ # Copyright (c) 2019 Lexmark International, Inc. +# Copyright (c) 2019 Stephanos Ioannidis # SPDX-License-Identifier: Apache-2.0 -config SOC_XILINX_ZYNQMP - bool "Xilinx ZynqMP" +config SOC_XILINX_ZYNQMP_RPU + bool "Xilinx ZynqMP RPU" select CPU_CORTEX_R5 + select SOC_XILINX_ZYNQMP select GIC_V1 select MULTI_LEVEL_INTERRUPTS select 2ND_LEVEL_INTERRUPTS diff --git a/soc/arm/xilinx_zynqmp/linker.ld b/soc/arm/xilinx_zynqmp/linker.ld index bbf4673b6de..c8e3aaa7bc0 100644 --- a/soc/arm/xilinx_zynqmp/linker.ld +++ b/soc/arm/xilinx_zynqmp/linker.ld @@ -1,8 +1,12 @@ /* * Copyright (c) 2019 Lexmark International, Inc. + * Copyright (c) 2019 Stephanos Ioannidis * * SPDX-License-Identifier: Apache-2.0 - * */ +#include + +#if defined(CONFIG_SOC_XILINX_ZYNQMP_RPU) #include +#endif